Disable VSync while ImageCompositor.update processes the image

This commit is contained in:
ChaoticByte 2025-03-31 21:24:07 +02:00
parent 77273f9c1b
commit 560e455cd2
No known key found for this signature in database
3 changed files with 9 additions and 2 deletions

View file

@ -27,7 +27,6 @@ window/size/viewport_width=640
window/size/viewport_height=672 window/size/viewport_height=672
window/energy_saving/keep_screen_on=false window/energy_saving/keep_screen_on=false
window/subwindows/embed_subwindows=false window/subwindows/embed_subwindows=false
window/vsync/vsync_mode=0
[editor_plugins] [editor_plugins]

View file

@ -18,7 +18,7 @@ func _input(event):
var old_zoom = self.zoom var old_zoom = self.zoom
func _process(delta: float) -> void: func _process(_delta: float) -> void:
if self.zoom != old_zoom: if self.zoom != old_zoom:
image_viewport_display.update_zoom_texture_filter(self.zoom) image_viewport_display.update_zoom_texture_filter(self.zoom)
image_viewport_display.material.set_shader_parameter("zoom_level", self.zoom) image_viewport_display.material.set_shader_parameter("zoom_level", self.zoom)

View file

@ -43,6 +43,12 @@ func shader_has_step_uniform(shader: Shader) -> bool:
return true return true
return false return false
func set_vsync(enabled: bool):
if enabled:
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED)
else:
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
func update(overwrite_image_path: String = "") -> Array: # returns error messages (strings) func update(overwrite_image_path: String = "") -> Array: # returns error messages (strings)
var shader = Filesystem.shader # read from disk var shader = Filesystem.shader # read from disk
if shader == null: if shader == null:
@ -98,6 +104,7 @@ func update(overwrite_image_path: String = "") -> Array: # returns error message
# assign material # assign material
image_sprite.material = mat image_sprite.material = mat
# iterate n times # iterate n times
set_vsync(false) # speed up processing
for i in range(steps): for i in range(steps):
if has_step_uniform: if has_step_uniform:
# set STEP param # set STEP param
@ -106,6 +113,7 @@ func update(overwrite_image_path: String = "") -> Array: # returns error message
await RenderingServer.frame_post_draw # wait for next frame to get drawn await RenderingServer.frame_post_draw # wait for next frame to get drawn
Filesystem.result = get_texture().get_image() Filesystem.result = get_texture().get_image()
image_sprite.texture = ImageTexture.create_from_image(Filesystem.result) image_sprite.texture = ImageTexture.create_from_image(Filesystem.result)
set_vsync(true) # reenable vsync
image_sprite.material = null image_sprite.material = null
# done # done
return errors return errors