feat: modules moved and engine moved to submodule
This commit is contained in:
parent
dfb5e645cd
commit
c33d2130cc
5136 changed files with 225275 additions and 64485 deletions
|
|
@ -30,12 +30,11 @@
|
|||
|
||||
#include "openxr_composition_layer.h"
|
||||
|
||||
#include "../extensions/openxr_composition_layer_extension.h"
|
||||
#include "../openxr_api.h"
|
||||
#include "../openxr_interface.h"
|
||||
|
||||
#include "scene/3d/mesh_instance_3d.h"
|
||||
#include "scene/3d/xr_nodes.h"
|
||||
#include "scene/3d/xr/xr_nodes.h"
|
||||
#include "scene/main/viewport.h"
|
||||
|
||||
#include "platform/android/api/java_class_wrapper.h"
|
||||
|
|
@ -52,6 +51,7 @@ static const char *HOLE_PUNCH_SHADER_CODE =
|
|||
OpenXRCompositionLayer::OpenXRCompositionLayer(XrCompositionLayerBaseHeader *p_composition_layer) {
|
||||
composition_layer_base_header = p_composition_layer;
|
||||
openxr_layer_provider = memnew(OpenXRViewportCompositionLayerProvider(composition_layer_base_header));
|
||||
swapchain_state = openxr_layer_provider->get_swapchain_state();
|
||||
|
||||
openxr_api = OpenXRAPI::get_singleton();
|
||||
composition_layer_extension = OpenXRCompositionLayerExtension::get_singleton();
|
||||
|
|
@ -113,6 +113,39 @@ void OpenXRCompositionLayer::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_android_surface"), &OpenXRCompositionLayer::get_android_surface);
|
||||
ClassDB::bind_method(D_METHOD("is_natively_supported"), &OpenXRCompositionLayer::is_natively_supported);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_min_filter", "mode"), &OpenXRCompositionLayer::set_min_filter);
|
||||
ClassDB::bind_method(D_METHOD("get_min_filter"), &OpenXRCompositionLayer::get_min_filter);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_mag_filter", "mode"), &OpenXRCompositionLayer::set_mag_filter);
|
||||
ClassDB::bind_method(D_METHOD("get_mag_filter"), &OpenXRCompositionLayer::get_mag_filter);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_mipmap_mode", "mode"), &OpenXRCompositionLayer::set_mipmap_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_mipmap_mode"), &OpenXRCompositionLayer::get_mipmap_mode);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_horizontal_wrap", "mode"), &OpenXRCompositionLayer::set_horizontal_wrap);
|
||||
ClassDB::bind_method(D_METHOD("get_horizontal_wrap"), &OpenXRCompositionLayer::get_horizontal_wrap);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_vertical_wrap", "mode"), &OpenXRCompositionLayer::set_vertical_wrap);
|
||||
ClassDB::bind_method(D_METHOD("get_vertical_wrap"), &OpenXRCompositionLayer::get_vertical_wrap);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_red_swizzle", "mode"), &OpenXRCompositionLayer::set_red_swizzle);
|
||||
ClassDB::bind_method(D_METHOD("get_red_swizzle"), &OpenXRCompositionLayer::get_red_swizzle);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_green_swizzle", "mode"), &OpenXRCompositionLayer::set_green_swizzle);
|
||||
ClassDB::bind_method(D_METHOD("get_green_swizzle"), &OpenXRCompositionLayer::get_green_swizzle);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_blue_swizzle", "mode"), &OpenXRCompositionLayer::set_blue_swizzle);
|
||||
ClassDB::bind_method(D_METHOD("get_blue_swizzle"), &OpenXRCompositionLayer::get_blue_swizzle);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_alpha_swizzle", "mode"), &OpenXRCompositionLayer::set_alpha_swizzle);
|
||||
ClassDB::bind_method(D_METHOD("get_alpha_swizzle"), &OpenXRCompositionLayer::get_alpha_swizzle);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_max_anisotropy", "value"), &OpenXRCompositionLayer::set_max_anisotropy);
|
||||
ClassDB::bind_method(D_METHOD("get_max_anisotropy"), &OpenXRCompositionLayer::get_max_anisotropy);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_border_color", "color"), &OpenXRCompositionLayer::set_border_color);
|
||||
ClassDB::bind_method(D_METHOD("get_border_color"), &OpenXRCompositionLayer::get_border_color);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("intersects_ray", "origin", "direction"), &OpenXRCompositionLayer::intersects_ray);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "layer_viewport", PROPERTY_HINT_NODE_TYPE, "SubViewport"), "set_layer_viewport", "get_layer_viewport");
|
||||
|
|
@ -121,10 +154,45 @@ void OpenXRCompositionLayer::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::INT, "sort_order", PROPERTY_HINT_NONE, ""), "set_sort_order", "get_sort_order");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "alpha_blend", PROPERTY_HINT_NONE, ""), "set_alpha_blend", "get_alpha_blend");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enable_hole_punch", PROPERTY_HINT_NONE, ""), "set_enable_hole_punch", "get_enable_hole_punch");
|
||||
|
||||
ADD_GROUP("Swapchain State", "swapchain_state_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_min_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Cubic"), "set_min_filter", "get_min_filter");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_mag_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Cubic"), "set_mag_filter", "get_mag_filter");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_mipmap_mode", PROPERTY_HINT_ENUM, "Disabled,Nearest,Linear"), "set_mipmap_mode", "get_mipmap_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_horizontal_wrap", PROPERTY_HINT_ENUM, "Clamp to Border,Clamp to Edge,Repeat,Mirrored Repeat,Mirror Clamp to Edge"), "set_horizontal_wrap", "get_horizontal_wrap");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_vertical_wrap", PROPERTY_HINT_ENUM, "Clamp to Border,Clamp to Edge,Repeat,Mirrored Repeat,Mirror Clamp to Edge"), "set_vertical_wrap", "get_vertical_wrap");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_red_swizzle", PROPERTY_HINT_ENUM, "Red,Green,Blue,Alpha,Zero,One"), "set_red_swizzle", "get_red_swizzle");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_green_swizzle", PROPERTY_HINT_ENUM, "Red,Green,Blue,Alpha,Zero,One"), "set_green_swizzle", "get_green_swizzle");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_blue_swizzle", PROPERTY_HINT_ENUM, "Red,Green,Blue,Alpha,Zero,One"), "set_blue_swizzle", "get_blue_swizzle");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "swapchain_state_alpha_swizzle", PROPERTY_HINT_ENUM, "Red,Green,Blue,Alpha,Zero,One"), "set_alpha_swizzle", "get_alpha_swizzle");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "swapchain_state_max_anisotropy", PROPERTY_HINT_RANGE, "1.0,16.0,0.001"), "set_max_anisotropy", "get_max_anisotropy");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "swapchain_state_border_color"), "set_border_color", "get_border_color");
|
||||
ADD_GROUP("", "");
|
||||
|
||||
BIND_ENUM_CONSTANT(FILTER_NEAREST);
|
||||
BIND_ENUM_CONSTANT(FILTER_LINEAR);
|
||||
BIND_ENUM_CONSTANT(FILTER_CUBIC);
|
||||
|
||||
BIND_ENUM_CONSTANT(MIPMAP_MODE_DISABLED);
|
||||
BIND_ENUM_CONSTANT(MIPMAP_MODE_NEAREST);
|
||||
BIND_ENUM_CONSTANT(MIPMAP_MODE_LINEAR);
|
||||
|
||||
BIND_ENUM_CONSTANT(WRAP_CLAMP_TO_BORDER);
|
||||
BIND_ENUM_CONSTANT(WRAP_CLAMP_TO_EDGE);
|
||||
BIND_ENUM_CONSTANT(WRAP_REPEAT);
|
||||
BIND_ENUM_CONSTANT(WRAP_MIRRORED_REPEAT);
|
||||
BIND_ENUM_CONSTANT(WRAP_MIRROR_CLAMP_TO_EDGE);
|
||||
|
||||
BIND_ENUM_CONSTANT(SWIZZLE_RED);
|
||||
BIND_ENUM_CONSTANT(SWIZZLE_GREEN);
|
||||
BIND_ENUM_CONSTANT(SWIZZLE_BLUE);
|
||||
BIND_ENUM_CONSTANT(SWIZZLE_ALPHA);
|
||||
BIND_ENUM_CONSTANT(SWIZZLE_ZERO);
|
||||
BIND_ENUM_CONSTANT(SWIZZLE_ONE);
|
||||
}
|
||||
|
||||
bool OpenXRCompositionLayer::_should_use_fallback_node() {
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
if (Engine::get_singleton()->is_editor_hint() || openxr_api == nullptr) {
|
||||
return true;
|
||||
} else if (openxr_session_running) {
|
||||
return enable_hole_punch || (!is_natively_supported() && !use_android_surface);
|
||||
|
|
@ -151,6 +219,7 @@ void OpenXRCompositionLayer::_setup_composition_layer_provider() {
|
|||
if (use_android_surface || layer_viewport) {
|
||||
if (composition_layer_extension) {
|
||||
composition_layer_extension->register_viewport_composition_layer_provider(openxr_layer_provider);
|
||||
registered = true;
|
||||
}
|
||||
|
||||
// NOTE: We don't setup/clear when using Android surfaces, so we don't destroy the surface unexpectedly.
|
||||
|
|
@ -164,6 +233,7 @@ void OpenXRCompositionLayer::_setup_composition_layer_provider() {
|
|||
void OpenXRCompositionLayer::_clear_composition_layer_provider() {
|
||||
if (composition_layer_extension) {
|
||||
composition_layer_extension->unregister_viewport_composition_layer_provider(openxr_layer_provider);
|
||||
registered = false;
|
||||
}
|
||||
|
||||
// NOTE: We don't setup/clear when using Android surfaces, so we don't destroy the surface unexpectedly.
|
||||
|
|
@ -228,6 +298,9 @@ void OpenXRCompositionLayer::set_layer_viewport(SubViewport *p_viewport) {
|
|||
}
|
||||
|
||||
layer_viewport = p_viewport;
|
||||
if (!registered && is_natively_supported() && openxr_session_running && is_inside_tree() && is_visible()) {
|
||||
_setup_composition_layer_provider();
|
||||
}
|
||||
|
||||
if (layer_viewport) {
|
||||
SubViewport::UpdateMode update_mode = layer_viewport->get_update_mode();
|
||||
|
|
@ -331,12 +404,155 @@ bool OpenXRCompositionLayer::get_alpha_blend() const {
|
|||
}
|
||||
|
||||
bool OpenXRCompositionLayer::is_natively_supported() const {
|
||||
if (composition_layer_extension) {
|
||||
if (composition_layer_extension && openxr_api) {
|
||||
return composition_layer_extension->is_available(openxr_layer_provider->get_openxr_type());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_min_filter(Filter p_mode) {
|
||||
if (swapchain_state->min_filter == (OpenXRViewportCompositionLayerProvider::Filter)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->min_filter = (OpenXRViewportCompositionLayerProvider::Filter)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Filter OpenXRCompositionLayer::get_min_filter() const {
|
||||
return (OpenXRCompositionLayer::Filter)swapchain_state->min_filter;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_mag_filter(Filter p_mode) {
|
||||
if (swapchain_state->mag_filter == (OpenXRViewportCompositionLayerProvider::Filter)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->mag_filter = (OpenXRViewportCompositionLayerProvider::Filter)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Filter OpenXRCompositionLayer::get_mag_filter() const {
|
||||
return (OpenXRCompositionLayer::Filter)swapchain_state->mag_filter;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_mipmap_mode(MipmapMode p_mode) {
|
||||
if (swapchain_state->mipmap_mode == (OpenXRViewportCompositionLayerProvider::MipmapMode)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->mipmap_mode = (OpenXRViewportCompositionLayerProvider::MipmapMode)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::MipmapMode OpenXRCompositionLayer::get_mipmap_mode() const {
|
||||
return (OpenXRCompositionLayer::MipmapMode)swapchain_state->mipmap_mode;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_horizontal_wrap(Wrap p_mode) {
|
||||
if (swapchain_state->horizontal_wrap == (OpenXRViewportCompositionLayerProvider::Wrap)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->horizontal_wrap = (OpenXRViewportCompositionLayerProvider::Wrap)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Wrap OpenXRCompositionLayer::get_horizontal_wrap() const {
|
||||
return (OpenXRCompositionLayer::Wrap)swapchain_state->horizontal_wrap;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_vertical_wrap(Wrap p_mode) {
|
||||
if (swapchain_state->vertical_wrap == (OpenXRViewportCompositionLayerProvider::Wrap)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->vertical_wrap = (OpenXRViewportCompositionLayerProvider::Wrap)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Wrap OpenXRCompositionLayer::get_vertical_wrap() const {
|
||||
return (OpenXRCompositionLayer::Wrap)swapchain_state->vertical_wrap;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_red_swizzle(Swizzle p_mode) {
|
||||
if (swapchain_state->red_swizzle == (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->red_swizzle = (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Swizzle OpenXRCompositionLayer::get_red_swizzle() const {
|
||||
return (OpenXRCompositionLayer::Swizzle)swapchain_state->red_swizzle;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_green_swizzle(Swizzle p_mode) {
|
||||
if (swapchain_state->green_swizzle == (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->green_swizzle = (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Swizzle OpenXRCompositionLayer::get_green_swizzle() const {
|
||||
return (OpenXRCompositionLayer::Swizzle)swapchain_state->green_swizzle;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_blue_swizzle(Swizzle p_mode) {
|
||||
if (swapchain_state->blue_swizzle == (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->blue_swizzle = (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Swizzle OpenXRCompositionLayer::get_blue_swizzle() const {
|
||||
return (OpenXRCompositionLayer::Swizzle)swapchain_state->blue_swizzle;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_alpha_swizzle(Swizzle p_mode) {
|
||||
if (swapchain_state->alpha_swizzle == (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->alpha_swizzle = (OpenXRViewportCompositionLayerProvider::Swizzle)p_mode;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
OpenXRCompositionLayer::Swizzle OpenXRCompositionLayer::get_alpha_swizzle() const {
|
||||
return (OpenXRCompositionLayer::Swizzle)swapchain_state->alpha_swizzle;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_max_anisotropy(float p_value) {
|
||||
if (swapchain_state->max_anisotropy == p_value) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->max_anisotropy = p_value;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
float OpenXRCompositionLayer::get_max_anisotropy() const {
|
||||
return swapchain_state->max_anisotropy;
|
||||
}
|
||||
|
||||
void OpenXRCompositionLayer::set_border_color(Color p_color) {
|
||||
if (swapchain_state->border_color == p_color) {
|
||||
return;
|
||||
}
|
||||
|
||||
swapchain_state->border_color = p_color;
|
||||
swapchain_state->dirty = true;
|
||||
}
|
||||
|
||||
Color OpenXRCompositionLayer::get_border_color() const {
|
||||
return swapchain_state->border_color;
|
||||
}
|
||||
|
||||
Ref<JavaObject> OpenXRCompositionLayer::get_android_surface() {
|
||||
return openxr_layer_provider->get_android_surface();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,11 +28,11 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef OPENXR_COMPOSITION_LAYER_H
|
||||
#define OPENXR_COMPOSITION_LAYER_H
|
||||
#pragma once
|
||||
|
||||
#include <openxr/openxr.h>
|
||||
|
||||
#include "../extensions/openxr_composition_layer_extension.h"
|
||||
#include "scene/3d/node_3d.h"
|
||||
|
||||
class JavaObject;
|
||||
|
|
@ -46,6 +46,41 @@ class SubViewport;
|
|||
class OpenXRCompositionLayer : public Node3D {
|
||||
GDCLASS(OpenXRCompositionLayer, Node3D);
|
||||
|
||||
public:
|
||||
// Must be identical to Filter enum definition in OpenXRViewportCompositionLayerProvider.
|
||||
enum Filter {
|
||||
FILTER_NEAREST,
|
||||
FILTER_LINEAR,
|
||||
FILTER_CUBIC,
|
||||
};
|
||||
|
||||
// Must be identical to MipmapMode enum definition in OpenXRViewportCompositionLayerProvider.
|
||||
enum MipmapMode {
|
||||
MIPMAP_MODE_DISABLED,
|
||||
MIPMAP_MODE_NEAREST,
|
||||
MIPMAP_MODE_LINEAR,
|
||||
};
|
||||
|
||||
// Must be identical to Wrap enum definition in OpenXRViewportCompositionLayerProvider.
|
||||
enum Wrap {
|
||||
WRAP_CLAMP_TO_BORDER,
|
||||
WRAP_CLAMP_TO_EDGE,
|
||||
WRAP_REPEAT,
|
||||
WRAP_MIRRORED_REPEAT,
|
||||
WRAP_MIRROR_CLAMP_TO_EDGE,
|
||||
};
|
||||
|
||||
// Must be identical to Swizzle enum definition in OpenXRViewportCompositionLayerProvider.
|
||||
enum Swizzle {
|
||||
SWIZZLE_RED,
|
||||
SWIZZLE_GREEN,
|
||||
SWIZZLE_BLUE,
|
||||
SWIZZLE_ALPHA,
|
||||
SWIZZLE_ZERO,
|
||||
SWIZZLE_ONE,
|
||||
};
|
||||
|
||||
private:
|
||||
XrCompositionLayerBaseHeader *composition_layer_base_header = nullptr;
|
||||
OpenXRViewportCompositionLayerProvider *openxr_layer_provider = nullptr;
|
||||
|
||||
|
|
@ -56,6 +91,9 @@ class OpenXRCompositionLayer : public Node3D {
|
|||
MeshInstance3D *fallback = nullptr;
|
||||
bool should_update_fallback_mesh = false;
|
||||
bool openxr_session_running = false;
|
||||
bool registered = false;
|
||||
|
||||
OpenXRViewportCompositionLayerProvider::SwapchainState *swapchain_state = nullptr;
|
||||
|
||||
Dictionary extension_property_values;
|
||||
|
||||
|
|
@ -115,6 +153,39 @@ public:
|
|||
Ref<JavaObject> get_android_surface();
|
||||
bool is_natively_supported() const;
|
||||
|
||||
void set_min_filter(Filter p_mode);
|
||||
Filter get_min_filter() const;
|
||||
|
||||
void set_mag_filter(Filter p_mode);
|
||||
Filter get_mag_filter() const;
|
||||
|
||||
void set_mipmap_mode(MipmapMode p_mode);
|
||||
MipmapMode get_mipmap_mode() const;
|
||||
|
||||
void set_horizontal_wrap(Wrap p_mode);
|
||||
Wrap get_horizontal_wrap() const;
|
||||
|
||||
void set_vertical_wrap(Wrap p_mode);
|
||||
Wrap get_vertical_wrap() const;
|
||||
|
||||
void set_red_swizzle(Swizzle p_mode);
|
||||
Swizzle get_red_swizzle() const;
|
||||
|
||||
void set_green_swizzle(Swizzle p_mode);
|
||||
Swizzle get_green_swizzle() const;
|
||||
|
||||
void set_blue_swizzle(Swizzle p_mode);
|
||||
Swizzle get_blue_swizzle() const;
|
||||
|
||||
void set_alpha_swizzle(Swizzle p_mode);
|
||||
Swizzle get_alpha_swizzle() const;
|
||||
|
||||
void set_max_anisotropy(float p_value);
|
||||
float get_max_anisotropy() const;
|
||||
|
||||
void set_border_color(Color p_color);
|
||||
Color get_border_color() const;
|
||||
|
||||
virtual PackedStringArray get_configuration_warnings() const override;
|
||||
|
||||
virtual Vector2 intersects_ray(const Vector3 &p_origin, const Vector3 &p_direction) const;
|
||||
|
|
@ -122,4 +193,7 @@ public:
|
|||
~OpenXRCompositionLayer();
|
||||
};
|
||||
|
||||
#endif // OPENXR_COMPOSITION_LAYER_H
|
||||
VARIANT_ENUM_CAST(OpenXRCompositionLayer::Filter)
|
||||
VARIANT_ENUM_CAST(OpenXRCompositionLayer::MipmapMode)
|
||||
VARIANT_ENUM_CAST(OpenXRCompositionLayer::Wrap)
|
||||
VARIANT_ENUM_CAST(OpenXRCompositionLayer::Swizzle)
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ Ref<Mesh> OpenXRCompositionLayerCylinder::_create_fallback_mesh() {
|
|||
Vector<int> indices;
|
||||
|
||||
float delta_angle = central_angle / fallback_segments;
|
||||
float start_angle = (-Math_PI / 2.0) - (central_angle / 2.0);
|
||||
float start_angle = (-Math::PI / 2.0) - (central_angle / 2.0);
|
||||
|
||||
for (uint32_t i = 0; i < fallback_segments + 1; i++) {
|
||||
float current_angle = start_angle + (delta_angle * i);
|
||||
|
|
@ -192,7 +192,7 @@ Vector2 OpenXRCompositionLayerCylinder::intersects_ray(const Vector3 &p_origin,
|
|||
Vector3 intersection = p_origin + p_direction * t;
|
||||
|
||||
Basis correction = cylinder_transform.basis.inverse();
|
||||
correction.rotate(Vector3(0.0, 1.0, 0.0), -Math_PI / 2.0);
|
||||
correction.rotate(Vector3(0.0, 1.0, 0.0), -Math::PI / 2.0);
|
||||
Vector3 relative_point = correction.xform(intersection - cylinder_transform.origin);
|
||||
|
||||
Vector2 projected_point = Vector2(relative_point.x, relative_point.z);
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef OPENXR_COMPOSITION_LAYER_CYLINDER_H
|
||||
#define OPENXR_COMPOSITION_LAYER_CYLINDER_H
|
||||
#pragma once
|
||||
|
||||
#include <openxr/openxr.h>
|
||||
|
||||
|
|
@ -47,13 +46,13 @@ class OpenXRCompositionLayerCylinder : public OpenXRCompositionLayer {
|
|||
{}, // subImage
|
||||
{ { 0, 0, 0, 0 }, { 0, 0, 0 } }, // pose
|
||||
1.0, // radius
|
||||
Math_PI / 2.0, // centralAngle
|
||||
Math::PI / 2.0, // centralAngle
|
||||
1.0, // aspectRatio
|
||||
};
|
||||
|
||||
float radius = 1.0;
|
||||
float aspect_ratio = 1.0;
|
||||
float central_angle = Math_PI / 2.0;
|
||||
float central_angle = Math::PI / 2.0;
|
||||
uint32_t fallback_segments = 10;
|
||||
|
||||
protected:
|
||||
|
|
@ -83,5 +82,3 @@ public:
|
|||
OpenXRCompositionLayerCylinder();
|
||||
~OpenXRCompositionLayerCylinder();
|
||||
};
|
||||
|
||||
#endif // OPENXR_COMPOSITION_LAYER_CYLINDER_H
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ Ref<Mesh> OpenXRCompositionLayerEquirect::_create_fallback_mesh() {
|
|||
float step_horizontal = central_horizontal_angle / fallback_segments;
|
||||
float step_vertical = (upper_vertical_angle + lower_vertical_angle) / fallback_segments;
|
||||
|
||||
float start_horizontal_angle = Math_PI - (central_horizontal_angle / 2.0);
|
||||
float start_horizontal_angle = Math::PI - (central_horizontal_angle / 2.0);
|
||||
|
||||
for (uint32_t i = 0; i < fallback_segments + 1; i++) {
|
||||
for (uint32_t j = 0; j < fallback_segments + 1; j++) {
|
||||
|
|
@ -155,7 +155,7 @@ float OpenXRCompositionLayerEquirect::get_central_horizontal_angle() const {
|
|||
}
|
||||
|
||||
void OpenXRCompositionLayerEquirect::set_upper_vertical_angle(float p_angle) {
|
||||
ERR_FAIL_COND(p_angle <= 0 || p_angle > (Math_PI / 2.0));
|
||||
ERR_FAIL_COND(p_angle <= 0 || p_angle > (Math::PI / 2.0));
|
||||
upper_vertical_angle = p_angle;
|
||||
composition_layer.upperVerticalAngle = p_angle;
|
||||
update_fallback_mesh();
|
||||
|
|
@ -166,7 +166,7 @@ float OpenXRCompositionLayerEquirect::get_upper_vertical_angle() const {
|
|||
}
|
||||
|
||||
void OpenXRCompositionLayerEquirect::set_lower_vertical_angle(float p_angle) {
|
||||
ERR_FAIL_COND(p_angle <= 0 || p_angle > (Math_PI / 2.0));
|
||||
ERR_FAIL_COND(p_angle <= 0 || p_angle > (Math::PI / 2.0));
|
||||
lower_vertical_angle = p_angle;
|
||||
composition_layer.lowerVerticalAngle = -p_angle;
|
||||
update_fallback_mesh();
|
||||
|
|
@ -209,7 +209,7 @@ Vector2 OpenXRCompositionLayerEquirect::intersects_ray(const Vector3 &p_origin,
|
|||
Vector3 intersection = p_origin + p_direction * t;
|
||||
|
||||
Basis correction = equirect_transform.basis.inverse();
|
||||
correction.rotate(Vector3(0.0, 1.0, 0.0), -Math_PI / 2.0);
|
||||
correction.rotate(Vector3(0.0, 1.0, 0.0), -Math::PI / 2.0);
|
||||
Vector3 relative_point = correction.xform(intersection - equirect_transform.origin);
|
||||
|
||||
float horizontal_intersection_angle = Math::atan2(relative_point.z, relative_point.x);
|
||||
|
|
@ -217,7 +217,7 @@ Vector2 OpenXRCompositionLayerEquirect::intersects_ray(const Vector3 &p_origin,
|
|||
return Vector2(-1.0, -1.0);
|
||||
}
|
||||
|
||||
float vertical_intersection_angle = Math::acos(relative_point.y / radius) - (Math_PI / 2.0);
|
||||
float vertical_intersection_angle = Math::acos(relative_point.y / radius) - (Math::PI / 2.0);
|
||||
if (vertical_intersection_angle < 0) {
|
||||
if (Math::abs(vertical_intersection_angle) > upper_vertical_angle) {
|
||||
return Vector2(-1.0, -1.0);
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef OPENXR_COMPOSITION_LAYER_EQUIRECT_H
|
||||
#define OPENXR_COMPOSITION_LAYER_EQUIRECT_H
|
||||
#pragma once
|
||||
|
||||
#include <openxr/openxr.h>
|
||||
|
||||
|
|
@ -47,15 +46,15 @@ class OpenXRCompositionLayerEquirect : public OpenXRCompositionLayer {
|
|||
{}, // subImage
|
||||
{ { 0, 0, 0, 0 }, { 0, 0, 0 } }, // pose
|
||||
1.0, // radius
|
||||
Math_PI / 2.0, // centralHorizontalAngle
|
||||
Math_PI / 4.0, // upperVerticalAngle
|
||||
-Math_PI / 4.0, // lowerVerticalAngle
|
||||
Math::PI / 2.0, // centralHorizontalAngle
|
||||
Math::PI / 4.0, // upperVerticalAngle
|
||||
-Math::PI / 4.0, // lowerVerticalAngle
|
||||
};
|
||||
|
||||
float radius = 1.0;
|
||||
float central_horizontal_angle = Math_PI / 2.0;
|
||||
float upper_vertical_angle = Math_PI / 4.0;
|
||||
float lower_vertical_angle = Math_PI / 4.0;
|
||||
float central_horizontal_angle = Math::PI / 2.0;
|
||||
float upper_vertical_angle = Math::PI / 4.0;
|
||||
float lower_vertical_angle = Math::PI / 4.0;
|
||||
uint32_t fallback_segments = 10;
|
||||
|
||||
protected:
|
||||
|
|
@ -88,5 +87,3 @@ public:
|
|||
OpenXRCompositionLayerEquirect();
|
||||
~OpenXRCompositionLayerEquirect();
|
||||
};
|
||||
|
||||
#endif // OPENXR_COMPOSITION_LAYER_EQUIRECT_H
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef OPENXR_COMPOSITION_LAYER_QUAD_H
|
||||
#define OPENXR_COMPOSITION_LAYER_QUAD_H
|
||||
#pragma once
|
||||
|
||||
#include <openxr/openxr.h>
|
||||
|
||||
|
|
@ -69,5 +68,3 @@ public:
|
|||
OpenXRCompositionLayerQuad();
|
||||
~OpenXRCompositionLayerQuad();
|
||||
};
|
||||
|
||||
#endif // OPENXR_COMPOSITION_LAYER_QUAD_H
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ void OpenXRHand::_update_skeleton() {
|
|||
// SKELETON_RIG_HUMANOID bone adjustment. This rotation performs:
|
||||
// OpenXR Z+ -> Godot Humanoid Y- (Back along the bone)
|
||||
// OpenXR Y+ -> Godot Humanoid Z- (Out the back of the hand)
|
||||
Quaternion(0.0, -Math_SQRT12, Math_SQRT12, 0.0),
|
||||
Quaternion(0.0, -Math::SQRT12, Math::SQRT12, 0.0),
|
||||
};
|
||||
|
||||
// we cache our transforms so we can quickly calculate local transforms
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef OPENXR_HAND_H
|
||||
#define OPENXR_HAND_H
|
||||
#pragma once
|
||||
|
||||
#include "scene/3d/node_3d.h"
|
||||
#include "scene/3d/skeleton_3d.h"
|
||||
|
|
@ -118,5 +117,3 @@ VARIANT_ENUM_CAST(OpenXRHand::Hands)
|
|||
VARIANT_ENUM_CAST(OpenXRHand::MotionRange)
|
||||
VARIANT_ENUM_CAST(OpenXRHand::SkeletonRig)
|
||||
VARIANT_ENUM_CAST(OpenXRHand::BoneUpdate)
|
||||
|
||||
#endif // OPENXR_HAND_H
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include "../extensions/openxr_visibility_mask_extension.h"
|
||||
#include "../openxr_interface.h"
|
||||
#include "scene/3d/xr_nodes.h"
|
||||
#include "scene/3d/xr/xr_nodes.h"
|
||||
|
||||
void OpenXRVisibilityMask::_bind_methods() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef OPENXR_VISIBILITY_MASK_H
|
||||
#define OPENXR_VISIBILITY_MASK_H
|
||||
#pragma once
|
||||
|
||||
#include "scene/3d/visual_instance_3d.h"
|
||||
|
||||
|
|
@ -52,5 +51,3 @@ public:
|
|||
OpenXRVisibilityMask();
|
||||
~OpenXRVisibilityMask();
|
||||
};
|
||||
|
||||
#endif // OPENXR_VISIBILITY_MASK_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue