[Bf-blender-cvs] [4a039158e56] soc-2019-openxr: Avoid OpenGL context deactivation, just to reactivate it immediately

Julian Eisel noreply at git.blender.org
Sat Aug 24 00:13:46 CEST 2019


Commit: 4a039158e5692f65b057c02a6162a7ee8fca8ebf
Author: Julian Eisel
Date:   Sat Aug 24 00:00:33 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB4a039158e5692f65b057c02a6162a7ee8fca8ebf

Avoid OpenGL context deactivation, just to reactivate it immediately

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

M	intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
M	source/blender/windowmanager/intern/wm_xr.c

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

diff --git a/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp b/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
index 60dff3a83d8..33803ca687b 100644
--- a/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
+++ b/intern/ghost/intern/GHOST_XrGraphicsBinding.cpp
@@ -148,14 +148,11 @@ class GHOST_XrGraphicsBindingOpenGL : public GHOST_IXrGraphicsBinding {
   }
   void drawViewEnd(XrSwapchainImageBaseHeader *swapchain_image,
                    const GHOST_XrDrawViewInfo *draw_info,
-                   GHOST_Context *ogl_ctx) override
+                   GHOST_Context * /*ogl_ctx*/) override
   {
     XrSwapchainImageOpenGLKHR *ogl_swapchain_image = reinterpret_cast<XrSwapchainImageOpenGLKHR *>(
         swapchain_image);
 
-    ogl_ctx->activateDrawingContext();
-
-    glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo);
 
     glFramebufferTexture2D(
@@ -256,8 +253,6 @@ class GHOST_XrGraphicsBindingD3D : public GHOST_IXrGraphicsBinding {
     XrSwapchainImageD3D11KHR *d3d_swapchain_image = reinterpret_cast<XrSwapchainImageD3D11KHR *>(
         swapchain_image);
 
-    ogl_ctx->activateDrawingContext();
-
 #  if 0
     /* Ideally we'd just create a render target view for the OpenXR swapchain image texture and
      * blit from the OpenGL context into it. The NV_DX_interop extension doesn't want to work with
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index f25b6c2e85c..8ce691958d5 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -240,11 +240,16 @@ void wm_xr_session_toggle(bContext *C, void *xr_context_ptr)
 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)) {
     return;
   }
   GHOST_XrSessionDrawViews(wm->xr_context, C);
+  if (surface_data->viewport) {
+    /* Still bound from view drawing. */
+    GPU_viewport_unbind(surface_data->viewport);
+  }
 }
 
 static void wm_xr_session_free_data(wmSurface *surface)
@@ -474,7 +479,9 @@ GHOST_ContextHandle wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void
   else {
     GPU_viewport_draw_to_screen_ex(viewport, &rect, draw_view->expects_srgb_buffer);
   }
-  GPU_viewport_unbind(viewport);
+  /* 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;
 }



More information about the Bf-blender-cvs mailing list