Ensure OpenXR classes are declared properly
Co-authored-by: Bastiaan Olij <mux213@gmail.com>
This commit is contained in:
parent
6da4ad1662
commit
c23bd8b143
|
@ -547,7 +547,7 @@ PackedStringArray OpenXRActionMap::get_top_level_paths(const Ref<OpenXRAction> p
|
||||||
|
|
||||||
for (int i = 0; i < interaction_profiles.size(); i++) {
|
for (int i = 0; i < interaction_profiles.size(); i++) {
|
||||||
Ref<OpenXRInteractionProfile> ip = interaction_profiles[i];
|
Ref<OpenXRInteractionProfile> ip = interaction_profiles[i];
|
||||||
const OpenXRInteractionProfileMetaData::InteractionProfile *profile = OpenXRInteractionProfileMetaData::get_singleton()->get_profile(ip->get_interaction_profile_path());
|
const OpenXRInteractionProfileMetadata::InteractionProfile *profile = OpenXRInteractionProfileMetadata::get_singleton()->get_profile(ip->get_interaction_profile_path());
|
||||||
|
|
||||||
if (profile != nullptr) {
|
if (profile != nullptr) {
|
||||||
for (int j = 0; j < ip->get_binding_count(); j++) {
|
for (int j = 0; j < ip->get_binding_count(); j++) {
|
||||||
|
@ -556,7 +556,7 @@ PackedStringArray OpenXRActionMap::get_top_level_paths(const Ref<OpenXRAction> p
|
||||||
PackedStringArray paths = binding->get_paths();
|
PackedStringArray paths = binding->get_paths();
|
||||||
|
|
||||||
for (int k = 0; k < paths.size(); k++) {
|
for (int k = 0; k < paths.size(); k++) {
|
||||||
const OpenXRInteractionProfileMetaData::IOPath *io_path = profile->get_io_path(paths[k]);
|
const OpenXRInteractionProfileMetadata::IOPath *io_path = profile->get_io_path(paths[k]);
|
||||||
if (io_path != nullptr) {
|
if (io_path != nullptr) {
|
||||||
String top_path = io_path->top_level_path;
|
String top_path = io_path->top_level_path;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#define OPENXR_INTERACTION_PROFILE_H
|
#define OPENXR_INTERACTION_PROFILE_H
|
||||||
|
|
||||||
#include "openxr_action.h"
|
#include "openxr_action.h"
|
||||||
#include "openxr_interaction_profile_meta_data.h"
|
#include "openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
#include "core/io/resource.h"
|
#include "core/io/resource.h"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/* openxr_interaction_profile_meta_data.cpp */
|
/* openxr_interaction_profile_metadata.cpp */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
|
@ -28,30 +28,30 @@
|
||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
#include "openxr_interaction_profile_meta_data.h"
|
#include "openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
#include "../openxr_api.h"
|
#include "../openxr_api.h"
|
||||||
|
|
||||||
OpenXRInteractionProfileMetaData *OpenXRInteractionProfileMetaData::singleton = nullptr;
|
OpenXRInteractionProfileMetadata *OpenXRInteractionProfileMetadata::singleton = nullptr;
|
||||||
|
|
||||||
OpenXRInteractionProfileMetaData::OpenXRInteractionProfileMetaData() {
|
OpenXRInteractionProfileMetadata::OpenXRInteractionProfileMetadata() {
|
||||||
singleton = this;
|
singleton = this;
|
||||||
|
|
||||||
_register_core_metadata();
|
_register_core_metadata();
|
||||||
OpenXRAPI::register_extension_metadata();
|
OpenXRAPI::register_extension_metadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenXRInteractionProfileMetaData::~OpenXRInteractionProfileMetaData() {
|
OpenXRInteractionProfileMetadata::~OpenXRInteractionProfileMetadata() {
|
||||||
singleton = nullptr;
|
singleton = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInteractionProfileMetaData::_bind_methods() {
|
void OpenXRInteractionProfileMetadata::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("register_top_level_path", "display_name", "openxr_path", "openxr_extension_name"), &OpenXRInteractionProfileMetaData::register_top_level_path);
|
ClassDB::bind_method(D_METHOD("register_top_level_path", "display_name", "openxr_path", "openxr_extension_name"), &OpenXRInteractionProfileMetadata::register_top_level_path);
|
||||||
ClassDB::bind_method(D_METHOD("register_interaction_profile", "display_name", "openxr_path", "openxr_extension_name"), &OpenXRInteractionProfileMetaData::register_interaction_profile);
|
ClassDB::bind_method(D_METHOD("register_interaction_profile", "display_name", "openxr_path", "openxr_extension_name"), &OpenXRInteractionProfileMetadata::register_interaction_profile);
|
||||||
ClassDB::bind_method(D_METHOD("register_io_path", "interaction_profile", "display_name", "toplevel_path", "openxr_path", "openxr_extension_name", "action_type"), &OpenXRInteractionProfileMetaData::register_io_path);
|
ClassDB::bind_method(D_METHOD("register_io_path", "interaction_profile", "display_name", "toplevel_path", "openxr_path", "openxr_extension_name", "action_type"), &OpenXRInteractionProfileMetadata::register_io_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInteractionProfileMetaData::register_top_level_path(const String &p_display_name, const String &p_openxr_path, const String &p_openxr_extension_name) {
|
void OpenXRInteractionProfileMetadata::register_top_level_path(const String &p_display_name, const String &p_openxr_path, const String &p_openxr_extension_name) {
|
||||||
ERR_FAIL_COND_MSG(has_top_level_path(p_openxr_path), p_openxr_path + " had already been registered");
|
ERR_FAIL_COND_MSG(has_top_level_path(p_openxr_path), p_openxr_path + " had already been registered");
|
||||||
|
|
||||||
TopLevelPath new_toplevel_path = {
|
TopLevelPath new_toplevel_path = {
|
||||||
|
@ -63,7 +63,7 @@ void OpenXRInteractionProfileMetaData::register_top_level_path(const String &p_d
|
||||||
top_level_paths.push_back(new_toplevel_path);
|
top_level_paths.push_back(new_toplevel_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInteractionProfileMetaData::register_interaction_profile(const String &p_display_name, const String &p_openxr_path, const String &p_openxr_extension_name) {
|
void OpenXRInteractionProfileMetadata::register_interaction_profile(const String &p_display_name, const String &p_openxr_path, const String &p_openxr_extension_name) {
|
||||||
ERR_FAIL_COND_MSG(has_interaction_profile(p_openxr_path), p_openxr_path + " has already been registered");
|
ERR_FAIL_COND_MSG(has_interaction_profile(p_openxr_path), p_openxr_path + " has already been registered");
|
||||||
|
|
||||||
InteractionProfile new_profile;
|
InteractionProfile new_profile;
|
||||||
|
@ -74,7 +74,7 @@ void OpenXRInteractionProfileMetaData::register_interaction_profile(const String
|
||||||
interaction_profiles.push_back(new_profile);
|
interaction_profiles.push_back(new_profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInteractionProfileMetaData::register_io_path(const String &p_interaction_profile, const String &p_display_name, const String &p_toplevel_path, const String &p_openxr_path, const String &p_openxr_extension_name, OpenXRAction::ActionType p_action_type) {
|
void OpenXRInteractionProfileMetadata::register_io_path(const String &p_interaction_profile, const String &p_display_name, const String &p_toplevel_path, const String &p_openxr_path, const String &p_openxr_extension_name, OpenXRAction::ActionType p_action_type) {
|
||||||
ERR_FAIL_COND_MSG(!has_interaction_profile(p_interaction_profile), "Unknown interaction profile " + p_interaction_profile);
|
ERR_FAIL_COND_MSG(!has_interaction_profile(p_interaction_profile), "Unknown interaction profile " + p_interaction_profile);
|
||||||
ERR_FAIL_COND_MSG(!has_top_level_path(p_toplevel_path), "Unknown top level path " + p_toplevel_path);
|
ERR_FAIL_COND_MSG(!has_top_level_path(p_toplevel_path), "Unknown top level path " + p_toplevel_path);
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ void OpenXRInteractionProfileMetaData::register_io_path(const String &p_interact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenXRInteractionProfileMetaData::has_top_level_path(const String p_openxr_path) const {
|
bool OpenXRInteractionProfileMetadata::has_top_level_path(const String p_openxr_path) const {
|
||||||
for (int i = 0; i < top_level_paths.size(); i++) {
|
for (int i = 0; i < top_level_paths.size(); i++) {
|
||||||
if (top_level_paths[i].openxr_path == p_openxr_path) {
|
if (top_level_paths[i].openxr_path == p_openxr_path) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -105,7 +105,7 @@ bool OpenXRInteractionProfileMetaData::has_top_level_path(const String p_openxr_
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OpenXRInteractionProfileMetaData::get_top_level_name(const String p_openxr_path) const {
|
String OpenXRInteractionProfileMetadata::get_top_level_name(const String p_openxr_path) const {
|
||||||
for (int i = 0; i < top_level_paths.size(); i++) {
|
for (int i = 0; i < top_level_paths.size(); i++) {
|
||||||
if (top_level_paths[i].openxr_path == p_openxr_path) {
|
if (top_level_paths[i].openxr_path == p_openxr_path) {
|
||||||
return top_level_paths[i].display_name;
|
return top_level_paths[i].display_name;
|
||||||
|
@ -115,7 +115,7 @@ String OpenXRInteractionProfileMetaData::get_top_level_name(const String p_openx
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
String OpenXRInteractionProfileMetaData::get_top_level_extension(const String p_openxr_path) const {
|
String OpenXRInteractionProfileMetadata::get_top_level_extension(const String p_openxr_path) const {
|
||||||
for (int i = 0; i < top_level_paths.size(); i++) {
|
for (int i = 0; i < top_level_paths.size(); i++) {
|
||||||
if (top_level_paths[i].openxr_path == p_openxr_path) {
|
if (top_level_paths[i].openxr_path == p_openxr_path) {
|
||||||
return top_level_paths[i].openxr_extension_name;
|
return top_level_paths[i].openxr_extension_name;
|
||||||
|
@ -125,7 +125,7 @@ String OpenXRInteractionProfileMetaData::get_top_level_extension(const String p_
|
||||||
return XR_PATH_UNSUPPORTED_NAME;
|
return XR_PATH_UNSUPPORTED_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenXRInteractionProfileMetaData::has_interaction_profile(const String p_openxr_path) const {
|
bool OpenXRInteractionProfileMetadata::has_interaction_profile(const String p_openxr_path) const {
|
||||||
for (int i = 0; i < interaction_profiles.size(); i++) {
|
for (int i = 0; i < interaction_profiles.size(); i++) {
|
||||||
if (interaction_profiles[i].openxr_path == p_openxr_path) {
|
if (interaction_profiles[i].openxr_path == p_openxr_path) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -135,7 +135,7 @@ bool OpenXRInteractionProfileMetaData::has_interaction_profile(const String p_op
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OpenXRInteractionProfileMetaData::get_interaction_profile_extension(const String p_openxr_path) const {
|
String OpenXRInteractionProfileMetadata::get_interaction_profile_extension(const String p_openxr_path) const {
|
||||||
for (int i = 0; i < interaction_profiles.size(); i++) {
|
for (int i = 0; i < interaction_profiles.size(); i++) {
|
||||||
if (interaction_profiles[i].openxr_path == p_openxr_path) {
|
if (interaction_profiles[i].openxr_path == p_openxr_path) {
|
||||||
return interaction_profiles[i].openxr_extension_name;
|
return interaction_profiles[i].openxr_extension_name;
|
||||||
|
@ -145,7 +145,7 @@ String OpenXRInteractionProfileMetaData::get_interaction_profile_extension(const
|
||||||
return XR_PATH_UNSUPPORTED_NAME;
|
return XR_PATH_UNSUPPORTED_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OpenXRInteractionProfileMetaData::InteractionProfile *OpenXRInteractionProfileMetaData::get_profile(const String p_openxr_path) const {
|
const OpenXRInteractionProfileMetadata::InteractionProfile *OpenXRInteractionProfileMetadata::get_profile(const String p_openxr_path) const {
|
||||||
for (int i = 0; i < interaction_profiles.size(); i++) {
|
for (int i = 0; i < interaction_profiles.size(); i++) {
|
||||||
if (interaction_profiles[i].openxr_path == p_openxr_path) {
|
if (interaction_profiles[i].openxr_path == p_openxr_path) {
|
||||||
return &interaction_profiles[i];
|
return &interaction_profiles[i];
|
||||||
|
@ -155,7 +155,7 @@ const OpenXRInteractionProfileMetaData::InteractionProfile *OpenXRInteractionPro
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenXRInteractionProfileMetaData::InteractionProfile::has_io_path(const String p_io_path) const {
|
bool OpenXRInteractionProfileMetadata::InteractionProfile::has_io_path(const String p_io_path) const {
|
||||||
for (int i = 0; i < io_paths.size(); i++) {
|
for (int i = 0; i < io_paths.size(); i++) {
|
||||||
if (io_paths[i].openxr_path == p_io_path) {
|
if (io_paths[i].openxr_path == p_io_path) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -165,7 +165,7 @@ bool OpenXRInteractionProfileMetaData::InteractionProfile::has_io_path(const Str
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OpenXRInteractionProfileMetaData::IOPath *OpenXRInteractionProfileMetaData::InteractionProfile::get_io_path(const String p_io_path) const {
|
const OpenXRInteractionProfileMetadata::IOPath *OpenXRInteractionProfileMetadata::InteractionProfile::get_io_path(const String p_io_path) const {
|
||||||
for (int i = 0; i < io_paths.size(); i++) {
|
for (int i = 0; i < io_paths.size(); i++) {
|
||||||
if (io_paths[i].openxr_path == p_io_path) {
|
if (io_paths[i].openxr_path == p_io_path) {
|
||||||
return &io_paths[i];
|
return &io_paths[i];
|
||||||
|
@ -175,8 +175,8 @@ const OpenXRInteractionProfileMetaData::IOPath *OpenXRInteractionProfileMetaData
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OpenXRInteractionProfileMetaData::IOPath *OpenXRInteractionProfileMetaData::get_io_path(const String p_interaction_profile, const String p_io_path) const {
|
const OpenXRInteractionProfileMetadata::IOPath *OpenXRInteractionProfileMetadata::get_io_path(const String p_interaction_profile, const String p_io_path) const {
|
||||||
const OpenXRInteractionProfileMetaData::InteractionProfile *profile = get_profile(p_interaction_profile);
|
const OpenXRInteractionProfileMetadata::InteractionProfile *profile = get_profile(p_interaction_profile);
|
||||||
if (profile != nullptr) {
|
if (profile != nullptr) {
|
||||||
return profile->get_io_path(p_io_path);
|
return profile->get_io_path(p_io_path);
|
||||||
}
|
}
|
||||||
|
@ -184,7 +184,7 @@ const OpenXRInteractionProfileMetaData::IOPath *OpenXRInteractionProfileMetaData
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
PackedStringArray OpenXRInteractionProfileMetaData::get_interaction_profile_paths() const {
|
PackedStringArray OpenXRInteractionProfileMetadata::get_interaction_profile_paths() const {
|
||||||
PackedStringArray arr;
|
PackedStringArray arr;
|
||||||
|
|
||||||
for (int i = 0; i < interaction_profiles.size(); i++) {
|
for (int i = 0; i < interaction_profiles.size(); i++) {
|
||||||
|
@ -194,7 +194,7 @@ PackedStringArray OpenXRInteractionProfileMetaData::get_interaction_profile_path
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInteractionProfileMetaData::_register_core_metadata() {
|
void OpenXRInteractionProfileMetadata::_register_core_metadata() {
|
||||||
// Note, currently we add definitions that belong in extensions.
|
// Note, currently we add definitions that belong in extensions.
|
||||||
// Extensions are registered when our OpenXRAPI is instantiated
|
// Extensions are registered when our OpenXRAPI is instantiated
|
||||||
// however this does not happen in the editor.
|
// however this does not happen in the editor.
|
|
@ -1,5 +1,5 @@
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/* openxr_interaction_profile_meta_data.h */
|
/* openxr_interaction_profile_metadata.h */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
|
@ -28,11 +28,11 @@
|
||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
#ifndef OPENXR_INTERACTION_PROFILE_META_DATA_H
|
#ifndef OPENXR_INTERACTION_PROFILE_METADATA_H
|
||||||
#define OPENXR_INTERACTION_PROFILE_META_DATA_H
|
#define OPENXR_INTERACTION_PROFILE_METADATA_H
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// Stores available interaction profile meta data
|
// Stores available interaction profile metadata
|
||||||
//
|
//
|
||||||
// OpenXR defines and hardcodes all the supported input devices and their
|
// OpenXR defines and hardcodes all the supported input devices and their
|
||||||
// paths as part of the OpenXR spec. When support for new devices is
|
// paths as part of the OpenXR spec. When support for new devices is
|
||||||
|
@ -57,7 +57,9 @@
|
||||||
|
|
||||||
#define XR_PATH_UNSUPPORTED_NAME "unsupported"
|
#define XR_PATH_UNSUPPORTED_NAME "unsupported"
|
||||||
|
|
||||||
class OpenXRInteractionProfileMetaData : public Object {
|
class OpenXRInteractionProfileMetadata : public Object {
|
||||||
|
GDCLASS(OpenXRInteractionProfileMetadata, Object);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
struct TopLevelPath {
|
struct TopLevelPath {
|
||||||
String display_name; // User friendly display name (i.e. Left controller)
|
String display_name; // User friendly display name (i.e. Left controller)
|
||||||
|
@ -84,7 +86,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static OpenXRInteractionProfileMetaData *singleton;
|
static OpenXRInteractionProfileMetadata *singleton;
|
||||||
|
|
||||||
Vector<TopLevelPath> top_level_paths;
|
Vector<TopLevelPath> top_level_paths;
|
||||||
Vector<InteractionProfile> interaction_profiles;
|
Vector<InteractionProfile> interaction_profiles;
|
||||||
|
@ -95,10 +97,10 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static OpenXRInteractionProfileMetaData *get_singleton() { return singleton; }
|
static OpenXRInteractionProfileMetadata *get_singleton() { return singleton; }
|
||||||
|
|
||||||
OpenXRInteractionProfileMetaData();
|
OpenXRInteractionProfileMetadata();
|
||||||
~OpenXRInteractionProfileMetaData();
|
~OpenXRInteractionProfileMetadata();
|
||||||
|
|
||||||
void register_top_level_path(const String &p_display_name, const String &p_openxr_path, const String &p_openxr_extension_name);
|
void register_top_level_path(const String &p_display_name, const String &p_openxr_path, const String &p_openxr_extension_name);
|
||||||
bool has_top_level_path(const String p_openxr_path) const;
|
bool has_top_level_path(const String p_openxr_path) const;
|
||||||
|
@ -115,4 +117,4 @@ public:
|
||||||
const IOPath *get_io_path(const String p_interaction_profile, const String p_io_path) const;
|
const IOPath *get_io_path(const String p_interaction_profile, const String p_io_path) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OPENXR_INTERACTION_PROFILE_META_DATA_H
|
#endif // OPENXR_INTERACTION_PROFILE_METADATA_H
|
|
@ -16,7 +16,10 @@ def get_doc_classes():
|
||||||
"OpenXRAction",
|
"OpenXRAction",
|
||||||
"OpenXRActionSet",
|
"OpenXRActionSet",
|
||||||
"OpenXRActionMap",
|
"OpenXRActionMap",
|
||||||
|
"OpenXRAPIExtension",
|
||||||
|
"OpenXRExtensionWrapperExtension",
|
||||||
"OpenXRInteractionProfile",
|
"OpenXRInteractionProfile",
|
||||||
|
"OpenXRInteractionProfileMetadata",
|
||||||
"OpenXRIPBinding",
|
"OpenXRIPBinding",
|
||||||
"OpenXRHand",
|
"OpenXRHand",
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<class name="OpenXRAPIExtension" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
<class name="OpenXRAPIExtension" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
|
||||||
<brief_description>
|
<brief_description>
|
||||||
Makes the OpenXR API available for GDExtension.
|
Makes the OpenXR API available for GDExtension.
|
||||||
</brief_description>
|
</brief_description>
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<class name="OpenXRExtensionWrapperExtension" inherits="Object" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
<class name="OpenXRExtensionWrapperExtension" inherits="Object" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
|
||||||
<brief_description>
|
<brief_description>
|
||||||
Allows clients to implement OpenXR extensions with GDExtension.
|
Allows clients to implement OpenXR extensions with GDExtension.
|
||||||
</brief_description>
|
</brief_description>
|
|
@ -4,7 +4,7 @@
|
||||||
Suggested bindings object for OpenXR.
|
Suggested bindings object for OpenXR.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
This object stores suggested bindings for an interaction profile. Interaction profiles define the meta data for a tracked XR device such as an XR controller.
|
This object stores suggested bindings for an interaction profile. Interaction profiles define the metadata for a tracked XR device such as an XR controller.
|
||||||
For more information see the [url=https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#semantic-path-interaction-profiles]interaction profiles info in the OpenXR specification[/url].
|
For more information see the [url=https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#semantic-path-interaction-profiles]interaction profiles info in the OpenXR specification[/url].
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<class name="OpenXRInteractionProfileMetadata" inherits="Object" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
|
||||||
|
<brief_description>
|
||||||
|
Meta class registering supported devices in OpenXR.
|
||||||
|
</brief_description>
|
||||||
|
<description>
|
||||||
|
This class allows OpenXR core and extensions to register metadata relating to supported interaction devices such as controllers, trackers, haptic devices, etc. It is primarily used by the action map editor and to sanitize any action map by removing extension-dependent entries when applicable.
|
||||||
|
</description>
|
||||||
|
<tutorials>
|
||||||
|
</tutorials>
|
||||||
|
<methods>
|
||||||
|
<method name="register_interaction_profile">
|
||||||
|
<return type="void" />
|
||||||
|
<param index="0" name="display_name" type="String" />
|
||||||
|
<param index="1" name="openxr_path" type="String" />
|
||||||
|
<param index="2" name="openxr_extension_name" type="String" />
|
||||||
|
<description>
|
||||||
|
Registers an interaction profile using its OpenXR designation (e.g. [code]/interaction_profiles/khr/simple_controller[/code] is the profile for OpenXR's simple controller profile).
|
||||||
|
[param display_name] is the description shown to the user. [param openxr_path] is the interaction profile path being registered. [param openxr_extension_name] optionally restricts this profile to the given extension being enabled/available. If the extension is not available, the profile and all related entries used in an action map are filtered out.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="register_io_path">
|
||||||
|
<return type="void" />
|
||||||
|
<param index="0" name="interaction_profile" type="String" />
|
||||||
|
<param index="1" name="display_name" type="String" />
|
||||||
|
<param index="2" name="toplevel_path" type="String" />
|
||||||
|
<param index="3" name="openxr_path" type="String" />
|
||||||
|
<param index="4" name="openxr_extension_name" type="String" />
|
||||||
|
<param index="5" name="action_type" type="int" enum="OpenXRAction.ActionType" />
|
||||||
|
<description>
|
||||||
|
Registers an input/output path for the given [param interaction_profile]. The profile should previously have been registered using [method register_interaction_profile]. [param display_name] is the description shown to the user. [param toplevel_path] specifies the bind path this input/output can be bound to (e.g. [code]/user/hand/left[/code] or [code]/user/hand/right[/code]). [param openxr_path] is the action input/output being registered (e.g. [code]/user/hand/left/input/aim/pose[/code]). [param openxr_extension_name] restricts this input/output to an enabled/available extension, this doesn't need to repeat the extension on the profile but relates to overlapping extension (e.g. [code]XR_EXT_palm_pose[/code] that introduces [code]…/input/palm_ext/pose[/code] input paths). [param action_type] defines the type of input or output provided by OpenXR.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="register_top_level_path">
|
||||||
|
<return type="void" />
|
||||||
|
<param index="0" name="display_name" type="String" />
|
||||||
|
<param index="1" name="openxr_path" type="String" />
|
||||||
|
<param index="2" name="openxr_extension_name" type="String" />
|
||||||
|
<description>
|
||||||
|
Registers a top level path to which profiles can be bound. For instance [code]/user/hand/left[/code] refers to the bind point for the player's left hand. Extensions can register additional top level paths, for instance a haptic vest extension might register [code]/user/body/vest[/code].
|
||||||
|
[param display_name] is the name shown to the user. [param openxr_path] is the top level path being registered. [param openxr_extension_name] is optional and ensures the top level path is only used if the specified extension is available/enabled.
|
||||||
|
When a top level path ends up being bound by OpenXR, a [XRPositionalTracker] is instantiated to manage the state of the device.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
</methods>
|
||||||
|
</class>
|
|
@ -148,7 +148,7 @@ OpenXRInteractionProfileEditorBase::OpenXRInteractionProfileEditorBase(Ref<OpenX
|
||||||
String profile_path = interaction_profile->get_interaction_profile_path();
|
String profile_path = interaction_profile->get_interaction_profile_path();
|
||||||
String profile_name = profile_path;
|
String profile_name = profile_path;
|
||||||
|
|
||||||
profile_def = OpenXRInteractionProfileMetaData::get_singleton()->get_profile(profile_path);
|
profile_def = OpenXRInteractionProfileMetadata::get_singleton()->get_profile(profile_path);
|
||||||
if (profile_def != nullptr) {
|
if (profile_def != nullptr) {
|
||||||
profile_name = profile_def->display_name;
|
profile_name = profile_def->display_name;
|
||||||
}
|
}
|
||||||
|
@ -185,7 +185,7 @@ void OpenXRInteractionProfileEditor::_on_remove_pressed(const String p_action, c
|
||||||
undo_redo->commit_action(true);
|
undo_redo->commit_action(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInteractionProfileEditor::_add_io_path(VBoxContainer *p_container, const OpenXRInteractionProfileMetaData::IOPath *p_io_path) {
|
void OpenXRInteractionProfileEditor::_add_io_path(VBoxContainer *p_container, const OpenXRInteractionProfileMetadata::IOPath *p_io_path) {
|
||||||
HBoxContainer *path_hb = memnew(HBoxContainer);
|
HBoxContainer *path_hb = memnew(HBoxContainer);
|
||||||
path_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
path_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||||
p_container->add_child(path_hb);
|
p_container->add_child(path_hb);
|
||||||
|
@ -274,7 +274,7 @@ void OpenXRInteractionProfileEditor::_update_interaction_profile() {
|
||||||
// Determine toplevel paths
|
// Determine toplevel paths
|
||||||
Vector<String> top_level_paths;
|
Vector<String> top_level_paths;
|
||||||
for (int i = 0; i < profile_def->io_paths.size(); i++) {
|
for (int i = 0; i < profile_def->io_paths.size(); i++) {
|
||||||
const OpenXRInteractionProfileMetaData::IOPath *io_path = &profile_def->io_paths[i];
|
const OpenXRInteractionProfileMetadata::IOPath *io_path = &profile_def->io_paths[i];
|
||||||
|
|
||||||
if (!top_level_paths.has(io_path->top_level_path)) {
|
if (!top_level_paths.has(io_path->top_level_path)) {
|
||||||
top_level_paths.push_back(io_path->top_level_path);
|
top_level_paths.push_back(io_path->top_level_path);
|
||||||
|
@ -291,11 +291,11 @@ void OpenXRInteractionProfileEditor::_update_interaction_profile() {
|
||||||
panel->add_child(container);
|
panel->add_child(container);
|
||||||
|
|
||||||
Label *label = memnew(Label);
|
Label *label = memnew(Label);
|
||||||
label->set_text(OpenXRInteractionProfileMetaData::get_singleton()->get_top_level_name(top_level_paths[i]));
|
label->set_text(OpenXRInteractionProfileMetadata::get_singleton()->get_top_level_name(top_level_paths[i]));
|
||||||
container->add_child(label);
|
container->add_child(label);
|
||||||
|
|
||||||
for (int j = 0; j < profile_def->io_paths.size(); j++) {
|
for (int j = 0; j < profile_def->io_paths.size(); j++) {
|
||||||
const OpenXRInteractionProfileMetaData::IOPath *io_path = &profile_def->io_paths[j];
|
const OpenXRInteractionProfileMetadata::IOPath *io_path = &profile_def->io_paths[j];
|
||||||
if (io_path->top_level_path == top_level_paths[i]) {
|
if (io_path->top_level_path == top_level_paths[i]) {
|
||||||
_add_io_path(container, io_path);
|
_add_io_path(container, io_path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
#include "../action_map/openxr_action_map.h"
|
#include "../action_map/openxr_action_map.h"
|
||||||
#include "../action_map/openxr_interaction_profile.h"
|
#include "../action_map/openxr_interaction_profile.h"
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
#include "openxr_select_action_dialog.h"
|
#include "openxr_select_action_dialog.h"
|
||||||
|
|
||||||
#include "editor/editor_undo_redo_manager.h"
|
#include "editor/editor_undo_redo_manager.h"
|
||||||
|
@ -52,7 +52,7 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
|
||||||
const OpenXRInteractionProfileMetaData::InteractionProfile *profile_def = nullptr;
|
const OpenXRInteractionProfileMetadata::InteractionProfile *profile_def = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Ref<OpenXRInteractionProfile> get_interaction_profile() { return interaction_profile; }
|
Ref<OpenXRInteractionProfile> get_interaction_profile() { return interaction_profile; }
|
||||||
|
@ -77,7 +77,7 @@ private:
|
||||||
HBoxContainer *main_hb = nullptr;
|
HBoxContainer *main_hb = nullptr;
|
||||||
OpenXRSelectActionDialog *select_action_dialog = nullptr;
|
OpenXRSelectActionDialog *select_action_dialog = nullptr;
|
||||||
|
|
||||||
void _add_io_path(VBoxContainer *p_container, const OpenXRInteractionProfileMetaData::IOPath *p_io_path);
|
void _add_io_path(VBoxContainer *p_container, const OpenXRInteractionProfileMetadata::IOPath *p_io_path);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void select_action_for(const String p_io_path);
|
void select_action_for(const String p_io_path);
|
||||||
|
|
|
@ -75,13 +75,13 @@ void OpenXRSelectInteractionProfileDialog::open(PackedStringArray p_do_not_inclu
|
||||||
ip_buttons.clear();
|
ip_buttons.clear();
|
||||||
|
|
||||||
// in with the new
|
// in with the new
|
||||||
PackedStringArray interaction_profiles = OpenXRInteractionProfileMetaData::get_singleton()->get_interaction_profile_paths();
|
PackedStringArray interaction_profiles = OpenXRInteractionProfileMetadata::get_singleton()->get_interaction_profile_paths();
|
||||||
for (int i = 0; i < interaction_profiles.size(); i++) {
|
for (int i = 0; i < interaction_profiles.size(); i++) {
|
||||||
String path = interaction_profiles[i];
|
String path = interaction_profiles[i];
|
||||||
if (!p_do_not_include.has(path)) {
|
if (!p_do_not_include.has(path)) {
|
||||||
Button *ip_button = memnew(Button);
|
Button *ip_button = memnew(Button);
|
||||||
ip_button->set_flat(true);
|
ip_button->set_flat(true);
|
||||||
ip_button->set_text(OpenXRInteractionProfileMetaData::get_singleton()->get_profile(path)->display_name);
|
ip_button->set_text(OpenXRInteractionProfileMetadata::get_singleton()->get_profile(path)->display_name);
|
||||||
ip_button->connect("pressed", callable_mp(this, &OpenXRSelectInteractionProfileDialog::_on_select_interaction_profile).bind(path));
|
ip_button->connect("pressed", callable_mp(this, &OpenXRSelectInteractionProfileDialog::_on_select_interaction_profile).bind(path));
|
||||||
main_vb->add_child(ip_button);
|
main_vb->add_child(ip_button);
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#ifndef OPENXR_SELECT_INTERACTION_PROFILE_DIALOG_H
|
#ifndef OPENXR_SELECT_INTERACTION_PROFILE_DIALOG_H
|
||||||
#define OPENXR_SELECT_INTERACTION_PROFILE_DIALOG_H
|
#define OPENXR_SELECT_INTERACTION_PROFILE_DIALOG_H
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
#include "scene/gui/box_container.h"
|
#include "scene/gui/box_container.h"
|
||||||
#include "scene/gui/button.h"
|
#include "scene/gui/button.h"
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "openxr_htc_controller_extension.h"
|
#include "openxr_htc_controller_extension.h"
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
HashMap<String, bool *> OpenXRHTCControllerExtension::get_requested_extensions() {
|
HashMap<String, bool *> OpenXRHTCControllerExtension::get_requested_extensions() {
|
||||||
HashMap<String, bool *> request_extensions;
|
HashMap<String, bool *> request_extensions;
|
||||||
|
@ -46,7 +46,7 @@ bool OpenXRHTCControllerExtension::is_available(HTCControllers p_type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRHTCControllerExtension::on_register_metadata() {
|
void OpenXRHTCControllerExtension::on_register_metadata() {
|
||||||
OpenXRInteractionProfileMetaData *metadata = OpenXRInteractionProfileMetaData::get_singleton();
|
OpenXRInteractionProfileMetadata *metadata = OpenXRInteractionProfileMetadata::get_singleton();
|
||||||
ERR_FAIL_NULL(metadata);
|
ERR_FAIL_NULL(metadata);
|
||||||
|
|
||||||
// HTC Vive Cosmos controller
|
// HTC Vive Cosmos controller
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "openxr_htc_vive_tracker_extension.h"
|
#include "openxr_htc_vive_tracker_extension.h"
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
#include "core/string/print_string.h"
|
#include "core/string/print_string.h"
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ bool OpenXRHTCViveTrackerExtension::is_available() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRHTCViveTrackerExtension::on_register_metadata() {
|
void OpenXRHTCViveTrackerExtension::on_register_metadata() {
|
||||||
OpenXRInteractionProfileMetaData *metadata = OpenXRInteractionProfileMetaData::get_singleton();
|
OpenXRInteractionProfileMetadata *metadata = OpenXRInteractionProfileMetadata::get_singleton();
|
||||||
ERR_FAIL_NULL(metadata);
|
ERR_FAIL_NULL(metadata);
|
||||||
|
|
||||||
// HTC Vive tracker
|
// HTC Vive tracker
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "openxr_huawei_controller_extension.h"
|
#include "openxr_huawei_controller_extension.h"
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
HashMap<String, bool *> OpenXRHuaweiControllerExtension::get_requested_extensions() {
|
HashMap<String, bool *> OpenXRHuaweiControllerExtension::get_requested_extensions() {
|
||||||
HashMap<String, bool *> request_extensions;
|
HashMap<String, bool *> request_extensions;
|
||||||
|
@ -45,7 +45,7 @@ bool OpenXRHuaweiControllerExtension::is_available() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRHuaweiControllerExtension::on_register_metadata() {
|
void OpenXRHuaweiControllerExtension::on_register_metadata() {
|
||||||
OpenXRInteractionProfileMetaData *metadata = OpenXRInteractionProfileMetaData::get_singleton();
|
OpenXRInteractionProfileMetadata *metadata = OpenXRInteractionProfileMetadata::get_singleton();
|
||||||
ERR_FAIL_NULL(metadata);
|
ERR_FAIL_NULL(metadata);
|
||||||
|
|
||||||
// Huawei controller
|
// Huawei controller
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "openxr_ml2_controller_extension.h"
|
#include "openxr_ml2_controller_extension.h"
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
HashMap<String, bool *> OpenXRML2ControllerExtension::get_requested_extensions() {
|
HashMap<String, bool *> OpenXRML2ControllerExtension::get_requested_extensions() {
|
||||||
HashMap<String, bool *> request_extensions;
|
HashMap<String, bool *> request_extensions;
|
||||||
|
@ -45,7 +45,7 @@ bool OpenXRML2ControllerExtension::is_available() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRML2ControllerExtension::on_register_metadata() {
|
void OpenXRML2ControllerExtension::on_register_metadata() {
|
||||||
OpenXRInteractionProfileMetaData *metadata = OpenXRInteractionProfileMetaData::get_singleton();
|
OpenXRInteractionProfileMetadata *metadata = OpenXRInteractionProfileMetadata::get_singleton();
|
||||||
ERR_FAIL_NULL(metadata);
|
ERR_FAIL_NULL(metadata);
|
||||||
|
|
||||||
// Magic Leap 2 Controller
|
// Magic Leap 2 Controller
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "openxr_pico_controller_extension.h"
|
#include "openxr_pico_controller_extension.h"
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
// Pico controllers are not part of the OpenXR spec at the time of writing this
|
// Pico controllers are not part of the OpenXR spec at the time of writing this
|
||||||
// code. We'll hardcode the extension name that is used internally, verified by
|
// code. We'll hardcode the extension name that is used internally, verified by
|
||||||
|
@ -53,7 +53,7 @@ bool OpenXRPicoControllerExtension::is_available() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRPicoControllerExtension::on_register_metadata() {
|
void OpenXRPicoControllerExtension::on_register_metadata() {
|
||||||
OpenXRInteractionProfileMetaData *metadata = OpenXRInteractionProfileMetaData::get_singleton();
|
OpenXRInteractionProfileMetadata *metadata = OpenXRInteractionProfileMetadata::get_singleton();
|
||||||
ERR_FAIL_NULL(metadata);
|
ERR_FAIL_NULL(metadata);
|
||||||
|
|
||||||
// Pico controller (Pico 4 and Pico Neo 3 controllers)
|
// Pico controller (Pico 4 and Pico Neo 3 controllers)
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "openxr_wmr_controller_extension.h"
|
#include "openxr_wmr_controller_extension.h"
|
||||||
|
|
||||||
#include "../action_map/openxr_interaction_profile_meta_data.h"
|
#include "../action_map/openxr_interaction_profile_metadata.h"
|
||||||
|
|
||||||
HashMap<String, bool *> OpenXRWMRControllerExtension::get_requested_extensions() {
|
HashMap<String, bool *> OpenXRWMRControllerExtension::get_requested_extensions() {
|
||||||
HashMap<String, bool *> request_extensions;
|
HashMap<String, bool *> request_extensions;
|
||||||
|
@ -47,7 +47,7 @@ bool OpenXRWMRControllerExtension::is_available(WMRControllers p_type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRWMRControllerExtension::on_register_metadata() {
|
void OpenXRWMRControllerExtension::on_register_metadata() {
|
||||||
OpenXRInteractionProfileMetaData *metadata = OpenXRInteractionProfileMetaData::get_singleton();
|
OpenXRInteractionProfileMetadata *metadata = OpenXRInteractionProfileMetadata::get_singleton();
|
||||||
ERR_FAIL_NULL(metadata);
|
ERR_FAIL_NULL(metadata);
|
||||||
|
|
||||||
// HP MR controller (newer G2 controllers)
|
// HP MR controller (newer G2 controllers)
|
||||||
|
|
|
@ -216,7 +216,7 @@ bool OpenXRAPI::is_extension_enabled(const String &p_extension) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenXRAPI::is_top_level_path_supported(const String &p_toplevel_path) {
|
bool OpenXRAPI::is_top_level_path_supported(const String &p_toplevel_path) {
|
||||||
String required_extension = OpenXRInteractionProfileMetaData::get_singleton()->get_top_level_extension(p_toplevel_path);
|
String required_extension = OpenXRInteractionProfileMetadata::get_singleton()->get_top_level_extension(p_toplevel_path);
|
||||||
|
|
||||||
// If unsupported is returned we likely have a misspelled interaction profile path in our action map. Always output that as an error.
|
// If unsupported is returned we likely have a misspelled interaction profile path in our action map. Always output that as an error.
|
||||||
ERR_FAIL_COND_V_MSG(required_extension == XR_PATH_UNSUPPORTED_NAME, false, "OpenXR: Unsupported toplevel path " + p_toplevel_path);
|
ERR_FAIL_COND_V_MSG(required_extension == XR_PATH_UNSUPPORTED_NAME, false, "OpenXR: Unsupported toplevel path " + p_toplevel_path);
|
||||||
|
@ -236,7 +236,7 @@ bool OpenXRAPI::is_top_level_path_supported(const String &p_toplevel_path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenXRAPI::is_interaction_profile_supported(const String &p_ip_path) {
|
bool OpenXRAPI::is_interaction_profile_supported(const String &p_ip_path) {
|
||||||
String required_extension = OpenXRInteractionProfileMetaData::get_singleton()->get_interaction_profile_extension(p_ip_path);
|
String required_extension = OpenXRInteractionProfileMetadata::get_singleton()->get_interaction_profile_extension(p_ip_path);
|
||||||
|
|
||||||
// If unsupported is returned we likely have a misspelled interaction profile path in our action map. Always output that as an error.
|
// If unsupported is returned we likely have a misspelled interaction profile path in our action map. Always output that as an error.
|
||||||
ERR_FAIL_COND_V_MSG(required_extension == XR_PATH_UNSUPPORTED_NAME, false, "OpenXR: Unsupported interaction profile " + p_ip_path);
|
ERR_FAIL_COND_V_MSG(required_extension == XR_PATH_UNSUPPORTED_NAME, false, "OpenXR: Unsupported interaction profile " + p_ip_path);
|
||||||
|
@ -260,9 +260,9 @@ bool OpenXRAPI::interaction_profile_supports_io_path(const String &p_ip_path, co
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OpenXRInteractionProfileMetaData::IOPath *io_path = OpenXRInteractionProfileMetaData::get_singleton()->get_io_path(p_ip_path, p_io_path);
|
const OpenXRInteractionProfileMetadata::IOPath *io_path = OpenXRInteractionProfileMetadata::get_singleton()->get_io_path(p_ip_path, p_io_path);
|
||||||
|
|
||||||
// If the io_path is not part of our meta data we've likely got a misspelled name or a bad action map, report
|
// If the io_path is not part of our metadata we've likely got a misspelled name or a bad action map, report
|
||||||
ERR_FAIL_NULL_V_MSG(io_path, false, "OpenXR: Unsupported io path " + String(p_ip_path) + String(p_io_path));
|
ERR_FAIL_NULL_V_MSG(io_path, false, "OpenXR: Unsupported io path " + String(p_ip_path) + String(p_io_path));
|
||||||
|
|
||||||
if (io_path->openxr_extension_name == "") {
|
if (io_path->openxr_extension_name == "") {
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include "action_map/openxr_action_map.h"
|
#include "action_map/openxr_action_map.h"
|
||||||
#include "action_map/openxr_action_set.h"
|
#include "action_map/openxr_action_set.h"
|
||||||
#include "action_map/openxr_interaction_profile.h"
|
#include "action_map/openxr_interaction_profile.h"
|
||||||
#include "action_map/openxr_interaction_profile_meta_data.h"
|
#include "action_map/openxr_interaction_profile_metadata.h"
|
||||||
#include "openxr_interface.h"
|
#include "openxr_interface.h"
|
||||||
|
|
||||||
#include "extensions/openxr_extension_wrapper_extension.h"
|
#include "extensions/openxr_extension_wrapper_extension.h"
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static OpenXRAPI *openxr_api = nullptr;
|
static OpenXRAPI *openxr_api = nullptr;
|
||||||
static OpenXRInteractionProfileMetaData *openxr_interaction_profile_meta_data = nullptr;
|
static OpenXRInteractionProfileMetadata *openxr_interaction_profile_metadata = nullptr;
|
||||||
static Ref<OpenXRInterface> openxr_interface;
|
static Ref<OpenXRInterface> openxr_interface;
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
|
@ -77,10 +77,10 @@ static void _editor_init() {
|
||||||
if (OpenXRAPI::openxr_is_enabled(false)) {
|
if (OpenXRAPI::openxr_is_enabled(false)) {
|
||||||
// Only add our OpenXR action map editor if OpenXR is enabled for our project
|
// Only add our OpenXR action map editor if OpenXR is enabled for our project
|
||||||
|
|
||||||
if (openxr_interaction_profile_meta_data == nullptr) {
|
if (openxr_interaction_profile_metadata == nullptr) {
|
||||||
// If we didn't initialize our actionmap meta data at startup, we initialize it now.
|
// If we didn't initialize our actionmap metadata at startup, we initialize it now.
|
||||||
openxr_interaction_profile_meta_data = memnew(OpenXRInteractionProfileMetaData);
|
openxr_interaction_profile_metadata = memnew(OpenXRInteractionProfileMetadata);
|
||||||
ERR_FAIL_NULL(openxr_interaction_profile_meta_data);
|
ERR_FAIL_NULL(openxr_interaction_profile_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenXREditorPlugin *openxr_plugin = memnew(OpenXREditorPlugin());
|
OpenXREditorPlugin *openxr_plugin = memnew(OpenXREditorPlugin());
|
||||||
|
@ -118,8 +118,8 @@ void initialize_openxr_module(ModuleInitializationLevel p_level) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OpenXRAPI::openxr_is_enabled()) {
|
if (OpenXRAPI::openxr_is_enabled()) {
|
||||||
openxr_interaction_profile_meta_data = memnew(OpenXRInteractionProfileMetaData);
|
openxr_interaction_profile_metadata = memnew(OpenXRInteractionProfileMetadata);
|
||||||
ERR_FAIL_NULL(openxr_interaction_profile_meta_data);
|
ERR_FAIL_NULL(openxr_interaction_profile_metadata);
|
||||||
openxr_api = memnew(OpenXRAPI);
|
openxr_api = memnew(OpenXRAPI);
|
||||||
ERR_FAIL_NULL(openxr_api);
|
ERR_FAIL_NULL(openxr_api);
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ void initialize_openxr_module(ModuleInitializationLevel p_level) {
|
||||||
GDREGISTER_CLASS(OpenXRAction);
|
GDREGISTER_CLASS(OpenXRAction);
|
||||||
GDREGISTER_CLASS(OpenXRActionSet);
|
GDREGISTER_CLASS(OpenXRActionSet);
|
||||||
GDREGISTER_CLASS(OpenXRActionMap);
|
GDREGISTER_CLASS(OpenXRActionMap);
|
||||||
GDREGISTER_CLASS(OpenXRInteractionProfileMetaData);
|
GDREGISTER_CLASS(OpenXRInteractionProfileMetadata);
|
||||||
GDREGISTER_CLASS(OpenXRIPBinding);
|
GDREGISTER_CLASS(OpenXRIPBinding);
|
||||||
GDREGISTER_CLASS(OpenXRInteractionProfile);
|
GDREGISTER_CLASS(OpenXRInteractionProfile);
|
||||||
|
|
||||||
|
@ -203,9 +203,9 @@ void uninitialize_openxr_module(ModuleInitializationLevel p_level) {
|
||||||
openxr_api = nullptr;
|
openxr_api = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (openxr_interaction_profile_meta_data) {
|
if (openxr_interaction_profile_metadata) {
|
||||||
memdelete(openxr_interaction_profile_meta_data);
|
memdelete(openxr_interaction_profile_metadata);
|
||||||
openxr_interaction_profile_meta_data = nullptr;
|
openxr_interaction_profile_metadata = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// cleanup our extension wrappers
|
// cleanup our extension wrappers
|
||||||
|
|
|
@ -52,7 +52,7 @@ class XRInterface : public RefCounted {
|
||||||
GDCLASS(XRInterface, RefCounted);
|
GDCLASS(XRInterface, RefCounted);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum Capabilities { /* purely meta data, provides some info about what this interface supports */
|
enum Capabilities { /* purely metadata, provides some info about what this interface supports */
|
||||||
XR_NONE = 0, /* no capabilities */
|
XR_NONE = 0, /* no capabilities */
|
||||||
XR_MONO = 1, /* can be used with mono output */
|
XR_MONO = 1, /* can be used with mono output */
|
||||||
XR_STEREO = 2, /* can be used with stereo output */
|
XR_STEREO = 2, /* can be used with stereo output */
|
||||||
|
|
|
@ -154,7 +154,7 @@ TEST_CASE("[SceneTree][ArrayMesh] Adding and modifying blendshapes.") {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[SceneTree][ArrayMesh] Surface meta data tests.") {
|
TEST_CASE("[SceneTree][ArrayMesh] Surface metadata tests.") {
|
||||||
Ref<ArrayMesh> mesh = memnew(ArrayMesh);
|
Ref<ArrayMesh> mesh = memnew(ArrayMesh);
|
||||||
Ref<CylinderMesh> cylinder = memnew(CylinderMesh);
|
Ref<CylinderMesh> cylinder = memnew(CylinderMesh);
|
||||||
Array cylinder_array{};
|
Array cylinder_array{};
|
||||||
|
|
Loading…
Reference in New Issue