[Bf-blender-cvs] [5d6da57aa3a] soc-2019-openxr: Cleanup: Move OpenXRData struct out of wmXRContext

Julian Eisel noreply at git.blender.org
Thu Jun 6 18:39:03 CEST 2019


Commit: 5d6da57aa3a86686e0e548165f2ce7bb9d5b93ef
Author: Julian Eisel
Date:   Thu Jun 6 18:38:06 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB5d6da57aa3a86686e0e548165f2ce7bb9d5b93ef

Cleanup: Move OpenXRData struct out of wmXRContext

Just to make access a bit more convenient.

===================================================================

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 d7b44c833ec..edd40ad1a99 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -48,20 +48,22 @@
 static_assert(false, "WITH_OPENXR not defined, but wm_xr.c is being compiled.");
 #endif
 
-typedef struct wmXRContext {
-  struct OpenXRData {
-    XrInstance instance;
+typedef struct OpenXRData {
+  XrInstance instance;
+
+  XrExtensionProperties *extensions;
+  uint32_t extension_count;
 
-    XrExtensionProperties *extensions;
-    uint32_t extension_count;
+  XrApiLayerProperties *layers;
+  uint32_t layer_count;
 
-    XrApiLayerProperties *layers;
-    uint32_t layer_count;
+  XrSystemId system_id;
+  XrSession session;
+  XrSessionState session_state;
+} OpenXRData;
 
-    XrSystemId system_id;
-    XrSession session;
-    XrSessionState session_state;
-  } oxr;
+typedef struct wmXRContext {
+  OpenXRData oxr;
 
   /** Names of enabled extensions */
   const char **enabled_extensions;
@@ -70,11 +72,11 @@ typedef struct wmXRContext {
 /**
  * \param layer_name May be NULL for extensions not belonging to a specific layer.
  */
-static void openxr_gather_extensions_ex(wmXRContext *context, const char *layer_name)
+static void openxr_gather_extensions_ex(OpenXRData *oxr, const char *layer_name)
 {
   uint32_t extension_count = 0;
 
-  context->oxr.extensions = NULL;
+  oxr->extensions = NULL;
 
   /* Get count for array creation/init first. */
   xrEnumerateInstanceExtensionProperties(layer_name, 0, &extension_count, NULL);
@@ -84,11 +86,11 @@ static void openxr_gather_extensions_ex(wmXRContext *context, const char *layer_
     return;
   }
 
-  context->oxr.extensions = MEM_calloc_arrayN(
-      extension_count, sizeof(*context->oxr.extensions), "xrExtensionProperties");
-  context->oxr.extension_count = extension_count;
+  oxr->extensions = MEM_calloc_arrayN(
+      extension_count, sizeof(*oxr->extensions), "xrExtensionProperties");
+  oxr->extension_count = extension_count;
   for (uint i = 0; i < extension_count; i++) {
-    context->oxr.extensions[i].type = XR_TYPE_EXTENSION_PROPERTIES;
+    oxr->extensions[i].type = XR_TYPE_EXTENSION_PROPERTIES;
   }
 
 #ifdef USE_EXT_LAYER_PRINTS
@@ -98,19 +100,19 @@ static void openxr_gather_extensions_ex(wmXRContext *context, const char *layer_
 #endif
   /* Actually get the extensions. */
   xrEnumerateInstanceExtensionProperties(
-      layer_name, extension_count, &extension_count, context->oxr.extensions);
+      layer_name, extension_count, &extension_count, oxr->extensions);
 #ifdef USE_EXT_LAYER_PRINTS
   for (uint i = 0; i < extension_count; i++) {
-    printf("Extension: %s\n", context->oxr.extensions[i].extensionName);
+    printf("Extension: %s\n", oxr->extensions[i].extensionName);
   }
 #endif
 }
-static void openxr_gather_extensions(wmXRContext *context)
+static void openxr_gather_extensions(OpenXRData *oxr)
 {
-  openxr_gather_extensions_ex(context, NULL);
+  openxr_gather_extensions_ex(oxr, NULL);
 }
 
-static void openxr_gather_api_layers(wmXRContext *context)
+static void openxr_gather_api_layers(OpenXRData *oxr)
 {
   uint32_t layer_count = 0;
 
@@ -122,30 +124,29 @@ static void openxr_gather_api_layers(wmXRContext *context)
     return;
   }
 
-  context->oxr.layers = MEM_calloc_arrayN(
-      layer_count, sizeof(*context->oxr.layers), "XrApiLayerProperties");
-  context->oxr.layer_count = layer_count;
+  oxr->layers = MEM_calloc_arrayN(layer_count, sizeof(*oxr->layers), "XrApiLayerProperties");
+  oxr->layer_count = layer_count;
   for (uint i = 0; i < layer_count; i++) {
-    context->oxr.layers[i].type = XR_TYPE_API_LAYER_PROPERTIES;
+    oxr->layers[i].type = XR_TYPE_API_LAYER_PROPERTIES;
   }
 
   /* Actually get the layers. */
-  xrEnumerateApiLayerProperties(layer_count, &layer_count, context->oxr.layers);
+  xrEnumerateApiLayerProperties(layer_count, &layer_count, oxr->layers);
   for (uint i = 0; i < layer_count; i++) {
 #ifdef USE_EXT_LAYER_PRINTS
-    printf("Layer: %s\n", context->oxr.layers[i].layerName);
+    printf("Layer: %s\n", oxr->layers[i].layerName);
 #endif
     /* Each layer may have own extensions */
-    openxr_gather_extensions_ex(context, context->oxr.layers[i].layerName);
+    openxr_gather_extensions_ex(oxr, oxr->layers[i].layerName);
   }
 }
 
 ATTR_NONNULL()
 ATTR_WARN_UNUSED_RESULT
-static bool openxr_extension_is_available(const wmXRContext *context, const char *extension_name)
+static bool openxr_extension_is_available(const OpenXRData *oxr, const char *extension_name)
 {
-  for (uint i = 0; i < context->oxr.extension_count; i++) {
-    if (STREQ(context->oxr.extensions[i].extensionName, extension_name)) {
+  for (uint i = 0; i < oxr->extension_count; i++) {
+    if (STREQ(oxr->extensions[i].extensionName, extension_name)) {
       return true;
     }
   }
@@ -156,7 +157,7 @@ static bool openxr_extension_is_available(const wmXRContext *context, const char
 /**
  * Gather an array of names for the extensions to enable.
  */
-static void openxr_extensions_to_enable_get(const wmXRContext *context,
+static void openxr_extensions_to_enable_get(const OpenXRData *oxr,
                                             const char ***r_ext_names,
                                             uint *r_ext_count)
 {
@@ -174,7 +175,7 @@ static void openxr_extensions_to_enable_get(const wmXRContext *context,
   *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])) {
+    if (openxr_extension_is_available(oxr, try_ext[j])) {
       *r_ext_names[i++] = try_ext[j];
     }
   }
@@ -184,12 +185,13 @@ ATTR_NONNULL()
 static bool openxr_instance_setup(wmXRContext *context)
 {
   XrInstanceCreateInfo create_info = {.type = XR_TYPE_INSTANCE_CREATE_INFO};
+  OpenXRData *oxr = &context->oxr;
 
 #ifdef USE_EXT_LAYER_PRINTS
   puts("Available OpenXR layers/extensions:");
 #endif
-  openxr_gather_api_layers(context);
-  openxr_gather_extensions(context);
+  openxr_gather_api_layers(oxr);
+  openxr_gather_extensions(oxr);
 #ifdef USE_EXT_LAYER_PRINTS
   puts("Done printing OpenXR layers/extensions.");
 #endif
@@ -199,21 +201,21 @@ static bool openxr_instance_setup(wmXRContext *context)
   create_info.applicationInfo.apiVersion = XR_CURRENT_API_VERSION;
 
   openxr_extensions_to_enable_get(
-      context, &context->enabled_extensions, &create_info.enabledExtensionCount);
+      oxr, &context->enabled_extensions, &create_info.enabledExtensionCount);
   create_info.enabledExtensionNames = context->enabled_extensions;
 
-  xrCreateInstance(&create_info, &context->oxr.instance);
+  xrCreateInstance(&create_info, &oxr->instance);
 
   return true;
 }
 
 ATTR_NONNULL()
-static void openxr_instance_log_print(wmXRContext *context)
+static void openxr_instance_log_print(OpenXRData *oxr)
 {
-  BLI_assert(context->oxr.instance != XR_NULL_HANDLE);
+  BLI_assert(oxr->instance != XR_NULL_HANDLE);
 
   XrInstanceProperties instanceProperties = {XR_TYPE_INSTANCE_PROPERTIES};
-  xrGetInstanceProperties(context->oxr.instance, &instanceProperties);
+  xrGetInstanceProperties(oxr->instance, &instanceProperties);
 
   printf("Connected to OpenXR runtime: %s\n", instanceProperties.runtimeName);
 }
@@ -221,25 +223,28 @@ static void openxr_instance_log_print(wmXRContext *context)
 wmXRContext *wm_xr_context_create(void)
 {
   wmXRContext *xr_context = MEM_callocN(sizeof(*xr_context), "wmXRContext");
+  OpenXRData *oxr = &xr_context->oxr;
 
-  xr_context->oxr.session_state = XR_SESSION_STATE_UNKNOWN;
+  oxr->session_state = XR_SESSION_STATE_UNKNOWN;
 
   BLI_assert(xr_context->oxr.instance == XR_NULL_HANDLE);
   openxr_instance_setup(xr_context);
-  openxr_instance_log_print(xr_context);
+  openxr_instance_log_print(oxr);
 
   return xr_context;
 }
 
 void wm_xr_context_destroy(wmXRContext *xr_context)
 {
-  if (xr_context->oxr.session != XR_NULL_HANDLE) {
-    xrDestroySession(xr_context->oxr.session);
+  OpenXRData *oxr = &xr_context->oxr;
+
+  if (oxr->session != XR_NULL_HANDLE) {
+    xrDestroySession(oxr->session);
   }
-  xrDestroyInstance(xr_context->oxr.instance);
+  xrDestroyInstance(oxr->instance);
 
-  MEM_SAFE_FREE(xr_context->oxr.extensions);
-  MEM_SAFE_FREE(xr_context->oxr.layers);
+  MEM_SAFE_FREE(oxr->extensions);
+  MEM_SAFE_FREE(oxr->layers);
 
   MEM_SAFE_FREE(xr_context->enabled_extensions);
 
@@ -248,11 +253,13 @@ void wm_xr_context_destroy(wmXRContext *xr_context)
 
 bool wm_xr_session_is_running(const wmXRContext *xr_context)
 {
-  if (xr_context->oxr.session == XR_NULL_HANDLE) {
+  const OpenXRData *oxr = &xr_context->oxr;
+
+  if (oxr->session == XR_NULL_HANDLE) {
     return false;
   }
 
-  return ELEM(xr_context->oxr.session_state,
+  return ELEM(oxr->session_state,
               XR_SESSION_STATE_RUNNING,
               XR_SESSION_STATE_VISIBLE,
               XR_SESSION_STATE_FOCUSED);
@@ -262,30 +269,32 @@ bool wm_xr_session_is_running(const wmXRContext *xr_context)
  * A system in OpenXR the combination of some sort of HMD plus controllers and whatever other
  * devices are managed through OpenXR. So this attempts to init the HMD and the other devices.
  */
-static void wm_xr_system_init(wmXRContext *xr_context)
+static void wm_xr_system_init(OpenXRData *oxr)
 {
-  BLI_assert(xr_context->oxr.instance != XR_NULL_HANDLE);
-  BLI_assert(xr_context->oxr.system_id == XR_NULL_SYSTEM_ID);
+  BLI_assert(oxr->instance != XR_NULL_HANDLE);
+  BLI_assert(oxr->system_id == XR_NULL_SYSTEM_ID);
 
   XrSystemGetInfo system_info = {.type = XR_TYPE_SYSTEM_GET_INFO};
   system_info.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
 
-  xrGetSystem(xr_context->oxr.instance, &system_info, &xr_context->oxr.system_id);
+  xrGetSystem(oxr->instance, &system_info, &oxr->system_id);
 }
 
 void wm_xr_session_start(wmXRContext *xr_context)
 {
-  BLI_assert(xr_context->oxr.instance != XR_NULL_HANDLE);
-  BLI_assert(xr_context->oxr.session == XR_NULL_HANDLE);
+  OpenXRData *oxr = &xr_context->oxr;
+
+  BLI_assert(oxr->instance != XR_NULL_HANDLE);
+  BLI_assert(oxr->session == XR_NULL_HANDLE);
 
-  wm_xr_syste

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list