遵循GLSL Cookbook的示例,我正在使用以下代码:

vec4 Pass2(){
ivec2 pix = ivec2(gl_FragCoord.xy);
vec4 sum = texelFetch(texSampler, pix, 0) * weight[0];
for(int i = 1; i < 5; i++){
    ivec2 posPixOffs = ivec2(0, pixOffset[i]);
    ivec2 negPixOffs = ivec2(0, -pixOffset[i]);
    sum += texelFetchOffset(texSampler, pix, 0, posPixOffs) * weight[i];
    sum += texelFetchOffset(texSampler, pix, 0, negPixOffs) * weight[i];
}
return sum;
}


其中pixOffset[]被定义为

uniform int pixOffset[5] = int[](0, 1, 2, 3, 4);


weight[]只是从应用程序客户端设置的uniform float

texelFetch函数会在标题中产生错误。
符合条件的表达式是什么?为什么不将其视为表达式?

最佳答案

您不应将常量值分配给统一数组。它可能有效,但不是规范的一部分。

常量表达式类似于:

const int pixOffset[5] = int[](0, 1, 2, 3, 4);

关于c++ - 函数“texelFetchOffset”的参数4必须为常量表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25440114/

10-11 00:57