[Bf-blender-cvs] [af90b8aaa36] xr-controller-support: Update with changes from master

Peter Kim noreply at git.blender.org
Sat Jul 24 11:37:55 CEST 2021


Commit: af90b8aaa36625c4b5846857e5e598b275e76d8c
Author: Peter Kim
Date:   Sat Jul 24 14:23:07 2021 +0900
Branches: xr-controller-support
https://developer.blender.org/rBaf90b8aaa36625c4b5846857e5e598b275e76d8c

Update with changes from master

36c0649d32aa, c41b93bda532

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

M	intern/ghost/intern/GHOST_XrSession.cpp
M	source/blender/makesrna/intern/rna_xr.c
M	source/blender/windowmanager/xr/intern/wm_xr_draw.c
M	source/blender/windowmanager/xr/intern/wm_xr_intern.h
M	source/blender/windowmanager/xr/intern/wm_xr_session.c

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

diff --git a/intern/ghost/intern/GHOST_XrSession.cpp b/intern/ghost/intern/GHOST_XrSession.cpp
index 9feb53416e5..b87ee67489e 100644
--- a/intern/ghost/intern/GHOST_XrSession.cpp
+++ b/intern/ghost/intern/GHOST_XrSession.cpp
@@ -423,6 +423,7 @@ void GHOST_XrSession::drawView(GHOST_XrSwapchain &swapchain,
   r_proj_layer_view.fov = view.fov;
   swapchain.updateCompositionLayerProjectViewSubImage(r_proj_layer_view.subImage);
 
+  assert(view_idx < 256);
   draw_view_info.view_idx = (char)view_idx;
   draw_view_info.expects_srgb_buffer = swapchain.isBufferSRGB();
   draw_view_info.ofsx = r_proj_layer_view.subImage.imageRect.offset.x;
diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c
index 241944b3ac5..bf54c751e56 100644
--- a/source/blender/makesrna/intern/rna_xr.c
+++ b/source/blender/makesrna/intern/rna_xr.c
@@ -243,12 +243,7 @@ static void rna_XrActionMapItem_bimanual_set(PointerRNA *ptr, bool value)
 {
 #  ifdef WITH_XR_OPENXR
   XrActionMapItem *ami = ptr->data;
-  if (value) {
-    ami->action_flag |= XR_ACTION_BIMANUAL;
-  }
-  else {
-    ami->action_flag &= ~XR_ACTION_BIMANUAL;
-  }
+  SET_FLAG_FROM_TEST(ami->action_flag, value, XR_ACTION_BIMANUAL);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -271,12 +266,7 @@ static void rna_XrActionMapItem_haptic_match_user_paths_set(PointerRNA *ptr, boo
 {
 #  ifdef WITH_XR_OPENXR
   XrActionMapItem *ami = ptr->data;
-  if (value) {
-    ami->action_flag |= XR_ACTION_HAPTIC_MATCHUSERPATHS;
-  }
-  else {
-    ami->action_flag &= ~XR_ACTION_HAPTIC_MATCHUSERPATHS;
-  }
+  SET_FLAG_FROM_TEST(ami->action_flag, value, XR_ACTION_HAPTIC_MATCHUSERPATHS);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -329,12 +319,7 @@ static void rna_XrActionMapItem_pose_is_controller_grip_set(PointerRNA *ptr, boo
 {
 #  ifdef WITH_XR_OPENXR
   XrActionMapItem *ami = ptr->data;
-  if (value) {
-    ami->pose_flag |= XR_POSE_GRIP;
-  }
-  else {
-    ami->pose_flag &= ~XR_POSE_GRIP;
-  }
+  SET_FLAG_FROM_TEST(ami->pose_flag, value, XR_POSE_GRIP);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -357,12 +342,7 @@ static void rna_XrActionMapItem_pose_is_controller_aim_set(PointerRNA *ptr, bool
 {
 #  ifdef WITH_XR_OPENXR
   XrActionMapItem *ami = ptr->data;
-  if (value) {
-    ami->pose_flag |= XR_POSE_AIM;
-  }
-  else {
-    ami->pose_flag &= ~XR_POSE_AIM;
-  }
+  SET_FLAG_FROM_TEST(ami->pose_flag, value, XR_POSE_AIM);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -567,12 +547,7 @@ static void rna_XrSessionSettings_use_positional_tracking_set(PointerRNA *ptr, b
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.flag |= XR_SESSION_USE_POSITION_TRACKING;
-  }
-  else {
-    xr->session_settings.flag &= (~XR_SESSION_USE_POSITION_TRACKING);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.flag, value, XR_SESSION_USE_POSITION_TRACKING);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -593,12 +568,7 @@ static void rna_XrSessionSettings_use_absolute_tracking_set(PointerRNA *ptr, boo
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.flag |= XR_SESSION_USE_ABSOLUTE_TRACKING;
-  }
-  else {
-    xr->session_settings.flag &= (~XR_SESSION_USE_ABSOLUTE_TRACKING);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.flag, value, XR_SESSION_USE_ABSOLUTE_TRACKING);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -642,12 +612,7 @@ static void rna_XrSessionSettings_headset_object_enable_set(PointerRNA *ptr, boo
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.headset_flag |= XR_OBJECT_ENABLE;
-  }
-  else {
-    xr->session_settings.headset_flag &= (~XR_OBJECT_ENABLE);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.headset_flag, value, XR_OBJECT_ENABLE);
 
   /* Store/restore object's original pose. */
   Object *ob = xr->session_settings.headset_object;
@@ -679,12 +644,7 @@ static void rna_XrSessionSettings_headset_object_autokey_set(PointerRNA *ptr, bo
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.headset_flag |= XR_OBJECT_AUTOKEY;
-  }
-  else {
-    xr->session_settings.headset_flag &= (~XR_OBJECT_AUTOKEY);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.headset_flag, value, XR_OBJECT_AUTOKEY);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -728,12 +688,7 @@ static void rna_XrSessionSettings_controller0_object_enable_set(PointerRNA *ptr,
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.controller0_flag |= XR_OBJECT_ENABLE;
-  }
-  else {
-    xr->session_settings.controller0_flag &= (~XR_OBJECT_ENABLE);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.controller0_flag, value, XR_OBJECT_ENABLE);
 
   /* Store/restore object's original pose. */
   Object *ob = xr->session_settings.controller0_object;
@@ -765,12 +720,7 @@ static void rna_XrSessionSettings_controller0_object_autokey_set(PointerRNA *ptr
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.controller0_flag |= XR_OBJECT_AUTOKEY;
-  }
-  else {
-    xr->session_settings.controller0_flag &= (~XR_OBJECT_AUTOKEY);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.controller0_flag, value, XR_OBJECT_AUTOKEY);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
@@ -814,12 +764,7 @@ static void rna_XrSessionSettings_controller1_object_enable_set(PointerRNA *ptr,
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.controller1_flag |= XR_OBJECT_ENABLE;
-  }
-  else {
-    xr->session_settings.controller1_flag &= (~XR_OBJECT_ENABLE);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.controller1_flag, value, XR_OBJECT_ENABLE);
 
   /* Store/restore object's original pose. */
   Object *ob = xr->session_settings.controller1_object;
@@ -851,12 +796,7 @@ static void rna_XrSessionSettings_controller1_object_autokey_set(PointerRNA *ptr
 {
 #  ifdef WITH_XR_OPENXR
   wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
-  if (value) {
-    xr->session_settings.controller1_flag |= XR_OBJECT_AUTOKEY;
-  }
-  else {
-    xr->session_settings.controller1_flag &= (~XR_OBJECT_AUTOKEY);
-  }
+  SET_FLAG_FROM_TEST(xr->session_settings.controller1_flag, value, XR_OBJECT_AUTOKEY);
 #  else
   UNUSED_VARS(ptr, value);
 #  endif
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_draw.c b/source/blender/windowmanager/xr/intern/wm_xr_draw.c
index 255eedf6db9..3374c4efb28 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_draw.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_draw.c
@@ -26,6 +26,7 @@
 
 #include "BKE_context.h"
 
+#include "BLI_listbase.h"
 #include "BLI_math.h"
 
 #include "ED_view3d_offscreen.h"
@@ -123,6 +124,9 @@ static void wm_xr_draw_viewport_buffers_to_active_framebuffer(
     const wmXrSurfaceData *surface_data,
     const GHOST_XrDrawViewInfo *draw_view)
 {
+  const wmXrViewportPair *vp = BLI_findlink(&surface_data->viewports, draw_view->view_idx);
+  BLI_assert(vp && vp->viewport);
+
   const bool is_upside_down = GHOST_XrSessionNeedsUpsideDownDrawing(runtime_data->context);
   rcti rect = {.xmin = 0, .ymin = 0, .xmax = draw_view->width - 1, .ymax = draw_view->height - 1};
 
@@ -132,8 +136,7 @@ static void wm_xr_draw_viewport_buffers_to_active_framebuffer(
   if (is_upside_down) {
     SWAP(int, rect.ymin, rect.ymax);
   }
-  GPU_viewport_draw_to_screen_ex(
-      surface_data->viewport[draw_view->view_idx], 0, &rect, draw_view->expects_srgb_buffer, true);
+  GPU_viewport_draw_to_screen_ex(vp->viewport, 0, &rect, draw_view->expects_srgb_buffer, true);
 }
 
 /**
@@ -165,6 +168,9 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
     return;
   }
 
+  const wmXrViewportPair *vp = BLI_findlink(&surface_data->viewports, draw_view->view_idx);
+  BLI_assert(vp && vp->offscreen && vp->viewport);
+
   /* In case a framebuffer is still bound from drawing the last eye. */
   GPU_framebuffer_restore();
   /* Some systems have drawing glitches without this. */
@@ -187,8 +193,8 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
                                   true,
                                   NULL,
                                   false,
-                                  surface_data->offscreen[draw_view->view_idx],
-                                  surface_data->viewport[draw_view->view_idx]);
+                                  vp->offscreen,
+                                  vp->viewport);
 
   /* The draw-manager uses both GPUOffscreen and GPUViewport to manage frame and texture buffers. A
    * call to GPU_viewport_draw_to_screen() is still needed to get the final result from the
@@ -198,7 +204,7 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
    * In a next step, Ghost-XR will use the currently bound frame-buffer to retrieve the image
    * to be submitted to the OpenXR swap-chain. So do not un-bind the off-screen yet! */
 
-  GPU_offscreen_bind(surface_data->offscreen[draw_view->view_idx], false);
+  GPU_offscreen_bind(vp->offscreen, false);
 
   wm_xr_draw_viewport_buffers_to_active_framebuffer(xr_data->runtime, surface_data, draw_view);
 }
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_intern.h b/source/blender/windowmanager/xr/intern/wm_xr_intern.h
index ecff7adfac6..a90a6f4b49a 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_intern.h
+++ b/source/blender/windowmanager/xr/intern/wm_xr_intern.h
@@ -126,13 +126,18 @@ typedef struct wmXrRuntimeData {
   wmXrSessionExitFn exit_fn;
 } wmXrRuntimeData;
 
+typedef struct wmXrViewportPair {
+  struct wmXrViewportPair *next, *prev;
+  struct GPUOffScreen *offscreen;
+  struct GPUViewport *viewport;
+} wmXrViewportPair;
+
 typedef struct {
   /* Offscreen buffers/viewports for each view. */
-  struct GPUOffScreen *offscreen[2];
-  struct GPUViewport *viewport[2];
+  ListBase viewports; /* wmXrViewportPair */
 
   /** XR events. */
-  ListBase events;
+  Lis

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list