Commit: 76385139cfbb9c0a5ea1d04836870a0a8dc45a4e Author: Julian Eisel Date: Wed Jun 19 18:30:19 2019 +0200 Branches: soc-2019-openxr https://developer.blender.org/rB76385139cfbb9c0a5ea1d04836870a0a8dc45a4e
Use friend class to access graphics data on Windows too Also fix memory leak. =================================================================== M intern/ghost/intern/GHOST_ContextD3D.cpp M intern/ghost/intern/GHOST_ContextD3D.h M intern/ghost/intern/GHOST_ContextWGL.cpp M intern/ghost/intern/GHOST_ContextWGL.h M intern/ghost/intern/GHOST_XR.cpp M intern/ghost/intern/GHOST_XRSession.cpp M release/scripts/addons =================================================================== diff --git a/intern/ghost/intern/GHOST_ContextD3D.cpp b/intern/ghost/intern/GHOST_ContextD3D.cpp index 2c4a5860ed9..2f3e28a28b2 100644 --- a/intern/ghost/intern/GHOST_ContextD3D.cpp +++ b/intern/ghost/intern/GHOST_ContextD3D.cpp @@ -383,8 +383,3 @@ static void drawTestTriangle(ID3D11Device *m_device, m_device_ctx->Draw(std::size(vertices), 0); } #endif - -ID3D11Device *GHOST_ContextD3D::getDevice() -{ - return m_device.Get(); -} diff --git a/intern/ghost/intern/GHOST_ContextD3D.h b/intern/ghost/intern/GHOST_ContextD3D.h index 2a28d03c9b5..c187dba757a 100644 --- a/intern/ghost/intern/GHOST_ContextD3D.h +++ b/intern/ghost/intern/GHOST_ContextD3D.h @@ -31,6 +31,9 @@ #include "GHOST_Context.h" class GHOST_ContextD3D : public GHOST_Context { + /* XR code needs low level graphics data to send to OpenXR. */ + friend class GHOST_XRGraphicsBinding; + public: GHOST_ContextD3D(bool stereoVisual, HWND hWnd); ~GHOST_ContextD3D(); @@ -113,8 +116,6 @@ class GHOST_ContextD3D : public GHOST_Context { return true; } - ID3D11Device *getDevice(); - private: friend class SharedOpenGLContext; diff --git a/intern/ghost/intern/GHOST_ContextWGL.cpp b/intern/ghost/intern/GHOST_ContextWGL.cpp index 62e17359d71..a3d5d6f7edf 100644 --- a/intern/ghost/intern/GHOST_ContextWGL.cpp +++ b/intern/ghost/intern/GHOST_ContextWGL.cpp @@ -730,8 +730,3 @@ GHOST_TSuccess GHOST_ContextWGL::releaseNativeHandles() return success; } - -GHOST_ContextWGL::Info GHOST_ContextWGL::getInfo() -{ - return Info{m_hDC, m_hGLRC}; -} diff --git a/intern/ghost/intern/GHOST_ContextWGL.h b/intern/ghost/intern/GHOST_ContextWGL.h index ed230591912..e1b43d36d4c 100644 --- a/intern/ghost/intern/GHOST_ContextWGL.h +++ b/intern/ghost/intern/GHOST_ContextWGL.h @@ -35,6 +35,9 @@ #endif class GHOST_ContextWGL : public GHOST_Context { + /* XR code needs low level graphics data to send to OpenXR. */ + friend class GHOST_XRGraphicsBinding; + public: /** * Constructor. @@ -101,15 +104,6 @@ class GHOST_ContextWGL : public GHOST_Context { GHOST_TSuccess setDefaultFramebufferSize(GHOST_TUns32 width, GHOST_TUns32 height); - /** - * Helper to get low level system specific info out of the context. - */ - struct Info { - HDC hDC; - HGLRC hGLRC; - }; - Info getInfo(); - private: int choose_pixel_format(bool stereoVisual, bool needAlpha); int choose_pixel_format_arb(bool stereoVisual, bool needAlpha); diff --git a/intern/ghost/intern/GHOST_XR.cpp b/intern/ghost/intern/GHOST_XR.cpp index 0561df3809d..c769ebac280 100644 --- a/intern/ghost/intern/GHOST_XR.cpp +++ b/intern/ghost/intern/GHOST_XR.cpp @@ -255,6 +255,7 @@ void GHOST_XR_context_destroy(GHOST_XRContext *xr_context) /* Unbinding may involve destruction, so call here too */ GHOST_XR_graphics_context_unbind(*xr_context); + delete xr_context->gpu_binding; if (oxr->session != XR_NULL_HANDLE) { xrDestroySession(oxr->session); diff --git a/intern/ghost/intern/GHOST_XRSession.cpp b/intern/ghost/intern/GHOST_XRSession.cpp index d975bc1874f..9255450e604 100644 --- a/intern/ghost/intern/GHOST_XRSession.cpp +++ b/intern/ghost/intern/GHOST_XRSession.cpp @@ -89,11 +89,10 @@ class GHOST_XRGraphicsBinding { oxr_binding.glx.xDisplay = ctx_glx->m_display; #elif defined(WIN32) GHOST_ContextWGL *ctx_wgl = static_cast<GHOST_ContextWGL *>(ghost_ctx); - GHOST_ContextWGL::Info info = ctx_wgl->getInfo(); oxr_binding.wgl.type = XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR; - oxr_binding.wgl.hDC = info.hDC; - oxr_binding.wgl.hGLRC = info.hGLRC; + oxr_binding.wgl.hDC = ctx_wgl->m_hDC; + oxr_binding.wgl.hGLRC = ctx_wgl->m_hGLRC; #endif break; @@ -103,7 +102,7 @@ class GHOST_XRGraphicsBinding { GHOST_ContextD3D *ctx_d3d = static_cast<GHOST_ContextD3D *>(ghost_ctx); oxr_binding.d3d11.type = XR_TYPE_GRAPHICS_BINDING_D3D11_KHR; - oxr_binding.d3d11.device = ctx_d3d->getDevice(); + oxr_binding.d3d11.device = ctx_d3d->m_device.Get(); break; } @@ -154,6 +153,7 @@ void GHOST_XR_session_end(GHOST_XRContext *xr_context) { xrEndSession(xr_context->oxr.session); GHOST_XR_graphics_context_unbind(*xr_context); + delete xr_context->gpu_binding; } void GHOST_XR_session_state_change(OpenXRData *oxr, diff --git a/release/scripts/addons b/release/scripts/addons index 6cad544cb30..a5a236df5f6 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 6cad544cb30364ac14954a9c050d83c6fcbe50dd +Subproject commit a5a236df5f6630ea17958e3006070ef609c6a4b8 _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs