我正在尝试将OpenGL应用程序移动到Windows.
据我所知,Windows有一个不错的OpenGL实现.但我开始认为它不......
具体来说,我使用数组缓冲区和glDrawArrays.
当我尝试在Visual Studio 2008 Pro中编译我的代码时,我收到以下错误:
vertexbuffers.cpp(31) : error C3861: 'glGenBuffers': identifier not found vertexbuffers.cpp(32) : error C2065: 'GL_ARRAY_BUFFER' : undeclared identifier vertexbuffers.cpp(32) : error C3861: 'glBindBuffer': identifier not found vertexbuffers.cpp(33) : error C2065: 'GL_ARRAY_BUFFER' : undeclared identifier vertexbuffers.cpp(33) : error C2065: 'GL_STATIC_DRAW' : undeclared identifier vertexbuffers.cpp(33) : error C3861: 'glBufferData': identifier not found
当我检查
(包含在内C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl
)时,我看到:
/* ClientArrayType */ /* GL_VERTEX_ARRAY */ /* GL_NORMAL_ARRAY */ /* GL_COLOR_ARRAY */
更新,但似乎那些含量在其他地方定义.
如果我无法访问这些功能,我应该如何生成缓冲区?
该文档并未说明这些数组类型已被禁用.如何在Windows上访问OpenGL上的实际实现?
你可能会给GLEW一个机会:
http://glew.sourceforge.net/
我很确定我在过去的某个时候使用它,并使这种事情变得更容易和更便携.
无论何时重复,都会在头文件中注释掉#defines.看看gl.h的第1054行:
/* vertex_array */ #define GL_VERTEX_ARRAY 0x8074
如果实际上缺少#define,那么您应该用新副本替换该文件.
如果你看一下glGenBuffers的文档,你会发现它只在OpenGL 1.5及更高版本中可用.Windows的头文件仅附带OpenGL 1.2,您应该使用扩展机制来访问较新的功能.如果使用函数名称调用wglGetProcAddress,例如
void (__stdcall *glGenBuffers)(GLsizei,GLuint*) = wglGetProcAddress("glGenBuffers");
那么你有一个指向该函数的指针.