在 MFC SDI 上使用 OpenGL4.x

Using OpenGL4.x on MFC SDI

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

我使用 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 说它找不到那些函数。 我猜它们包含在一些我没有包含但在我的系统上找不到的 header 中。

我的问题是:1) 我在哪里可以找到这些包括? 2) 不使用 Glew/FreeGlut/blabla,只读红皮书,是否可以学习新的 OpenGL?

Windows opengl 库支持低 opengl 版本;

如果您的视频卡和驱动程序支持 opengl 4,您需要使用 http://www.opengl.org/wiki/Load_OpenGL_Functions.

获取函数地址(glGenVertexArrays、glBindVertexArray 等)