您好我正在使用我的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 !!!。
答案 0 :(得分:0)
glGetSubroutineIndex()
的第二个参数是着色器类型,而不是着色器名称。所以电话应该是:
GL40.glGetSubroutineIndex(programID, GL20.GL_VERTEX_SHADER, "redColor"));
GL40.glGetSubroutineIndex(programID, GL20.GL_VERTEX_SHADER, "blueColor"));