Class Shader
- All Implemented Interfaces:
Disposable
- Direct Known Subclasses:
Shaders.LoadShader
,Shaders.SurfaceShader
A shader program encapsulates a vertex and fragment shader pair linked to form a shader program.
After construction a Shader can be used to draw Mesh
. To make the GPU use a specific Shader the programs
bind()
method must be used which effectively binds the program.
When a Shader is bound one can set uniforms, vertex attributes and attributes as needed via the respective methods.
A Shader must be disposed via a call to dispose()
when it is no longer needed
ShaderPrograms are managed. In case the OpenGL context is lost all shaders get invalidated and have to be reloaded. This happens on Android when a user switches to another application or receives an incoming call. Managed ShaderPrograms are automatically reloaded when the OpenGL context is recreated so you don't have to do this manually.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
default name for color attributesstatic final String
default name for mix color attributesstatic final String
default name for normal attributesstatic boolean
flag indicating whether attributes & uniforms must be present at all timesstatic final String
default name for position attributesstatic String
code that is always added to every fragment shader code, typically used to inject a #version line.static String
code that is always added to the vertex shader code, typically used to inject a #version line.static final String
default name for texcoords attributes, append texture unit number -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
apply()
Applies all relevant uniforms, if applicable.void
bind()
Makes OpenGL ES 2.0 use this vertex and fragment shader pair.static float[]
copyTransform
(Mat matrix) static float[]
copyTransform
(Mat matrix, float near, float far) protected int
void
disableVertexAttribute
(String name) Disables the vertex attribute with the given namevoid
dispose()
Disposes all resources associated with this shader.int
fetchUniformLocation
(String name, boolean pedantic) int
getAttributeLocation
(String name) String[]
int
getAttributeSize
(String name) int
getAttributeType
(String name) getLog()
int
getUniformLocation
(String name) String[]
int
getUniformSize
(String name) int
getUniformType
(String name) boolean
hasAttribute
(String name) boolean
hasUniform
(String name) boolean
boolean
protected String
preprocess
(String source, boolean fragment) void
setUniform1fv
(int location, float[] values, int offset, int length) void
setUniform1fv
(String name, float[] values, int offset, int length) void
setUniform2fv
(int location, float[] values, int offset, int length) void
setUniform2fv
(String name, float[] values, int offset, int length) void
setUniform3fv
(int location, float[] values, int offset, int length) void
setUniform3fv
(String name, float[] values, int offset, int length) void
setUniform4fv
(int location, float[] values, int offset, int length) void
setUniform4fv
(String name, float[] values, int offset, int length) void
setUniformf
(int location, float value) void
setUniformf
(int location, float value1, float value2) void
setUniformf
(int location, float value1, float value2, float value3) void
setUniformf
(int location, float value1, float value2, float value3, float value4) void
setUniformf
(int location, Color values) void
setUniformf
(int location, Vec2 values) void
setUniformf
(int location, Vec3 values) void
setUniformf
(String name, float value) Sets the uniform with the given name.void
setUniformf
(String name, float value1, float value2) Sets the uniform with the given name.void
setUniformf
(String name, float value1, float value2, float value3) Sets the uniform with the given name.void
setUniformf
(String name, float value1, float value2, float value3, float value4) Sets the uniform with the given name.void
setUniformf
(String name, Color values) Sets the uniform with the given name.void
setUniformf
(String name, Vec2 values) Sets the uniform with the given name.void
setUniformf
(String name, Vec3 values) Sets the uniform with the given name.void
setUniformi
(int location, int value) void
setUniformi
(int location, int value1, int value2) void
setUniformi
(int location, int value1, int value2, int value3) void
setUniformi
(int location, int value1, int value2, int value3, int value4) void
setUniformi
(String name, int value) Sets the uniform with the given name.void
setUniformi
(String name, int value1, int value2) Sets the uniform with the given name.void
setUniformi
(String name, int value1, int value2, int value3) Sets the uniform with the given name.void
setUniformi
(String name, int value1, int value2, int value3, int value4) Sets the uniform with the given name.void
setUniformMatrix
(int location, Mat matrix) void
setUniformMatrix
(int location, Mat matrix, boolean transpose) void
setUniformMatrix
(String name, Mat matrix) Sets the uniform matrix with the given name.void
setUniformMatrix
(String name, Mat matrix, boolean transpose) Sets the uniform matrix with the given name.void
setUniformMatrix3fv
(String name, FloatBuffer buffer, int count, boolean transpose) Sets an array of uniform matrices with the given name.void
setUniformMatrix4
(String name, float[] val) void
setUniformMatrix4
(String name, Mat mat) void
setUniformMatrix4
(String name, Mat mat, float near, float far) void
setUniformMatrix4fv
(int location, float[] values, int offset, int length) void
setUniformMatrix4fv
(String name, float[] values, int offset, int length) void
setUniformMatrix4fv
(String name, FloatBuffer buffer, int count, boolean transpose) Sets an array of uniform matrices with the given name.
-
Field Details
-
positionAttribute
default name for position attributes- See Also:
-
normalAttribute
default name for normal attributes- See Also:
-
colorAttribute
default name for color attributes- See Also:
-
mixColorAttribute
default name for mix color attributes- See Also:
-
texcoordAttribute
default name for texcoords attributes, append texture unit number- See Also:
-
pedantic
public static boolean pedanticflag indicating whether attributes & uniforms must be present at all times -
prependVertexCode
code that is always added to the vertex shader code, typically used to inject a #version line. Note that this is added as-is, you should include a newline (`\n`) if needed. -
prependFragmentCode
code that is always added to every fragment shader code, typically used to inject a #version line. Note that this is added as-is, you should include a newline (`\n`) if needed.
-
-
Constructor Details
-
Shader
Constructs a new Shader and immediately compiles it.- Parameters:
vertexShader
- the vertex shaderfragmentShader
- the fragment shader
-
Shader
-
-
Method Details
-
apply
public void apply()Applies all relevant uniforms, if applicable. Should be overridden. -
preprocess
-
createProgram
protected int createProgram() -
getLog
- Returns:
- the log info for the shader compilation and program linking stage. The shader needs to be bound for this method to have an effect.
-
isCompiled
public boolean isCompiled()- Returns:
- whether this Shader compiled successfully.
-
fetchUniformLocation
-
setUniformi
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue
- the value
-
setUniformi
public void setUniformi(int location, int value) -
setUniformi
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue1
- the first valuevalue2
- the second value
-
setUniformi
public void setUniformi(int location, int value1, int value2) -
setUniformi
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third value
-
setUniformi
public void setUniformi(int location, int value1, int value2, int value3) -
setUniformi
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third valuevalue4
- the fourth value
-
setUniformi
public void setUniformi(int location, int value1, int value2, int value3, int value4) -
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue
- the value
-
setUniformf
public void setUniformf(int location, float value) -
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue1
- the first valuevalue2
- the second value
-
setUniformf
public void setUniformf(int location, float value1, float value2) -
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third value
-
setUniformf
public void setUniformf(int location, float value1, float value2, float value3) -
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third valuevalue4
- the fourth value
-
setUniformf
public void setUniformf(int location, float value1, float value2, float value3, float value4) -
setUniform1fv
-
setUniform1fv
public void setUniform1fv(int location, float[] values, int offset, int length) -
setUniform2fv
-
setUniform2fv
public void setUniform2fv(int location, float[] values, int offset, int length) -
setUniform3fv
-
setUniform3fv
public void setUniform3fv(int location, float[] values, int offset, int length) -
setUniform4fv
-
setUniform4fv
public void setUniform4fv(int location, float[] values, int offset, int length) -
setUniformMatrix
Sets the uniform matrix with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformmatrix
- the matrix
-
setUniformMatrix
Sets the uniform matrix with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformmatrix
- the matrixtranspose
- whether the uniform matrix should be transposed
-
setUniformMatrix
-
setUniformMatrix
-
setUniformMatrix4
-
setUniformMatrix4
-
setUniformMatrix4
-
setUniformMatrix3fv
Sets an array of uniform matrices with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformbuffer
- buffer containing the matrix datatranspose
- whether the uniform matrix should be transposed
-
setUniformMatrix4fv
Sets an array of uniform matrices with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformbuffer
- buffer containing the matrix datatranspose
- whether the uniform matrix should be transposed
-
setUniformMatrix4fv
public void setUniformMatrix4fv(int location, float[] values, int offset, int length) -
setUniformMatrix4fv
-
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalues
- x and y as the first and second values respectively
-
setUniformf
-
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalues
- x, y and z as the first, second and third values respectively
-
setUniformf
-
setUniformf
Sets the uniform with the given name. TheShader
must be bound for this to work.- Parameters:
name
- the name of the uniformvalues
- r, g, b and a as the first through fourth values respectively
-
setUniformf
-
bind
public void bind()Makes OpenGL ES 2.0 use this vertex and fragment shader pair. -
dispose
public void dispose()Disposes all resources associated with this shader. Must be called when the shader is no longer used.- Specified by:
dispose
in interfaceDisposable
-
isDisposed
public boolean isDisposed()- Specified by:
isDisposed
in interfaceDisposable
-
disableVertexAttribute
Disables the vertex attribute with the given name- Parameters:
name
- the vertex attribute name
-
hasAttribute
- Parameters:
name
- the name of the attribute- Returns:
- whether the attribute is available in the shader
-
getAttributeType
- Parameters:
name
- the name of the attribute- Returns:
- the type of the attribute, one of
GL20.GL_FLOAT
,GL20.GL_FLOAT_VEC2
etc.
-
getAttributeLocation
- Parameters:
name
- the name of the attribute- Returns:
- the location of the attribute or -1.
-
getAttributeSize
- Parameters:
name
- the name of the attribute- Returns:
- the size of the attribute or 0.
-
hasUniform
- Parameters:
name
- the name of the uniform- Returns:
- whether the uniform is available in the shader
-
getUniformType
- Parameters:
name
- the name of the uniform- Returns:
- the type of the uniform, one of
GL20.GL_FLOAT
,GL20.GL_FLOAT_VEC2
etc.
-
getUniformLocation
- Parameters:
name
- the name of the uniform- Returns:
- the location of the uniform or -1.
-
getUniformSize
- Parameters:
name
- the name of the uniform- Returns:
- the size of the uniform or 0.
-
getAttributes
- Returns:
- the attributes
-
getUniforms
- Returns:
- the uniforms
-
getVertexShaderSource
- Returns:
- the source of the vertex shader
-
getFragmentShaderSource
- Returns:
- the source of the fragment shader
-
copyTransform
-
copyTransform
-