#version 300 es layout(location = 0) in vec3 aPos; layout(location = 2) in vec4 aInstRot; layout(location = 3) in vec3 aInstPos; layout(location = 4) in vec3 aInstScale; #include "_graphics_uniforms.glsl" uniform int u_cascade; vec3 quatRotate(vec4 q, vec3 v) { return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); } void main() { vec3 world = quatRotate(aInstRot, aPos * aInstScale) + aInstPos; gl_Position = u_lightVP[u_cascade] * vec4(world, 1.0); }