godot-demo-projects/viewport/3d_scaling/hud.gd

35 lines
1.2 KiB
GDScript

extends Control
## The 3D viewport's shrink factor. For instance, 1 is full resolution,
## 2 is half resolution and 4 is quarter resolution. Lower values look
## sharper but are slower to render.
var scale_factor := 1
var filter_mode := Viewport.SCALING_3D_MODE_BILINEAR
@onready var viewport: Window = get_tree().root
@onready var scale_label: Label = $VBoxContainer/Scale
@onready var filter_label: Label = $VBoxContainer/Filter
func _ready() -> void:
viewport.scaling_3d_mode = filter_mode
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed(&"cycle_viewport_resolution"):
scale_factor = wrapi(scale_factor + 1, 1, 5)
viewport.scaling_3d_scale = 1.0 / scale_factor
scale_label.text = "Scale: %3.0f%%" % (100.0 / scale_factor)
if event.is_action_pressed(&"toggle_filtering"):
filter_mode = wrapi(filter_mode + 1, Viewport.SCALING_3D_MODE_BILINEAR, Viewport.SCALING_3D_MODE_MAX) as Viewport.Scaling3DMode
viewport.scaling_3d_mode = filter_mode
filter_label.text = (
ClassDB.class_get_enum_constants("Viewport", "Scaling3DMode")[filter_mode]
.capitalize()
.replace("3d", "3D")
.replace("Mode", "Mode:")
.replace("Fsr", "FSR")
)