Class ShaderProgram


  • public final class ShaderProgram
    extends Object
    • Constructor Detail

      • ShaderProgram

        public ShaderProgram()
    • Method Detail

      • linked

        public boolean linked()
      • inUse

        public boolean inUse()
      • program

        public int program()
        Returns the shader program name, which is non zero if valid.
      • id

        public int id()
        returns the uniq shader id as an integer
      • destroy

        public void destroy​(GL2ES2 gl)
        Detaches all shader codes and deletes the program. Destroys the shader codes as well. Calls release(gl, true)
        See Also:
        release(GL2ES2, boolean)
      • release

        public void release​(GL2ES2 gl)
        Detaches all shader codes and deletes the program, but leaves the shader code intact. Calls release(gl, false)
        See Also:
        release(GL2ES2, boolean)
      • release

        public void release​(GL2ES2 gl,
                            boolean destroyShaderCode)
        Detaches all shader codes and deletes the program. If destroyShaderCode is true it destroys the shader codes as well.
      • add

        public void add​(ShaderCode shaderCode)
                 throws GLException
        Adds a new shader to this program.

        This command does not compile and attach the shader, use #add(GL2ES2, ShaderCode) for this purpose.

        Throws:
        GLException
      • contains

        public boolean contains​(ShaderCode shaderCode)
      • getShader

        public ShaderCode getShader​(int id)
        Warning slow O(n) operation ..
        Parameters:
        id -
        Returns:
      • init

        public final boolean init​(GL2ES2 gl)
        Creates the empty GL program object using GL2ES2.glCreateProgram(), if not already created.
        Parameters:
        gl -
        Returns:
        true if shader program is valid, i.e. not zero
      • add

        public boolean add​(GL2ES2 gl,
                           ShaderCode shaderCode,
                           PrintStream verboseOut)
        Adds a new shader to a this non running program.

        Compiles and attaches the shader, if not done yet.

        Returns:
        true if the shader was successfully added, false if compilation failed.
      • replaceShader

        public boolean replaceShader​(GL2ES2 gl,
                                     ShaderCode oldShader,
                                     ShaderCode newShader,
                                     PrintStream verboseOut)
        Replace a shader in a program and re-links the program.
        Parameters:
        gl -
        oldShader - the to be replace Shader
        newShader - the new ShaderCode
        verboseOut - the optional verbose output stream
        Returns:
        true if all steps are valid, shader compilation, attachment and linking; otherwise false.
        See Also:
        ShaderState#glEnableVertexAttribArray, ShaderState#glDisableVertexAttribArray, ShaderState#glVertexAttribPointer, ShaderState#getVertexAttribPointer, ShaderState#glReleaseAllVertexAttributes, ShaderState#glResetAllVertexAttributes, ShaderState#glResetAllVertexAttributes, ShaderState#glResetAllVertexAttributes
      • link

        public boolean link​(GL2ES2 gl,
                            PrintStream verboseOut)
        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.

        Parameters:
        gl -
        verboseOut -
        Returns:
        true if program was successfully linked and is valid, otherwise false
        See Also:
        init(GL2ES2)
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • useProgram

        public void useProgram​(GL2ES2 gl,
                               boolean on)
      • notifyNotInUse

        public void notifyNotInUse()
      • dumpSource

        public void dumpSource​(PrintStream out)