diff --git a/src/ImageViewport.gd b/src/ImageViewport.gd index 251a940..7b98461 100644 --- a/src/ImageViewport.gd +++ b/src/ImageViewport.gd @@ -4,6 +4,11 @@ extends SubViewport var image_original_tex: ImageTexture var image_result: Image +var load_uniform_regex: RegEx + +func _ready(): + load_uniform_regex = RegEx.new() + load_uniform_regex.compile(r'\/\/!load\s(\w*)\s(.*)') func set_original_image(image: Image): image_original_tex = ImageTexture.create_from_image(image) @@ -16,6 +21,14 @@ func update(): image_sprite.texture = image_original_tex var mat = ShaderMaterial.new() mat.shader = Globals.shader + # load images from //!load directives and apply them to + # the material as shader parameters + for m in load_uniform_regex.search_all(Globals.shader.code): + var u_image = Image.load_from_file(m.strings[2]) + mat.set_shader_parameter( + m.strings[1], # uniform param name + ImageTexture.create_from_image(u_image)) + # assign material image_sprite.material = mat # Get viewport texture await RenderingServer.frame_post_draw # for good measure diff --git a/src/presets/Presets.gd b/src/presets/Presets.gd index eccd3d6..d432d35 100644 --- a/src/presets/Presets.gd +++ b/src/presets/Presets.gd @@ -5,7 +5,8 @@ const dir = "res://src/presets/shaders/" @onready var presets = { "Empty": load(dir + "empty.gdshader"), "Greyscale": load(dir + "greyscale.gdshader"), - "Lowpass": load(dir + "lowpass.gdshader") + "Lowpass": load(dir + "lowpass.gdshader"), + "Mix": load(dir + "mix.gdshader") } var default_preset: String = "Empty" diff --git a/src/presets/shaders/mix.gdshader b/src/presets/shaders/mix.gdshader new file mode 100644 index 0000000..53ed562 --- /dev/null +++ b/src/presets/shaders/mix.gdshader @@ -0,0 +1,8 @@ +shader_type canvas_item; + +//!load img2 ./icon.png +uniform sampler2D img2: repeat_enable, filter_nearest; + +void fragment() { + COLOR = mix(COLOR, texture(img2, UV), .5); +}