如何再次测试着色器不同版本的着色器模型

时间:2011-07-25 17:52:01

标签: opengl glsl shader

我有很多OpenGl着色器。我们尝试使用尽可能多的不同硬件来评估我们产品的可移植性。我们的一位客户最近遇到了一些渲染问题,似乎目标机器只提供版本着色器模型2.0 我们所有的开发/构建/测试机器(即使最老的那些运行版本 4.0 ),其他一切(OpenGl版本,GSLS版本......)似乎完全相同。

我没有找到降级着色器模型版本的方法,因为它是由图形卡驱动程序自动提供的。

有没有办法手动安装或选择用于开发/测试目的的OpenGl / GLSL / Shader模型版本?

注意:ATI / NVIDIA显卡的主要目标是Windows XP SP2 / 7(32& 64)

1 个答案:

答案 0 :(得分:3)

OpenGL没有“着色器模型”的概念;这是一个Direct3D的事情。它只有GLSL的版本:1.10,1.20等。

每个OpenGL版本都与特定的GLSL版本相匹配。 GL 2.1支持GLSL 1.20。 GL 3.0支持GLSL 1.30。对于GL 3.3及更高版本,他们不再愚弄并且只使用相同的版本号,因此GL 3.3支持GLSL 3.30。因此,GLSL 1.50(映射到GL 3.2)和GLSL 3.30之间存在奇数版本号差距。

从技术上讲,允许OpenGL实现拒绝编译比当前版本匹配的旧版本着色器。然而,作为实际问题,只要着色器的版本小于或等于OpenGL实现支持的版本,您就可以将任何GLSL着色器推送到任何OpenGL实现中。这尚未在MacOSX Lion实施GL 3.2核心上进行测试。

有一个例外:core contexts。如果您尝试通过使用从核心中删除的功能的核心OpenGL上下文提供着色器,它将会抱怨。

没有办法强制 OpenGL为您提供特定的OpenGL版本。您可以使用wgl / glXCreateContextAttribs来询问它。但是,只要该版本向后兼容您所要求的版本,就可以为您提供任何高于您要求的版本。