#version 400 core in vec2 pass_textureCoords; in vec3 surfaceNormal; in vec3 toLightVector; out vec4 outColor; uniform sampler2D textureSampler; uniform vec3 lightColor; uniform vec3 ghostColor; uniform float pulse; uniform bool ghostMode; void main(void) { vec3 unitNormal = normalize(surfaceNormal); vec3 unitToLightDir = normalize(toLightVector); float cosTheta = dot(unitNormal, unitToLightDir); float brightness = max(cosTheta, 0.2); vec3 diffuse = brightness * lightColor; vec4 finalColor = vec4(diffuse, 1.0f) * texture(textureSampler, pass_textureCoords); if(ghostMode) { finalColor = vec4(mix(finalColor.xyz, ghostColor, 0.5) * pulse, 1.0f); } outColor = finalColor; }