layout (location=0) in vec3 a_co; layout (location=1) in vec4 a_norm; layout (location=2) in vec2 a_uv; layout (location=3) in ivec4 a_lights; #include "motion_vectors_vs.glsl" uniform mat4x3 uMdl; uniform mat4 uPv; uniform mat4 uPvmPrev; uniform samplerBuffer uLightsArray; out vec2 aUv; out vec4 aNorm; out vec3 aCo; out vec3 aWorldCo; flat out vec4 light_colours[3]; flat out vec4 light_positions[3]; void main() { vec3 world_pos0 = uMdl * vec4( a_co, 1.0 ); vec4 vproj0 = uPv * vec4( world_pos0, 1.0 ); vec4 vproj1 = uPvmPrev * vec4( a_co, 1.0 ); vs_motion_out( vproj0, vproj1 ); gl_Position = vproj0; aUv = a_uv; aNorm = vec4( mat3(uMdl) * a_norm.xyz, a_norm.w ); aCo = a_co; aWorldCo = world_pos0; // read lights light_colours[0] = texelFetch( uLightsArray, a_lights.x*2+0 ); light_colours[1] = texelFetch( uLightsArray, a_lights.y*2+0 ); light_colours[2] = texelFetch( uLightsArray, a_lights.z*2+0 ); light_positions[0] = texelFetch( uLightsArray, a_lights.x*2+1 ); light_positions[1] = texelFetch( uLightsArray, a_lights.y*2+1 ); light_positions[2] = texelFetch( uLightsArray, a_lights.z*2+1 ); }