无法获取指定着色器类型的子例程信息

时间:2013-04-18 11:37:37

标签: opengl glsl

我正在使用分离的着色器对象程序,现在正在尝试集成子程序。

我使用glGetSubroutineIndex()获取子程序索引。然后我将当前子程序设置为:

glUniformSubroutinesuiv(GL_FRAGMENT_SHADER,1,&( _subrotines.find(method)->second));

我收到以下OpenGL错误消息:

  

“ID:1282,严重性:高,消息: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;
}

当我使用常规着色器程序时它确实工作正常,但似乎不适用于单独的。

1 个答案:

答案 0 :(得分:1)

在选择glUniformSubroutinesuiv()子程序之前,您需要使用着色器程序。步骤将是:

glUseProgram(program);
glUniformSubroutinesuiv(...);
glUseProgram(0);

请记住 unusing 程序将重置子程序选择。因此,您必须再次致电glUniformSubroutinesuiv()