2026-02-02 12:24:50 -08:00
|
|
|
#version 330 core
|
|
|
|
|
|
|
|
|
|
layout (location = 0) in vec3 aPosition;
|
|
|
|
|
layout (location = 1) in vec3 aNormal;
|
|
|
|
|
layout (location = 2) in vec2 aTexCoord;
|
|
|
|
|
|
|
|
|
|
out vec3 FragPos;
|
|
|
|
|
out vec3 Normal;
|
|
|
|
|
out vec2 TexCoord;
|
|
|
|
|
|
|
|
|
|
uniform mat4 uModel;
|
|
|
|
|
uniform mat4 uView;
|
|
|
|
|
uniform mat4 uProjection;
|
|
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
|
FragPos = vec3(uModel * vec4(aPosition, 1.0));
|
2026-02-02 23:03:45 -08:00
|
|
|
// Use mat3(uModel) directly - avoids expensive inverse() per vertex
|
|
|
|
|
Normal = mat3(uModel) * aNormal;
|
2026-02-02 12:24:50 -08:00
|
|
|
TexCoord = aTexCoord;
|
|
|
|
|
|
|
|
|
|
gl_Position = uProjection * uView * vec4(FragPos, 1.0);
|
|
|
|
|
}
|