destroyShaderCode
is true it destroys the shader codes as well.
*/
public synchronized void release(GL2ES2 gl, boolean destroyShaderCode) {
useProgram(gl, false);
for(IteratorThis command does not compile and attach the shader, * use {@link #add(GL2ES2, ShaderCode)} for this purpose.
*/ public synchronized void add(ShaderCode shaderCode) throws GLException { allShaderCode.add(shaderCode); } public synchronized boolean contains(ShaderCode shaderCode) { return allShaderCode.contains(shaderCode); } /** * Warning slow O(n) operation .. * @param id * @return */ public synchronized ShaderCode getShader(int id) { for(IteratorCompiles and attaches the shader, if not done yet.
* * @return true if the shader was successfully added, false if compilation failed. */ public synchronized boolean add(GL2ES2 gl, ShaderCode shaderCode, PrintStream verboseOut) { init(gl); if( allShaderCode.add(shaderCode) ) { if(!shaderCode.compile(gl, verboseOut)) { return false; } if(attachedShaderCode.add(shaderCode)) { ShaderUtil.attachShader(gl, shaderProgram, shaderCode.shader()); } } return true; } /** * Replace a shader in a program and re-links the program. * * @param gl * @param oldShader the to be replace Shader * @param newShader the new ShaderCode * @param verboseOut the optional verbose output stream * * @return true if all steps are valid, shader compilation, attachment and linking; otherwise false. * * @see ShaderState#glEnableVertexAttribArray * @see ShaderState#glDisableVertexAttribArray * @see ShaderState#glVertexAttribPointer * @see ShaderState#getVertexAttribPointer * @see ShaderState#glReleaseAllVertexAttributes * @see ShaderState#glResetAllVertexAttributes * @see ShaderState#glResetAllVertexAttributes * @see ShaderState#glResetAllVertexAttributes */ public synchronized boolean replaceShader(GL2ES2 gl, ShaderCode oldShader, ShaderCode newShader, PrintStream verboseOut) { init(gl); if(!newShader.compile(gl, verboseOut)) { return false; } boolean shaderWasInUse = inUse(); if(shaderWasInUse) { useProgram(gl, false); } if(null != oldShader && allShaderCode.remove(oldShader)) { if(attachedShaderCode.remove(oldShader)) { ShaderUtil.detachShader(gl, shaderProgram, oldShader.shader()); } } add(newShader); if(attachedShaderCode.add(newShader)) { ShaderUtil.attachShader(gl, shaderProgram, newShader.shader()); } gl.glLinkProgram(shaderProgram); programLinked = ShaderUtil.isProgramValid(gl, shaderProgram, System.err); if ( programLinked && shaderWasInUse ) { useProgram(gl, true); } return programLinked; } /** * Links the shader code to the program. * *Compiles and attaches the shader code to the program if not done by yet
* *Within this process, all GL resources (shader and program objects) are created if necessary.
* * @param gl * @param verboseOut * @return true if program was successfully linked and is valid, otherwise false * * @see #init(GL2ES2) */ public synchronized boolean link(GL2ES2 gl, PrintStream verboseOut) { init(gl); for(Iterator