2015-03-31 109 views
0

尝试初始化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); 
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; 
} 

回答

1

检查每个后面的着色器日志着色器编译。

https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderInfoLog.xml

+2

JOGL 2方法:http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GL2ES2.html#glGetShaderInfoLog(int,%20int,% 20java.nio.IntBuffer,%20java.nio.ByteBuffer)示例:https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglRenderer .java#L1076 – gouessej 2015-04-01 10:08:05

+0

感谢@gouessej,jmonkeyengine真的帮了这个答案的java版本 – bobbyrne01 2015-04-01 13:40:12

+1

不客气。其实,我也应该在这里使用这个方法:https://github.com/gouessej/Ardor3D/blob/master/ardor3d-jogl/src/main/java/com/ardor3d/scene/state/jogl/JoglShaderObjectsStateUtil.java #L533“Errare humanum est”:s – gouessej 2015-04-01 14:14:39