#version 330 core layout (location = 0) out vec3 gPosition; layout (location = 1) out vec3 gNormal; layout (location = 2) out vec4 gAlbedo; // linear rgb + alpha layout (location = 3) out vec4 gMaterial; // r = metallic, g = roughness, b = ao, a = emissive in vec3 FragPos; in vec3 Normal; in vec2 TexCoord; uniform sampler2D tex; uniform vec4 colorOverride = vec4(0.0); uniform int useTexture = 0; uniform float metallic = 0.0; uniform float roughness = 0.7; uniform float ao = 1.0; uniform float emissive = 0.0; void main() { vec4 albedo = vec4(0.8, 0.8, 0.8, 1.0); if (useTexture != 0) { albedo = texture(tex, TexCoord); if (albedo.a < 0.1) discard; albedo.rgb = albedo.rgb * albedo.rgb; // same cheap 2.2 stand-in as the lighting shaders } albedo.rgb = mix(albedo.rgb, colorOverride.rgb, colorOverride.w); gPosition = FragPos; gNormal = normalize(Normal); gAlbedo = albedo; gMaterial = vec4(clamp(metallic, 0.0, 1.0), clamp(roughness, 0.04, 1.0), ao, clamp(emissive, 0.0, 1.0)); }