遵循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/