#version 330 in vec3 vertexPosition; in vec2 vertexTexCoord; in vec3 vertexNormal; in vec2 vertexTileTexCoord; in vec4 vertexMetadata1; out vec2 fragTexCoord; out vec3 fragNormal; out vec2 fragTileTexCoord; 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; uniform mat4 mvp; void main() { fragTexCoord = vertexTexCoord; fragTileTexCoord = vertexTileTexCoord; fragNormal = vertexNormal; gl_Position = mvp*vec4(vertexPosition, 1.0); // 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. }