extends Node2D @export var render_width: int = 1920 @export var render_height: int = 1080 @export var decay_factor: float = 0.95 @onready var view := $View @onready var pass_viewport := $SubViewport @onready var pass2_viewport := $SubViewport2 @onready var agent_shader: ShaderMaterial = $SubViewport/Pass.material @onready var trail_shader: ShaderMaterial = $SubViewport2/Pass.material const MAX_TEXTURES: int = 2 var next_texture: int = 0 var frame_count: int = 0 func _ready(): RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height)) func _process(_delta: float) -> void: next_texture = (next_texture + 1) % MAX_TEXTURES RenderingServer.call_on_render_thread( _render_process.bind(next_texture, frame_count, decay_factor) ) frame_count = frame_count + 1 # Below is for rendering var rd: RenderingDevice = null var sim_texture: Texture2D = null func _create_initial_sim_texture(width: int, height: int) -> ImageTexture: var sim_image := Image.create_empty(width, height, false, Image.FORMAT_RGBF) sim_texture = ImageTexture.create_from_image(sim_image) return sim_texture func _initialize_render(width: int, height: int) -> void: rd = RenderingServer.get_rendering_device() trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid()) trail_shader.set_shader_parameter("decay_factor", decay_factor) func _render_process(next_texture: int, frame_count: int, decay_factor: float) -> void: if frame_count > 0: agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid()) trail_shader.set_shader_parameter("decay_factor", decay_factor) trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid()) # agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())