我开发了一个程序,使用了许多OpenGL的方面——从新功能到废弃功能都有涉及,并希望确保它在绝大多数机器上能够正确运行——尤其是在旧图形卡上。
- 最大化OpenGL应用程序的(向后)兼容性的最佳方法是什么?
- 如何测试我的程序是否与旧硬件兼容,而不需要真正拥有一台旧硬件的测试机器?
- 有哪些方法可以找到在兼容性测试期间可能遇到的问题的根本原因?
我开发了一个程序,使用了许多OpenGL的方面——从新功能到废弃功能都有涉及,并希望确保它在绝大多数机器上能够正确运行——尤其是在旧图形卡上。
嗯,最大化向后兼容性并追踪目标机器功能的最佳方法(在我看来)是使用类似GLEW:OpenGL扩展包装库的东西。它将为您加载特定于OpenGL版本的函数,并且您可以测试用户系统(或更正确地说,视频驱动程序)是否支持它们。
这个库非常易于使用,文档齐全,您可以通过谷歌搜索到很多示例。因此,如果目标机器没有一些新的OpenGL函数,则加载名为“opengl_old.cpp”的模块(例如),或者如果它没有某些已弃用的功能(如 glBegin(), glEnd()),则最好使用“opengl_new.cpp”继续进行。
基本上,大部分变化都发生在OpenGL 3.0(以及更进一步的3.3)中,引入了着色器作为唯一的非弃用图形管道,因此您可以在程序中创建两个OpenGL模块:一个用于OpenGL 1&2,另一个用于OpenGL 3&4。至少我在自己的代码中是这样解决这个问题的。
要测试某些功能,您可以在创建上下文时指定要加载的OpenGL API的具体版本。