class_name DrawController extends Control ## Emitted the frame after at least one paint operation was done. signal painted var _draw_queue: Array[Callable] = [] var _dirty := false var _clear := true var _show_texture := true @onready var mask_clear: ColorRect = %MaskClear @onready var mask_texture: TextureRect = %MaskTexture func clear(color: Color) -> void: mask_clear.color = color _clear = true func queue_draw(op: Callable) -> void: _draw_queue.push_back(op) _dirty = true func _draw() -> void: while _draw_queue: var op: Callable = _draw_queue.pop_front() op.call() func _process(_delta: float) -> void: if _dirty: queue_redraw() _dirty = false painted.emit() # show clear rect for one frame mask_clear.visible = _clear _clear = false mask_texture.visible = _show_texture _show_texture = false