mirror of
https://github.com/GarrettGunnell/Acerola-Compute.git
synced 2025-10-19 15:13:17 +00:00
Compile shader code from shader file
This commit is contained in:
parent
c7afbd91b7
commit
b86af22ea4
4 changed files with 66 additions and 36 deletions
27
Shaders/color_correct.glsl
Normal file
27
Shaders/color_correct.glsl
Normal file
|
@ -0,0 +1,27 @@
|
|||
#version 450
|
||||
|
||||
// Invocations in the (x, y, z) dimension (thread group sizes)
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
|
||||
|
||||
// Our push constant (cbuffer??)
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 raster_size;
|
||||
vec2 reserved;
|
||||
vec4 exposure;
|
||||
} params;
|
||||
|
||||
// main function/kernel?
|
||||
void main() {
|
||||
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||||
ivec2 size = ivec2(params.raster_size);
|
||||
|
||||
if (uv.x >= size.x || uv.y >= size.y) return;
|
||||
|
||||
vec4 color = imageLoad(color_image, uv);
|
||||
|
||||
color.rgb *= params.exposure.rgb + params.reserved.x + params.reserved.y;
|
||||
|
||||
imageStore(color_image, uv, color);
|
||||
}
|
14
Shaders/color_correct.glsl.import
Normal file
14
Shaders/color_correct.glsl.import
Normal file
|
@ -0,0 +1,14 @@
|
|||
[remap]
|
||||
|
||||
importer="glsl"
|
||||
type="RDShaderFile"
|
||||
uid="uid://cm55eusukipw2"
|
||||
path="res://.godot/imported/color_correct.glsl-1582275ca0edaf6a86c2560486d8f577.res"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Shaders/color_correct.glsl"
|
||||
dest_files=["res://.godot/imported/color_correct.glsl-1582275ca0edaf6a86c2560486d8f577.res"]
|
||||
|
||||
[params]
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://ccgywstxl3rj6"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://ccgywstxl3rj6"]
|
||||
|
||||
[ext_resource type="Script" path="res://post_process_shader.gd" id="1_g22wf"]
|
||||
[ext_resource type="Texture2D" uid="uid://c6jccoq62id4d" path="res://Ignored/tumblr_280d93eb9dac421ba08746f2d5362045_8c4f7d77_1280.jpg" id="2_lxnnh"]
|
||||
|
@ -13,10 +13,22 @@ effect_callback_type = 4
|
|||
needs_motion_vectors = false
|
||||
needs_normal_roughness = false
|
||||
script = ExtResource("1_g22wf")
|
||||
exposure = Vector3(0, 0, 0)
|
||||
shader_file_path = "res://Shaders/color_correct.glsl"
|
||||
exposure = Vector3(2.57, 1, 1)
|
||||
|
||||
[sub_resource type="CompositorEffect" id="CompositorEffect_eje4o"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
enabled = true
|
||||
effect_callback_type = 4
|
||||
needs_motion_vectors = false
|
||||
needs_normal_roughness = false
|
||||
script = ExtResource("1_g22wf")
|
||||
shader_file_path = "res://Shaders/color_correct.glsl"
|
||||
exposure = Vector3(1, 2.105, 1)
|
||||
|
||||
[sub_resource type="Compositor" id="Compositor_4ipny"]
|
||||
compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_6lq7a")])
|
||||
compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_6lq7a"), SubResource("CompositorEffect_eje4o")])
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_in1jo"]
|
||||
shading_mode = 0
|
||||
|
|
|
@ -2,34 +2,7 @@
|
|||
extends CompositorEffect
|
||||
class_name PostProcessShader
|
||||
|
||||
const template_shader : String = "#version 450
|
||||
|
||||
// Invocations in the (x, y, z) dimension (thread group sizes)
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
|
||||
|
||||
// Our push constant (cbuffer??)
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 raster_size;
|
||||
vec2 reserved;
|
||||
vec4 exposure;
|
||||
} params;
|
||||
|
||||
// main function/kernel?
|
||||
void main() {
|
||||
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||||
ivec2 size = ivec2(params.raster_size);
|
||||
|
||||
if (uv.x >= size.x || uv.y >= size.y) return;
|
||||
|
||||
vec4 color = imageLoad(color_image, uv);
|
||||
|
||||
color.rgb *= params.exposure.rgb + params.reserved.x + params.reserved.y;
|
||||
|
||||
imageStore(color_image, uv, color);
|
||||
}
|
||||
"
|
||||
@export_file("*.glsl") var shader_file_path
|
||||
|
||||
@export_group("Shader Settings")
|
||||
@export var exposure : Vector3
|
||||
|
@ -58,22 +31,26 @@ func _check_shader() -> bool:
|
|||
|
||||
var new_shader_code : String = ""
|
||||
|
||||
var shader_file = FileAccess.open(shader_file_path, FileAccess.READ)
|
||||
var shader_code = shader_file.get_as_text()
|
||||
|
||||
|
||||
mutex.lock()
|
||||
if shader_is_dirty:
|
||||
new_shader_code = template_shader
|
||||
new_shader_code = shader_code
|
||||
shader_is_dirty = false
|
||||
mutex.unlock()
|
||||
|
||||
if new_shader_code.is_empty():
|
||||
return pipeline.is_valid()
|
||||
|
||||
new_shader_code = template_shader
|
||||
|
||||
new_shader_code = shader_code
|
||||
|
||||
if shader.is_valid():
|
||||
rd.free_rid(shader)
|
||||
shader = RID()
|
||||
pipeline = RID()
|
||||
|
||||
|
||||
var shader_source : RDShaderSource = RDShaderSource.new()
|
||||
shader_source.language = RenderingDevice.SHADER_LANGUAGE_GLSL
|
||||
shader_source.source_compute = new_shader_code
|
||||
|
@ -92,7 +69,7 @@ func _check_shader() -> bool:
|
|||
return pipeline.is_valid()
|
||||
|
||||
func _render_callback(p_effect_callback_type, p_render_data):
|
||||
if rd and p_effect_callback_type == EFFECT_CALLBACK_TYPE_POST_TRANSPARENT and _check_shader():
|
||||
if enabled and rd and p_effect_callback_type == EFFECT_CALLBACK_TYPE_POST_TRANSPARENT and _check_shader():
|
||||
var render_scene_buffers : RenderSceneBuffersRD = p_render_data.get_render_scene_buffers()
|
||||
if render_scene_buffers:
|
||||
var size = render_scene_buffers.get_internal_size()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue