我正在使用分离的着色器对象程序,现在尝试集成子例程。
我使用 glGetSubroutineIndex() 获取子程序索引。然后我将当前子程序设置为:
glUniformSubroutinesuiv(GL_FRAGMENT_SHADER,1,&( _subrotines.find(method)->second));
我收到以下 OpenGL 错误消息:
“ID:1282,SEVERITY:HIGH,消息:GL_INVALID_OPERATION 错误生成。注意获取指定着色器类型的子程序信息。”
这是我在片段着色器中定义子例程的方式:
subroutine vec4 RenderMode();
subroutine uniform RenderMode renderMode;
subroutine (RenderMode)
vec4 lightsMode(){
// returns some color
}
subroutine (RenderMode)
vec4 colorMode(){
// returns some color
}
void main(void){
vec4 fragout =renderMode();
OUTPUT= fragout;
}
当我使用常规着色器程序时它确实工作正常,但似乎不适用于单独的着色器程序。