46 lines
1.2 KiB
GLSL
46 lines
1.2 KiB
GLSL
uniform mat4 projection;
|
|
uniform mat4 view;
|
|
uniform vec3 objectPosition;
|
|
uniform vec3 objectScale;
|
|
uniform int charMapWidth;
|
|
uniform int charMapHeight;
|
|
|
|
uniform float charUVWidth;
|
|
uniform float charUVHeight;
|
|
|
|
in vec3 vertPosition;
|
|
in float charIndex;
|
|
in vec2 uvMod;
|
|
in float fgColorIndex;
|
|
in float bgColorIndex;
|
|
|
|
out vec2 texCoords;
|
|
out float theFgColorIndex;
|
|
out float theBgColorIndex;
|
|
|
|
mat4 scale(float x, float y, float z)
|
|
{
|
|
return mat4(
|
|
vec4(x, 0.0, 0.0, 0.0),
|
|
vec4(0.0, y, 0.0, 0.0),
|
|
vec4(0.0, 0.0, z, 0.0),
|
|
vec4(0.0, 0.0, 0.0, 1.0)
|
|
);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
vec4 model = vec4(vertPosition, 1);
|
|
model *= scale(objectScale.x, objectScale.y, objectScale.z);
|
|
model += vec4(objectPosition, 0);
|
|
gl_Position = projection * view * model;
|
|
// translate 1D character index into tile UV coordinates
|
|
// thanks Ian MacLarty, Sean Barrett and goldbuick for help with this!
|
|
float tileX = mod(charIndex, charMapWidth);
|
|
float tileY = charMapHeight - floor(charIndex / charMapWidth);
|
|
vec2 uv0 = vec2(tileX * charUVWidth, tileY * charUVHeight);
|
|
vec2 uv1 = vec2(uvMod.x * charUVWidth, uvMod.y * -charUVHeight);
|
|
texCoords = uv0 + uv1;
|
|
theFgColorIndex = fgColorIndex;
|
|
theBgColorIndex = bgColorIndex;
|
|
}
|