blob: 8a1691de7fffdaefc29a0debb2b482f97d78c3ad [file] [log] [blame]
#version 310 es
layout(location = 0) in vec3 in_pos;
layout(location = 1) in vec3 in_normal;
layout(std140, set = 0, binding = 0) readonly buffer param_block {
vec3 light_pos;
vec3 light_color;
mat4 model;
mat4 view_projection;
} params;
layout(location = 0) out vec3 color;
void main()
{
vec3 world_light = vec3(params.model * vec4(params.light_pos, 1.0));
vec3 world_pos = vec3(params.model * vec4(in_pos, 1.0));
vec3 world_normal = mat3(params.model) * in_normal;
vec3 light_dir = world_light - world_pos;
float brightness = dot(light_dir, world_normal) / length(light_dir) / length(world_normal);
brightness = abs(brightness);
gl_Position = params.view_projection * vec4(world_pos, 1.0);
color = params.light_color * brightness;
}