Load additional images via //!load directive - closes #4

This commit is contained in:
ChaoticByte 2024-06-09 14:20:55 +02:00
parent 932c1e21c2
commit 88a6460f85
No known key found for this signature in database
3 changed files with 23 additions and 1 deletions

View file

@ -4,6 +4,11 @@ extends SubViewport
var image_original_tex: ImageTexture var image_original_tex: ImageTexture
var image_result: Image 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): func set_original_image(image: Image):
image_original_tex = ImageTexture.create_from_image(image) image_original_tex = ImageTexture.create_from_image(image)
@ -16,6 +21,14 @@ func update():
image_sprite.texture = image_original_tex image_sprite.texture = image_original_tex
var mat = ShaderMaterial.new() var mat = ShaderMaterial.new()
mat.shader = Globals.shader 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 image_sprite.material = mat
# Get viewport texture # Get viewport texture
await RenderingServer.frame_post_draw # for good measure await RenderingServer.frame_post_draw # for good measure

View file

@ -5,7 +5,8 @@ const dir = "res://src/presets/shaders/"
@onready var presets = { @onready var presets = {
"Empty": load(dir + "empty.gdshader"), "Empty": load(dir + "empty.gdshader"),
"Greyscale": load(dir + "greyscale.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" var default_preset: String = "Empty"

View file

@ -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);
}