All checks were successful
Build (Arch Linux) / build (push) Successful in 3m10s
41 lines
1.2 KiB
GLSL
41 lines
1.2 KiB
GLSL
#version 460 core
|
|
|
|
layout(location = 0) in vec3 pos;
|
|
layout(location = 1) in vec3 norm;
|
|
layout(location = 2) in vec3 tangent;
|
|
layout(location = 3) in vec2 uv;
|
|
layout(location = 4) in uint draw_id;
|
|
layout(location = 5) in mat4 model_mat; // also occupies location 5, 6, 7 & 8
|
|
layout(location = 9) in mat3 normal_mat;
|
|
|
|
out VS_OUT {
|
|
vec3 pos;
|
|
vec3 tan_pos;
|
|
vec2 uv;
|
|
flat uint draw_id;
|
|
mat3 TBN;
|
|
}
|
|
vs_out;
|
|
|
|
// Uniforms
|
|
uniform mat4 view_proj_mat; // View-projection matrix
|
|
|
|
void main() {
|
|
// Tangent-space matrix
|
|
vec3 T = normalize(normal_mat * tangent);
|
|
vec3 N = normalize(normal_mat * norm);
|
|
T = normalize(T - dot(T, N) * N); // Re-orthogonalisation
|
|
vec3 B = cross(N, T);
|
|
mat3 TBN = transpose(mat3(T, B, N));
|
|
|
|
vec4 world_pos = model_mat * vec4(pos, 1.0);
|
|
|
|
vs_out.pos = vec3(world_pos) / world_pos.w; // World-space position
|
|
vs_out.tan_pos = TBN * vs_out.pos; // Tangent-space position
|
|
vs_out.uv = uv; // Texture coordinates
|
|
vs_out.draw_id = draw_id; // MDI draw ID
|
|
vs_out.TBN = TBN; // World-space -> tangent-space matrix
|
|
|
|
gl_Position = view_proj_mat * world_pos;
|
|
}
|