1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-07 12:30:27 +00:00

Removed member variables from OpenXRExtensionWrapper

Made extension container in OpenXRAPI static
Moved controller meta data into extensions where applicable
This commit is contained in:
Bastiaan Olij
2022-12-29 16:34:25 +11:00
parent 7e1bd3f95a
commit b6550c46ee
31 changed files with 883 additions and 536 deletions

View File

@@ -42,10 +42,7 @@ OpenXRFbPassthroughExtensionWrapper *OpenXRFbPassthroughExtensionWrapper::get_si
return singleton;
}
OpenXRFbPassthroughExtensionWrapper::OpenXRFbPassthroughExtensionWrapper(OpenXRAPI *p_openxr_api) :
OpenXRExtensionWrapper(p_openxr_api) {
request_extensions[XR_FB_PASSTHROUGH_EXTENSION_NAME] = &fb_passthrough_ext;
request_extensions[XR_FB_TRIANGLE_MESH_EXTENSION_NAME] = &fb_triangle_mesh_ext;
OpenXRFbPassthroughExtensionWrapper::OpenXRFbPassthroughExtensionWrapper() {
singleton = this;
}
@@ -53,6 +50,15 @@ OpenXRFbPassthroughExtensionWrapper::~OpenXRFbPassthroughExtensionWrapper() {
cleanup();
}
HashMap<String, bool *> OpenXRFbPassthroughExtensionWrapper::get_requested_extensions() {
HashMap<String, bool *> request_extensions;
request_extensions[XR_FB_PASSTHROUGH_EXTENSION_NAME] = &fb_passthrough_ext;
request_extensions[XR_FB_TRIANGLE_MESH_EXTENSION_NAME] = &fb_triangle_mesh_ext;
return request_extensions;
}
void OpenXRFbPassthroughExtensionWrapper::cleanup() {
fb_passthrough_ext = false;
fb_triangle_mesh_ext = false;
@@ -93,7 +99,7 @@ void OpenXRFbPassthroughExtensionWrapper::on_instance_created(const XrInstance i
}
if (fb_passthrough_ext) {
openxr_api->register_composition_layer_provider(this);
OpenXRAPI::get_singleton()->register_composition_layer_provider(this);
}
}
@@ -122,7 +128,7 @@ bool OpenXRFbPassthroughExtensionWrapper::start_passthrough() {
}
// Create the passthrough layer
result = xrCreatePassthroughLayerFB(openxr_api->get_session(), &passthrough_layer_config, &passthrough_layer);
result = xrCreatePassthroughLayerFB(OpenXRAPI::get_singleton()->get_session(), &passthrough_layer_config, &passthrough_layer);
if (!is_valid_passthrough_result(result, "Failed to create the passthrough layer")) {
stop_passthrough();
return false;
@@ -142,8 +148,8 @@ bool OpenXRFbPassthroughExtensionWrapper::start_passthrough() {
void OpenXRFbPassthroughExtensionWrapper::on_session_created(const XrSession session) {
if (fb_passthrough_ext) {
// Create the passthrough feature and start it.
XrResult result = xrCreatePassthroughFB(openxr_api->get_session(), &passthrough_create_info, &passthrough_handle);
if (!openxr_api->xr_result(result, "Failed to create passthrough")) {
XrResult result = xrCreatePassthroughFB(OpenXRAPI::get_singleton()->get_session(), &passthrough_create_info, &passthrough_handle);
if (!OpenXRAPI::get_singleton()->xr_result(result, "Failed to create passthrough")) {
passthrough_handle = XR_NULL_HANDLE;
return;
}
@@ -169,13 +175,13 @@ void OpenXRFbPassthroughExtensionWrapper::stop_passthrough() {
if (passthrough_layer != XR_NULL_HANDLE) {
// Destroy the layer
result = xrDestroyPassthroughLayerFB(passthrough_layer);
openxr_api->xr_result(result, "Unable to destroy passthrough layer");
OpenXRAPI::get_singleton()->xr_result(result, "Unable to destroy passthrough layer");
passthrough_layer = XR_NULL_HANDLE;
}
if (passthrough_handle != XR_NULL_HANDLE) {
result = xrPassthroughPauseFB(passthrough_handle);
openxr_api->xr_result(result, "Unable to stop passthrough feature");
OpenXRAPI::get_singleton()->xr_result(result, "Unable to stop passthrough feature");
}
}
@@ -186,7 +192,7 @@ void OpenXRFbPassthroughExtensionWrapper::on_session_destroyed() {
XrResult result;
if (passthrough_handle != XR_NULL_HANDLE) {
result = xrDestroyPassthroughFB(passthrough_handle);
openxr_api->xr_result(result, "Unable to destroy passthrough feature");
OpenXRAPI::get_singleton()->xr_result(result, "Unable to destroy passthrough feature");
passthrough_handle = XR_NULL_HANDLE;
}
}
@@ -194,13 +200,13 @@ void OpenXRFbPassthroughExtensionWrapper::on_session_destroyed() {
void OpenXRFbPassthroughExtensionWrapper::on_instance_destroyed() {
if (fb_passthrough_ext) {
openxr_api->unregister_composition_layer_provider(this);
OpenXRAPI::get_singleton()->unregister_composition_layer_provider(this);
}
cleanup();
}
bool OpenXRFbPassthroughExtensionWrapper::initialize_fb_passthrough_extension(const XrInstance p_instance) {
ERR_FAIL_NULL_V(openxr_api, false);
ERR_FAIL_NULL_V(OpenXRAPI::get_singleton(), false);
EXT_INIT_XR_FUNC_V(xrCreatePassthroughFB);
EXT_INIT_XR_FUNC_V(xrDestroyPassthroughFB);
@@ -219,7 +225,7 @@ bool OpenXRFbPassthroughExtensionWrapper::initialize_fb_passthrough_extension(co
}
bool OpenXRFbPassthroughExtensionWrapper::initialize_fb_triangle_mesh_extension(const XrInstance p_instance) {
ERR_FAIL_NULL_V(openxr_api, false);
ERR_FAIL_NULL_V(OpenXRAPI::get_singleton(), false);
EXT_INIT_XR_FUNC_V(xrCreateTriangleMeshFB);
EXT_INIT_XR_FUNC_V(xrDestroyTriangleMeshFB);