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

use*_*501 24 opengl glew opengl-3 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?我可能会将其作为一个单独的问题发布.

kel*_*tar 13

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

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

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


tam*_*ato 6

要正确初始化,必须创建OpenGL上下文,并且 wglMakeCurrent()必须在调用之前调用它glewInit();

我会把这个放到keltar答案的评论中,但我不知道怎么做.