Files
Z3D/shaders/fragment_mesh_face.glsl
2025-03-27 19:47:32 +01:00

87 lines
2.6 KiB
GLSL

#pragma STAGE: FRAGMENT
#pragma GEOMETRY: MESH
#pragma FEATURES: FACE LINE V_L V_RGB V_A LIGHTING TEXTURE U_RGBA
#pragma STATIC_ENABLE: LIGHTING TEXTURE
#pragma DYNAMIC_ENABLE: FACE LINE V_L V_RGB V_A U_RGBA
//------------[ Uniforms ]------------//
#ifdef TEXTURE
layout (binding = 0) uniform sampler2D tex;
#endif
#ifdef LIGHTING
// layout (location = 5) uniform vec3 view_pos;
// layout (location = 6) uniform vec3 point_light_direction;
// layout (location = 7) uniform vec3 point_light_color;
// layout (location = 8) uniform vec3 ambient_light_color;
// layout (location = 9) uniform vec3 ambient_filter;
// layout (location = 10) uniform vec3 diffuse_filter;
// layout (location = 11) uniform vec3 specular_filter;
// layout (location = 12) uniform float shininess;
#endif
layout (std140, binding = 0) uniform Material
{
uniform vec3 ambient_filter;
uniform vec3 diffuse_filter;
uniform vec3 specular_filter;
uniform float shininess;
uniform float alpha;
};
layout (std140, binding = 1) uniform Lighting
{
layout (location = 1) uniform mat4 model_matrix;
layout (location = 5) uniform vec3 view_pos;
layout (location = 6) uniform vec3 point_light_direction;
layout (location = 7) uniform vec3 point_light_color;
layout (location = 8) uniform vec3 ambient_light_color;
};
uniform sampler2D ambient_color_texture;
uniform sampler2D diffuse_color_texture;
uniform sampler2D specular_color_texture;
uniform sampler2D shininess_texture;
uniform sampler2D alpha_texture;
uniform sampler2D bump_texture;
//------------[ Inputs ]------------//
layout (location = 0) in vec4 frag_color;
#ifdef LIGHTING
layout (location = 1) in vec3 frag_position;
layout (location = 2) in vec3 frag_normal;
#endif
#ifdef TEXTURE
layout (location = 2) in vec2 frag_tex_coord;
#endif
//------------[ Outputs ]------------//
layout (location = 0) out vec4 pixel_color;
void main()
{
pixel_color = frag_color;
#ifdef TEXTURE
pixel_color *= texture(tex, frag_tex_coord);
#endif
#ifdef LIGHTING
vec3 ambient = pixel_color.rgb * ambient_filter * ambient_light_color;
float point_light_alignment = max(dot(frag_normal, point_light_direction), 0.0);
vec3 diffuse = pixel_color.rgb * diffuse_filter * point_light_color * point_light_alignment;
vec3 reflection_dir = reflect(-point_light_direction, frag_normal);
vec3 view_dir = normalize(frag_position - view_pos);
float specular_strength = pow(max(dot(view_dir, reflection_dir), 0.0), shininess);
vec3 specular = specular_filter * point_light_color * specular_strength;
pixel_color.rgb *= ambient + diffuse + specular;
#endif
}