我在Open.gl上关注本教程 这个页面具体(在底部) - http://open.gl/context 它说我必须在我的程序中使用这个代码(不确定为什么......)
// Specify prototype of function
typedef void (*GENBUFFERS) (GLsizei, GLuint*);
// Load address of function and assign it to a function pointer
GENBUFFERS glGenBuffers = (GENBUFFERS)wglGetProcAddress("glGenBuffers");
// or Linux:
GENBUFFERS glGenBuffers = (GENBUFFERS)glXGetProcAddress((const GLubyte *) "glGenBuffers");
// or OSX:
GENBUFFERS glGenBuffers = (GENBUFFERS)NSGLGetProcAddress("glGenBuffers");
// Call function as normal
Gluint buffer;
glGenBuffers(1, &buffer);
但后来他说了一些关于Glew解决这个问题的问题' (不确定那个问题是什么) 但如果我安装了Glew或者它是否为我做了它,我是否需要上面的代码?
此外,似乎没有“检查”的功能?' Windows,只是Linux和OSX ......
答案 0 :(得分:1)
OpenGL需要大多数现代函数的函数指针。然而,问题是OpenGL库是由许多不同的驱动程序制造商创建的,因此这些功能的位置并不总是已知的。因此,您必须在OpenGL中查询每个函数的位置并将它们存储在函数指针中。这就是你发布的代码所做的:查询这些函数指针的位置并存储它们供以后使用。
然而,当你有数以千计的功能时,这就变得非常麻烦。 GLEW为您做了完全这个。它会为您检索所有函数指针,因此您不必关心所有函数指针,只需在应用程序中使用它们即可。在open.gl发布的示例中,他展示了3种不同的检索指针的方法(对于windows,linux和mac)。
您唯一需要关心的是调用glewInit()
(在您创建了OpenGL上下文之后)并且您可以使用所有OpenGL的功能。你发布的片段就是GLEW在幕后操作的方式。
答案 1 :(得分:0)
这里可能存在的问题是你需要使用3个不同的库来使用opengl扩展(比如ARB函数):WGL,glX和NSGL。
因此,您可以使用跨平台工作的#ifdef WIN32
函数,而不是使用glewGetExtension
和类似的宏填充代码。这样,您可以检查GPU支持哪些扩展,获取函数指针并相应地使用它们。
http://glew.sourceforge.net/basic.html
编辑:没有代码可以检查操作系统,对吧。您应该为其添加宏,例如#ifdef WIN32