diff options
-rw-r--r-- | src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp b/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp index 9cf4846a7..5a975f09e 100644 --- a/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp +++ b/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp @@ -181,26 +181,27 @@ public: ~OpenGlVideoBuffer() override { - if (m_d3dglHandle) { + if (!m_d3dglHandle) + return; + + if (QOpenGLContext::currentContext()) { if (m_glHandle) { if (!m_wgl.wglDXUnlockObjectsNV(m_d3dglHandle, 1, &m_glHandle)) qCDebug(qLcEvrD3DPresentEngine) << "Failed to unlock OpenGL texture"; if (!m_wgl.wglDXUnregisterObjectNV(m_d3dglHandle, m_glHandle)) qCDebug(qLcEvrD3DPresentEngine) << "Failed to unregister OpenGL texture"; - if (QOpenGLContext::currentContext()) { - QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions(); - if (funcs) - funcs->glDeleteTextures(1, &m_glTextureName); - else - qCDebug(qLcEvrD3DPresentEngine) << "Could not delete texture, OpenGL context functions missing"; - } else { - qCDebug(qLcEvrD3DPresentEngine) << "Could not delete texture, OpenGL context missing"; - } + QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions(); + if (funcs) + funcs->glDeleteTextures(1, &m_glTextureName); + else + qCDebug(qLcEvrD3DPresentEngine) << "Could not delete texture, OpenGL context functions missing"; } - if (!m_wgl.wglDXCloseDeviceNV(m_d3dglHandle)) qCDebug(qLcEvrD3DPresentEngine) << "Failed to close D3D-GL device"; + + } else { + qCDebug(qLcEvrD3DPresentEngine) << "Could not release texture, OpenGL context missing"; } } @@ -245,6 +246,7 @@ public: qCDebug(qLcEvrD3DPresentEngine) << "Failed to lock OpenGL texture"; m_wgl.wglDXUnregisterObjectNV(m_d3dglHandle, m_glHandle); + m_glHandle = nullptr; } else { qCDebug(qLcEvrD3DPresentEngine) << "Could not register D3D9 texture in OpenGL"; } |