Skip to content

Commit 0c71ba7

Browse files
committed
Merge pull request godotengine#89880 from dsnopek/openxr-composition-layers-node3d-drs
Add support for OpenXR composition layers
2 parents abd64bd + 0f2b804 commit 0c71ba7

25 files changed

+1721
-49
lines changed

doc/classes/RenderingServer.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3684,6 +3684,14 @@
36843684
Returns the viewport's last rendered frame.
36853685
</description>
36863686
</method>
3687+
<method name="viewport_get_update_mode" qualifiers="const">
3688+
<return type="int" enum="RenderingServer.ViewportUpdateMode" />
3689+
<param index="0" name="viewport" type="RID" />
3690+
<description>
3691+
Returns the viewport's update mode. See [enum ViewportUpdateMode] constants for options.
3692+
[b]Warning:[/b] Calling this from any thread other than the rendering thread will be detrimental to performance.
3693+
</description>
3694+
</method>
36873695
<method name="viewport_remove_canvas">
36883696
<return type="void" />
36893697
<param index="0" name="viewport" type="RID" />

modules/openxr/config.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ def get_doc_classes():
2222
"OpenXRInteractionProfileMetadata",
2323
"OpenXRIPBinding",
2424
"OpenXRHand",
25+
"OpenXRCompositionLayer",
26+
"OpenXRCompositionLayerQuad",
27+
"OpenXRCompositionLayerCylinder",
28+
"OpenXRCompositionLayerEquirect",
2529
]
2630

2731

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<class name="OpenXRCompositionLayer" inherits="Node3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
3+
<brief_description>
4+
The parent class of all OpenXR composition layer nodes.
5+
</brief_description>
6+
<description>
7+
Composition layers allow 2D viewports to be displayed inside of the headset by the XR compositor through special projections that retain their quality. This allows for rendering clear text while keeping the layer at a native resolution.
8+
[b]Note:[/b] If the OpenXR runtime doesn't support the given composition layer type, a fallback mesh can be generated with a [ViewportTexture], in order to emulate the composition layer.
9+
</description>
10+
<tutorials>
11+
</tutorials>
12+
<methods>
13+
<method name="is_natively_supported" qualifiers="const">
14+
<return type="bool" />
15+
<description>
16+
Returns true if the OpenXR runtime natively supports this composition layer type.
17+
[b]Note:[/b] This will only return an accurate result after the OpenXR session has started.
18+
</description>
19+
</method>
20+
</methods>
21+
<members>
22+
<member name="alpha_blend" type="bool" setter="set_alpha_blend" getter="get_alpha_blend" default="false">
23+
Enables the blending the layer using its alpha channel.
24+
Can be combined with [member Viewport.transparent_bg] to give the layer a transparent background.
25+
</member>
26+
<member name="layer_viewport" type="SubViewport" setter="set_layer_viewport" getter="get_layer_viewport">
27+
The [SubViewport] to render on the composition layer.
28+
</member>
29+
<member name="sort_order" type="int" setter="set_sort_order" getter="get_sort_order" default="1">
30+
The sort order for this composition layer. Higher numbers will be shown in front of lower numbers.
31+
[b]Note:[/b] This will have no effect if a fallback mesh is being used.
32+
</member>
33+
</members>
34+
</class>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<class name="OpenXRCompositionLayerCylinder" inherits="OpenXRCompositionLayer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
3+
<brief_description>
4+
An OpenXR composition layer that is rendered as an internal slice of a cylinder.
5+
</brief_description>
6+
<description>
7+
An OpenXR composition layer that allows rendering a [SubViewport] on an internal slice of a cylinder.
8+
</description>
9+
<tutorials>
10+
</tutorials>
11+
<members>
12+
<member name="aspect_ratio" type="float" setter="set_aspect_ratio" getter="get_aspect_ratio" default="1.0">
13+
The aspect ratio of the slice. Used to set the height relative to the width.
14+
</member>
15+
<member name="central_angle" type="float" setter="set_central_angle" getter="get_central_angle" default="1.5708">
16+
The central angle of the cylinder. Used to set the width.
17+
</member>
18+
<member name="fallback_segments" type="int" setter="set_fallback_segments" getter="get_fallback_segments" default="10">
19+
The number of segments to use in the fallback mesh.
20+
</member>
21+
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
22+
The radius of the cylinder.
23+
</member>
24+
</members>
25+
</class>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<class name="OpenXRCompositionLayerEquirect" inherits="OpenXRCompositionLayer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
3+
<brief_description>
4+
An OpenXR composition layer that is rendered as an internal slice of a sphere.
5+
</brief_description>
6+
<description>
7+
An OpenXR composition layer that allows rendering a [SubViewport] on an internal slice of a sphere.
8+
</description>
9+
<tutorials>
10+
</tutorials>
11+
<members>
12+
<member name="central_horizontal_angle" type="float" setter="set_central_horizontal_angle" getter="get_central_horizontal_angle" default="1.5708">
13+
The central horizontal angle of the sphere. Used to set the width.
14+
</member>
15+
<member name="fallback_segments" type="int" setter="set_fallback_segments" getter="get_fallback_segments" default="10">
16+
The number of segments to use in the fallback mesh.
17+
</member>
18+
<member name="lower_vertical_angle" type="float" setter="set_lower_vertical_angle" getter="get_lower_vertical_angle" default="0.785398">
19+
The lower vertical angle of the sphere. Used (together with [member upper_vertical_angle]) to set the height.
20+
</member>
21+
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
22+
The radius of the sphere.
23+
</member>
24+
<member name="upper_vertical_angle" type="float" setter="set_upper_vertical_angle" getter="get_upper_vertical_angle" default="0.785398">
25+
The upper vertical angle of the sphere. Used (together with [member lower_vertical_angle]) to set the height.
26+
</member>
27+
</members>
28+
</class>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<class name="OpenXRCompositionLayerQuad" inherits="OpenXRCompositionLayer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
3+
<brief_description>
4+
An OpenXR composition layer that is rendered as a quad.
5+
</brief_description>
6+
<description>
7+
An OpenXR composition layer that allows rendering a [SubViewport] on a quad.
8+
</description>
9+
<tutorials>
10+
</tutorials>
11+
<members>
12+
<member name="quad_size" type="Vector2" setter="set_quad_size" getter="get_quad_size" default="Vector2(1, 1)">
13+
The dimensions of the quad.
14+
</member>
15+
</members>
16+
</class>

0 commit comments

Comments
 (0)