GLSL 4.0 LWJGL子例程不返回统一的子例程索引 你好,我跟随我的C++ GLSL着色器烹饪书并在LWJGL写下,我遇到了一个问题,我的着色器子例程得到GLGETSUBRUTRONETROUND索引,所以我去了 为了得到一个非常简单的例子,但仍然无法得到索引,它们总是返回-1

GLSL 4.0 LWJGL子例程不返回统一的子例程索引 你好,我跟随我的C++ GLSL着色器烹饪书并在LWJGL写下,我遇到了一个问题,我的着色器子例程得到GLGETSUBRUTRONETROUND索引,所以我去了 为了得到一个非常简单的例子,但仍然无法得到索引,它们总是返回-1,glsl,lwjgl,subroutine,Glsl,Lwjgl,Subroutine,这是着色器 #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 ) ve

这是着色器

#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

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

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