GLSL 4.0 LWJGL子程序返回没有统一的子程序索引

时间:2014-11-11 02:05:13

标签: glsl lwjgl subroutine

您好我正在使用我的C ++ GLSL着色器食谱并将其写入LWJGL,我遇到了为我的着色器子程序获取glGetSubroutineIndices的问题所以我去了http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-subroutines/ 得到一个非常简单的例子仍然无法得到索引,它们总是返回-1 !!

这是Shader

#version 400

layout (std140) uniform Matrices {
mat4 pvm;
} ;

in vec4 position;

out vec4 color;


// the signature
subroutine vec4 colorRedBlue ();
subroutine uniform colorRedBlue myRedBlueSelection;
// option 1
subroutine (colorRedBlue ) vec4 redColor() {

    return vec4(1.0, 0.0, 0.0, 1.0);
} 

// option 2
subroutine (colorRedBlue ) vec4 blueColor() {

    return vec4(0.0, 0.0, 1.0, 1.0);
}
void main()
{
    color = myRedBlueSelection();
    gl_Position = pvm * position ;
}

这是调用位置的调用

System.out.println( GL40.glGetSubroutineIndex(programID, VertexShaderID, "redColor"));
System.out.println(GL40.glGetSubroutineIndex(programID, VertexShaderID, "blueColor"));

我正确地连接和检索我所有的其他制服但是这个!总是返回-1 !!!。

1 个答案:

答案 0 :(得分:0)

glGetSubroutineIndex()的第二个参数是着色器类型,而不是着色器名称。所以电话应该是:

GL40.glGetSubroutineIndex(programID, GL20.GL_VERTEX_SHADER, "redColor"));
GL40.glGetSubroutineIndex(programID, GL20.GL_VERTEX_SHADER, "blueColor"));