GLEW 将 OpenGL 2 EXT 加载为 OpenGL 4
Posted
技术标签:
【中文标题】GLEW 将 OpenGL 2 EXT 加载为 OpenGL 4【英文标题】:GLEW Load OpenGL 2 EXT as OpenGL 4 【发布时间】:2012-07-03 00:57:48 【问题描述】:我正在尝试使我编写的库可移植。它是一个图形库,大量使用了高级 OpenGL。我在支持 OpenGL 4.2 的机器上开发了这个库。
有许多 OpenGL 4 函数(一个简单的例子是 glGenerateMipmap)不是 OpenGL 2 中的核心功能,但可以在扩展(在本例中为 glGenerateMipmapEXT)下使用。在旧硬件上运行时,我发现 OpenGL 4 函数指针为 NULL,但以 EXT 为后缀的 OpenGL 2 扩展函数不是,并且工作正常。
我正在使用 GLEW。虽然我意识到有时 OpenGL 4 函数与 OpenGL 2 EXT 函数不同,但它们通常是相同的。有没有办法让 GLEW 将 EXT 函数加载为 OpenGL 4 函数?或者我是否坚持将所有 OpenGL 4 函数重命名为它们的 EXT 对应函数?还有什么?
【问题讨论】:
【参考方案1】:不,您不能让 GLEW 对您撒谎并假装扩展功能是核心功能。
一般来说,在编写 OpenGL 代码时,您会选择一个特定版本 + 一组扩展并写入该版本。如果您需要可选功能(特定于硬件的功能),那么您需要编写额外的代码路径来调用这些 API。
除了 MacOSX 的核心 3.2 支持之外,您可以期望旧的扩展在新硬件上得到无限期的支持。这样,旧程序仍然可以在较新的实现上运行。因此,您不会找到不实现 GL_EXT_framebuffer_object 的 GL 4.x 实现。
【讨论】:
以上是关于GLEW 将 OpenGL 2 EXT 加载为 OpenGL 4的主要内容,如果未能解决你的问题,请参考以下文章
无法链接 OpenGL 兼容性配置文件(无法识别 EXT 符号)
如何将 GLEW 和 GLFW 以及 OpenGL 链接到 MingW 的 g++
从 DLL 链接到 OpenGL:运行时 glew 函数为空
无法在 GLEW 应用程序中将 OpenGL 缓冲区打印到控制台