36 lines
912 B
GLSL
36 lines
912 B
GLSL
#version 460 core
|
|
|
|
layout(location = 0) in vec3 inFragPos;
|
|
layout(location = 1) in vec3 inNormal;
|
|
layout(location = 2) in vec2 inUV;
|
|
|
|
layout(location = 0) out vec4 outColor;
|
|
|
|
struct Light {
|
|
vec4 position, direction;
|
|
vec3 color;
|
|
};
|
|
|
|
layout(set = 0, binding = 0) uniform Lights {
|
|
Light lights[32];
|
|
};
|
|
|
|
layout(set = 1, binding = 0) uniform sampler2D albedoSampler;
|
|
|
|
void main() {
|
|
vec3 diffuse = vec3(0);
|
|
for(int i = 0; i < 32; i++) {
|
|
const vec3 norm = normalize(inNormal);
|
|
|
|
vec3 lightDir = vec3(0);
|
|
if(lights[i].position.w == 0)
|
|
lightDir = normalize(lights[i].position.xyz - inFragPos);
|
|
else
|
|
lightDir = normalize(-lights[i].direction.xyz);
|
|
|
|
const float diff = max(dot(norm, lightDir), 0.0);
|
|
diffuse += vec3(diff) * lights[i].color;
|
|
}
|
|
|
|
outColor = vec4(vec3(0.1) + diffuse * texture(albedoSampler, inUV).rgb, 1.0);
|
|
}
|