public class ShaderProgram extends Object implements Disposable
A shader program encapsulates a vertex and fragment shader pair linked to form a shader program useable with OpenGL ES 2.0.
After construction a ShaderProgram can be used to draw Mesh
. To make the GPU use a specific ShaderProgram the programs
begin()
method must be used which effectively binds the program.
When a ShaderProgram is bound one can set uniforms, vertex attributes and attributes as needed via the respective methods.
A ShaderProgram can be unbound with a call to end()
A ShaderProgram 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.
Modifier and Type | Field and Description |
---|---|
static String |
BINORMAL_ATTRIBUTE
default name for binormal attribute
|
static String |
COLOR_ATTRIBUTE
default name for color attributes
|
static String |
NORMAL_ATTRIBUTE
default name for normal attributes
|
static boolean |
pedantic
flag indicating whether attributes & uniforms must be present at all times
|
static String |
POSITION_ATTRIBUTE
default name for position attributes
|
static String |
prependFragmentCode
code that is always added to every fragment shader code, typically used to inject a #version line.
|
static String |
prependVertexCode
code that is always added to the vertex shader code, typically used to inject a #version line.
|
static String |
TANGENT_ATTRIBUTE
default name for tangent attribute
|
static String |
TEXCOORD_ATTRIBUTE
default name for texcoords attributes, append texture unit number
|
Constructor and Description |
---|
ShaderProgram(FileHandle vertexShader,
FileHandle fragmentShader) |
ShaderProgram(String vertexShader,
String fragmentShader)
Constructs a new ShaderProgram and immediately compiles it.
|
Modifier and Type | Method and Description |
---|---|
void |
begin()
Makes OpenGL ES 2.0 use this vertex and fragment shader pair.
|
static void |
clearAllShaderPrograms(Application app) |
void |
disableVertexAttribute(int location) |
void |
disableVertexAttribute(String name)
Disables the vertex attribute with the given name
|
void |
dispose()
Disposes all resources associated with this shader.
|
void |
enableVertexAttribute(int location) |
void |
enableVertexAttribute(String name)
Enables the vertex attribute with the given name
|
void |
end()
Disables this shader.
|
int |
fetchUniformLocation(String name,
boolean pedantic) |
int |
getAttributeLocation(String name) |
String[] |
getAttributes() |
int |
getAttributeSize(String name) |
int |
getAttributeType(String name) |
String |
getFragmentShaderSource() |
String |
getLog() |
static String |
getManagedStatus() |
int |
getUniformLocation(String name) |
String[] |
getUniforms() |
int |
getUniformSize(String name) |
int |
getUniformType(String name) |
String |
getVertexShaderSource() |
boolean |
hasAttribute(String name) |
boolean |
hasUniform(String name) |
static void |
invalidateAllShaderPrograms(Application app)
Invalidates all shaders so the next time they are used new handles are generated
|
boolean |
isCompiled() |
void |
setAttributef(String name,
float value1,
float value2,
float value3,
float value4)
Sets the given attribute
|
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,
Color values) |
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,
Vector2 values) |
void |
setUniformf(int location,
Vector3 values) |
void |
setUniformf(String name,
Color values)
Sets the uniform with the given name.
|
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,
Vector2 values)
Sets the uniform with the given name.
|
void |
setUniformf(String name,
Vector3 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,
Matrix3 matrix) |
void |
setUniformMatrix(int location,
Matrix3 matrix,
boolean transpose) |
void |
setUniformMatrix(int location,
Matrix4 matrix) |
void |
setUniformMatrix(int location,
Matrix4 matrix,
boolean transpose) |
void |
setUniformMatrix(String name,
Matrix3 matrix)
Sets the uniform matrix with the given name.
|
void |
setUniformMatrix(String name,
Matrix3 matrix,
boolean transpose)
Sets the uniform matrix with the given name.
|
void |
setUniformMatrix(String name,
Matrix4 matrix)
Sets the uniform matrix with the given name.
|
void |
setUniformMatrix(String name,
Matrix4 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 |
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.
|
void |
setVertexAttribute(int location,
int size,
int type,
boolean normalize,
int stride,
Buffer buffer) |
void |
setVertexAttribute(int location,
int size,
int type,
boolean normalize,
int stride,
int offset) |
void |
setVertexAttribute(String name,
int size,
int type,
boolean normalize,
int stride,
Buffer buffer)
Sets the vertex attribute with the given name.
|
void |
setVertexAttribute(String name,
int size,
int type,
boolean normalize,
int stride,
int offset)
Sets the vertex attribute with the given name.
|
public static final String POSITION_ATTRIBUTE
public static final String NORMAL_ATTRIBUTE
public static final String COLOR_ATTRIBUTE
public static final String TEXCOORD_ATTRIBUTE
public static final String TANGENT_ATTRIBUTE
public static final String BINORMAL_ATTRIBUTE
public static boolean pedantic
public static String prependVertexCode
public static String prependFragmentCode
public ShaderProgram(String vertexShader, String fragmentShader)
vertexShader
- the vertex shaderfragmentShader
- the fragment shaderpublic ShaderProgram(FileHandle vertexShader, FileHandle fragmentShader)
public String getLog()
public boolean isCompiled()
public int fetchUniformLocation(String name, boolean pedantic)
public void setUniformi(String name, int value)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue
- the valuepublic void setUniformi(int location, int value)
public void setUniformi(String name, int value1, int value2)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuepublic void setUniformi(int location, int value1, int value2)
public void setUniformi(String name, int value1, int value2, int value3)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third valuepublic void setUniformi(int location, int value1, int value2, int value3)
public void setUniformi(String name, int value1, int value2, int value3, int value4)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third valuevalue4
- the fourth valuepublic void setUniformi(int location, int value1, int value2, int value3, int value4)
public void setUniformf(String name, float value)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue
- the valuepublic void setUniformf(int location, float value)
public void setUniformf(String name, float value1, float value2)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuepublic void setUniformf(int location, float value1, float value2)
public void setUniformf(String name, float value1, float value2, float value3)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third valuepublic void setUniformf(int location, float value1, float value2, float value3)
public void setUniformf(String name, float value1, float value2, float value3, float value4)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalue1
- the first valuevalue2
- the second valuevalue3
- the third valuevalue4
- the fourth valuepublic void setUniformf(int location, float value1, float value2, float value3, float value4)
public void setUniform1fv(String name, float[] values, int offset, int length)
public void setUniform1fv(int location, float[] values, int offset, int length)
public void setUniform2fv(String name, float[] values, int offset, int length)
public void setUniform2fv(int location, float[] values, int offset, int length)
public void setUniform3fv(String name, float[] values, int offset, int length)
public void setUniform3fv(int location, float[] values, int offset, int length)
public void setUniform4fv(String name, float[] values, int offset, int length)
public void setUniform4fv(int location, float[] values, int offset, int length)
public void setUniformMatrix(String name, Matrix4 matrix)
ShaderProgram
must be bound for this to work.name
- the name of the uniformmatrix
- the matrixpublic void setUniformMatrix(String name, Matrix4 matrix, boolean transpose)
ShaderProgram
must be bound for this to work.name
- the name of the uniformmatrix
- the matrixtranspose
- whether the matrix should be transposedpublic void setUniformMatrix(int location, Matrix4 matrix)
public void setUniformMatrix(int location, Matrix4 matrix, boolean transpose)
public void setUniformMatrix(String name, Matrix3 matrix)
ShaderProgram
must be bound for this to work.name
- the name of the uniformmatrix
- the matrixpublic void setUniformMatrix(String name, Matrix3 matrix, boolean transpose)
ShaderProgram
must be bound for this to work.name
- the name of the uniformmatrix
- the matrixtranspose
- whether the uniform matrix should be transposedpublic void setUniformMatrix(int location, Matrix3 matrix)
public void setUniformMatrix(int location, Matrix3 matrix, boolean transpose)
public void setUniformMatrix3fv(String name, FloatBuffer buffer, int count, boolean transpose)
ShaderProgram
must be bound for this to work.name
- the name of the uniformbuffer
- buffer containing the matrix datatranspose
- whether the uniform matrix should be transposedpublic void setUniformMatrix4fv(String name, FloatBuffer buffer, int count, boolean transpose)
ShaderProgram
must be bound for this to work.name
- the name of the uniformbuffer
- buffer containing the matrix datatranspose
- whether the uniform matrix should be transposedpublic void setUniformMatrix4fv(int location, float[] values, int offset, int length)
public void setUniformMatrix4fv(String name, float[] values, int offset, int length)
public void setUniformf(String name, Vector2 values)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalues
- x and y as the first and second values respectivelypublic void setUniformf(int location, Vector2 values)
public void setUniformf(String name, Vector3 values)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalues
- x, y and z as the first, second and third values respectivelypublic void setUniformf(int location, Vector3 values)
public void setUniformf(String name, Color values)
ShaderProgram
must be bound for this to work.name
- the name of the uniformvalues
- r, g, b and a as the first through fourth values respectivelypublic void setUniformf(int location, Color values)
public void setVertexAttribute(String name, int size, int type, boolean normalize, int stride, Buffer buffer)
ShaderProgram
must be bound for this to work.name
- the attribute namesize
- the number of components, must be >= 1 and <= 4type
- the type, must be one of GL20.GL_BYTE, GL20.GL_UNSIGNED_BYTE, GL20.GL_SHORT,
GL20.GL_UNSIGNED_SHORT,GL20.GL_FIXED, or GL20.GL_FLOAT. GL_FIXED will not work on the desktopnormalize
- whether fixed point data should be normalized. Will not work on the desktopstride
- the stride in bytes between successive attributesbuffer
- the buffer containing the vertex attributes.public void setVertexAttribute(int location, int size, int type, boolean normalize, int stride, Buffer buffer)
public void setVertexAttribute(String name, int size, int type, boolean normalize, int stride, int offset)
ShaderProgram
must be bound for this to work.name
- the attribute namesize
- the number of components, must be >= 1 and <= 4type
- the type, must be one of GL20.GL_BYTE, GL20.GL_UNSIGNED_BYTE, GL20.GL_SHORT,
GL20.GL_UNSIGNED_SHORT,GL20.GL_FIXED, or GL20.GL_FLOAT. GL_FIXED will not work on the desktopnormalize
- whether fixed point data should be normalized. Will not work on the desktopstride
- the stride in bytes between successive attributesoffset
- byte offset into the vertex buffer object bound to GL20.GL_ARRAY_BUFFER.public void setVertexAttribute(int location, int size, int type, boolean normalize, int stride, int offset)
public void begin()
end()
.public void end()
public void dispose()
dispose
in interface Disposable
public void disableVertexAttribute(String name)
name
- the vertex attribute namepublic void disableVertexAttribute(int location)
public void enableVertexAttribute(String name)
name
- the vertex attribute namepublic void enableVertexAttribute(int location)
public static void invalidateAllShaderPrograms(Application app)
app
- public static void clearAllShaderPrograms(Application app)
public static String getManagedStatus()
public void setAttributef(String name, float value1, float value2, float value3, float value4)
name
- the name of the attributevalue1
- the first valuevalue2
- the second valuevalue3
- the third valuevalue4
- the fourth valuepublic boolean hasAttribute(String name)
name
- the name of the attributepublic int getAttributeType(String name)
name
- the name of the attributeGL20.GL_FLOAT
, GL20.GL_FLOAT_VEC2
etc.public int getAttributeLocation(String name)
name
- the name of the attributepublic int getAttributeSize(String name)
name
- the name of the attributepublic boolean hasUniform(String name)
name
- the name of the uniformpublic int getUniformType(String name)
name
- the name of the uniformGL20.GL_FLOAT
, GL20.GL_FLOAT_VEC2
etc.public int getUniformLocation(String name)
name
- the name of the uniformpublic int getUniformSize(String name)
name
- the name of the uniformpublic String[] getAttributes()
public String[] getUniforms()
public String getVertexShaderSource()
public String getFragmentShaderSource()
Copyright © 2015. All rights reserved.