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;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to