diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-03-08 15:23:35 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-02-03 14:50:26 +0000 |
commit | f1f387c22dac8748a7edb1f4aa1ea6dac7dfbdfd (patch) | |
tree | 07f6c5a7663035a51e4b37ccac5e8e68a3a2f2c7 /src/render/renderers/opengl/renderer/renderer.cpp | |
parent | 1e2f6baf6bdcc647b40d346040b8383cf81a2ef3 (diff) |
ResourceAccessor: make it work with the modular renderer architecture
This makes Scene2D work again. Tests restored as well.
Change-Id: I4082d362c999a674be2debc297d59075f4b7c9e9
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/renderers/opengl/renderer/renderer.cpp')
-rw-r--r-- | src/render/renderers/opengl/renderer/renderer.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index 31db08d1f..680040f54 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -99,6 +99,7 @@ #endif #include <Qt3DRender/private/glresourcemanagers_p.h> +#include <Qt3DRender/private/resourceaccessor_p.h> #include <Qt3DRender/qcameralens.h> #include <Qt3DCore/private/qeventfilterservice_p.h> @@ -378,6 +379,7 @@ void Renderer::setNodeManagers(NodeManagers *managers) { m_nodesManager = managers; m_glResourceManagers = new GLResourceManagers(); + m_scene2DResourceAccessor.reset(new ResourceAccessor(this, m_nodesManager)); m_updateShaderDataTransformJob->setManagers(m_nodesManager); m_cleanupJob->setManagers(m_nodesManager); @@ -449,6 +451,39 @@ QScreen *Renderer::screen() const return m_screen; } +bool Renderer::accessOpenGLTexture(Qt3DCore::QNodeId nodeId, + QOpenGLTexture **texture, + QMutex **lock, + bool readonly) +{ + Texture *tex = m_nodesManager->textureManager()->lookupResource(nodeId); + if (!tex) + return false; + + GLTexture *glTex = m_glResourceManagers->glTextureManager()->lookupResource(tex->peerId()); + if (!glTex) + return false; + + if (glTex->isDirty()) + return false; + + if (!readonly) + glTex->setExternalRenderingEnabled(true); + + GLTexture::TextureUpdateInfo texInfo = glTex->createOrUpdateGLTexture(); + *texture = texInfo.texture; + + if (!readonly) + *lock = glTex->externalRenderingLock(); + + return true; +} + +QSharedPointer<RenderBackendResourceAccessor> Renderer::resourceAccessor() const +{ + return m_scene2DResourceAccessor; +} + // Called in RenderThread context by the run method of RenderThread // RenderThread has locked the mutex already and unlocks it when this // method termintates @@ -885,6 +920,7 @@ void Renderer::enqueueRenderView(Render::RenderView *renderView, int submitOrder } bool Renderer::canRender() const + { // Make sure that we've not been told to terminate if (m_renderThread && !m_running.loadRelaxed()) { |