| #version 440 |
| |
| layout(location = 0) in vec4 position; |
| layout(location = 1) in vec3 normal; |
| |
| // Instanced attributes to variate the translation of the model and the diffuse |
| // color of the material. |
| layout(location = 2) in vec3 instTranslate; |
| layout(location = 3) in vec3 instDiffuseAdjust; |
| |
| out gl_PerVertex { vec4 gl_Position; }; |
| layout(location = 0) out vec3 vECVertNormal; |
| layout(location = 1) out vec3 vECVertPos; |
| layout(location = 2) flat out vec3 vDiffuseAdjust; |
| |
| layout(std140, binding = 0) uniform buf { |
| mat4 vp; |
| mat4 model; |
| mat3 modelNormal; |
| } ubuf; |
| |
| void main() |
| { |
| vECVertNormal = normalize(ubuf.modelNormal * normal); |
| mat4 t = mat4(1, 0, 0, 0, |
| 0, 1, 0, 0, |
| 0, 0, 1, 0, |
| instTranslate.x, instTranslate.y, instTranslate.z, 1); |
| vECVertPos = vec3(t * ubuf.model * position); |
| vDiffuseAdjust = instDiffuseAdjust; |
| gl_Position = ubuf.vp * t * ubuf.model * position; |
| } |