[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