public static String getProgramInfoLog( GL2ES2 gl, int program ) { int[] maxLength = new int[ 1 ]; gl.glGetProgramiv( program, GL_INFO_LOG_LENGTH, maxLength, 0 ); if ( maxLength[ 0 ] == 0 ) return ""; int[] length = new int[ 1 ]; byte[] bytes = new byte[ maxLength[ 0 ] ]; gl.glGetProgramInfoLog( program, maxLength[ 0 ], length, 0, bytes, 0 ); return new String( bytes, 0, length[ 0 ], UTF_8 ); }
public static boolean isProgramStatusValid(final GL _gl, final int programObj, final int name) { final GL2ES2 gl = _gl.getGL2ES2(); final int[] ires = new int[1]; gl.glGetProgramiv(programObj, name, ires, 0); return ires[0]==1; }
public static String getProgramInfoLog(final GL _gl, final int programObj) { final GL2ES2 gl = _gl.getGL2ES2(); final int[] infoLogLength=new int[1]; gl.glGetProgramiv(programObj, GL2ES2.GL_INFO_LOG_LENGTH, infoLogLength, 0); if(infoLogLength[0]==0) { return "(no info log)"; } final int[] charsWritten=new int[1]; final byte[] infoLogBytes = new byte[infoLogLength[0]]; gl.glGetProgramInfoLog(programObj, infoLogLength[0], charsWritten, 0, infoLogBytes, 0); return new String(infoLogBytes, 0, charsWritten[0]); }
public Optional<String> verify() { GL2ES2 gl = gc.getGL().getGL2ES2(); gl.glValidateProgram(programObject); int[] error = new int[]{-1}; gl.glGetProgramiv(programObject, GL2GL3.GL_LINK_STATUS, error, 0); if (error[0] == GL.GL_FALSE) { int[] len = new int[]{512}; byte[] errormessage = new byte[512]; gl.glGetProgramInfoLog(programObject, 512, len, 0, errormessage, 0); return Optional.of(new String(errormessage, 0, len[0])); } return Optional.absent(); }
public static CompiledShader fromShader(GraphicContext gc, ShaderProgramm prog) { GL2ES2 gl = gc.getGL().getGL2ES2(); int pid = prog.getPObject(); IntBuffer length = Buffers.newDirectIntBuffer(1); gl.glGetProgramiv(pid, GL2.GL_PROGRAM_BINARY_RETRIEVABLE_HINT, length); if (length.get(0) == GL.GL_FALSE) { throw new RuntimeException("The binary of this shader program is not retrievable(set PROGRAM_BINARY_RETRIEVABLE_HINT to true)!"); } gl.glGetProgramiv(pid, GL2.GL_PROGRAM_BINARY_LENGTH, length); IntBuffer format = Buffers.newDirectIntBuffer(1); ByteBuffer data = Buffers.newDirectByteBuffer(length.get(0)); gl.glGetProgramBinary(pid, length.get(0), length, format, data); if (gl.glGetError() == GL.GL_INVALID_OPERATION) { //invalid state can occure when program isn't linked or the buffer is to smale throw new RuntimeException("The given shader program is not in a valid state(not linked correctly)"); } return new CompiledShader(format.get(0), data); }
public static int linkProgram( GL2ES2 gl, int... shaders ) { int program = gl.glCreateProgram( ); for ( int s : shaders ) gl.glAttachShader( program, s ); try { gl.glLinkProgram( program ); int[] linkStatus = new int[ 1 ]; gl.glGetProgramiv( program, GL_LINK_STATUS, linkStatus, 0 ); if ( linkStatus[ 0 ] != GL_TRUE ) throw new RuntimeException( getProgramInfoLog( gl, program ) ); return program; } finally { for ( int s : shaders ) gl.glDetachShader( program, s ); } }
} else { if (gl.isGL2ES2()) { gl.getGL2ES2().glGetProgramiv(id, GL2ES2.GL_INFO_LOG_LENGTH, compiled);
} else { if (gl.isGL2ES2()) { gl.getGL2ES2().glGetProgramiv(programId, GL2ES2.GL_LINK_STATUS, compiled); } else { if (gl.isGL2ES2()) { gl.getGL2ES2().glGetProgramiv(programId, GL2ES2.GL_INFO_LOG_LENGTH, compiled);