godot-demo-projects/viewport/screen_capture/screen_capture.gd

27 lines
628 B
GDScript

extends Control
func _ready():
get_node("Button").connect("pressed", self, "_on_button_pressed");
func _on_button_pressed():
get_viewport().set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
# Let two frames pass to make sure the screen was captured
yield(get_tree(), "idle_frame")
yield(get_tree(), "idle_frame")
# Retrieve the captured image
var img = get_viewport().get_texture().get_data()
# Flip it on the y-axis (because it's flipped)
img.flip_y()
# Create a texture for it
var tex = ImageTexture.new()
tex.create_from_image(img)
# Set it to the capture node
get_node("capture").set_texture(tex)