public static void deleteShader(final GL _gl, final IntBuffer shaders) { final GL2ES2 gl = _gl.getGL2ES2(); for (int i = shaders.position(); i < shaders.limit(); i++) { gl.glDeleteShader(shaders.get(i)); } }
/** 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); } } } }
public static int createProgram( GL2ES2 gl, String vertSource, String geomSource, String fragSource ) { IntsArray shaders = new IntsArray( ); try { if ( vertSource != null ) shaders.append( compileShader( gl, GL_VERTEX_SHADER, vertSource ) ); if ( geomSource != null ) shaders.append( compileShader( gl, GL_GEOMETRY_SHADER, geomSource ) ); if ( fragSource != null ) shaders.append( compileShader( gl, GL_FRAGMENT_SHADER, fragSource ) ); return linkProgram( gl, shaders.a ); } finally { for ( int i = 0; i < shaders.n; i++ ) { gl.glDeleteShader( shaders.v( i ) ); } } }
/** 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); } } } }