100 lines
3.5 KiB
GDScript
100 lines
3.5 KiB
GDScript
extends "res://addons/SphynxMotionBlurToolkit/BaseClasses/enhanced_compositor_effect.gd"
|
|
class_name DebugCompositorEffect
|
|
|
|
@export var overlay_stage : ShaderStageResource = preload("res://addons/SphynxMotionBlurToolkit/Debug/debug_overlay_shader_stage.tres"):
|
|
set(value):
|
|
unsubscribe_shader_stage(overlay_stage)
|
|
overlay_stage = value
|
|
subscirbe_shader_stage(value)
|
|
|
|
## wether to display debug views for velocity and depth
|
|
## buffers
|
|
@export var draw_debug : bool = false
|
|
|
|
## currently 0 - 1, flip between velocity buffers
|
|
## and depth buffers debug views
|
|
@export var debug_page : int = 0
|
|
|
|
var past_color : StringName = "past_color"
|
|
|
|
var freeze : bool = false
|
|
|
|
func _init():
|
|
set_deferred("context", "MotionBlur")
|
|
set_deferred("debug", true)
|
|
super()
|
|
|
|
func _render_callback_2(render_size : Vector2i, render_scene_buffers : RenderSceneBuffersRD, render_scene_data : RenderSceneDataRD):
|
|
ensure_texture(past_color, render_scene_buffers)
|
|
ensure_texture(debug_1, render_scene_buffers)
|
|
ensure_texture(debug_2, render_scene_buffers)
|
|
ensure_texture(debug_3, render_scene_buffers)
|
|
ensure_texture(debug_4, render_scene_buffers)
|
|
ensure_texture(debug_5, render_scene_buffers)
|
|
ensure_texture(debug_6, render_scene_buffers)
|
|
ensure_texture(debug_7, render_scene_buffers)
|
|
ensure_texture(debug_8, render_scene_buffers)
|
|
|
|
rd.draw_command_begin_label("Debug", Color(1.0, 1.0, 1.0, 1.0))
|
|
|
|
if Input.is_action_just_pressed("freeze"):
|
|
freeze = !freeze
|
|
|
|
if Input.is_action_just_pressed("Z"):
|
|
draw_debug = !draw_debug
|
|
|
|
if Input.is_action_just_pressed("C"):
|
|
debug_page = 1 if debug_page == 0 else 0
|
|
|
|
var push_constant: PackedFloat32Array = [
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
]
|
|
var int_push_constant : PackedInt32Array = [
|
|
freeze,
|
|
draw_debug,
|
|
debug_page,
|
|
0
|
|
]
|
|
var byte_array = push_constant.to_byte_array()
|
|
byte_array.append_array(int_push_constant.to_byte_array())
|
|
|
|
var view_count = render_scene_buffers.get_view_count()
|
|
for view in range(view_count):
|
|
var color_image := render_scene_buffers.get_color_layer(view)
|
|
var past_color_image := render_scene_buffers.get_texture_slice(context, past_color, view, 0, 1, 1)
|
|
var debug_1_image := render_scene_buffers.get_texture_slice(context, debug_1, view, 0, 1, 1)
|
|
var debug_2_image := render_scene_buffers.get_texture_slice(context, debug_2, view, 0, 1, 1)
|
|
var debug_3_image := render_scene_buffers.get_texture_slice(context, debug_3, view, 0, 1, 1)
|
|
var debug_4_image := render_scene_buffers.get_texture_slice(context, debug_4, view, 0, 1, 1)
|
|
var debug_5_image := render_scene_buffers.get_texture_slice(context, debug_5, view, 0, 1, 1)
|
|
var debug_6_image := render_scene_buffers.get_texture_slice(context, debug_6, view, 0, 1, 1)
|
|
var debug_7_image := render_scene_buffers.get_texture_slice(context, debug_7, view, 0, 1, 1)
|
|
var debug_8_image := render_scene_buffers.get_texture_slice(context, debug_8, view, 0, 1, 1)
|
|
|
|
var x_groups := floori((render_size.x - 1) / 16 + 1)
|
|
var y_groups := floori((render_size.y - 1) / 16 + 1)
|
|
|
|
dispatch_stage(overlay_stage,
|
|
[
|
|
get_image_uniform(past_color_image, 0),
|
|
get_image_uniform(color_image, 1),
|
|
get_sampler_uniform(color_image, 2),
|
|
get_sampler_uniform(debug_1_image, 3),
|
|
get_sampler_uniform(debug_2_image, 4),
|
|
get_sampler_uniform(debug_3_image, 5),
|
|
get_sampler_uniform(debug_4_image, 6),
|
|
get_sampler_uniform(debug_5_image, 7),
|
|
get_sampler_uniform(debug_6_image, 8),
|
|
get_sampler_uniform(debug_7_image, 9),
|
|
get_sampler_uniform(debug_8_image, 10),
|
|
],
|
|
byte_array,
|
|
Vector3i(x_groups, y_groups, 1),
|
|
"Debug Overlay",
|
|
view)
|
|
|
|
rd.draw_command_end_label()
|