Java 尝试使用jogl加载和初始化着色器

Java 尝试使用jogl加载和初始化着色器,java,opengl,shader,jogl,Java,Opengl,Shader,Jogl,正在尝试初始化JOGL中的某些着色器 你知道为什么错误是空的吗?我检查了它的大小,它看起来大于0,因为没有打印“Unknown” vertexShaderProgram = gl.glCreateShader(GL2.GL_VERTEX_SHADER); fragmentShaderProgram = gl.glCreateShader(GL2.GL_FRAGMENT_SHADER); gl.glShaderSource(vertexShaderProgram, 1, vsrc, null, 0

正在尝试初始化
JOGL
中的某些着色器

你知道为什么错误是空的吗?我检查了它的大小,它看起来大于0,因为没有打印
“Unknown”

vertexShaderProgram = gl.glCreateShader(GL2.GL_VERTEX_SHADER);
fragmentShaderProgram = gl.glCreateShader(GL2.GL_FRAGMENT_SHADER);
gl.glShaderSource(vertexShaderProgram, 1, vsrc, null, 0);
gl.glCompileShader(vertexShaderProgram);
gl.glShaderSource(fragmentShaderProgram, 1, fsrc, null, 0);
gl.glCompileShader(fragmentShaderProgram);
shaderprogram = gl.glCreateProgram();

gl.glAttachShader(shaderprogram, vertexShaderProgram);
gl.glAttachShader(shaderprogram, fragmentShaderProgram);
gl.glLinkProgram(shaderprogram);
gl.glValidateProgram(shaderprogram);
IntBuffer intBuffer = IntBuffer.allocate(1);
gl.glGetProgramiv(shaderprogram, GL2.GL_LINK_STATUS, intBuffer);

System.out.println("got link status");

if (intBuffer.get(0) != 1) {
    gl.glGetProgramiv(shaderprogram, GL2.GL_INFO_LOG_LENGTH, intBuffer);
    int size = intBuffer.get(0);
    System.err.println("Program link error: ");
    if (size > 0) {
        ByteBuffer byteBuffer = ByteBuffer.allocate(size);
        gl.glGetProgramInfoLog(shaderprogram, size, intBuffer, byteBuffer);
        for (byte b: byteBuffer.array()) {
            System.err.print((char) b);
        }
    } else {
        System.out.println("Unknown");
    }
    System.exit(1);
}
控制台上出现错误,但不包含数据

got link status
Program link error: 
这是我的片段着色器

< FILE :: fragmentShader.txt >
uniform sampler2D fish_y_offset;
uniform float alphavalue;
void main()
{
    gl_FragColor = texture2D(fish_y_offset, gl_TexCoord[0].st);
    gl_FragColor.a=alphavalue;

}
< FILE :: vertextShader.txt >
uniform float waveTime;
uniform float waveWidth;
uniform float waveHeight;
void main(void)
{
    vec4 v = vec4(gl_Vertex);
    v.y = 11 + sin(waveWidth * v.x + waveTime) * cos(waveWidth * v.z + waveTime) * waveHeight;
    gl_Position = gl_ModelViewProjectionMatrix * v;
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

均匀采样2D fish_y_偏移;
统一浮点数;
void main()
{
gl_FragColor=texture2D(fish_y_offset,gl_TexCoord[0].st);
gl_FragColor.a=字母值;
}
这是我的顶点着色器

< FILE :: fragmentShader.txt >
uniform sampler2D fish_y_offset;
uniform float alphavalue;
void main()
{
    gl_FragColor = texture2D(fish_y_offset, gl_TexCoord[0].st);
    gl_FragColor.a=alphavalue;

}
< FILE :: vertextShader.txt >
uniform float waveTime;
uniform float waveWidth;
uniform float waveHeight;
void main(void)
{
    vec4 v = vec4(gl_Vertex);
    v.y = 11 + sin(waveWidth * v.x + waveTime) * cos(waveWidth * v.z + waveTime) * waveHeight;
    gl_Position = gl_ModelViewProjectionMatrix * v;
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

均匀浮波时间;
均匀浮动波宽;
均匀浮动波高;
真空总管(真空)
{
vec4 v=vec4(gl_顶点);
v、 y=11+sin(波宽*v.x+波时)*cos(波宽*v.z+波时)*波高;
gl_位置=gl_模型视图投影矩阵*v;
gl_TexCoord[0]=gl_MultiTexCoord0;
}

在每次着色器编译后检查着色器日志


JOGL 2方法:示例:感谢@gouessej,jmonkeyengine为这个答案的java版本提供了真正的帮助。不客气。实际上,我也应该在这里使用这种方法:“Errare humanum est”:s@gouessejcit为+1:)