summaryrefslogtreecommitdiffstats
path: root/src/render/renderers/opengl/renderer/renderer.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2018-03-08 15:23:35 +0100
committerMike Krus <mike.krus@kdab.com>2020-02-03 14:50:26 +0000
commitf1f387c22dac8748a7edb1f4aa1ea6dac7dfbdfd (patch)
tree07f6c5a7663035a51e4b37ccac5e8e68a3a2f2c7 /src/render/renderers/opengl/renderer/renderer.cpp
parent1e2f6baf6bdcc647b40d346040b8383cf81a2ef3 (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.cpp36
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()) {