[Bf-blender-cvs] [31b8350b017] soc-2019-openxr: Cleanup: Refactor (hacky) swapchain image submission
Julian Eisel
noreply at git.blender.org
Sat Aug 24 03:32:40 CEST 2019
Commit: 31b8350b017dd6841656348f040e03d237883e09
Author: Julian Eisel
Date: Sat Aug 24 03:27:41 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB31b8350b017dd6841656348f040e03d237883e09
Cleanup: Refactor (hacky) swapchain image submission
Code now assumes that the view-draw callback left the OpenGL state for
ongoing use by Ghost-XR. So the state doesn't have to be set by the
swapchain image submission and thus it we don't need to pass the Ghost
OpenGL context to it in a hacky way.
Also, rename drawViewEnd (to submitToSwapchain) and remove
drawViewBegin.
===================================================================
M intern/ghost/GHOST_Types.h
M intern/ghost/intern/GHOST_IXrGraphicsBinding.h
M intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
M intern/ghost/intern/GHOST_XrSession.cpp
M source/blender/windowmanager/intern/wm_xr.c
===================================================================
diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h
index ede2de1f6da..9d2af3216ed 100644
--- a/intern/ghost/GHOST_Types.h
+++ b/intern/ghost/GHOST_Types.h
@@ -634,10 +634,7 @@ typedef void (*GHOST_XrErrorHandlerFn)(const GHOST_XrError *);
typedef void *(*GHOST_XrGraphicsContextBindFn)(GHOST_TXrGraphicsBinding graphics_lib);
typedef void (*GHOST_XrGraphicsContextUnbindFn)(GHOST_TXrGraphicsBinding graphics_lib,
void *graphics_context);
-/* XXX hacky: returns GHOST_ContextHandle so DirectX binding can get a handle to the OpenGL
- * offscreen context. */
-typedef GHOST_ContextHandle (*GHOST_XrDrawViewFn)(const GHOST_XrDrawViewInfo *draw_view,
- void *customdata);
+typedef void (*GHOST_XrDrawViewFn)(const GHOST_XrDrawViewInfo *draw_view, void *customdata);
#endif
diff --git a/intern/ghost/intern/GHOST_IXrGraphicsBinding.h b/intern/ghost/intern/GHOST_IXrGraphicsBinding.h
index 8470827c2dd..93eca1aa243 100644
--- a/intern/ghost/intern/GHOST_IXrGraphicsBinding.h
+++ b/intern/ghost/intern/GHOST_IXrGraphicsBinding.h
@@ -57,10 +57,8 @@ class GHOST_IXrGraphicsBinding {
int64_t *r_result) const = 0;
virtual std::vector<XrSwapchainImageBaseHeader *> createSwapchainImages(
uint32_t image_count) = 0;
- virtual void drawViewBegin(XrSwapchainImageBaseHeader *swapchain_image) = 0;
- virtual void drawViewEnd(XrSwapchainImageBaseHeader *swapchain_image,
- const GHOST_XrDrawViewInfo *draw_info,
- class GHOST_Context *ogl_ctx) = 0;
+ virtual void submitToSwapchain(XrSwapchainImageBaseHeader *swapchain_image,
+ const GHOST_XrDrawViewInfo *draw_info) = 0;
protected:
/* Use GHOST_XrGraphicsBindingCreateFromType */
diff --git a/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp b/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
index 33803ca687b..c425199c983 100644
--- a/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
+++ b/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
@@ -143,12 +143,8 @@ class GHOST_XrGraphicsBindingOpenGL : public GHOST_IXrGraphicsBinding {
return base_images;
}
- void drawViewBegin(XrSwapchainImageBaseHeader * /*swapchain_image*/) override
- {
- }
- void drawViewEnd(XrSwapchainImageBaseHeader *swapchain_image,
- const GHOST_XrDrawViewInfo *draw_info,
- GHOST_Context * /*ogl_ctx*/) override
+ void submitToSwapchain(XrSwapchainImageBaseHeader *swapchain_image,
+ const GHOST_XrDrawViewInfo *draw_info) override
{
XrSwapchainImageOpenGLKHR *ogl_swapchain_image = reinterpret_cast<XrSwapchainImageOpenGLKHR *>(
swapchain_image);
@@ -243,12 +239,8 @@ class GHOST_XrGraphicsBindingD3D : public GHOST_IXrGraphicsBinding {
return base_images;
}
- void drawViewBegin(XrSwapchainImageBaseHeader * /*swapchain_image*/) override
- {
- }
- void drawViewEnd(XrSwapchainImageBaseHeader *swapchain_image,
- const GHOST_XrDrawViewInfo *draw_info,
- GHOST_Context *ogl_ctx) override
+ void submitToSwapchain(XrSwapchainImageBaseHeader *swapchain_image,
+ const GHOST_XrDrawViewInfo *draw_info) override
{
XrSwapchainImageD3D11KHR *d3d_swapchain_image = reinterpret_cast<XrSwapchainImageD3D11KHR *>(
swapchain_image);
diff --git a/intern/ghost/intern/GHOST_XrSession.cpp b/intern/ghost/intern/GHOST_XrSession.cpp
index 52db74ded5b..debd86e4e48 100644
--- a/intern/ghost/intern/GHOST_XrSession.cpp
+++ b/intern/ghost/intern/GHOST_XrSession.cpp
@@ -448,7 +448,6 @@ void GHOST_XrSession::drawView(XrSwapchain swapchain,
XrSwapchainImageReleaseInfo release_info{XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO};
XrSwapchainImageBaseHeader *swapchain_image;
GHOST_XrDrawViewInfo draw_view_info{};
- GHOST_ContextHandle draw_ctx;
uint32_t swapchain_idx;
CHECK_XR(xrAcquireSwapchainImage(swapchain, &acquire_info, &swapchain_idx),
@@ -474,9 +473,8 @@ void GHOST_XrSession::drawView(XrSwapchain swapchain,
draw_view_info.height = proj_layer_view.subImage.imageRect.extent.height;
ghost_xr_draw_view_info_from_view(view, draw_view_info);
- m_gpu_binding->drawViewBegin(swapchain_image);
- draw_ctx = m_context->getCustomFuncs()->draw_view_fn(&draw_view_info, draw_customdata);
- m_gpu_binding->drawViewEnd(swapchain_image, &draw_view_info, (GHOST_Context *)draw_ctx);
+ m_context->getCustomFuncs()->draw_view_fn(&draw_view_info, draw_customdata);
+ m_gpu_binding->submitToSwapchain(swapchain_image, &draw_view_info);
CHECK_XR(xrReleaseSwapchainImage(swapchain, &release_info),
"Failed to release swapchain image used to submit VR session frame.");
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 2ee75be9cf3..0bd5628d708 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -75,7 +75,7 @@ typedef struct {
bContext *evil_C;
} wmXrErrorHandlerData;
-GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *, void *);
+void 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);
@@ -444,7 +444,7 @@ static void wm_xr_draw_matrices_create(const Scene *scene,
* This is the main viewport drawing function for VR sessions. It's assigned to Ghost-XR as a
* callback (see GHOST_XrDrawViewFunc()) and executed for each view (read: eye).
*/
-GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
+void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
{
bContext *C = customdata;
wmXrSurfaceData *surface_data = g_xr_surface->customdata;
@@ -461,7 +461,7 @@ GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void
wm_xr_draw_matrices_create(CTX_data_scene(C), draw_view, clip_start, clip_end, viewmat, winmat);
if (!wm_xr_session_surface_offscreen_ensure(draw_view)) {
- return NULL;
+ return;
}
offscreen = surface_data->offscreen;
@@ -512,8 +512,6 @@ GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void
/* Leave viewport bound so GHOST_Xr can use its context/framebuffer, its unbound in
* wm_xr_session_surface_draw(). */
// GPU_viewport_unbind(viewport);
-
- return g_xr_surface->ghost_ctx;
}
/** \} */ /* XR Drawing */
More information about the Bf-blender-cvs
mailing list