C++ 将OpenGL应用程序移植到Windows时出现问题

C++ 将OpenGL应用程序移植到Windows时出现问题,c++,windows,visual-studio,opengl,C++,Windows,Visual Studio,Opengl,我正在尝试将OpenGL应用程序移动到Windows 据我所知,Windows有一个不错的OpenGL实现。但我开始觉得它不 具体来说,我使用数组缓冲区和 当我尝试在Visual Studio 2008 Pro中编译代码时,收到以下错误: vertexbuffers.cpp(31) : error C3861: 'glGenBuffers': identifier not found vertexbuffers.cpp(32) : error C2065: 'GL_ARRAY_BUFFER' :

我正在尝试将OpenGL应用程序移动到Windows

据我所知,Windows有一个不错的OpenGL实现。但我开始觉得它不

具体来说,我使用数组缓冲区和

当我尝试在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 更新,但这些内容似乎在别处定义

如果我不能访问这些函数,我应该如何生成缓冲区

文档中没有说明这些数组类型已禁用。如何在Windows上访问OpenGL上的real实现?

头文件中的#定义在重复时会被注释掉。查看总账h第1054行:

/* vertex_array */
#define GL_VERTEX_ARRAY                   0x8074
如果这个#define实际上丢失了,那么您可能应该用新的副本替换该文件

如果您查看,您将看到它仅在OpenGL 1.5及更高版本中可用。Windows的头文件仅随OpenGL 1.2提供,您应该使用扩展机制来访问更新的功能。如果使用函数名调用,例如

void (__stdcall *glGenBuffers)(GLsizei,GLuint*) =
    wglGetProcAddress("glGenBuffers");

然后您就有了一个指向该函数的指针。

似乎缓冲区函数只能作为扩展方法在Windows上使用

OpenGL提供声明指向所有这些函数的指针。然后由我的应用程序来获取指向函数的指针

例如:

PFNGLGENBUFFERSPROC myglBindBuffers = 
    (PFNGLGENBUFFERSPROC)wglGetProcAddress("glGenBuffersARB");

谢天谢地,我只需要做大约4个函数。不幸的是,我现在必须在我的应用程序中添加依赖于平台的代码。

你可以给GLEW一个机会:


我敢肯定,我在过去的某个时候使用过它,它使这类东西变得更简单、更便携。

微软对OpenGL的支持只延伸到OpenGL-1.1到Windows XP,OpenGL-1.4从Vista开始。除此之外的任何OpenGL功能都必须由可安装客户端驱动程序(ICD)提供和支持,即GPU驱动程序的OpenGL实现。为了访问高级功能,OpenGL提供了所谓的扩展系统,由wglGetProcAddress组成,它有点像DLL的GetProcAddress,但允许访问OpenGL实现(=驱动程序)的功能


为了让事情变得更简单,已经开发了像GLEW这样的漂亮包装库,它可以完成初始化所有可用OpenGL扩展的所有繁重工作,并将它们提供给最终用户。

您能克服具体的错误吗?这些注释可能是用于文档的,并且在其他地方有适当的定义。我真正的错误来自缓冲区生成函数。很抱歉造成混淆,我已编辑了问题。感谢您发布这些问题,它帮助我理解并修正了我的答案。:)你的眼睛比我好。谢谢你的推荐。不幸的是,在查看您收到的错误后,围绕glBindBuffer.edited仍有错误。不幸的是,标题仅为1.2,但有一些简单的修复方法。:)+1查找这些类型定义的合理方法-谢谢!
PFNGLGENBUFFERSPROC myglBindBuffers = 
    (PFNGLGENBUFFERSPROC)wglGetProcAddress("glGenBuffersARB");