我是OpenGL的新手,所以这可能是显而易见的,但有可能确定给定视频卡是否支持特定功能吗?这是因为我使用带有ATI Radeon 9550显卡的旧电脑,运行Lubuntu 12.10并发现它不支持使用dFdx和dFfy。我能够解决这个问题,但现在我很好奇,如果我能找出是否由于这样的问题而发生故障,并采取基于此的行动,可能使用替代方法等。
答案 0 :(得分:3)
您可以使用glGetString(GL_VERSION)
或glGetInteverv(GL_MAJOR_VERSION, …); glGetInteverv(GL_MINOR_VERSION, …);
检查支持的OpenGL版本。使用OpenGL-3及其后,OpenGL主要版本直接对应于硬件功能。
对于旧版本,事情并不严格,而且由于OpenGL的抽象设备模型,您无法真正“查询”硬件功能。您可以检查支持哪些扩展,这是支持功能的良好指标,因为许多ARB扩展使其成为核心功能。如果不支持当前OpenGL版本的某个特性所基于的扩展,则可能会模拟核心功能。
我知道它非常含糊不清,但就是这样。唯一的另一种选择是保留GL_RENDERER字符串的数据库并与之匹配。
答案 1 :(得分:3)
一般来说,你不能。不是你所说的那种东西。
自版本1.10(核心OpenGL 2.0中的第一个版本)以来, dFdx
和dFdy
已成为GLSL的一部分。支持它们不是可选的。
你的问题是ATI / AMD想声称他们的旧卡支持2.x,但他们的硬件实际上并不能完成2.x所需的所有事情。所以他们谎言关于它,声称支持,同时默默地进行这些空操作。
OpenGL没有办法检测背信弃义。您唯一能做的就是保留一张卡片列表并使用GL_VENDOR
和GL_RENDERER
字符串进行测试。