59 lines
1.8 KiB
GDScript
59 lines
1.8 KiB
GDScript
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())
|