layout (location=0) in vec3 a_co; layout (location=1) in vec3 a_norm; layout (location=2) in vec2 a_uv; layout (location=3) in vec4 a_colour; layout (location=4) in vec4 a_weights; layout (location=5) in ivec4 a_groups; #include "motion_vectors_vs.glsl" uniform mat4 uPv; uniform mat4x3 uTransforms[32]; out vec4 aColour; out vec2 aUv; out vec3 aNorm; out vec3 aCo; out vec3 aWorldCo; void main() { vec4 co_local = vec4( a_co, 1.0 ); vec3 co0 = uTransforms[ a_groups[0] ] * co_local; vec3 co1 = uTransforms[ a_groups[1] ] * co_local; vec3 co2 = uTransforms[ a_groups[2] ] * co_local; vec3 n0 = mat3(uTransforms[ a_groups[0] ]) * a_norm; vec3 n1 = mat3(uTransforms[ a_groups[1] ]) * a_norm; vec3 n2 = mat3(uTransforms[ a_groups[2] ]) * a_norm; vec3 world_pos = co0*a_weights[0] + co1*a_weights[1] + co2*a_weights[2]; vec3 world_normal = n0*a_weights[0] + n1*a_weights[1] + n2*a_weights[2]; gl_Position = uPv * vec4( world_pos, 1.0 ); aColour = a_colour; aUv = a_uv; aNorm = world_normal; aCo = a_co; aWorldCo = world_pos; // TODO: motion vectors aMotionVec0 = vec3(1.0); aMotionVec1 = vec3(1.0); }