1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-13 01:03:07 +00:00

Users can now add custom dithering matrix images

Not exposed somewhere in the UI yet, but users can now add custom dithering pattern as images in "user://dither_matrices". Right now only used for gradient generation.
This commit is contained in:
Emmanouil Papadeas 2025-02-10 20:15:45 +02:00
parent a28b526645
commit 5df01a9170
3 changed files with 33 additions and 18 deletions

View file

@ -6,6 +6,30 @@ const BASIS_SLIDERS_TSCN := preload("res://src/UI/Nodes/Sliders/BasisSliders.tsc
const GRADIENT_EDIT_TSCN := preload("res://src/UI/Nodes/GradientEdit.tscn")
const NOISE_GENERATOR := preload("res://src/UI/Nodes/NoiseGeneratorDialog.tscn")
static var dither_matrices: Array[DitherMatrix] = [
DitherMatrix.new(preload("res://assets/dither-matrices/bayer2.png"), "Bayer 2x2"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer4.png"), "Bayer 4x4"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer8.png"), "Bayer 8x8"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer16.png"), "Bayer 16x16"),
]
class DitherMatrix:
var texture: Texture2D
var name: String
func _init(_texture: Texture2D, _name: String) -> void:
texture = _texture
name = _name
static func load_dither_matrix_from_file(file_path: String) -> void:
var dither_image := Image.load_from_file(file_path)
if is_instance_valid(dither_image):
var dither_tex := ImageTexture.create_from_image(dither_image)
var dither_matrix := DitherMatrix.new(dither_tex, file_path.get_file().get_basename())
dither_matrices.append(dither_matrix)
static func create_ui_for_shader_uniforms(
shader: Shader,

View file

@ -169,6 +169,12 @@ func _init() -> void:
DirAccess.make_dir_recursive_absolute("user://backups")
Global.shrink = _get_auto_display_scale()
_handle_layout_files()
# Load dither matrix images.
var dither_matrices_path := "user://dither_matrices"
if DirAccess.dir_exists_absolute(dither_matrices_path):
for file_name in DirAccess.get_files_at(dither_matrices_path):
var file_path := dither_matrices_path.path_join(file_name)
ShaderLoader.load_dither_matrix_from_file(file_path)
func _ready() -> void:

View file

@ -7,13 +7,7 @@ var shader_linear := preload("res://src/Shaders/Effects/Gradients/Linear.gdshade
var shader_linear_dither := preload("res://src/Shaders/Effects/Gradients/LinearDithering.gdshader")
var shader := shader_linear
var dither_matrices: Array[DitherMatrix] = [
DitherMatrix.new(preload("res://assets/dither-matrices/bayer2.png"), "Bayer 2x2"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer4.png"), "Bayer 4x4"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer8.png"), "Bayer 8x8"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer16.png"), "Bayer 16x16"),
]
var selected_dither_matrix := dither_matrices[0]
var selected_dither_matrix := ShaderLoader.dither_matrices[0]
@onready var options_cont: Container = $VBoxContainer/GradientOptions
@onready var gradient_edit: GradientEditNode = $VBoxContainer/GradientEdit
@ -27,22 +21,13 @@ var selected_dither_matrix := dither_matrices[0]
@onready var radius_slider := $"%RadiusSlider" as ValueSliderV2
class DitherMatrix:
var texture: Texture2D
var name: String
func _init(_texture: Texture2D, _name: String) -> void:
texture = _texture
name = _name
func _ready() -> void:
super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
for matrix in dither_matrices:
for matrix in ShaderLoader.dither_matrices:
dithering_option_button.add_item(matrix.name)
# Set as in the Animate enum
@ -140,7 +125,7 @@ func _value_v2_changed(_value: Vector2) -> void:
func _on_DitheringOptionButton_item_selected(index: int) -> void:
if index > 0:
shader = shader_linear_dither
selected_dither_matrix = dither_matrices[index - 1]
selected_dither_matrix = ShaderLoader.dither_matrices[index - 1]
else:
shader = shader_linear
update_preview()