now we're doing a bunch of them
[carveJwlIkooP6JGAAIwe30JlM.git] / shaders / scene.vs
1 layout (location=0) in vec3 a_co;
2 layout (location=1) in vec4 a_norm;
3 layout (location=2) in vec2 a_uv;
4 layout (location=3) in ivec4 a_lights;
5
6 #include "motion_vectors_vs.glsl"
7
8 uniform mat4x3 uMdl;
9 uniform mat4 uPv;
10 uniform mat4 uPvmPrev;
11 uniform samplerBuffer uLightsArray;
12
13 out vec2 aUv;
14 out vec4 aNorm;
15 out vec3 aCo;
16 out vec3 aWorldCo;
17 flat out vec4 light_colours[3];
18 flat out vec4 light_positions[3];
19
20 void main()
21 {
22 vec3 world_pos0 = uMdl * vec4( a_co, 1.0 );
23 vec4 vproj0 = uPv * vec4( world_pos0, 1.0 );
24 vec4 vproj1 = uPvmPrev * vec4( a_co, 1.0 );
25
26 vs_motion_out( vproj0, vproj1 );
27
28 gl_Position = vproj0;
29
30 aUv = a_uv;
31 aNorm = vec4( mat3(uMdl) * a_norm.xyz, a_norm.w );
32 aCo = a_co;
33 aWorldCo = world_pos0;
34
35 // read lights
36 light_colours[0] = texelFetch( uLightsArray, a_lights.x*2+0 );
37 light_colours[1] = texelFetch( uLightsArray, a_lights.y*2+0 );
38 light_colours[2] = texelFetch( uLightsArray, a_lights.z*2+0 );
39 light_positions[0] = texelFetch( uLightsArray, a_lights.x*2+1 );
40 light_positions[1] = texelFetch( uLightsArray, a_lights.y*2+1 );
41 light_positions[2] = texelFetch( uLightsArray, a_lights.z*2+1 );
42 }