我开发了一个程序,它利用了OpenGL的许多方面 - 从新的功能到新功能,并且希望确保它在大多数机器上正常工作 - 特别是在具有过时图形卡的机器上。 / p>
答案 0 :(得分:2)
最大化OpenGL应用程序(向后)兼容性的最佳方法是什么?
定义“兼容性”?如果您希望应用程序在尽可能多的硬件上运行,那么您基本上必须完全放弃着色器并坚持使用GL 1.4。这里主要的混淆问题是英特尔驱动程序错误;许多旧的英特尔硬件将声称支持GL 2.0或2.1,但它们在此支持中有无数的失败。
如果没有使用旧硬件的测试机器,我如何测试我的程序与旧硬件的兼容性?
你没有。与旧硬件的兼容性不仅仅是坚持标准。这是为了确保您的程序不会遇到驱动程序错误。而这样做的唯一方法是实际测试感兴趣的硬件。
有哪些方法可以找到兼容性测试期间可能遇到的问题的根本原因?
在最近的硬件上测试相同的代码。如果它有相同的失败,那么问题可能在您的代码中。如果它在最近的硬件上工作正常但在旧的东西上失败,则问题几乎肯定是旧硬件驱动程序的驱动程序错误。
制定解决方法。
答案 1 :(得分:1)
那么,最大化向后兼容性并获得跟踪目标机器功能(imho)的强大工具的最佳方法是使用GLEW: The OpenGL Extension Wrangler Library之类的东西。它将为您加载OpenGL版本特定的功能,您可以测试它们是否受用户系统支持(或者更准确地说,是视频驱动程序)。 这个库使用起来非常简单,它有很好的文档,你可以google很多例子。 因此,如果目标机器没有一些新的opengl函数,你可以加载名为“opengl_old.cpp”的模块(例如),或者它没有一些已经弃用的功能(比如 glBegin(), glEnd()),你最好继续使用“opengl_new.cpp”。
基本上,大多数更改都是在OpenGL 3.0(以及3.3)中完成的,并且着色器是唯一不推荐使用的图形管道,因此您可以在程序中创建两个opengl模块:一个用于OpenGL 1& 2,一个用于OpenGL 3和4。至少我在自己的代码中以这种方式解决了这个问题。
要测试某些功能,您可以在创建上下文时指定要加载的OpenGL API的具体版本。