2

我对 OpenGL 很陌生,所以这可能很明显,但是是否可以确定给定视频卡是否支持特定功能?这是因为我使用一台带有 ATI Radeon 9550 显卡的旧电脑,运行 Lubuntu 12.10,发现它不支持使用 dFdx 和 dFfy。我能够解决这个问题,但现在我很好奇是否可以找出是否由于此类问题而发生故障,并基于此采取行动,可能使用替代方法等。

4

2 回答 2

3

一般来说,你不能。不是因为你说的那种东西。

dFdx并且dFdy自 1.10 版(核心 OpenGL 2.0 中的第一个版本)以来一直是 GLSL 的一部分。对它们的支持不是可选的。

您的问题是 ATI/AMD 想要声称他们的旧卡支持 2.x,但他们的硬件实际上不能完成 2.x 所需的所有事情。所以他们对此撒谎,声称支持,同时默默地进行这些空操作。

OpenGL 没有办法检测背信弃义。您唯一能做的就是保留一张卡片列表并使用GL_VENDORGL_RENDERER字符串进行测试。

于 2013-04-12T01:39:00.367 回答
3

glGetString(GL_VERSION)您可以使用或检查支持的 OpenGL 版本glGetInteverv(GL_MAJOR_VERSION, …); glGetInteverv(GL_MINOR_VERSION, …);。对于 OpenGL-3 及更高版本,OpenGL 主要版本直接对应于硬件功能。

对于旧版本,事情没有那么严格,并且由于 OpenGL 的抽象设备模型,您无法真正“查询”硬件功能。您可以检查支持哪些扩展,这是支持功能的良好指标,因为许多 ARB 扩展已将其纳入核心功能。如果当前 OpenGL 版本的某个特性所基于的扩展不受支持,那么可能会模拟核心特性。

我知道这是非常模糊和不稳定的,但事实就是如此。唯一的其他选择是保留 GL_RENDERER 字符串的数据库并与之匹配。

于 2013-04-12T01:32:34.177 回答