2012-03-04 56 views
1

我正在使用Windows 7和Visual Studio 2010 express。什么是头文件和库的最低限度,我需要包含在OpenGL项目中,以便能够在没有任何错误的情况下进行编译。我谈论最低限度,没有任何额外的库,如GLUT或GLFW或GLEW等我需要在VC2010中包含什么才能成功编译OpenGL项目?

我认为我需要做的就是添加opengl32.lib在额外的依赖项,但它看起来像不工作,因为VC无法识别一些像“glGenBuffers()”这样的openGL语法。

回答

0

在windows系统上的<GL/GL.h>中声明的函数原型仅适用于1.1版本(现在约20年)的OpenGL版本。扩展名或版本高于此的每个函数(如glGenBuffers(带有1.5))必须使用wglGetProcAddress动态加载以检索函数指针(当然,如果您的硬件和驱动程序支持该版本/扩展) 。

由于这可能是单调乏味的工作,因此有自动扩展管理的库,例如GLEW,它们为您完成所有这些工作,并向您提供相应变量中所需的函数指针,以便您可以直接使用glGenBuffers之类的作为普通功能,但它们在<GL/GL.h>中没有任何声明。

因此,不需要任何东西,除了链接与opengl32.lib成功编译VS2010中的OpenGL项目,但您需要自己管理扩展,只要您需要比版本1.1更高的功能或使用第三方库为你做,就像GLEW一样。

+0

感谢您的详细答案,我现在看到:)我希望我可以避免该GLEW,每当我包括它,我从Visual Studio中得到一些奇怪的内存错误:(但它看起来像我必须看到是什么原因造成的...... – IanDess 2012-03-04 15:49:24

+0

@IdeDess这将是一个好主意,因为自己处理扩展可能是一个痛苦,但它不是那么艰难或复杂的任务,但它真的有一些优点,如果你只需要调用' glewInit'并且可以立即使用你喜欢的每一个函数,而现在只使用1.1的功能并不是一种选择,对于你的错误,也许你忘了在创建GL上下文后调用'glewInit'?在这种情况下,'glGe nBuffers'及其朋友没有有效的值,并且在尝试使用它时会遇到访问冲突(或类似的内存错误)。 – 2012-03-04 15:56:28

+0

OMG哥们你救了我...非常感谢!我刚刚在几天前开始使用openGL,所以我迷失在所有图书馆的海洋中,所以忽略像glewInit这样简单的事情发生了很多:(是的,这是问题!再次感谢! – IanDess 2012-03-04 16:13:56

0

glGenBuffer自OpenGL 1.5以来是可用的。 Windows实现是1.1。 所以基本上你需要GLEW :)。

但是对于OpenGL 1.1,您只需要按照您的要求链接opengl32.lib

+0

感谢您的回答,我现在看到:)我希望我可以避免GLEW,只要我包括它我从Visual Studio中得到一些奇怪的内存错误:(但它看起来像我必须看到是什么造成的那... – IanDess 2012-03-04 15:50:00

相关问题