Add an outline to the result preview

This commit is contained in:
ChaoticByte 2024-12-21 15:38:07 +01:00
parent 815ec239f6
commit f069f2911f
No known key found for this signature in database
8 changed files with 37 additions and 6 deletions

View file

@ -1,13 +1,18 @@
[gd_scene load_steps=10 format=3 uid="uid://bjah7k4bxo044"]
[gd_scene load_steps=12 format=3 uid="uid://bjah7k4bxo044"]
[ext_resource type="Script" path="res://src/Main.gd" id="1_2625y"]
[ext_resource type="Script" path="res://src/ImageViewport.gd" id="2_hvo65"]
[ext_resource type="Shader" path="res://src/shader/ivd_outline.gdshader" id="3_6xihe"]
[ext_resource type="Script" path="res://src/ImageViewportDisplay.gd" id="3_n4itb"]
[ext_resource type="Shader" path="res://src/ui_background.gdshader" id="4_ty3qx"]
[ext_resource type="Shader" path="res://src/shader/ui_background.gdshader" id="4_ty3qx"]
[ext_resource type="Script" path="res://src/UIAppVersion.gd" id="5_o1ggv"]
[ext_resource type="Script" path="res://src/Editor.gd" id="7_g8bap"]
[ext_resource type="Script" path="res://src/Camera.gd" id="8_mls06"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_y2ea0"]
shader = ExtResource("3_6xihe")
shader_parameter/zoom_level = Vector2(1, 1)
[sub_resource type="ViewportTexture" id="ViewportTexture_lct1c"]
viewport_path = NodePath("ImageViewport")
@ -30,6 +35,7 @@ unique_name_in_owner = true
[node name="ImageViewportDisplay" type="Sprite2D" parent="."]
unique_name_in_owner = true
material = SubResource("ShaderMaterial_y2ea0")
texture = SubResource("ViewportTexture_lct1c")
script = ExtResource("3_n4itb")

View file

@ -29,17 +29,21 @@ func fit_image():
zoom = Vector2(zoomf, zoomf)
global_position = Vector2(-((ui_container_size.x) / 2 / zoom.x), 0)
func update_viewport_display():
image_viewport_display.update_zoom_texture_filter(zoom)
image_viewport_display.material.set_shader_parameter("zoom_level", zoom)
func zoom_in():
var old_mouse_pos = get_global_mouse_position()
zoom *= 1.2
global_position += old_mouse_pos - get_global_mouse_position()
image_viewport_display.update_zoom_texture_filter(zoom)
update_viewport_display()
func zoom_out():
var old_mouse_pos = get_global_mouse_position()
zoom *= 1/1.2
global_position += old_mouse_pos - get_global_mouse_position()
image_viewport_display.update_zoom_texture_filter(zoom)
update_viewport_display()
func _on_fit_image_button_pressed():
fit_image()

View file

@ -1,7 +1,7 @@
extends Node
var camera_freeze = false
@onready var shader: Shader = load("res://src/shaders/empty.gdshader")
@onready var shader: Shader = load("res://src/shader/template.gdshader")
var target_viewport: SubViewport
var cwd = "."
var last_image_savepath = ""

View file

@ -2,6 +2,7 @@ extends SubViewport
@onready var camera = %Camera
@onready var image_sprite = %ImageSprite
@onready var image_viewport_display = %ImageViewportDisplay
var image_original_tex: ImageTexture
var image_result: Image
@ -36,7 +37,7 @@ func update():
# load images from //!load directive -> TEXTURE
var regex_match = load_regex.search(Globals.shader.code)
if regex_match == null: # Error!
print("Didn't find any load directives!")
printerr("Didn't find any load directives!")
return
var tex_path = get_absolute_path(regex_match.strings[1])
load_texture(tex_path) # load every time
@ -66,6 +67,7 @@ func update():
image_result = get_texture().get_image()
image_sprite.material = null
image_sprite.texture = ImageTexture.create_from_image(image_result)
image_viewport_display.show()
func get_result():
return image_result

View file

@ -1,5 +1,8 @@
extends Sprite2D
func _ready() -> void:
hide()
func update_zoom_texture_filter(zoom: Vector2):
if zoom.x >= 1.5:
texture_filter = TEXTURE_FILTER_NEAREST_WITH_MIPMAPS

View file

@ -0,0 +1,16 @@
shader_type canvas_item;
uniform vec2 zoom_level = vec2(1.0);
const float thickness = 3.0;
void fragment() {
vec2 t = thickness * TEXTURE_PIXEL_SIZE / zoom_level;
if (
UV.x < t.x ||
UV.y < t.y ||
UV.x > 1.0-t.x ||
UV.y > 1.0-t.y
) {
COLOR = mix(COLOR, vec4(1.0), 0.5);
}
}