Started refactor to lazily compilable shaders.
This commit is contained in:
94
shaders/vertex_mesh_point.glsl
Normal file
94
shaders/vertex_mesh_point.glsl
Normal file
@@ -0,0 +1,94 @@
|
||||
#pragma STAGE: VERTEX
|
||||
#pragma GEOMETRY: MESH
|
||||
#pragma FEATURES: POINT V_L V_RGB V_A LIGHTING U_RGBA
|
||||
#pragma FEATURE_TOGGLES: V_L V_RGB V_A LIGHTING U_RGBA
|
||||
|
||||
|
||||
#ifdef V_L
|
||||
#ifdef V_RGB
|
||||
#error Vertex luminance and vertex RGB are mutually exclusive
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
//------------[ Uniforms ]------------//
|
||||
layout (location = 0) uniform mat4 mvp_matrix;
|
||||
#ifdef LIGHTING
|
||||
layout (location = 1) uniform mat4 model_matrix;
|
||||
#endif
|
||||
layout (location = 2) uniform float point_size;
|
||||
#ifdef U_RGBA
|
||||
layout (location = 4) uniform vec4 color;
|
||||
#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
|
||||
|
||||
|
||||
//------------[ Inputs ]------------//
|
||||
layout (location = 0) in vec3 model_vertex_position;
|
||||
#ifdef LIGHTING
|
||||
layout (location = 1) in vec3 model_vertex_normal;
|
||||
#endif
|
||||
#ifdef V_L
|
||||
layout (location = 2) in float model_vertex_l;
|
||||
#endif
|
||||
#ifdef V_RGB
|
||||
layout (location = 2) in vec3 model_vertex_rgb;
|
||||
#endif
|
||||
#ifdef V_A
|
||||
layout (location = 3) in float model_vertex_a;
|
||||
#endif
|
||||
|
||||
|
||||
//------------[ Outputs ]------------//
|
||||
layout (location = 0) out vec4 clip_vertex_color;
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = mvp_matrix * vec4(model_vertex_position, 1.0);
|
||||
gl_PointSize = point_size / gl_Position.w;
|
||||
|
||||
clip_vertex_color = vec4(1);
|
||||
|
||||
#ifdef V_L
|
||||
clip_vertex_color.rgb *= model_vertex_l;
|
||||
#endif
|
||||
|
||||
#ifdef V_RGB
|
||||
clip_vertex_color.rgb *= model_vertex_rgb;
|
||||
#endif
|
||||
|
||||
#ifdef V_A
|
||||
clip_vertex_color.a *= model_vertex_a;
|
||||
#endif
|
||||
|
||||
#ifdef U_RGBA
|
||||
clip_vertex_color *= color;
|
||||
#endif
|
||||
|
||||
#ifdef LIGHTING
|
||||
vec3 position = (model_matrix * vec4(model_vertex_position, 1.0)).xyz;
|
||||
vec3 normal = normalize(mat3(model_matrix) * model_vertex_normal);
|
||||
|
||||
vec3 ambient = clip_vertex_color.rgb * ambient_filter * ambient_light_color;
|
||||
|
||||
float point_light_alignment = max(dot(normal, point_light_direction), 0.0);
|
||||
vec3 diffuse = clip_vertex_color.rgb * diffuse_filter * point_light_color * point_light_alignment;
|
||||
|
||||
vec3 reflection_dir = reflect(-point_light_direction, normal);
|
||||
vec3 view_dir = normalize(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;
|
||||
|
||||
clip_vertex_color.rgb *= ambient + diffuse + specular;
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user