如果我使用Glew,是否需要手动处理所有这些代码?

时间:2014-08-12 14:32:45

标签: c++ opengl glew

我在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 ......

2 个答案:

答案 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