[Bf-blender-cvs] [20a1af936da] soc-2019-openxr: Enable graphics extensions if available
Julian Eisel
noreply at git.blender.org
Wed Jun 5 01:04:04 CEST 2019
Commit: 20a1af936da01ec0ceffc14bd5cb83b52998017e
Author: Julian Eisel
Date: Wed Jun 5 01:00:13 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB20a1af936da01ec0ceffc14bd5cb83b52998017e
Enable graphics extensions if available
Check if available extensions includes the GL one, or the DirectX one on
Windows. Enable them if available.
===================================================================
M source/blender/windowmanager/intern/wm_xr.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 22a1dd737cd..6bd939d6cff 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -136,10 +136,51 @@ static void openxr_gather_api_layers(wmXRContext *context)
}
}
+ATTR_NONNULL()
+ATTR_WARN_UNUSED_RESULT
+static bool openxr_extension_is_available(const wmXRContext *context, const char *extension_name)
+{
+ for (uint i = 0; i < context->oxr.extension_count; i++) {
+ if (STREQ(context->oxr.extensions[i].extensionName, extension_name)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Gather an array of names for the extensions to enable.
+ */
+static void openxr_extensions_to_enable_get(const wmXRContext *context,
+ char ***r_ext_names,
+ uint *r_ext_count)
+{
+ const static char *try_ext[] = {
+ "XR_KHR_opengl_enable",
+#ifdef WIN32
+ "XR_KHR_D3D11_enable",
+#endif
+ };
+ const uint try_ext_count = ARRAY_SIZE(try_ext);
+
+ BLI_assert(r_ext_names != NULL);
+ BLI_assert(r_ext_count != NULL);
+
+ *r_ext_names = MEM_malloc_arrayN(try_ext_count, sizeof(char *), __func__);
+
+ for (uint i = 0, j = 0; j < try_ext_count; j++) {
+ if (openxr_extension_is_available(context, try_ext[j])) {
+ *r_ext_names[i++] = try_ext[j];
+ }
+ }
+}
+
ATTR_NONNULL()
static bool openxr_instance_setup(wmXRContext *context)
{
XrInstanceCreateInfo create_info = {.type = XR_TYPE_INSTANCE_CREATE_INFO};
+ const char *enable_extensions = NULL;
#ifdef USE_EXT_LAYER_PRINTS
puts("Available OpenXR layers/extensions:");
@@ -153,12 +194,9 @@ static bool openxr_instance_setup(wmXRContext *context)
BLI_strncpy(
create_info.applicationInfo.applicationName, "Blender", XR_MAX_APPLICATION_NAME_SIZE);
create_info.applicationInfo.apiVersion = XR_CURRENT_API_VERSION;
- // create_info.enabledExtensionCount = 1;
- create_info.enabledExtensionCount = 0;
- static const char *enabled_extensions[] = {// "XR_KHR_D3D11_enable",
- // "XR_KHR_opengl_enable"
- ""};
- create_info.enabledExtensionNames = enabled_extensions;
+
+ openxr_extensions_to_enable_get(
+ context, &create_info.enabledExtensionNames, &create_info.enabledExtensionCount);
xrCreateInstance(&create_info, &context->oxr.instance);
@@ -166,7 +204,7 @@ static bool openxr_instance_setup(wmXRContext *context)
}
ATTR_NONNULL()
-static bool openxr_instance_log_print(wmXRContext *context)
+static void openxr_instance_log_print(wmXRContext *context)
{
BLI_assert(context->oxr.instance != XR_NULL_HANDLE);
More information about the Bf-blender-cvs
mailing list