如何确保GLSL着色器与大多数现代卡兼容?
我有一个软件,我使用here的GLSL代码。但即使我在最终着色器的开头添加了#version 120并确保它编译,在某些用户计算机上它们会出现着色器编译错误(即使它们支持OpenGL 3.2)。
是否有任何工具可用于“验证”或尝试使用不同的“着色器编译器”进行编译?
答案 0 :(得分:6)
没有用于验证着色器的工具。即使有,但它对你没有用,因为如果它不能在你想要的硬件上运行,那么着色器有什么用呢?您可以随心所欲,但如果您的硬件拒绝它,即使您在技术上正确,您的着色器仍然无法运行。
如果特定版本的着色器在一个目标上编译(称为A)而不在另一个目标上编译(称之为B),则可能是由于以下问题之一:
#3几乎不存在,但有明显的例外。您链接到Photoshop着色器,因此我认为您无法控制OpenGL上下文的创建和管理。即便如此,我仍然怀疑Photoshop会使用核心环境;他们有太多的着色器需要向后兼容。
解决这个问题的最佳方法是测试AMD和NVIDIA硬件(如果你需要在那里运行,还要测试英特尔)。您可能不需要测试每种可能的系统组合,但选择Radeon HD卡和GeForce 200或更高版本。它们甚至不必是高端的。
答案 1 :(得分:-2)
问题是所有硬件供应商都在其驱动程序中编写自己的GLSL编译器实现。即使语言定义得很好,这也会导致着色器解析中的不一致。例如,Nvidia司机经常“原谅”某些由ATI捕获的小错误。
我认为合理的解决方案是使用Nvidia的Cg(http://developer.nvidia.com/cg-toolkit) - 这样您就可以使着色器与硬件无关,并确保它们在所有硬件上运行。