Package com.google.android.exoplayer2.util

## Class GlProgram

- java.lang.Object
- - com.google.android.exoplayer2.util.GlProgram

-     public final class GlProgram
      extends Object

  Represents a GLSL shader program.

  After constructing a program, keep a reference for its lifetime and call `delete()` (or release the current GL context) when it's no longer needed.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `GlProgram​(Context context, String vertexShaderFilePath, String fragmentShaderFilePath)` | Compiles a GL shader program from vertex and fragment shader GLSL GLES20 code.
    `GlProgram​(String vertexShaderGlsl, String fragmentShaderGlsl)` | Creates a GL shader program from vertex and fragment shader GLSL GLES20 code.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `bindAttributesAndUniforms()` | Binds all attributes and uniforms in the program.
    `void` | `delete()` | Deletes the program.
    `int` | `getAttributeArrayLocationAndEnable​(String attributeName)` | Returns the location of an `GlProgram.Attribute`, which has been enabled as a vertex attribute array.
    `int` | `getUniformLocation​(String uniformName)` | Returns the location of a `GlProgram.Uniform`.
    `static String` | `loadAsset​(Context context, String assetPath)` | Loads a file from the assets folder.
    `void` | `setBufferAttribute​(String name, float[] values, int size)` | Sets a float buffer type attribute.
    `void` | `setFloatsUniform​(String name, float[] value)` | Sets a `float[]` type uniform.
    `void` | `setFloatUniform​(String name, float value)` | Sets a `float` type uniform.
    `void` | `setIntUniform​(String name, int value)` | Sets an `int` type uniform.
    `void` | `setSamplerTexIdUniform​(String name, int texId, int texUnitIndex)` | Sets a texture sampler type uniform.
    `void` | `use()` | Uses the program.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### GlProgram

          public GlProgram​(Context context,
                           String vertexShaderFilePath,
                           String fragmentShaderFilePath)
                    throws IOException,
                           GlUtil.GlException

      Compiles a GL shader program from vertex and fragment shader GLSL GLES20 code.
      Parameters:
        `context` - The `Context`.
        `vertexShaderFilePath` - The path to a vertex shader program.
        `fragmentShaderFilePath` - The path to a fragment shader program.
      Throws:
        `IOException` - When failing to read shader files.
        `GlUtil.GlException`

    - #### GlProgram

          public GlProgram​(String vertexShaderGlsl,
                           String fragmentShaderGlsl)
                    throws GlUtil.GlException

      Creates a GL shader program from vertex and fragment shader GLSL GLES20 code.

      This involves slow steps, like compiling, linking, and switching the GL program, so do not call this in fast rendering loops.

      Parameters:
        `vertexShaderGlsl` - The vertex shader program.
        `fragmentShaderGlsl` - The fragment shader program.
      Throws:
        `GlUtil.GlException`

  - ### Method Detail

    - #### loadAsset

          public static String loadAsset​(Context context,
                                         String assetPath)
                                  throws IOException

      Loads a file from the assets folder.
      Parameters:
        `context` - The `Context`.
        `assetPath` - The path to the file to load, from the assets folder.
      Returns:
        The content of the file to load.
      Throws:
        `IOException` - If the file couldn't be read.

    - #### getUniformLocation

          public int getUniformLocation​(String uniformName)

      Returns the location of a `GlProgram.Uniform`.

    - #### use

          public void use()
                   throws GlUtil.GlException

      Uses the program.

      Call this in the rendering loop to switch between different programs.

      Throws:
        `GlUtil.GlException`

    - #### delete

          public void delete()
                      throws GlUtil.GlException

      Deletes the program. Deleted programs cannot be used again.
      Throws:
        `GlUtil.GlException`

    - #### getAttributeArrayLocationAndEnable

          public int getAttributeArrayLocationAndEnable​(String attributeName)
                                                 throws GlUtil.GlException

      Returns the location of an `GlProgram.Attribute`, which has been enabled as a vertex attribute array.
      Throws:
        `GlUtil.GlException`

    - #### setBufferAttribute

          public void setBufferAttribute​(String name,
                                         float[] values,
                                         int size)

      Sets a float buffer type attribute.

    - #### setSamplerTexIdUniform

          public void setSamplerTexIdUniform​(String name,
                                             int texId,
                                             int texUnitIndex)

      Sets a texture sampler type uniform.
      Parameters:
        `name` - The uniform's name.
        `texId` - The texture identifier.
        `texUnitIndex` - The texture unit index. Use a different index (0, 1, 2, ...) for each texture sampler in the program.

    - #### setIntUniform

          public void setIntUniform​(String name,
                                    int value)

      Sets an `int` type uniform.

    - #### setFloatUniform

          public void setFloatUniform​(String name,
                                      float value)

      Sets a `float` type uniform.

    - #### setFloatsUniform

          public void setFloatsUniform​(String name,
                                       float[] value)

      Sets a `float[]` type uniform.

    - #### bindAttributesAndUniforms

          public void bindAttributesAndUniforms()
                                         throws GlUtil.GlException

      Binds all attributes and uniforms in the program.
      Throws:
        `GlUtil.GlException`