opengl - GLEW 有什么作用,我为什么需要它?

标签 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 一起使用?实际上,我可能会将其作为一个单独的问题发布。

最佳答案

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

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

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

关于opengl - GLEW 有什么作用,我为什么需要它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809237/

相关文章:

c++ - GLM 功能不起作用

c++ - OpenGL:带三角剖分的贝塞尔曲面

opengl - 读取 unsigned int 时 glReadPixels 的精度

c++ - 对 glutInit 的不明引用

opengl - 在绘制到屏幕之前,opengl 纹理中的意外像素发生变化

c++ - OpenGL 1.1 的哪个版本的 Glut?

c++ - 带有 GLFW 和 GLEW 的 OpenGL - 在 Windows 上使用 gcc 进行编译

opengl - 有多少用户可以运行使用 OpenGL 3.x 的软件?

c++ - 不同的片段着色器颜色

c++ - 函数 'glWindowPos2i' 无法解析?