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;
|
2025-07-03 14:11:35 +01:00
|
|
|
in uvec4 vertexMetadata1;
|
|
|
|
|
in uvec4 vertexOcclusionSides;
|
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
|
|
|
|
2025-07-03 14:11:35 +01:00
|
|
|
flat out uvec4 occlusionSides;
|
|
|
|
|
flat out int topLeftObscured;
|
|
|
|
|
flat out int topRightObscured;
|
|
|
|
|
flat out int bottomLeftObscured;
|
|
|
|
|
flat out int bottomRightObscured;
|
2024-12-23 18:45:07 +00:00
|
|
|
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;
|
2025-07-03 14:11:35 +01:00
|
|
|
occlusionSides = vertexOcclusionSides;
|
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
|
2025-08-03 17:54:28 +01:00
|
|
|
int metadata1W = int(vertexMetadata1.x);
|
2025-07-03 14:11:35 +01:00
|
|
|
topLeftObscured = (metadata1W & 0x1); // Take 0th bit.
|
|
|
|
|
topRightObscured = (metadata1W & 0x2) >> 1; // Take 1st bits.
|
|
|
|
|
bottomLeftObscured = (metadata1W & 0x4) >> 2; // Take 2nd bits.
|
|
|
|
|
bottomRightObscured = (metadata1W & 0x8) >> 3; // Take 3rd bits.
|
|
|
|
|
quadHeight = (metadata1W & 0x3f0) >> 4; // Take 4rd-9th bits.
|
|
|
|
|
quadWidth = (metadata1W & 0xfc00) >> 10; // Take 10th-16th bits.
|
2024-09-19 21:33:32 +01:00
|
|
|
}
|