const值上的着色器编译错误

时间:2015-03-25 18:22:04

标签: opengl compilation const fragment-shader

您好我在某些计算机上没有编译的片段着色器上有错误。使用此着色器的程序在我的计算机上运行(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和着色器之间搜索已知问题,但我找不到任何东西。

你知道发生了什么吗?

0 个答案:

没有答案