65 lines
1.9 KiB
GLSL
65 lines
1.9 KiB
GLSL
#version {VERSION}
|
|
|
|
uniform vec3 Scroll;
|
|
uniform vec3 p1, p2;
|
|
uniform float PaletteRows;
|
|
|
|
in vec3 aVertexPosition;
|
|
in vec4 aVertexTexCoord;
|
|
in uint aVertexAttributes;
|
|
in vec4 aVertexTint;
|
|
|
|
out vec4 vTexCoord;
|
|
flat out float vTexPalette;
|
|
flat out vec4 vChannelMask;
|
|
flat out uint vChannelSampler;
|
|
flat out uint vChannelType;
|
|
flat out vec4 vDepthMask;
|
|
flat out uint vDepthSampler;
|
|
out vec4 vTint;
|
|
|
|
vec4 SelectChannelMask(uint x)
|
|
{
|
|
switch (x)
|
|
{
|
|
case 7u:
|
|
return vec4(0.0, 0.0, 0.0, 1.0);
|
|
case 5u:
|
|
return vec4(0.0, 0.0, 1.0, 0.0);
|
|
case 3u:
|
|
return vec4(0, 1.0, 0.0, 0.0);
|
|
case 2u:
|
|
return vec4(1.0, 1.0, 1.0, 1.0);
|
|
case 1u:
|
|
return vec4(1.0, 0.0, 0.0, 0.0);
|
|
default:
|
|
return vec4(0.0, 0.0, 0.0, 0.0);
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
gl_Position = vec4((aVertexPosition - Scroll) * p1 + p2, 1);
|
|
vTexCoord = aVertexTexCoord;
|
|
|
|
// aVertexAttributes is a packed bitfield, where:
|
|
// Bits 0-2 define the behaviour of the primary texture channel:
|
|
// 000: Channel is not used (aVertexTexCoord instead defines a color value)
|
|
// 010: Sample RGBA sprite from all four channels
|
|
// 001, 011, 101, 111: Sample paletted sprite from channel R,G,B,A
|
|
// Bits 3-5 define the behaviour of the secondary texture channel:
|
|
// 000: Channel is not used
|
|
// 001, 011, 101, 111: Sample depth sprite from channel R,G,B,A
|
|
// Bits 6-8 define the sampler index (0-7) that the primary texture is bound to
|
|
// Bits 9-11 define the sampler index (0-7) that the secondary texture is bound to
|
|
// Bits 16-31 define the palette row for paletted sprites
|
|
vChannelType = aVertexAttributes & 0x07u;
|
|
vChannelMask = SelectChannelMask(vChannelType);
|
|
vDepthMask = SelectChannelMask((aVertexAttributes >> 3) & 0x07u);
|
|
vChannelSampler = (aVertexAttributes >> 6) & 0x07u;
|
|
vDepthSampler = (aVertexAttributes >> 9) & 0x07u;
|
|
vTexPalette = float(aVertexAttributes >> 16) / PaletteRows;
|
|
|
|
vTint = aVertexTint;
|
|
}
|