I've been using Godot to run some image processing with shaders - place an image into a TextureRect in a SubViewport, assign the shader, force render, then take the resulting image for further processing.
It works, but there's an issue. I'm using these functions (as members of a subviewport class):
func render():
var scene_tree = self.get_tree()
var root_viewport = scene_tree.root.get_viewport_rid()
RenderingServer.viewport_set_active(root_viewport, false)
# Render SubViewport once
RenderingServer.frame_post_draw.connect(_frame_drawn)
RenderingServer.viewport_set_update_mode(self.get_viewport_rid(), RenderingServer.VIEWPORT_UPDATE_ONCE)
RenderingServer.force_draw()
await Rend
