diff --git a/project.godot b/project.godot index 9b51bd0..95f8a53 100644 --- a/project.godot +++ b/project.godot @@ -20,7 +20,7 @@ config/icon="res://icon.svg" [autoload] ShaderPresets="*res://src/presets/Presets.gd" -GlitchShader="*res://src/GlitchShader.gd" +Globals="*res://src/Globals.gd" [display] diff --git a/src/Camera.gd b/src/Camera.gd index e4036a7..63caf93 100644 --- a/src/Camera.gd +++ b/src/Camera.gd @@ -1,17 +1,16 @@ extends Camera2D var drag = false -var _freeze = false @onready var user_interface_container = get_parent().get_node("UI_Layer/UserInterfaceContainer") @onready var image_viewport = get_parent().get_node("ImageViewport") func _input(event): - if event.is_action_pressed("zoom_out") && !_freeze: + if event.is_action_pressed("zoom_out") && !Globals.camera_freeze: zoom_out() - elif event.is_action_pressed("zoom_in") && !_freeze: + elif event.is_action_pressed("zoom_in") && !Globals.camera_freeze: zoom_in() - if event.is_action_pressed("drag") && !_freeze: + if event.is_action_pressed("drag") && !Globals.camera_freeze: drag = true elif event.is_action_released("drag"): drag = false @@ -20,7 +19,7 @@ func _input(event): func fit_image(): var ui_container_size = user_interface_container.size - var image_size = image_viewport.image_original.get_size() + var image_size = image_viewport.image_original_tex.get_size() var viewport_size = get_viewport_rect().size var zoomf = (viewport_size.x - ui_container_size.x) / image_size.x / 1.1 if zoomf * image_size.y > viewport_size.y: @@ -38,11 +37,5 @@ func zoom_out(): zoom *= 1/1.2 global_position += old_mouse_pos - get_global_mouse_position() -func freeze(): - _freeze = true - -func unfreeze(): - _freeze = false - func _on_fit_image_button_pressed(): fit_image() diff --git a/src/Editor.gd b/src/Editor.gd index 41ab84a..4421acb 100644 --- a/src/Editor.gd +++ b/src/Editor.gd @@ -2,10 +2,6 @@ extends Control @onready var preset_options = $PresetOptions @onready var code_editor = $CodeEdit - -@onready var camera_freeze = get_parent().get_parent().get_parent().find_child("Camera").freeze -@onready var camera_unfreeze = get_parent().get_parent().get_parent().find_child("Camera").unfreeze - var selected_preset_name = ShaderPresets.default_preset # @@ -99,24 +95,30 @@ func _on_code_edit_code_completion_requested(): # +func _camera_freeze(): + Globals.camera_freeze = true + +func _camera_unfreeze(): + Globals.camera_freeze = false + func _ready(): code_editor.code_completion_enabled = true code_editor.syntax_highlighter = ShaderSyntaxHighlighter.new() for c in get_children(): - c.connect("mouse_entered", camera_freeze) - c.connect("mouse_exited", camera_unfreeze) + c.connect("mouse_entered", _camera_freeze) + c.connect("mouse_exited", _camera_unfreeze) update() func _on_code_edit_text_changed(): var shader = Shader.new() shader.code = code_editor.text - GlitchShader.shader = shader - GlitchShader.apply() + Globals.shader = shader + Globals.target_viewport.update() func _on_preset_options_item_selected(index): selected_preset_name = preset_options.get_item_text(index) - GlitchShader.shader = ShaderPresets.presets[selected_preset_name] - GlitchShader.apply() + Globals.shader = ShaderPresets.presets[selected_preset_name] + Globals.target_viewport.update() update() func update(): @@ -131,4 +133,4 @@ func update(): preset_options.add_item(p) preset_options.select(current_p_idx) # weirdness ends here - code_editor.text = GlitchShader.shader.code + code_editor.text = Globals.shader.code diff --git a/src/GlitchShader.gd b/src/GlitchShader.gd deleted file mode 100644 index 13d7692..0000000 --- a/src/GlitchShader.gd +++ /dev/null @@ -1,10 +0,0 @@ -extends Node - -var target_sprite: Sprite2D - -@onready var shader: Shader = ShaderPresets.presets[ShaderPresets.default_preset] - -func apply(): - var mat = ShaderMaterial.new() - mat.shader = shader - target_sprite.material = mat diff --git a/src/Globals.gd b/src/Globals.gd new file mode 100644 index 0000000..3315890 --- /dev/null +++ b/src/Globals.gd @@ -0,0 +1,5 @@ +extends Node + +var camera_freeze = false +@onready var shader: Shader = ShaderPresets.presets[ShaderPresets.default_preset] +var target_viewport: SubViewport diff --git a/src/ImageViewport.gd b/src/ImageViewport.gd index eb74dee..251a940 100644 --- a/src/ImageViewport.gd +++ b/src/ImageViewport.gd @@ -2,10 +2,26 @@ extends SubViewport @onready var image_sprite = $ImageSprite -var image_original: ImageTexture +var image_original_tex: ImageTexture +var image_result: Image func set_original_image(image: Image): - image_original = ImageTexture.create_from_image(image) - image_sprite.texture = image_original - image_sprite.offset = image_original.get_size() / 2 - size = image_original.get_size() + image_original_tex = ImageTexture.create_from_image(image) + image_sprite.texture = image_original_tex + image_sprite.offset = image_original_tex.get_size() / 2 + size = image_original_tex.get_size() + +func update(): + if image_original_tex != null: + image_sprite.texture = image_original_tex + var mat = ShaderMaterial.new() + mat.shader = Globals.shader + image_sprite.material = mat + # Get viewport texture + await RenderingServer.frame_post_draw # for good measure + image_result = get_texture().get_image() + image_sprite.material = null + image_sprite.texture = ImageTexture.create_from_image(image_result) + +func get_result(): + return image_result diff --git a/src/Main.gd b/src/Main.gd index 3ed00ae..cbe2fac 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -2,14 +2,12 @@ extends Node2D @onready var camera = $Camera @onready var image_viewport = $ImageViewport -@onready var image_sprite = $ImageViewport/ImageSprite @onready var ui_container = $UI_Layer/UserInterfaceContainer @onready var ui_control_fileopen = $UI_Layer/UserInterfaceContainer/OpenFileDialog @onready var ui_control_filesave = $UI_Layer/UserInterfaceContainer/SaveFileDialog func _ready(): - GlitchShader.target_sprite = image_sprite - GlitchShader.shader = ShaderPresets.presets[ShaderPresets.default_preset] + Globals.target_viewport = image_viewport func _on_open_image_button_pressed(): if OS.get_name() == "Android": @@ -22,7 +20,7 @@ func _on_open_file_dialog_file_selected(path): var err = img.load(path) if err == OK: image_viewport.set_original_image(img) - GlitchShader.apply() + image_viewport.update() camera.fit_image() else: print("An error occured!") @@ -31,9 +29,6 @@ func _on_save_image_button_pressed(): ui_control_filesave.show() func _on_save_file_dialog_file_selected(path): - # Get viewport texture - await RenderingServer.frame_post_draw # for good measure - var img = image_viewport.get_texture().get_image() - var err = img.save_png(path) + var err = image_viewport.get_result().save_png(path) if err != OK: print("An error occured!")