3

我开发了一个程序,它利用了 OpenGL 的许多方面——从相当新的功能到已弃用的功能,并希望确保它在绝大多数机器上都能正常工作——尤其是在显卡过时的机器上。

  • 最大化 OpenGL 应用程序(向后)兼容性的最佳方法是什么?
  • 如何测试我的程序与旧硬件的兼容性,而无需实际使用旧硬件的测试机器?
  • 有哪些方法可以找到兼容性测试过程中可能遇到的问题的根本原因?
4

2 回答 2

2

最大化 OpenGL 应用程序(向后)兼容性的最佳方法是什么?

定义“兼容性”?如果您希望应用程序在尽可能多的硬件上运行,那么您基本上必须完全放弃着色器并坚持使用 GL 1.4。这里主要的混淆问题是英特尔驱动程序错误;许多较旧的英特尔硬件都声称支持 GL 2.0 或 2.1,但它们在这种支持方面存在无数失败。

如何测试我的程序与旧硬件的兼容性,而无需实际使用旧硬件的测试机器?

你没有。与旧硬件的兼容性不仅仅是坚持一个标准。这是为了确保您的程序不会遇到驱动程序错误。而做到这一点的唯一方法是在感兴趣的硬件上进行实际测试。

有哪些方法可以找到兼容性测试过程中可能遇到的问题的根本原因?

在最近的硬件上测试相同的代码。如果它有相同的故障,那么问题很可能出在您的代码中。如果它在最近的硬件上运行良好但在旧的硬件上失败,那么问题几乎可以肯定是旧硬件驱动程序的驱动程序错误。

制定解决方法。

于 2012-09-26T18:22:00.790 回答
1

好吧,最大化向后兼容性并获得跟踪目标机器功能(恕我直言)的强大工具的最佳方法是使用GLEW: The OpenGL Extension Wrangler Library 之类的东西。它将为您加载特定于 OpenGL 版本的功能,您可以测试它们是否受用户系统支持(或者更准确地说,受视频驱动程序支持)。这个库使用起来非常简单,它有很好的文档,你可以在谷歌上搜索很多例子。因此,如果目标机器没有一些新的 opengl 功能,则加载名为“opengl_old.cpp”的模块(例如),或者如果它没有某些已弃用的功能(如glBegin()glEnd()) ,你最好继续使用“opengl_new.cpp”。

基本上,大多数更改是在 OpenGL 3.0(以及 3.3)中完成的,着色器作为唯一不推荐使用的图形管道引入,因此您可以在程序中创建两个 opengl 模块:一个用于 OpenGL 1&2,一个用于 OpenGL 3&4。至少我在自己的代码中以这种方式解决了这个问题。

要测试某些功能,您可以在创建上下文时指定要加载的 OpenGL API 的具体版本。

于 2012-09-26T11:12:15.220 回答