2024-06-04 18:31:04 +02:00
|
|
|
extends SubViewport
|
|
|
|
|
2024-12-19 18:52:47 +01:00
|
|
|
@onready var camera = %Camera
|
|
|
|
@onready var image_sprite = %ImageSprite
|
2024-12-21 15:38:07 +01:00
|
|
|
@onready var image_viewport_display = %ImageViewportDisplay
|
2024-06-04 18:31:04 +02:00
|
|
|
|
2024-06-04 21:05:46 +02:00
|
|
|
func update():
|
2024-12-21 18:25:11 +01:00
|
|
|
var fit_image = false
|
|
|
|
# load image from //!load directive -> TEXTURE
|
|
|
|
var m = ShaderDirectiveParser.parse_load_directive(Filesystem.shader)
|
|
|
|
if len(m) < 1:
|
|
|
|
return # AAAAAAAa
|
|
|
|
var original_image_path = Filesystem.get_absolute_path(m[1])
|
|
|
|
if original_image_path != Filesystem.last_original_image_path:
|
|
|
|
fit_image = true
|
|
|
|
Filesystem.load_original_image(original_image_path)
|
|
|
|
if Filesystem.original_image == null:
|
2024-12-19 18:52:47 +01:00
|
|
|
return
|
2024-12-21 18:25:11 +01:00
|
|
|
image_sprite.texture = Filesystem.original_image
|
|
|
|
image_sprite.offset = Filesystem.original_image.get_size() / 2
|
|
|
|
self.size = Filesystem.original_image.get_size()
|
2024-12-19 18:52:47 +01:00
|
|
|
var mat = ShaderMaterial.new()
|
2024-12-21 18:25:11 +01:00
|
|
|
mat.shader = Filesystem.shader
|
2024-12-19 18:52:47 +01:00
|
|
|
# load images from //!load+ directives and apply them to
|
|
|
|
# the material as shader parameters
|
2024-12-21 18:25:11 +01:00
|
|
|
for n in ShaderDirectiveParser.parse_load_additional_directive(Filesystem.shader):
|
2024-12-19 18:52:47 +01:00
|
|
|
mat.set_shader_parameter(
|
2024-12-21 18:25:11 +01:00
|
|
|
n[1], # uniform param name
|
|
|
|
Filesystem.load_image(Filesystem.get_absolute_path(n[2]))
|
|
|
|
)
|
2024-12-19 18:52:47 +01:00
|
|
|
# assign material
|
|
|
|
image_sprite.material = mat
|
|
|
|
# Get viewport texture
|
|
|
|
await RenderingServer.frame_post_draw # for good measure
|
2024-12-21 18:25:11 +01:00
|
|
|
Filesystem.result = get_texture().get_image()
|
2024-12-19 18:52:47 +01:00
|
|
|
image_sprite.material = null
|
2024-12-21 18:25:11 +01:00
|
|
|
image_sprite.texture = ImageTexture.create_from_image(Filesystem.result)
|
|
|
|
if fit_image:
|
|
|
|
camera.fit_image()
|
2024-12-21 15:38:07 +01:00
|
|
|
image_viewport_display.show()
|