mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-31 23:49:47 +00:00
186e2259ac
This new feature allows users to load a .shader file (must be a GLES2 Godot shader) that will modify the image itself. This feature is experimental and possibly buggy, not all shaders are working properly and I'm not sure yet why. As such, this feature may not be included in v0.8 stable.
57 lines
1.7 KiB
GDScript
57 lines
1.7 KiB
GDScript
extends ConfirmationDialog
|
|
|
|
|
|
var current_cel : Image
|
|
|
|
onready var viewport : Viewport = $VBoxContainer/ViewportContainer/Viewport
|
|
onready var preview : TextureRect = viewport.get_node("Preview")
|
|
onready var shader_loaded_label : Label = $VBoxContainer/ShaderLoadedLabel
|
|
|
|
|
|
func _on_ShaderEffect_about_to_show() -> void:
|
|
current_cel = Global.current_project.frames[Global.current_project.current_frame].cels[Global.current_project.current_layer].image
|
|
current_cel.unlock()
|
|
viewport.size = current_cel.get_size()
|
|
var viewport_texture = viewport.get_texture().get_data()
|
|
viewport_texture.convert(Image.FORMAT_RGBA8)
|
|
|
|
var preview_image := Image.new()
|
|
preview_image.copy_from(current_cel)
|
|
var preview_texture = ImageTexture.new()
|
|
preview_texture.create_from_image(preview_image, 0)
|
|
preview.texture = preview_texture
|
|
|
|
|
|
func _on_ShaderEffect_confirmed() -> void:
|
|
var viewport_texture = viewport.get_texture().get_data()
|
|
viewport_texture.flip_y()
|
|
viewport_texture.convert(Image.FORMAT_RGBA8)
|
|
print(viewport_texture.get_size())
|
|
Global.canvas.handle_undo("Draw")
|
|
current_cel.copy_from(viewport_texture)
|
|
Global.canvas.handle_redo("Draw")
|
|
|
|
|
|
func _on_ShaderEffect_popup_hide() -> void:
|
|
current_cel.lock()
|
|
Global.dialog_open(false)
|
|
yield(get_tree().create_timer(0.2), "timeout")
|
|
preview.texture = null
|
|
viewport.size = Vector2.ONE
|
|
rect_size = Vector2.ONE
|
|
|
|
|
|
func _on_ChooseShader_pressed() -> void:
|
|
if OS.get_name() == "HTML5":
|
|
Html5FileExchange.load_shader()
|
|
else:
|
|
$FileDialog.popup_centered(Vector2(200, 340))
|
|
|
|
|
|
func _on_FileDialog_file_selected(path : String) -> void:
|
|
var shader = load(path)
|
|
if !shader is Shader:
|
|
return
|
|
preview.material.shader = shader
|
|
shader_loaded_label.text = tr("Shader loaded:") + " " + path.get_file().get_basename()
|