在MFC SDI上使用OpenGL4.x.

时间:2015-03-05 09:40:31

标签: c++ opengl mfc

我正在尝试使用第8版Red Book学习OpenGL 4.x.由于我不想使用glew,freeglut或其他第三方的东西,我自己写了一些基本代码。

使用MFC我扩展了CView添加:

// OnCreate
m_pDC = new CClientDC( this );
m_nNumFD = ChoosePixelFormat( m_pDC->GetSafeHdc(), &m_pfd );
SetPixelFormat( m_pDC->GetSafeHdc(), m_nNumFD, &m_pfd );
m_hglrc = wglCreateContext( m_pDC->GetSafeHdc() );
wglMakeCurrent( m_pDC->GetSafeHdc(), m_hglrc );
glEnable( GL_DEPTH_TEST );
glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
glClearDepth( 1.0f );

// OnDraw
CGLEntTest  entita;
wglMakeCurrent( m_pDC->GetSafeHdc(), m_hglrc );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBegin( GL_LINES );
    glColor3d( 0.0, 0.0, 0.0 );
    glVertex2d( 0.0, 0.0 );
    glVertex2d( 1.0, 1.0 );
glEnd();
SwapBuffers( pDC->GetSafeHdc() );
wglMakeCurrent( NULL, NULL );

// OnSize
CView::OnSize( nType, cx, cy );

// TODO: Add your message handler code here
m_RettVis.left = 0;
m_RettVis.bottom = cy;
m_RettVis.right = cx;
m_RettVis.top = 0;
m_dAR = (double)cx / (double)cy;
glViewport( 0, 0, cx, cy );
wglMakeCurrent( m_pDC->GetSafeHdc(), m_hglrc );
glPushMatrix();
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 );
glMatrixMode( GL_MODELVIEW );
glPopMatrix();

// stdafx.h
#include <gl\GL.h>
#include <gl\GLU.h>
// stdafx.cpp
#pragma comment( lib, "glu32.lib" )
#pragma comment( lib, "opengl32.lib" )

这个基本代码效果很好,我设法正确看到了这条线。

现在,RedBook(与其他所有现代OpenGL书籍一样)基于着色器,因此我创建了CGLEntTest并开始编写:

glGenVertexArrays( NumVAOs, VAOs );
glBindVertexArray( VAOs[Triangles] );

但是Microsoft VS 2010表示无法找到这些功能。 我猜他们已经包含在我没有包含的标题中,但我在我的系统上找不到它。

我的问题是:1)我可以在哪里找到包含的内容? 2)是否可以在不使用Glew / FreeGlut / blabla的情况下学习新的OpenGL,只阅读RedBook?

1 个答案:

答案 0 :(得分:1)

Windows opengl库支持低opengl版本;

如果您的视频卡和驱动程序支持opengl 4,则需要使用http://www.opengl.org/wiki/Load_OpenGL_Functions获取功能地址(glGenVertexArrays,glBindVertexArray等)。