 uniform vec3 lightPosition;
 uniform vec3 lightDirection;
 
+uniform sampler2D diffuseSampler;
 uniform sampler2D specularSampler;
 uniform sampler2D positionSampler;
 uniform sampler2D normalSampler;

layout(location = 0) out vec4 outputColor;

void main() {
    vec4 specularSample = texture(specularSampler, fragmentUV);
    vec4 positionSample = texture(positionSampler, fragmentUV);
    vec4 normalSample = texture(normalSampler, fragmentUV);

    vec3 direction = (light.type == TYPE_POINT) ? position - lightPosition : lightDirection;
    direction = normalize(direction);

    float luminance = dot(-direction, normal);
    float diffuseIntensity = specularSample.a;
    vec3 diffuseColor = diffuseSample.rgb * light.color * (luminance > 0.0f ? luminance : 0.0f) * diffuseIntensity;

    vec3 cameraDirection = normalize(position - cameraPosition);
    vec3 reflectedDirection = reflect(-direction, normal);

    float specularHardness = normalSample.a;
    float specularIntensity = positionSample.a;
    float highlight = pow(dot(-cameraDirection, reflectedDirection), specularHardness);
    vec3 specularColor = specularSample.rgb * (highlight > 0.0f ? highlight : 0.0f) * specularIntensity;

    float falloff = pow(light.falloff, 2);
    float distance = pow(distance(lightPosition, position), 2);
