2024-09-19 21:33:32 +01:00
|
|
|
#version 330
|
|
|
|
|
|
|
|
|
|
in vec3 vertexPosition;
|
|
|
|
|
in vec2 vertexTexCoord;
|
2025-04-14 20:29:41 +01:00
|
|
|
in vec3 vertexNormal;
|
|
|
|
|
in vec2 vertexTileTexCoord;
|
|
|
|
|
in vec4 vertexMetadata1;
|
2024-09-19 21:33:32 +01:00
|
|
|
|
|
|
|
|
out vec2 fragTexCoord;
|
2025-04-14 20:29:41 +01:00
|
|
|
out vec3 fragNormal;
|
|
|
|
|
out vec2 fragTileTexCoord;
|
2024-09-19 21:33:32 +01:00
|
|
|
|
2024-12-23 18:45:07 +00:00
|
|
|
flat out int ambientOcclusionSide1;
|
|
|
|
|
flat out int ambientOcclusionSide2;
|
|
|
|
|
flat out int ambientOcclusionCorner1;
|
|
|
|
|
flat out int ambientOcclusionCorner2;
|
|
|
|
|
flat out int ambientOcclusionCorner3;
|
|
|
|
|
flat out int quadHeight;
|
|
|
|
|
flat out int quadWidth;
|
|
|
|
|
|
2024-09-19 21:33:32 +01:00
|
|
|
uniform mat4 mvp;
|
|
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
|
fragTexCoord = vertexTexCoord;
|
2025-04-14 20:29:41 +01:00
|
|
|
fragTileTexCoord = vertexTileTexCoord;
|
|
|
|
|
fragNormal = vertexNormal;
|
2024-09-19 21:33:32 +01:00
|
|
|
gl_Position = mvp*vec4(vertexPosition, 1.0);
|
2024-12-23 18:45:07 +00:00
|
|
|
|
2025-04-14 20:29:41 +01:00
|
|
|
// metadata 1 parsing
|
|
|
|
|
ambientOcclusionSide1 = floatBitsToInt(vertexMetadata1.x);
|
|
|
|
|
ambientOcclusionSide2 = floatBitsToInt(vertexMetadata1.y);
|
|
|
|
|
int metadata1Z = floatBitsToInt(vertexMetadata1.z);
|
|
|
|
|
int metadata1W = floatBitsToInt(vertexMetadata1.w);
|
|
|
|
|
ambientOcclusionCorner1 = (metadata1Z & 0x1) >> 0; // Take 0th bit.
|
|
|
|
|
ambientOcclusionCorner2 = (metadata1Z & 0x2) >> 1; // Take 1st bit.
|
|
|
|
|
ambientOcclusionCorner3 = (metadata1Z & 0x4) >> 2; // Take 2nd bit.
|
|
|
|
|
quadHeight = (metadata1Z & 0x1f8) >> 3; // Take 3rd-8th bits.
|
|
|
|
|
quadWidth = (metadata1Z & 0x7e00) >> 9; // Take 9th-14th bits.
|
2024-09-19 21:33:32 +01:00
|
|
|
}
|