好的,我正在尝试使用一些在子程序函数中内部使用的着色器统一变量(因此在子程序函数之外根本没有调用这些变量)。 / p>
重要的部分:我不直接在着色器main中调用此子程序函数,而不是我有子程序统一数组我填充使用glUniformSubroutinesuiv并使用此语法来调用它们:
my_subroutines[i]();
我的问题是所有的统一变量都被优化了。 我已经检查了什么:
那么,这是正常行为吗?如何保持我的统一变量而不做一些像这样的麻烦:
void main()
{
vec4 color;
//force use of uniform variables to prevent them be optimized out
color += 0.0001*(uniform_variable0 + uniform_variable1 + ... + uniform_variableN);
//call my subroutines here (that uses the same uniforms ... cmon glsl)
color = subroutines_array[0](color);
color = subroutines_array[1](color);
...
color = subroutines_array[N](color);
FragColor = color;
}
答案 0 :(得分:0)
发现我做错了:
void main()
{
vec4 color;
//so i never updated my color here, and that's why uniforms was cut out
subroutines_array[0](color);
subroutines_array[1](color);
...
subroutines_array[N](color);
FragColor = color;
}