resolution independent overlays

This commit is contained in:
Crispy 2021-06-06 11:33:02 +02:00
parent 5468ffbe63
commit a3778bea0f
3 changed files with 48 additions and 13 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=4 format=2] [gd_scene load_steps=5 format=2]
[ext_resource path="res://addons/openvr_overlay/overlay_instance.gd" type="Script" id=1] [ext_resource path="res://addons/openvr_overlay/overlay_instance.gd" type="Script" id=1]
[ext_resource path="res://addons/godot-openvr/OpenVROverlay.gdns" type="Script" id=3] [ext_resource path="res://addons/godot-openvr/OpenVROverlay.gdns" type="Script" id=3]
@ -11,21 +11,24 @@ border_width_right = 24
border_width_bottom = 24 border_width_bottom = 24
border_color = Color( 0, 0.784314, 1, 0.611765 ) border_color = Color( 0, 0.784314, 1, 0.611765 )
[sub_resource type="ViewportTexture" id=2]
viewport_path = NodePath("OverlayViewport")
[node name="OverlayInstance" type="Spatial"] [node name="OverlayInstance" type="Spatial"]
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="OverlayViewport" type="Viewport" parent="."] [node name="OverlayViewport" type="Viewport" parent="."]
size = Vector2( 100, 100 ) size = Vector2( 2048, 2048 )
transparent_bg = true transparent_bg = true
handle_input_locally = false handle_input_locally = false
msaa = 3
hdr = false hdr = false
disable_3d = true disable_3d = true
keep_3d_linear = true
usage = 0 usage = 0
render_target_update_mode = 3 render_target_update_mode = 3
script = ExtResource( 3 ) shadow_atlas_quad_0 = 0
overlay_width_in_meters = 0.4 shadow_atlas_quad_1 = 0
shadow_atlas_quad_2 = 0
shadow_atlas_quad_3 = 0
[node name="Container" type="Control" parent="OverlayViewport"] [node name="Container" type="Control" parent="OverlayViewport"]
anchor_right = 1.0 anchor_right = 1.0
@ -37,3 +40,34 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
mouse_filter = 2 mouse_filter = 2
custom_styles/panel = SubResource( 1 ) custom_styles/panel = SubResource( 1 )
[node name="VROverlayViewport" type="Viewport" parent="."]
size = Vector2( 100, 100 )
transparent_bg = true
handle_input_locally = false
msaa = 2
hdr = false
disable_3d = true
usage = 0
render_target_update_mode = 3
shadow_atlas_quad_0 = 0
shadow_atlas_quad_1 = 0
shadow_atlas_quad_2 = 0
shadow_atlas_quad_3 = 0
script = ExtResource( 3 )
overlay_width_in_meters = 0.4
[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VROverlayViewport"]
anchor_right = 1.0
anchor_bottom = 1.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="TextureRect" type="TextureRect" parent="VROverlayViewport/AspectRatioContainer"]
margin_right = 100.0
margin_bottom = 100.0
texture = SubResource( 2 )
expand = true
stretch_mode = 5
flip_v = true

View file

@ -24,7 +24,8 @@ func get_canvas_pos() -> Vector2:
_i.tracker_nodes[_i.active_controller].translation) _i.tracker_nodes[_i.active_controller].translation)
var pos = Vector2(controller_local_pos.x, controller_local_pos.y) var pos = Vector2(controller_local_pos.x, controller_local_pos.y)
var overlay_size = OverlayInit.ovr_interface.get_render_targetsize() # var overlay_size = OverlayInit.ovr_interface.get_render_targetsize()
var overlay_size = Vector2(2048, 2048)
# scale to pixels # scale to pixels
pos *= overlay_size.x pos *= overlay_size.x
pos /= _i.get_parent().width_meters pos /= _i.get_parent().width_meters

View file

@ -38,7 +38,7 @@ func _ready() -> void:
ARVRServer.connect("tracker_added", self, "_tracker_changed") ARVRServer.connect("tracker_added", self, "_tracker_changed")
ARVRServer.connect("tracker_removed", self, "_tracker_changed") ARVRServer.connect("tracker_removed", self, "_tracker_changed")
$OverlayViewport.size = OverlayInit.ovr_interface.get_render_targetsize() $VROverlayViewport.size = OverlayInit.ovr_interface.get_render_targetsize()
set_notify_transform(true) set_notify_transform(true)
load_settings() load_settings()
@ -122,11 +122,11 @@ func update_offset():
match current_target: match current_target:
"head": "head":
$OverlayViewport.track_relative_to_device(0, global_transform) $VROverlayViewport.track_relative_to_device(0, global_transform)
"world": "world":
$OverlayViewport.overlay_position_absolute(global_transform) $VROverlayViewport.overlay_position_absolute(global_transform)
_: _:
$OverlayViewport.track_relative_to_device(_tracker_id, global_transform) $VROverlayViewport.track_relative_to_device(_tracker_id, global_transform)
func update_current_target(): func update_current_target():
@ -142,7 +142,7 @@ func update_current_target():
func set_overlay_visible(state: bool): func set_overlay_visible(state: bool):
overlay_visible = state overlay_visible = state
$OverlayViewport.overlay_visible = state $VROverlayViewport.overlay_visible = state
Settings.s.overlays[name].visible = state Settings.s.overlays[name].visible = state
emit_signal("overlay_visibility_changed", state) emit_signal("overlay_visibility_changed", state)
save_settings() save_settings()
@ -178,7 +178,7 @@ func set_offset(offset_target: String, pos: Vector3, rot: Quat) -> void:
func set_width_in_meters(width: float) -> void: func set_width_in_meters(width: float) -> void:
width_meters = width width_meters = width
$OverlayViewport.overlay_width_in_meters = width_meters $VROverlayViewport.overlay_width_in_meters = width_meters
emit_signal("width_changed") emit_signal("width_changed")