OpenGL'弃用'功能可能不受支持吗?

时间:2015-06-21 07:48:29

标签: c++ c opengl graphics deprecated

我正在测试glDrawPixels将我的简单像素绘制2D游戏从Windows API移植到带有GLFW的OpenGL。它运行良好,FPS超过100,另外还有跨平台。

有一点让我烦恼的是我正在使用一个已弃用的功能。我现在没有看到任何问题,但这可能是未来的问题吗? glDrawPixels突然被删除了吗?我所需要的只是winapi的CreateWindowBitBlt的跨平台替代方案。

1 个答案:

答案 0 :(得分:3)

我想延伸评论中已经提供的article about deprecation in the OpenGL wiki

目前的情况是,我们可以辨别3种口味"桌面平台上的OpenGL上下文:

  1. "传统" GL。这意味着过去的GL,在有任何弃用方案之前,以及在有特定版本的上下文或配置文件之前。
  2. "现代" GL核心概况。
  3. "现代"兼容性配置文件中的GL。
  4. 第一个案例,"遗产" GL,以跨平台的方式限于GL 2.1及更早版本。所有主流桌面操作系统(Windows,Linux,OSX)都支持所有主要GPU品牌(Intel,NVidia,AMD)。这种情况不太可能在很长一段时间内消失,因为所有的老年人都会消失。甚至不知道现代GL存在的软件都依赖于它。

    我所描述的"现代" GL表示GL 3.2及更高版本。在那里,发明了个人资料。关键是只需要支持 core 配置文件,兼容性配置文件是可选的。在核心配置文件中,已弃用的功能实际上已被删除,因此您的代码将无法在核心配置文件中运行。在兼容性配置文件中,已弃用的功能仍然可用。

    因此,将旧的旧版功能(如固定功能管道,即时模式或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)将图像blitting到屏幕上可能会好得多。