[Bf-blender-cvs] [fa9a841d436] soc-2019-openxr: Wrap WM XR data into own struct

Julian Eisel noreply at git.blender.org
Tue Oct 15 17:34:21 CEST 2019


Commit: fa9a841d43615b85194575abce737d5c69dc39e1
Author: Julian Eisel
Date:   Tue Oct 15 17:33:46 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rBfa9a841d43615b85194575abce737d5c69dc39e1

Wrap WM XR data into own struct

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

M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/makesdna/DNA_windowmanager_types.h
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/windowmanager/intern/wm_operators.c
M	source/blender/windowmanager/intern/wm_window.c
M	source/blender/windowmanager/intern/wm_xr.c

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 391ebfbd02b..7232b22a979 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7707,7 +7707,7 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
   wm->undo_stack = NULL;
 
   wm->message_bus = NULL;
-  wm->xr_context = NULL;
+  wm->xr.context = NULL;
 
   BLI_listbase_clear(&wm->jobs);
   BLI_listbase_clear(&wm->drags);
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index d91d3a2f877..9d2f7232949 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -3939,11 +3939,11 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
       for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
         const View3D *v3d_default = DNA_struct_default_get(View3D);
 
-        wm->xr_session_settings.shading_type = OB_SOLID;
-        wm->xr_session_settings.draw_flags = (V3D_OFSDRAW_SHOW_GRIDFLOOR |
+        wm->xr.session_settings.shading_type = OB_SOLID;
+        wm->xr.session_settings.draw_flags = (V3D_OFSDRAW_SHOW_GRIDFLOOR |
                                               V3D_OFSDRAW_SHOW_ANNOTATION);
-        wm->xr_session_settings.clip_start = v3d_default->clip_start;
-        wm->xr_session_settings.clip_end = v3d_default->clip_end;
+        wm->xr.session_settings.clip_start = v3d_default->clip_start;
+        wm->xr.session_settings.clip_end = v3d_default->clip_end;
       }
     }
 #endif
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index 073c911c87e..1d5cfcabf9d 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -121,6 +121,14 @@ typedef struct ReportTimerInfo {
   float widthfac;
 } ReportTimerInfo;
 
+//#ifdef WITH_OPENXR
+typedef struct wmXrData {
+  void *context; /* GHOST_XrContextHandle */
+
+  bXrSessionSettings session_settings;
+} wmXrData;
+//#endif
+
 /* reports need to be before wmWindowManager */
 
 /* windowmanager is saved, tag WMAN */
@@ -183,8 +191,7 @@ typedef struct wmWindowManager {
   struct wmMsgBus *message_bus;
 
   //#ifdef WITH_OPENXR
-  bXrSessionSettings xr_session_settings;
-  void *xr_context; /* GHOST_XrContextHandle */
+  wmXrData xr;
   //#endif
 } wmWindowManager;
 
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 46a6e4589cb..2ffa76a44a6 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -2466,6 +2466,7 @@ static void rna_def_windowmanager(BlenderRNA *brna)
 
 #  ifdef WITH_OPENXR
   prop = RNA_def_property(srna, "xr_session_settings", PROP_POINTER, PROP_NONE);
+  RNA_def_property_pointer_sdna(prop, NULL, "xr.session_settings");
   RNA_def_property_flag(prop, PROP_NEVER_NULL);
   RNA_def_property_ui_text(prop, "XR Session Settings", "");
 #  endif
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 403454ac2c4..59789880bb7 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -3459,7 +3459,7 @@ static int wm_xr_session_toggle_exec(bContext *C, wmOperator *UNUSED(op))
     return OPERATOR_CANCELLED;
   }
 
-  wm_xr_session_toggle(C, wm->xr_context);
+  wm_xr_session_toggle(C, wm->xr.context);
 
   return OPERATOR_FINISHED;
 }
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 111554868d4..ab2f321c25a 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1614,7 +1614,7 @@ void wm_window_process_events(const bContext *C)
   }
   hasevent |= wm_window_timer(C);
 #ifdef WITH_OPENXR
-  hasevent |= GHOST_XrEventsHandle(CTX_wm_manager(C)->xr_context);
+  hasevent |= GHOST_XrEventsHandle(CTX_wm_manager(C)->xr.context);
 #endif
 
   /* no event, we sleep 5 milliseconds */
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index ad87e51823d..40276e8664f 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -100,16 +100,16 @@ static void wm_xr_error_handler(const GHOST_XrError *error)
   WM_report_banner_show();
   UI_popup_menu_reports(handler_data->evil_C, &wm->reports);
 
-  if (wm->xr_context) {
+  if (wm->xr.context) {
     /* Just play safe and destroy the entire context. */
-    GHOST_XrContextDestroy(wm->xr_context);
-    wm->xr_context = NULL;
+    GHOST_XrContextDestroy(wm->xr.context);
+    wm->xr.context = NULL;
   }
 }
 
 bool wm_xr_context_ensure(bContext *C, wmWindowManager *wm)
 {
-  if (wm->xr_context) {
+  if (wm->xr.context) {
     return true;
   }
   static wmXrErrorHandlerData error_customdata;
@@ -137,25 +137,25 @@ bool wm_xr_context_ensure(bContext *C, wmWindowManager *wm)
       create_info.context_flag |= GHOST_kXrContextDebugTime;
     }
 
-    if (!(wm->xr_context = GHOST_XrContextCreate(&create_info))) {
+    if (!(wm->xr.context = GHOST_XrContextCreate(&create_info))) {
       return false;
     }
 
     /* Set up context callbacks */
-    GHOST_XrGraphicsContextBindFuncs(wm->xr_context,
+    GHOST_XrGraphicsContextBindFuncs(wm->xr.context,
                                      wm_xr_session_gpu_binding_context_create,
                                      wm_xr_session_gpu_binding_context_destroy);
-    GHOST_XrDrawViewFunc(wm->xr_context, wm_xr_draw_view);
+    GHOST_XrDrawViewFunc(wm->xr.context, wm_xr_draw_view);
   }
-  BLI_assert(wm->xr_context != NULL);
+  BLI_assert(wm->xr.context != NULL);
 
   return true;
 }
 
 void wm_xr_context_destroy(wmWindowManager *wm)
 {
-  if (wm->xr_context != NULL) {
-    GHOST_XrContextDestroy(wm->xr_context);
+  if (wm->xr.context != NULL) {
+    GHOST_XrContextDestroy(wm->xr.context);
   }
 }
 
@@ -261,10 +261,10 @@ static void wm_xr_session_surface_draw(bContext *C)
   wmWindowManager *wm = CTX_wm_manager(C);
   wmXrSurfaceData *surface_data = g_xr_surface->customdata;
 
-  if (!GHOST_XrSessionIsRunning(wm->xr_context)) {
+  if (!GHOST_XrSessionIsRunning(wm->xr.context)) {
     return;
   }
-  GHOST_XrSessionDrawViews(wm->xr_context, C);
+  GHOST_XrSessionDrawViews(wm->xr.context, C);
   if (surface_data->viewport) {
     /* Still bound from view drawing. */
     wm_xr_surface_viewport_unbind(surface_data);
@@ -450,7 +450,7 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
   bContext *C = customdata;
   wmWindowManager *wm = CTX_wm_manager(C);
   wmXrSurfaceData *surface_data = g_xr_surface->customdata;
-  bXrSessionSettings *settings = &wm->xr_session_settings;
+  bXrSessionSettings *settings = &wm->xr.session_settings;
   const float display_flags = V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS | settings->draw_flags;
   const rcti rect = {
       .xmin = 0, .ymin = 0, .xmax = draw_view->width - 1, .ymax = draw_view->height - 1};
@@ -479,7 +479,7 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
   ED_view3d_draw_offscreen_simple(CTX_data_ensure_evaluated_depsgraph(C),
                                   CTX_data_scene(C),
                                   &shading,
-                                  wm->xr_session_settings.shading_type,
+                                  wm->xr.session_settings.shading_type,
                                   draw_view->width,
                                   draw_view->height,
                                   display_flags,



More information about the Bf-blender-cvs mailing list