From d2b5fc5b3bc648afffa42375706429685ac63794 Mon Sep 17 00:00:00 2001 From: Mel Date: Mon, 12 Feb 2024 12:55:11 +0100 Subject: Split rendering into own thread and sync through render action lists --- assets/shaders/block_outline.frag.glsl | 7 +++++++ assets/shaders/block_outline.vert.glsl | 15 +++++++++++++++ assets/shaders/clouds.frag.glsl | 16 ++++++++++++++++ assets/shaders/clouds.vert.glsl | 21 +++++++++++++++++++++ assets/shaders/fragment.glsl | 32 -------------------------------- assets/shaders/image_viewer.frag.glsl | 10 ++++++++++ assets/shaders/image_viewer.vert.glsl | 15 +++++++++++++++ assets/shaders/terrain.frag.glsl | 32 ++++++++++++++++++++++++++++++++ assets/shaders/terrain.vert.glsl | 30 ++++++++++++++++++++++++++++++ assets/shaders/vertex.glsl | 30 ------------------------------ 10 files changed, 146 insertions(+), 62 deletions(-) create mode 100644 assets/shaders/block_outline.frag.glsl create mode 100644 assets/shaders/block_outline.vert.glsl create mode 100644 assets/shaders/clouds.frag.glsl create mode 100644 assets/shaders/clouds.vert.glsl delete mode 100644 assets/shaders/fragment.glsl create mode 100644 assets/shaders/image_viewer.frag.glsl create mode 100644 assets/shaders/image_viewer.vert.glsl create mode 100644 assets/shaders/terrain.frag.glsl create mode 100644 assets/shaders/terrain.vert.glsl delete mode 100644 assets/shaders/vertex.glsl (limited to 'assets') diff --git a/assets/shaders/block_outline.frag.glsl b/assets/shaders/block_outline.frag.glsl new file mode 100644 index 0000000..ed278d8 --- /dev/null +++ b/assets/shaders/block_outline.frag.glsl @@ -0,0 +1,7 @@ +#version 330 core + +out vec4 color; + +void main() { + color = vec4(0.0, 0.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/assets/shaders/block_outline.vert.glsl b/assets/shaders/block_outline.vert.glsl new file mode 100644 index 0000000..3b9dfe9 --- /dev/null +++ b/assets/shaders/block_outline.vert.glsl @@ -0,0 +1,15 @@ +#version 330 core + +uniform mat4 model_matrix; +uniform mat4 view_matrix; +uniform mat4 projection_matrix; + +layout (location = 0) in vec3 position; + +void main() { + vec4 world_position = model_matrix * vec4(position, 1.0); + vec4 view_position = view_matrix * world_position; + vec4 clip_position = projection_matrix * view_position; + + gl_Position = clip_position; +} \ No newline at end of file diff --git a/assets/shaders/clouds.frag.glsl b/assets/shaders/clouds.frag.glsl new file mode 100644 index 0000000..c455afd --- /dev/null +++ b/assets/shaders/clouds.frag.glsl @@ -0,0 +1,16 @@ +#version 330 core + +uniform vec3 sky_color; +uniform vec3 sun_direction; + +in vec3 surface_normal; +in float depth; +out vec4 color; + +void main() { + float brightness = dot(normalize(surface_normal), normalize(-sun_direction)); + vec3 diffuse = vec3(1 - clamp(brightness, -0.3, 0.2)); + vec3 base = vec3(1.0, 1.0, 1.0) * diffuse; + + color = vec4(mix(sky_color, base, 1 - depth), 0.3); +} \ No newline at end of file diff --git a/assets/shaders/clouds.vert.glsl b/assets/shaders/clouds.vert.glsl new file mode 100644 index 0000000..2a91766 --- /dev/null +++ b/assets/shaders/clouds.vert.glsl @@ -0,0 +1,21 @@ +#version 330 core + +uniform mat4 model_matrix; +uniform mat4 view_matrix; +uniform mat4 projection_matrix; + +layout (location = 0) in vec3 position; +layout (location = 1) in vec3 normal; + +out vec3 surface_normal; +out float depth; + +void main() { + vec4 world_position = model_matrix * vec4(position, 1.0); + vec4 view_position = view_matrix * world_position; + vec4 clip_position = projection_matrix * view_position; + + gl_Position = clip_position; + surface_normal = (model_matrix * vec4(normal, 0.0)).xyz; + depth = clamp((length(view_position) - 200) / 400, 0.0, 1.0); +} \ No newline at end of file diff --git a/assets/shaders/fragment.glsl b/assets/shaders/fragment.glsl deleted file mode 100644 index c7ecf97..0000000 --- a/assets/shaders/fragment.glsl +++ /dev/null @@ -1,32 +0,0 @@ -#version 330 core - -uniform sampler2D tex; -uniform float mesh_alpha; -uniform vec3 sun_direction; -uniform vec3 sky_color; - -in vec3 surface_normal; -in vec2 frag_tex_coord; -in float frag_light; -in float frag_ambient_occlusion; -in float depth; - -out vec4 color; - -void main() { - float brightness = dot(normalize(surface_normal), normalize(-sun_direction)); - vec3 diffuse = vec3(max(brightness, 0.3)); - - vec4 texture_color = texture(tex, frag_tex_coord); - if (texture_color.a < 0.5) { - discard; - } - - float ao = 1 - frag_ambient_occlusion / 2; - float light = frag_light; - - vec3 opaque_color = diffuse * texture_color.xyz * ao * light; - opaque_color = mix(sky_color, opaque_color, 1 - depth); - - color = vec4(opaque_color, mesh_alpha); -} \ No newline at end of file diff --git a/assets/shaders/image_viewer.frag.glsl b/assets/shaders/image_viewer.frag.glsl new file mode 100644 index 0000000..be2b40c --- /dev/null +++ b/assets/shaders/image_viewer.frag.glsl @@ -0,0 +1,10 @@ +#version 330 core + +uniform sampler2D image; + +in vec2 frag_tex_coord; +out vec4 color; + +void main() { + color = texture(image, frag_tex_coord); +} \ No newline at end of file diff --git a/assets/shaders/image_viewer.vert.glsl b/assets/shaders/image_viewer.vert.glsl new file mode 100644 index 0000000..1ad43f4 --- /dev/null +++ b/assets/shaders/image_viewer.vert.glsl @@ -0,0 +1,15 @@ +#version 330 core + +uniform mat4 model_matrix; +uniform mat4 view_matrix; +uniform mat4 projection_matrix; + +layout (location = 0) in vec3 position; +layout (location = 1) in vec2 tex_coord; + +out vec2 frag_tex_coord; + +void main() { + gl_Position = projection_matrix * view_matrix * model_matrix * vec4(position, 1.0); + frag_tex_coord = tex_coord; +} \ No newline at end of file diff --git a/assets/shaders/terrain.frag.glsl b/assets/shaders/terrain.frag.glsl new file mode 100644 index 0000000..c7ecf97 --- /dev/null +++ b/assets/shaders/terrain.frag.glsl @@ -0,0 +1,32 @@ +#version 330 core + +uniform sampler2D tex; +uniform float mesh_alpha; +uniform vec3 sun_direction; +uniform vec3 sky_color; + +in vec3 surface_normal; +in vec2 frag_tex_coord; +in float frag_light; +in float frag_ambient_occlusion; +in float depth; + +out vec4 color; + +void main() { + float brightness = dot(normalize(surface_normal), normalize(-sun_direction)); + vec3 diffuse = vec3(max(brightness, 0.3)); + + vec4 texture_color = texture(tex, frag_tex_coord); + if (texture_color.a < 0.5) { + discard; + } + + float ao = 1 - frag_ambient_occlusion / 2; + float light = frag_light; + + vec3 opaque_color = diffuse * texture_color.xyz * ao * light; + opaque_color = mix(sky_color, opaque_color, 1 - depth); + + color = vec4(opaque_color, mesh_alpha); +} \ No newline at end of file diff --git a/assets/shaders/terrain.vert.glsl b/assets/shaders/terrain.vert.glsl new file mode 100644 index 0000000..6902ad4 --- /dev/null +++ b/assets/shaders/terrain.vert.glsl @@ -0,0 +1,30 @@ +#version 330 core + +uniform mat4 model_matrix; +uniform mat4 view_matrix; +uniform mat4 projection_matrix; + +layout (location = 0) in vec3 position; +layout (location = 1) in vec3 normal; +layout (location = 2) in vec2 tex_coord; +layout (location = 3) in float light; +layout (location = 4) in float ambient_occlusion; + +out vec2 frag_tex_coord; +out float frag_light; +out float frag_ambient_occlusion; +out vec3 surface_normal; +out float depth; + +void main() { + vec4 world_position = model_matrix * vec4(position, 1.0); + vec4 view_position = view_matrix * world_position; + vec4 clip_position = projection_matrix * view_position; + + gl_Position = clip_position; + frag_tex_coord = tex_coord; + frag_light = light; + frag_ambient_occlusion = ambient_occlusion; + surface_normal = (model_matrix * vec4(normal, 0.0)).xyz; + depth = clamp((length(view_position) - 75) / 125, 0.0, 1.0); +} \ No newline at end of file diff --git a/assets/shaders/vertex.glsl b/assets/shaders/vertex.glsl deleted file mode 100644 index 6902ad4..0000000 --- a/assets/shaders/vertex.glsl +++ /dev/null @@ -1,30 +0,0 @@ -#version 330 core - -uniform mat4 model_matrix; -uniform mat4 view_matrix; -uniform mat4 projection_matrix; - -layout (location = 0) in vec3 position; -layout (location = 1) in vec3 normal; -layout (location = 2) in vec2 tex_coord; -layout (location = 3) in float light; -layout (location = 4) in float ambient_occlusion; - -out vec2 frag_tex_coord; -out float frag_light; -out float frag_ambient_occlusion; -out vec3 surface_normal; -out float depth; - -void main() { - vec4 world_position = model_matrix * vec4(position, 1.0); - vec4 view_position = view_matrix * world_position; - vec4 clip_position = projection_matrix * view_position; - - gl_Position = clip_position; - frag_tex_coord = tex_coord; - frag_light = light; - frag_ambient_occlusion = ambient_occlusion; - surface_normal = (model_matrix * vec4(normal, 0.0)).xyz; - depth = clamp((length(view_position) - 75) / 125, 0.0, 1.0); -} \ No newline at end of file -- cgit 1.4.1