27

好的,所以我已经知道为什么我需要 GLEW,但只是在一定程度上。

如果我使用现代 OpenGL 的东西,可能从 3.0 版开始,和/或使用核心配置文件,则需要 GLEW,因为没有它编译会产生错误,例如glGenVertexArrays未声明。

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

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

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

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

所以你可能会看到我实际上并不知道 GLEW 做什么或它是如何做到的。

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

4

2 回答 2

14

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

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

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

于 2013-07-23T11:59:25.757 回答
6

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

我会将其放入 keltar 回答的评论中,但我不知道如何。

于 2013-07-23T19:56:11.957 回答