您好我在某些计算机上没有编译的片段着色器上有错误。使用此着色器的程序在我的计算机上运行(Quadro K1000M,OpenGl 4.2),但在我朋友的计算机(AMD Firepro M4100 FireGL V,OpenGl 4.2)上启动时崩溃。
错误是:
Failed to compile fragment shader:
Fragment shader failed to compile with the following errors:
ERROR: 0:2: error(#207) Non-matching types for const initializer: const
ERROR: error(#273) 1 compilation errors. No code generated
着色器代码如下:
uniform sampler2D source;
const float Threshold = 0.75;
const float Factor = 4.0;
#define saturate(x) clamp(x, 0.f, 1.f)
void main()
{
vec4 sourceFragment = texture2D(source, gl_TexCoord[0].xy);
float luminance = sourceFragment.r * 0.2126 + sourceFragment.g * 0.7152 + sourceFragment.b * 0.0722;
sourceFragment *= saturate(luminance - Threshold) * Factor;
gl_FragColor = sourceFragment;
}
我没有找到有关此错误的任何信息。我让我的朋友编辑着色器以删除const关键字,然后该程序工作。但我不明白为什么这个关键字会在他的计算机上产生编译错误,因为他似乎拥有与我相同的OpenGL版本。我试图在const和着色器之间搜索已知问题,但我找不到任何东西。
你知道发生了什么吗?