Small program to quickly test OpenGL GLSL shaders.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

55 lines
1.4 KiB

#version 330 core
in vec3 frag_pos;
in vec3 frag_normal;
in vec2 frag_uv;
out vec4 color;
uniform sampler2D sampler;
const vec4 ambient_color = vec4(0.1, 0.1, 0.1, 1);
const uint NUM_LIGHTS = 32u;
layout (std140) uniform lights
{
uint buf_size;
uint max_p_lights;
uint active_p_lights;
uint max_d_lights;
uint active_d_lights;
vec4 pl_positions[NUM_LIGHTS];
vec4 pl_colors[NUM_LIGHTS];
uint pl_intensities[NUM_LIGHTS]; // NOTE: 16 bytes * NUM_LIGHTS
vec4 dl_directions[NUM_LIGHTS];
vec4 dl_colors[NUM_LIGHTS];
uint dl_intensities[NUM_LIGHTS]; // NOTE: 16 bytes * NUM_LIGHTS
};
void main()
{
// NOTE: directional lights
vec4 diffuse_color = vec4(0);
for (uint i = 0u; i < active_d_lights; i++) {
vec4 light_direction = normalize(dl_directions[i]);
float diffuse_factor =
clamp(dot(vec4(frag_normal, 1), light_direction), 0, 1);
diffuse_color = diffuse_color +
dl_intensities[i] * diffuse_factor * dl_colors[i];
}
//#else // point light
// vec4 light_direction = pl1.pos - frag_pos;
// float len = length(light_direction);
// light_direction = normalize(light_direction);
// float diffuse_factor = dot(frag_normal, light_direction) / pow(len, 2);
// diffuse_factor = clamp(diffuse_factor, 0, 1);
// vec4 diffuse_color = pl1.intensity * vec4(pl1.color * diffuse_factor);
//#endif
color = (ambient_color + diffuse_color) * texture(sampler, frag_uv.st);
}