public interface Shader extends Disposable
Renderables. A Shader is responsible for the actual rendering of an
Renderable. Typically, when using OpenGL ES 2.0 or higher, it encapsulates a
ShaderProgramand takes care of all OpenGL calls necessary to render the
Renderable. When using OpenGL ES 1.x it takes care of the fixed pipeline. To start rendering the
begin(Camera, RenderContext)method must be called. After which the
end()method must be called to stop rendering. In between one or more calls to the
render(Renderable)method can be made to render a
render(Renderable)method must not be called before a call to
begin(Camera, RenderContext)or after a call to
end(). Each Shader needs exclusive access to the OpenGL state and
end()methods, therefore only one shader can be used at a time (they must not be nested). A specific Shader instance might be (and usually is) dedicated to a specific type of
Renderable. For example it might use a
ShaderProgramthat is compiled with uniforms (shader input) for specific
Attributetypes. Therefore the
canRender(Renderable)method can be used to check if the Shader instance can be used for a specific
Renderable. Rendering a
Renderableusing a Shader for which
canRender(Renderable)returns false might result in unpredicted behavior or crash the application. To manage multiple shaders and create a new shader when required, a
ShaderProvidercan be used. Therefore, in practice, a specific Shader implementation is usually accompanied by a specific
ShaderProviderimplementation (usually extending
BaseShaderProvider). When a Shader is constructed, the
init()method must be called before it can be used. Most commonly, the
init()method compiles the
ShaderProgram, fetches uniform locations and performs other preparations for usage of the Shader. When the shader is no longer needed, it must disposed using the
Disposable.dispose()method. This, for example, disposed (unloads for memory) the used
|Modifier and Type||Method and Description|
Initializes the context for exclusive rendering by this shader.
Checks whether this shader is intended to render the
Compare this shader against the other, used for sorting, light weight shaders are rendered first.
Cleanup the context so other shaders can render.
Initializes the Shader, must be called before the Shader can be used.
ShaderProgram, fetches uniform locations and performs other preparations for usage of the Shader.
int compareTo(Shader other)
boolean canRender(Renderable instance)
Renderable. Use this to make sure a call to the
render(Renderable)method will succeed. This is expected to be a fast, non-blocking method. Note that this method will only return true if it is intended to be used. Even when it returns false the Shader might still be capable of rendering, but it's not preferred to do so.
instance- The renderable to check against this shader.
Renderable, false otherwise.
void begin(Camera camera, RenderContext context)
render(Renderable)method to render a
Renderable. When done rendering the
end()method must be called.
camera- The camera to use when rendering
context- The context to be used, which must be exclusive available for the shader until the call to the
void render(Renderable renderable)
Renderable, must be called between
end(). The Shader instance might not be able to render every type of
Renderables. Use the
canRender(Renderable)method to check if the Shader is capable of rendering a specific
render(Renderable)method, which must be preceded by a call to
begin(Camera, RenderContext). After a call to this method an call to the
render(Renderable)method will fail until the
begin(Camera, RenderContext)is called.