我正在测试glDrawPixels
将我的简单像素绘制2D游戏从Windows API移植到带有GLFW的OpenGL。它运行良好,FPS超过100,另外还有跨平台。
有一点让我烦恼的是我正在使用一个已弃用的功能。我现在没有看到任何问题,但这可能是未来的问题吗? glDrawPixels
突然被删除了吗?我所需要的只是winapi的CreateWindow
和BitBlt
的跨平台替代方案。
答案 0 :(得分:3)
我想延伸评论中已经提供的article about deprecation in the OpenGL wiki。
目前的情况是,我们可以辨别3种口味"桌面平台上的OpenGL上下文:
第一个案例,"遗产" 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。
我为您看到两个选项:
glDrawPixels
从未有效。使用纹理四边形(或者甚至可能glBlitFramebuffer
)将图像blitting到屏幕上可能会好得多。