diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-06 10:49:59 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-10 11:52:17 +0000 |
commit | 3a3fa5db6c4243d77b5b5a65604901f75c898875 (patch) | |
tree | dc3f7cee69b71fe444b66c1a53f0b8049dfc9d4c | |
parent | 85f8e910fa484296afd19a4568ba939502d562f7 (diff) |
ResourceAccessor: allow read-only access to textures
Change-Id: I0a8d20081912f3ff9a037cab74702581b3b02613
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
-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, }; |