public static void detachShader(final GL _gl, final int program, final IntBuffer shaders) { final GL2ES2 gl = _gl.getGL2ES2(); for (int i = shaders.position(); i < shaders.limit(); i++) { gl.glDetachShader(program, shaders.get(i)); } }
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 ); } }
/** Removes the tessellation evaluation shader */ private static void removeTessEvalShader(final GLSLShaderObjectsState state) { final GL gl = GLContext.getCurrentGL(); if (state._tessellationEvaluationShaderID != -1) { if (gl.isGL2()) { gl.getGL2().glDetachObjectARB(state._programID, state._tessellationEvaluationShaderID); gl.getGL2().glDeleteObjectARB(state._tessellationEvaluationShaderID); } else { if (gl.isGL2ES2()) { gl.getGL2ES2().glDetachShader(state._programID, state._tessellationEvaluationShaderID); gl.getGL2ES2().glDeleteShader(state._tessellationEvaluationShaderID); } } } }
/** Removes the vertex shader */ private static void removeVertShader(final GLSLShaderObjectsState state) { final GL gl = GLContext.getCurrentGL(); if (state._vertexShaderID != -1) { if (gl.isGL2()) { gl.getGL2().glDetachObjectARB(state._programID, state._vertexShaderID); gl.getGL2().glDeleteObjectARB(state._vertexShaderID); } else { if (gl.isGL2ES2()) { gl.getGL2ES2().glDetachShader(state._programID, state._vertexShaderID); gl.getGL2ES2().glDeleteShader(state._vertexShaderID); } } } }
/** Removes the tessellation control shader */ private static void removeTessControlShader(final GLSLShaderObjectsState state) { final GL gl = GLContext.getCurrentGL(); if (state._tessellationControlShaderID != -1) { if (gl.isGL2()) { gl.getGL2().glDetachObjectARB(state._programID, state._tessellationControlShaderID); gl.getGL2().glDeleteObjectARB(state._tessellationControlShaderID); } else { if (gl.isGL2ES2()) { gl.getGL2ES2().glDetachShader(state._programID, state._tessellationControlShaderID); gl.getGL2ES2().glDeleteShader(state._tessellationControlShaderID); } } } }
/** Removes the fragment shader */ private static void removeFragShader(final GLSLShaderObjectsState state) { final GL gl = GLContext.getCurrentGL(); if (state._fragmentShaderID != -1) { if (gl.isGL2()) { gl.getGL2().glDetachObjectARB(state._programID, state._fragmentShaderID); gl.getGL2().glDeleteObjectARB(state._fragmentShaderID); } else { if (gl.isGL2ES2()) { gl.getGL2ES2().glDetachShader(state._programID, state._fragmentShaderID); gl.getGL2ES2().glDeleteShader(state._fragmentShaderID); } } } }
/** Removes the geometry shader */ private static void removeGeomShader(final GLSLShaderObjectsState state) { final GL gl = GLContext.getCurrentGL(); if (state._geometryShaderID != -1) { if (gl.isGL2()) { gl.getGL2().glDetachObjectARB(state._programID, state._geometryShaderID); gl.getGL2().glDeleteObjectARB(state._geometryShaderID); } else { if (gl.isGL2ES2()) { gl.getGL2ES2().glDetachShader(state._programID, state._geometryShaderID); gl.getGL2ES2().glDeleteShader(state._geometryShaderID); } } } }