Interface IntShader
-
- All Superinterfaces:
com.badlogic.gdx.utils.Disposable
- All Known Implementing Classes:
AtmosphereShader
,BaseIntShader
,DefaultIntShader
,DepthIntShader
,GroundShader
,RelativisticShader
,TessellationShader
public interface IntShader extends com.badlogic.gdx.utils.Disposable
Interface which is used to render one or moreIntRenderable
s. A IntShader is responsible for the actual rendering of anIntRenderable
. Typically, when using OpenGL ES 2.0 or higher, it encapsulates aShaderProgram
and takes care of all OpenGL calls necessary to render theIntRenderable
. When using OpenGL ES 1.x it takes care of the fixed pipeline. To start rendering thebegin(Camera, RenderContext)
method must be called. After which theend()
method must be called to stop rendering. In between one or more calls to therender(IntRenderable)
method can be made to render aIntRenderable
. Therender(IntRenderable)
method must not be called before a call tobegin(Camera, RenderContext)
or after a call toend()
. Each IntShader needs exclusive access to the OpenGL state andRenderContext
between thebegin(Camera, RenderContext)
andend()
methods, therefore only one shader can be used at a time (they must not be nested). A specific IntShader instance might be (and usually is) dedicated to a specific type ofIntRenderable
. For example it might use aShaderProgram
that is compiled with uniforms (shader input) for specificAttribute
types. Therefore thecanRender(IntRenderable)
method can be used to check if the IntShader instance can be used for a specificIntRenderable
. Rendering aIntRenderable
using a IntShader for whichcanRender(IntRenderable)
returns false might result in unpredicted behavior or crash the application. To manage multiple shaders and create a new shader when required, aShaderProvider
can be used. Therefore, in practice, a specific IntShader implementation is usually accompanied by a specificShaderProvider
implementation (usually extendingBaseShaderProvider
). When a IntShader is constructed, theinit()
method must be called before it can be used. Most commonly, theinit()
method compiles theShaderProgram
, fetches uniform locations and performs other preparations for usage of the IntShader. When the shader is no longer needed, it must disposed using theDisposable.dispose()
method. This, for example, disposed (unloads for memory) the usedShaderProgram
.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
begin(com.badlogic.gdx.graphics.Camera camera, com.badlogic.gdx.graphics.g3d.utils.RenderContext context)
Initializes the context for exclusive rendering by this shader.boolean
canRender(IntRenderable instance)
Checks whether this shader is intended to render theIntRenderable
.int
compareTo(IntShader other)
Compare this shader against the other, used for sorting, light weight shaders are rendered first.void
end()
Cleanup the context so other shaders can render.void
init()
Initializes the IntShader, must be called before the IntShader can be used.void
render(IntRenderable renderable)
-
-
-
Method Detail
-
init
void init()
Initializes the IntShader, must be called before the IntShader can be used. This typically compiles aShaderProgram
, fetches uniform locations and performs other preparations for usage of the IntShader.
-
compareTo
int compareTo(IntShader other)
Compare this shader against the other, used for sorting, light weight shaders are rendered first.
-
canRender
boolean canRender(IntRenderable instance)
Checks whether this shader is intended to render theIntRenderable
. Use this to make sure a call to therender(IntRenderable)
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 IntShader might still be capable of rendering, but it's not preferred to do so.- Parameters:
instance
- The renderable to check against this shader.- Returns:
- true if this shader is intended to render the
IntRenderable
, false otherwise.
-
begin
void begin(com.badlogic.gdx.graphics.Camera camera, com.badlogic.gdx.graphics.g3d.utils.RenderContext context)
Initializes the context for exclusive rendering by this shader. Use therender(IntRenderable)
method to render aIntRenderable
. When done rendering theend()
method must be called.- Parameters:
camera
- The camera to use when renderingcontext
- The context to be used, which must be exclusive available for the shader until the call to theend()
method.
-
render
void render(IntRenderable renderable)
Renders theIntRenderable
, must be called betweenbegin(Camera, RenderContext)
andend()
. The IntShader instance might not be able to render every type ofIntRenderable
s. Use thecanRender(IntRenderable)
method to check if the IntShader is capable of rendering a specificIntRenderable
.- Parameters:
renderable
- The renderable to render, all required fields (e.g.IntRenderable.material
and others) must be set. TheIntRenderable.shader
field will be ignored.
-
end
void end()
Cleanup the context so other shaders can render. Must be called when done rendering using therender(IntRenderable)
method, which must be preceded by a call tobegin(Camera, RenderContext)
. After a call to this method an call to therender(IntRenderable)
method will fail until thebegin(Camera, RenderContext)
is called.
-
-