1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-20 12:33:14 +00:00

Image effect refactors

This commit is contained in:
Emmanouil Papadeas 2022-06-12 00:27:59 +03:00
parent c9f0301c79
commit 7b067de20e
10 changed files with 64 additions and 155 deletions

View file

@ -13,6 +13,7 @@ var preview_texture := ImageTexture.new()
var preview: TextureRect
var selection_checkbox: CheckBox
var affect_option_button: OptionButton
var confirmed := false
func _ready() -> void:
@ -30,6 +31,7 @@ func _ready() -> void:
func _about_to_show() -> void:
confirmed = false
Global.canvas.selection.transform_content_confirm()
var frame: Frame = Global.current_project.frames[Global.current_project.current_frame]
current_cel = frame.cels[Global.current_project.current_layer].image
@ -41,6 +43,7 @@ func _about_to_show() -> void:
func _confirmed() -> void:
confirmed = true
var project: Project = Global.current_project
if affect == CEL:
var undo_data := _get_undo_data(project)

View file

@ -1,4 +1,5 @@
shader_type canvas_item;
render_mode unshaded;
uniform sampler2D map; // GradientTexture
uniform sampler2D selection;

View file

@ -7,15 +7,11 @@ var alpha := false
var shader: Shader = preload("res://src/Shaders/Desaturate.shader")
var confirmed: bool = false
func _about_to_show() -> void:
confirmed = false
func _ready() -> void:
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
._about_to_show()
func set_nodes() -> void:
@ -24,35 +20,25 @@ func set_nodes() -> void:
affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton
func _confirmed() -> void:
confirmed = true
._confirmed()
func commit_action(cel: Image, project: Project = Global.current_project) -> void:
var selection_tex := ImageTexture.new()
if selection_checkbox.pressed and project.has_selection:
var selection: Image = project.bitmap_to_image(project.selection_bitmap)
selection_tex.create_from_image(selection, 0)
var params := {
"red": red,
"blue": blue,
"green": green,
"alpha": alpha,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
if !confirmed:
preview.material.set_shader_param("red", red)
preview.material.set_shader_param("blue", blue)
preview.material.set_shader_param("green", green)
preview.material.set_shader_param("alpha", alpha)
preview.material.set_shader_param("selection", selection_tex)
preview.material.set_shader_param("affect_selection", selection_checkbox.pressed)
preview.material.set_shader_param("has_selection", project.has_selection)
for param in params:
preview.material.set_shader_param(param, params[param])
else:
var params := {
"red": red,
"blue": blue,
"green": green,
"alpha": alpha,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
yield(gen, "done")

View file

@ -2,7 +2,6 @@ extends ImageEffect
var offset := Vector2(5, 5)
var color := Color.black
var confirmed := false
var shader: Shader = load("res://src/Shaders/DropShadow.tres")
onready var x_spinbox: SpinBox = $VBoxContainer/OptionsContainer/XSpinBox
@ -13,19 +12,9 @@ onready var shadow_color = $VBoxContainer/OptionsContainer/ShadowColor
func _ready() -> void:
shadow_color.get_picker().presets_visible = false
color = shadow_color.color
func _about_to_show() -> void:
confirmed = false
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
._about_to_show()
func _confirmed() -> void:
confirmed = true
._confirmed()
func set_nodes() -> void:
@ -40,16 +29,15 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi
var selection: Image = project.bitmap_to_image(project.selection_bitmap)
selection_tex.create_from_image(selection, 0)
var params := {
"shadow_offset": offset,
"shadow_color": color,
"selection": selection_tex,
}
if !confirmed:
preview.material.set_shader_param("shadow_offset", offset)
preview.material.set_shader_param("shadow_color", color)
preview.material.set_shader_param("selection", selection_tex)
for param in params:
preview.material.set_shader_param(param, params[param])
else:
var params := {
"shadow_offset": offset,
"shadow_color": color,
"selection": selection_tex,
}
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
yield(gen, "done")

View file

@ -9,7 +9,6 @@ var shader_radial_step: Shader = preload("res://src/Shaders/Gradients/RadialStep
var shader_linear_dither: Shader = preload("res://src/Shaders/Gradients/LinearDithering.gdshader")
var shader_radial_dither: Shader = preload("res://src/Shaders/Gradients/RadialDithering.gdshader")
var confirmed := false
var shader: Shader = shader_linear
var dither_matrices := [
DitherMatrix.new(preload("res://assets/dither-matrices/bayer2.png"), "Bayer 2x2"),
@ -56,16 +55,6 @@ func _ready() -> void:
dithering_option_button.add_item(matrix.name)
func _about_to_show() -> void:
confirmed = false
._about_to_show()
func _confirmed() -> void:
confirmed = true
._confirmed()
func set_nodes() -> void:
preview = $VBoxContainer/AspectRatioContainer/Preview
selection_checkbox = $VBoxContainer/OptionsContainer/SelectionCheckBox

View file

@ -1,10 +1,8 @@
extends ImageEffect
var shader: Shader = preload("res://src/Shaders/GradientMap.gdshader")
var confirmed := false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var sm := ShaderMaterial.new()
sm.shader = shader
@ -17,16 +15,6 @@ func set_nodes() -> void:
affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton
func _about_to_show() -> void:
confirmed = false
._about_to_show()
func _confirmed() -> void:
confirmed = true
._confirmed()
func commit_action(cel: Image, project: Project = Global.current_project) -> void:
var selection_tex := ImageTexture.new()
if selection_checkbox.pressed and project.has_selection:
@ -36,7 +24,6 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi
var params := {"selection": selection_tex, "map": $VBoxContainer/GradientEdit.texture}
if !confirmed:
preview.material.shader = shader
for param in params:
preview.material.set_shader_param(param, params[param])
else:

View file

@ -3,7 +3,6 @@ extends ImageEffect
var shader: Shader = preload("res://src/Shaders/HSV.shader")
var live_preview: bool = true
var confirmed: bool = false
onready var hue_slider = $VBoxContainer/HBoxContainer/Sliders/Hue
onready var sat_slider = $VBoxContainer/HBoxContainer/Sliders/Saturation
@ -16,11 +15,14 @@ onready var wait_apply_timer = $WaitApply
onready var wait_time_spinbox = $VBoxContainer/WaitSettings/WaitTime
func _about_to_show() -> void:
reset()
func _ready() -> void:
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
func _about_to_show() -> void:
reset()
._about_to_show()
@ -30,34 +32,24 @@ func set_nodes() -> void:
affect_option_button = $VBoxContainer/AffectHBoxContainer/AffectOptionButton
func _confirmed() -> void:
confirmed = true
._confirmed()
reset()
func commit_action(cel: Image, project: Project = Global.current_project) -> void:
var selection_tex := ImageTexture.new()
if selection_checkbox.pressed and project.has_selection:
var selection: Image = project.bitmap_to_image(project.selection_bitmap)
selection_tex.create_from_image(selection, 0)
var params := {
"hue_shift_amount": hue_slider.value / 360,
"sat_shift_amount": sat_slider.value / 100,
"val_shift_amount": val_slider.value / 100,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
if !confirmed:
preview.material.set_shader_param("hue_shift_amount", hue_slider.value / 360)
preview.material.set_shader_param("sat_shift_amount", sat_slider.value / 100)
preview.material.set_shader_param("val_shift_amount", val_slider.value / 100)
preview.material.set_shader_param("selection", selection_tex)
preview.material.set_shader_param("affect_selection", selection_checkbox.pressed)
preview.material.set_shader_param("has_selection", project.has_selection)
for param in params:
preview.material.set_shader_param(param, params[param])
else:
var params := {
"hue_shift_amount": hue_slider.value / 360,
"sat_shift_amount": sat_slider.value / 100,
"val_shift_amount": val_slider.value / 100,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
yield(gen, "done")

View file

@ -7,15 +7,11 @@ var alpha := false
var shader: Shader = preload("res://src/Shaders/Invert.shader")
var confirmed: bool = false
func _about_to_show() -> void:
confirmed = false
func _ready() -> void:
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
._about_to_show()
func set_nodes() -> void:
@ -24,35 +20,26 @@ func set_nodes() -> void:
affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton
func _confirmed() -> void:
confirmed = true
._confirmed()
func commit_action(cel: Image, project: Project = Global.current_project) -> void:
var selection_tex := ImageTexture.new()
if selection_checkbox.pressed and project.has_selection:
var selection: Image = project.bitmap_to_image(project.selection_bitmap)
selection_tex.create_from_image(selection, 0)
var params := {
"red": red,
"blue": blue,
"green": green,
"alpha": alpha,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
if !confirmed:
preview.material.set_shader_param("red", red)
preview.material.set_shader_param("blue", blue)
preview.material.set_shader_param("green", green)
preview.material.set_shader_param("alpha", alpha)
preview.material.set_shader_param("selection", selection_tex)
preview.material.set_shader_param("affect_selection", selection_checkbox.pressed)
preview.material.set_shader_param("has_selection", project.has_selection)
for param in params:
preview.material.set_shader_param(param, params[param])
else:
var params := {
"red": red,
"blue": blue,
"green": green,
"alpha": alpha,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
yield(gen, "done")

View file

@ -4,7 +4,6 @@ var color := Color.red
var thickness := 1
var pattern := 0
var inside_image := false
var confirmed := false
var shader: Shader
onready var outline_color = $VBoxContainer/OptionsContainer/OutlineColor
@ -15,22 +14,11 @@ func _ready() -> void:
$VBoxContainer/OptionsContainer/PatternOptionButton.disabled = true
else:
shader = load("res://src/Shaders/OutlineInline.gdshader")
outline_color.get_picker().presets_visible = false
color = outline_color.color
func _about_to_show() -> void:
confirmed = false
if shader:
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
._about_to_show()
func _confirmed() -> void:
confirmed = true
._confirmed()
outline_color.get_picker().presets_visible = false
color = outline_color.color
func set_nodes() -> void:
@ -51,24 +39,19 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi
var selection: Image = project.bitmap_to_image(project.selection_bitmap)
selection_tex.create_from_image(selection, 0)
var params := {
"color": color,
"width": thickness,
"pattern": pattern,
"inside": inside_image,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
if !confirmed:
preview.material.set_shader_param("color", color)
preview.material.set_shader_param("width", thickness)
preview.material.set_shader_param("pattern", pattern)
preview.material.set_shader_param("inside", inside_image)
preview.material.set_shader_param("selection", selection_tex)
preview.material.set_shader_param("affect_selection", selection_checkbox.pressed)
preview.material.set_shader_param("has_selection", project.has_selection)
for param in params:
preview.material.set_shader_param(param, params[param])
else:
var params := {
"color": color,
"width": thickness,
"pattern": pattern,
"inside": inside_image,
"selection": selection_tex,
"affect_selection": selection_checkbox.pressed,
"has_selection": project.has_selection
}
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
yield(gen, "done")

View file

@ -1,7 +1,6 @@
extends ImageEffect
var live_preview: bool = true
var confirmed := false
var shader: Shader = preload("res://src/Shaders/Rotation.shader")
onready var type_option_button: OptionButton = $VBoxContainer/HBoxContainer2/TypeOptionButton
@ -111,12 +110,6 @@ func commit_action(_cel: Image, _project: Project = Global.current_project) -> v
_cel.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO)
func _confirmed() -> void:
confirmed = true
._confirmed()
angle_hslider.value = 0
func _on_HSlider_value_changed(_value: float) -> void:
angle_spinbox.value = angle_hslider.value
if live_preview: