diff options
-rw-r--r-- | src/quick3d/quick3dscene2d/items/scene2d.cpp | 2 | ||||
-rw-r--r-- | src/render/backend/resourceaccessor.cpp | 14 | ||||
-rw-r--r-- | src/render/backend/resourceaccessor_p.h | 3 |
3 files changed, 14 insertions, 5 deletions
diff --git a/src/quick3d/quick3dscene2d/items/scene2d.cpp b/src/quick3d/quick3dscene2d/items/scene2d.cpp index c29f741ae..b5c25431f 100644 --- a/src/quick3d/quick3dscene2d/items/scene2d.cpp +++ b/src/quick3d/quick3dscene2d/items/scene2d.cpp @@ -336,7 +336,7 @@ void Scene2D::render() if (resourceAccessor()->accessResource(RenderBackendResourceAccessor::OutputAttachment, m_outputId, (void**)&attachmentData, nullptr)) { - if (!resourceAccessor()->accessResource(RenderBackendResourceAccessor::OGLTexture, + if (!resourceAccessor()->accessResource(RenderBackendResourceAccessor::OGLTextureWrite, attachmentData->m_textureUuid, (void**)&texture, &textureLock)) { // Need to call sync even if the texture is not in use diff --git a/src/render/backend/resourceaccessor.cpp b/src/render/backend/resourceaccessor.cpp index e69907f3f..c6496976a 100644 --- a/src/render/backend/resourceaccessor.cpp +++ b/src/render/backend/resourceaccessor.cpp @@ -73,7 +73,10 @@ bool ResourceAccessor::accessResource(ResourceType type, Qt3DCore::QNodeId nodeI { switch (type) { - case RenderBackendResourceAccessor::OGLTexture: { + case RenderBackendResourceAccessor::OGLTextureWrite: + Q_FALLTHROUGH(); + case RenderBackendResourceAccessor::OGLTextureRead: + { Texture *tex = m_textureManager->lookupResource(nodeId); if (!tex) return false; @@ -85,10 +88,15 @@ bool ResourceAccessor::accessResource(ResourceType type, Qt3DCore::QNodeId nodeI if (glTex->isDirty()) return false; - glTex->setExternalRenderingEnabled(true); + if (type == RenderBackendResourceAccessor::OGLTextureWrite) + glTex->setExternalRenderingEnabled(true); + QOpenGLTexture **glTextureHandle = reinterpret_cast<QOpenGLTexture **>(handle); *glTextureHandle = glTex->getGLTexture(); - *lock = glTex->externalRenderingLock(); + + if (type == RenderBackendResourceAccessor::OGLTextureWrite) + *lock = glTex->externalRenderingLock(); + return true; } diff --git a/src/render/backend/resourceaccessor_p.h b/src/render/backend/resourceaccessor_p.h index 10e4abaa9..627efcb0d 100644 --- a/src/render/backend/resourceaccessor_p.h +++ b/src/render/backend/resourceaccessor_p.h @@ -73,7 +73,8 @@ class RenderBackendResourceAccessor { public: enum ResourceType { - OGLTexture, + OGLTextureWrite, + OGLTextureRead, OutputAttachment, EntityHandle, }; |