c++ - OpenGL 'deprecated' 功能可能不受支持吗?

标签 c++ c opengl graphics deprecated

我正在使用 glDrawPixels 进行测试,以便将我的简单像素绘制 2D 游戏从 Windows API 移植到带有 GLFW 的 OpenGL。它运行良好,FPS 超过 100,而且是跨平台的。

只有一件事让我有点恼火,那就是我使用了一个已弃用的功能。我现在没有看到任何问题,但这可能会成为 future 的问题吗? glDrawPixels 会突然被移除吗?我所需要的只是 winapi 的 CreateWindowBitBlt 的跨平台替代方案。

最佳答案

我想延长 article about deprecation in the OpenGL wiki已经在评论中给出了。

目前的情况是,我们可以在桌面平台上辨别 OpenGL 上下文的 3 种“ flavor ”:

  1. “传统”GL。这意味着过去的 GL,在没有任何弃用方案之前,在有特定版本的上下文或配置文件之前。
  2. 核心配置文件中的“现代”GL。
  3. 兼容性配置文件中的“现代”GL。

第一种情况,“遗留”GL,以跨平台方式仅限于 GL 2.1 及更早版本。所有主要桌面操作系统(Windows、Linux、OSX)在所有主要 GPU 品牌(Intel、NVidia、AMD)上都支持此功能。这不太可能消失很长时间,因为所有甚至不知道现代 GL 存在的“旧”软件都依赖它。

我所说的“现代”GL 是指 GL 3.2 及更高版本。在那里,配置文件 被发明出来了。关键是只需要支持核心 配置文件,兼容性 配置文件是可选的。在核心配置文件中,已弃用的函数实际上已被删除,因此您的代码将无法在核心配置文件中运行。在兼容性配置文件中,已弃用的功能仍然可用。

因此,将旧的遗留功能(如固定功能管道、即时模式或您的 glDrawPixels 调用)与现代 GL 功能混合的唯一方法是兼容性配置文件。然而,在实践中,兼容性支持并不普遍可用。 MacOSX 一般不支持兼容性配置文件,基于 Mesa 的开源 Linux 驱动程序也不支持。因此,您无法真正使用兼容性配置文件进行跨平台开发。

请注意,我以某种方式跳过了 GL 3.0 和 3.1。它们介于两者之间,我建议永远不要尝试使用它们。 OSX 根本不支持它们。实际上,任何支持 GL 3.0 的现实世界 GPU 也至少支持 GL 3.2。

我看到两个选项:

  1. 如果 GL 2.1 中的功能集足以满足您的用例,您可以继续使用旧版 GL。对它的支持不会消失很长时间。
  2. 在不使用已弃用函数的情况下切换到现代 GL。 glDrawPixels 从未如此高效。您可能最好使用带纹理的四边形(或者甚至 glBlitFramebuffer)将图像 block 传输到屏幕。

关于c++ - OpenGL 'deprecated' 功能可能不受支持吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30962359/

相关文章:

c++ - 防止用户按住某个键

c++ - 我已经安装了 gperftools-2.0,但是我无法获取 cpu profile 统计信息

c++ - Windows 虚拟内存和内核模式

c++ - 防止 overdraw 的技术(OpenGL)

c++ - 复制 vector 对

c++ - 无法从基类 C++ 访问变量

c - 32 位与 64 位架构上的内存访问

CS50破解问题。需要有关如何解密 2-4 个字符的单词的帮助

c++ - 如何在 OpenGl 中使用橡皮筋

qt - Qt 和 JavaFX 等硬件加速工具包如何实现高质量字体渲染?