#version 330 core layout (location = 0) in vec3 pos; layout (location = 1) in vec2 texCoord; layout (location = 2) in uint light; // first 16 bits are RGBA (4 bits each) light, last 2 bits are the vertex AO out vec2 passTexCoord; out vec3 passLight; out float passAO; uniform mat4 model; uniform mat4 view; uniform mat4 projection; void main() { gl_Position = projection * view * model * vec4(pos, 1.0f); passTexCoord = vec2(texCoord.x, 1.0f - texCoord.y); float intensity = (light & 0xFu) / 15.0f; passLight = vec3(((light >> 12u) & 0xFu) / 15.0f * intensity, ((light >> 8u) & 0xFu) / 15.0f * intensity, ((light >> 4u) & 0xFu) / 15.0f * intensity); passAO = 1.0f - (((light >> 30u) & 3u) / 3.0f); }