[Bf-blender-cvs] [96a34d7f503] soc-2019-openxr: Cleanup: Unused includes, better structuring for wm_xr.c

Julian Eisel noreply at git.blender.org
Fri Aug 9 16:37:07 CEST 2019


Commit: 96a34d7f503ac4a070c1b36034bfafa449c91acf
Author: Julian Eisel
Date:   Fri Aug 9 16:35:28 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB96a34d7f503ac4a070c1b36034bfafa449c91acf

Cleanup: Unused includes, better structuring for wm_xr.c

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

M	source/blender/windowmanager/intern/wm.c
M	source/blender/windowmanager/intern/wm_init_exit.c
M	source/blender/windowmanager/intern/wm_operators.c
M	source/blender/windowmanager/intern/wm_xr.c
M	source/blender/windowmanager/wm.h

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

diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index 913b939bb87..4e7d7eead6f 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -52,9 +52,6 @@
 #include "wm_event_system.h"
 #include "wm_draw.h"
 #include "wm.h"
-#ifdef WITH_OPENXR
-#  include "GHOST_C-api.h"
-#endif
 
 #include "ED_screen.h"
 #include "BKE_undo_system.h"
@@ -378,9 +375,7 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
   }
 
 #ifdef WITH_OPENXR
-  if (wm->xr_context != NULL) {
-    GHOST_XrContextDestroy(wm->xr_context);
-  }
+  wm_xr_context_destroy(wm);
 #endif
 
   BLI_freelistN(&wm->paintcursors);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index eb3f2125ee7..9b8fb859bac 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -130,8 +130,6 @@
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_query.h"
 
-#include "wm.h"
-
 #include "DRW_engine.h"
 
 #ifdef WITH_OPENSUBDIV
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 38600dcb018..af8b8f6e61f 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -75,7 +75,6 @@
 #include "BKE_report.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h" /* BKE_ST_MAXNAME */
-#include "BKE_workspace.h"
 #include "BKE_unit.h"
 
 #include "BKE_idcode.h"
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index f17e1ad98b7..0b136d81076 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -68,6 +68,16 @@ typedef struct {
   bContext *evil_C;
 } wmXrErrorHandlerData;
 
+GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *, void *);
+void *wm_xr_session_gpu_binding_context_create(GHOST_TXrGraphicsBinding);
+void wm_xr_session_gpu_binding_context_destroy(GHOST_TXrGraphicsBinding, void *);
+wmSurface *wm_xr_session_surface_create(wmWindowManager *, unsigned int);
+
+/* -------------------------------------------------------------------- */
+/** \name XR-Context
+ *
+ * \{ */
+
 static void wm_xr_error_handler(const GHOST_XrError *error)
 {
   wmXrErrorHandlerData *handler_data = error->customdata;
@@ -116,11 +126,88 @@ bool wm_xr_context_ensure(bContext *C, wmWindowManager *wm)
     }
 
     wm->xr_context = GHOST_XrContextCreate(&create_info);
+
+    /* Set up context callbacks */
+    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);
   }
 
   return wm->xr_context != NULL;
 }
 
+void wm_xr_context_destroy(wmWindowManager *wm)
+{
+  if (wm->xr_context != NULL) {
+    GHOST_XrContextDestroy(wm->xr_context);
+  }
+}
+
+/** \} */ /* XR-Context */
+
+/* -------------------------------------------------------------------- */
+/** \name XR-Session
+ *
+ * \{ */
+
+void *wm_xr_session_gpu_binding_context_create(GHOST_TXrGraphicsBinding graphics_binding)
+{
+  wmSurface *surface = wm_xr_session_surface_create(G_MAIN->wm.first, graphics_binding);
+  wmXrSurfaceData *data = surface->customdata;
+
+  wm_surface_add(surface);
+
+  return data->secondary_ghost_ctx ? data->secondary_ghost_ctx : surface->ghost_ctx;
+}
+
+void wm_xr_session_gpu_binding_context_destroy(GHOST_TXrGraphicsBinding UNUSED(graphics_lib),
+                                               void *UNUSED(context))
+{
+  if (g_xr_surface) { /* Might have been freed already */
+    wm_surface_remove(g_xr_surface);
+  }
+
+  wm_window_reset_drawable();
+}
+
+static void wm_xr_session_begin_info_create(const Scene *scene,
+                                            GHOST_XrSessionBeginInfo *begin_info)
+{
+  if (scene->camera) {
+    copy_v3_v3(begin_info->base_pose.position, scene->camera->loc);
+    /* TODO will only work if rotmode is euler */
+    eul_to_quat(begin_info->base_pose.orientation_quat, scene->camera->rot);
+  }
+  else {
+    copy_v3_fl(begin_info->base_pose.position, 0.0f);
+    unit_qt(begin_info->base_pose.orientation_quat);
+  }
+}
+
+void wm_xr_session_toggle(bContext *C, void *xr_context_ptr)
+{
+  GHOST_XrContextHandle xr_context = xr_context_ptr;
+
+  if (xr_context && GHOST_XrSessionIsRunning(xr_context)) {
+    GHOST_XrSessionEnd(xr_context);
+  }
+  else {
+    GHOST_XrSessionBeginInfo begin_info;
+
+    wm_xr_session_begin_info_create(CTX_data_scene(C), &begin_info);
+
+    GHOST_XrSessionStart(xr_context, &begin_info);
+  }
+}
+
+/** \} */ /* XR-Session */
+
+/* -------------------------------------------------------------------- */
+/** \name XR-Session Surface
+ *
+ * \{ */
+
 static void wm_xr_session_surface_draw(bContext *C)
 {
   wmWindowManager *wm = CTX_wm_manager(C);
@@ -158,8 +245,46 @@ static void wm_xr_session_free_data(wmSurface *surface)
   g_xr_surface = NULL;
 }
 
-static wmSurface *wm_xr_session_surface_create(wmWindowManager *UNUSED(wm),
-                                               unsigned int gpu_binding_type)
+static bool wm_xr_session_surface_offscreen_ensure(const GHOST_XrDrawViewInfo *draw_view)
+{
+  wmXrSurfaceData *surface_data = g_xr_surface->customdata;
+  char err_out[256] = "unknown";
+  bool failure = false;
+
+  if (surface_data->offscreen &&
+      (GPU_offscreen_width(surface_data->offscreen) == draw_view->width) &&
+      (GPU_offscreen_height(surface_data->offscreen) == draw_view->height)) {
+    BLI_assert(surface_data->viewport);
+    return true;
+  }
+
+  DRW_opengl_context_enable();
+  if (surface_data->offscreen) {
+    GPU_viewport_clear_from_offscreen(surface_data->viewport);
+    GPU_viewport_free(surface_data->viewport);
+    GPU_offscreen_free(surface_data->offscreen);
+  }
+
+  if (!(surface_data->offscreen = GPU_offscreen_create(
+            draw_view->width, draw_view->height, 0, true, false, err_out))) {
+    failure = true;
+  }
+  if ((failure == false) &&
+      !(surface_data->viewport = GPU_viewport_create_from_offscreen(surface_data->offscreen))) {
+    GPU_offscreen_free(surface_data->offscreen);
+    failure = true;
+  }
+  DRW_opengl_context_disable();
+
+  if (failure) {
+    fprintf(stderr, "%s: failed to get buffer, %s\n", __func__, err_out);
+    return false;
+  }
+
+  return true;
+}
+
+wmSurface *wm_xr_session_surface_create(wmWindowManager *UNUSED(wm), unsigned int gpu_binding_type)
 {
   if (g_xr_surface) {
     BLI_assert(false);
@@ -201,6 +326,13 @@ static wmSurface *wm_xr_session_surface_create(wmWindowManager *UNUSED(wm),
   return surface;
 }
 
+/** \} */ /* XR-Session Surface */
+
+/* -------------------------------------------------------------------- */
+/** \name XR Drawing
+ *
+ * \{ */
+
 static void wm_xr_draw_matrices_create(const Scene *scene,
                                        const GHOST_XrDrawViewInfo *draw_view,
                                        const float clip_start,
@@ -236,46 +368,7 @@ static void wm_xr_draw_matrices_create(const Scene *scene,
   }
 }
 
-static bool wm_xr_session_surface_offscreen_ensure(const GHOST_XrDrawViewInfo *draw_view)
-{
-  wmXrSurfaceData *surface_data = g_xr_surface->customdata;
-  char err_out[256] = "unknown";
-  bool failure = false;
-
-  if (surface_data->offscreen &&
-      (GPU_offscreen_width(surface_data->offscreen) == draw_view->width) &&
-      (GPU_offscreen_height(surface_data->offscreen) == draw_view->height)) {
-    BLI_assert(surface_data->viewport);
-    return true;
-  }
-
-  DRW_opengl_context_enable();
-  if (surface_data->offscreen) {
-    GPU_viewport_clear_from_offscreen(surface_data->viewport);
-    GPU_viewport_free(surface_data->viewport);
-    GPU_offscreen_free(surface_data->offscreen);
-  }
-
-  if (!(surface_data->offscreen = GPU_offscreen_create(
-            draw_view->width, draw_view->height, 0, true, false, err_out))) {
-    failure = true;
-  }
-  if ((failure == false) &&
-      !(surface_data->viewport = GPU_viewport_create_from_offscreen(surface_data->offscreen))) {
-    GPU_offscreen_free(surface_data->offscreen);
-    failure = true;
-  }
-  DRW_opengl_context_disable();
-
-  if (failure) {
-    fprintf(stderr, "%s: failed to get buffer, %s\n", __func__, err_out);
-    return false;
-  }
-
-  return true;
-}
-
-static GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
+GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
 {
   bContext *C = customdata;
   wmXrSurfaceData *surface_data = g_xr_surface->customdata;
@@ -344,57 +437,4 @@ static GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view
   return g_xr_surface->ghost_ctx;
 }
 
-static void *wm_xr_session_gpu_binding_context_create(GHOST_TXrGraphicsBinding graphics_binding)
-{
-  wmSurface *surface = wm_xr_session_surface_create(G_MAIN->wm.first, graphics_binding);
-  wmXrSurfaceData *data = surface->customdata;
-
-  wm_surface_add(surface);
-
-  return data->secondary_ghost_ctx ? data->secondary_ghost_ctx : surface->ghost_ctx;
-}
-
-static void wm_xr_session_gpu_binding_context_destroy(
-    GHOST_TXrGraphicsBinding UNUSED(graphics_lib), void *UNUSED(context))
-{
-  if (g_xr_surface) { /* Might have been freed already */
-    wm_surface_remove(g_xr_surface);
-  }
-
-  wm_window_reset_drawable();
-}
-
-static void wm_xr_session_begin_info_create(const Scene *scene,
-                                            GHOST_XrSessionBeginInfo *begin_info)
-{
-  if (scene->camera) {
-    copy_v3_v3(begin_info->base_pose.position, scene->camera->loc);
-    /* TODO will only work if rotmode is euler */
-    eul_to_quat(begin_info->base_pose.orientation_quat, scene->camera->rot);
-  }
-  else {
-    copy_v3_fl(begin_info->base_pose.position, 0.0f);
-    unit_qt(begin_info->base_pose.orientation_quat);
-  }
-}
-
-void wm_xr_session_toggle(bContext *C, void *xr_context_ptr)
-{
-  GHOST_XrContextHandle xr_context = xr_context_ptr

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list