Shaders
The active shaders should be located in the contents/files/shaders folder. There are four shaders that can be used. The outputs of the base shaders are sent to the final shaders in the form of textures.
base.vsh
base.fsh
This shader is the basic fragment shader.
final.vsh
This shader is a vertex shader for a quad that will display the final scene.
Pre-processor Defines
Base Defines
_ENABLE_GL_TEXTURE_2D
Defined when the shader should use a texture.
A basic fragment shader should calculate gl_FragColor something like this:
#ifdef _ENABLE_GL_TEXTURE_2D gl_FragColor = texture2D(sampler0, gl_TexCoord[0].st) * vertColor; #else gl_FragColor = vertColor; #endif
_ENABLE_BUMP_MAPPING
Defined when a normal map and specular map have been bound.
Structures
lightSource
struct lightSource { int itemId; float magnitude; vec4 specular; };
Attributes
vec4 mc_Entity
mc_Entity.x
The x component of mc_Entity is the entity id. Currently this is only set for blocks. In future updates it will be set for items and mobs. It will have a value of -1.0 for unknown entities.
mc_Entity.y
The y component of mc_Entity contains information regarding lighting. It is currently calculated as lightValue * 16 + brightness. In future updates other additions may be made to this (such as the sides exposed to the sky).
In the shaders, lightValue can be obtained by mod(floor(mc_Entity.y / 16.0), 16.0). brightness can be obtained by mod(mc_Entity.y, 16.0).
mc_Entity.z
Reserved
mc_Entity.w
Reserved
Uniforms
There are several uniforms available to the shaders.
Global Uniforms
float displayWidth
The width of the display.
float displayHeight
The height of the display.
float aspectRatio
The aspect ratio of the display (displayWidth / displayHeight).
float near
The near viewing plane.
float far
The far viewing plane.
int fogMode
The current fog mode. The possible values are as follows:
const int GL_LINEAR = 9729; const int GL_EXP = 2048;
float sunVector
The position of the sun in eye coordinates.
float moonVector
The position of the moon in eye coordinates.
int worldTime
The world time of day (ranges from 0 to 23999).
lightSource heldLight
The properties of the item currently being held.
Base Uniforms
sampler2D sampler0
The texture of the current element.
sampler2D sampler1
The normals and height-map for the current texture (loaded from XXXXX_nh.png). At the moment this is only accurate when renderType is equal to RENDER_TYPE_TERRAIN.
int renderType - Deprecated, don't use.
The type of element being rendered. The possible values are as follows:
const int RENDER_TYPE_UNKNOWN = 0; const int RENDER_TYPE_TERRAIN = 1;
Final Uniforms
sampler2D sampler0
The rendered scene.
sampler2D sampler1
The depth of the rendered scene, excluding the player's arm.
sampler2D sampler2
The depth of the player's arm.
Tips
Anti-Aliasing
To avoid anti-aliasing on polygon edges, texture coordinates should be declared as centroid in the base vertex and fragment shaders.