GLEW做了什么以及为什么需要它?

时间:2013-07-23 11:42:59

标签: opengl opengl-3 glew opengl-4

好的,所以我已经知道为什么我需要GLEW,但只有一点。

如果我正在使用现代OpenGL的东西,可能是从版本3.0开始,和/或正在使用核心配置文件,那么GLEW是必需的,因为没有编译产生的错误,例如glGenVertexArrays未被声明。

所以GLEW做了一些背景工作,包括我们想要使用的现代OpenGL函数。

除此之外,还有什么其他的吗?此外,它是如何工作的。

作为一个例子,它是否改进了跨平台编译? (例如,如果从Linux迁移到Windows或OS X,需要对代码进行较少的修改吗?

它是否也改善了图形硬件的“跨平台性”?例如,假设我们有两台相同的计算机,包括操作系统。在一个系统上使用OpenGL 4.3命令编译程序。如果其他系统有只支持OpenGL 3.3的显卡或驱动程序,那么GLEW会帮忙吗? (也许是为旧版OpenGL编译着色器?)

所以你可能会发现我实际上并不知道GLEW的作用或它是如何做到的。

最后一点;有谁知道如何使用GLEW与GLFW?我可能会将其作为一个单独的问题发布。

2 个答案:

答案 0 :(得分:12)

GLEW并非“必需”,正如你所说的那样。您可以使用glcorearb.h标头或类似的东西。但是,如果您链​​接某些功能 - 它必须存在于目标平台上,否则您的程序将无法启动。 GLEW和其他人正是要处理的 - 你不是直接链接GL函数,而是在初始化阶段之后获取函数指针。它允许您在运行时检查存在哪些扩展以及可以使用哪些功能。

它对可移植性唯一有帮助的是获取函数指针 - 它可能是wglGetProcAddress / glxGetProcAddress,它对于苹果操作系统是模拟的。所以不,这不是一个案例。但是,各种可用的GL扩展是。

GLEW不需要您首选的GL初始化库的触摸点 - 只需在创建GL上下文后调用glewInit。

答案 1 :(得分:6)

要正确初始化,必须先创建一个OpenGL上下文并且必须先调用 wglMakeCurrent()才能调用glewInit();

我会把这一点放在keltar的回答中,但我不知道如何。