summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-08-06 10:49:59 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-08-10 11:52:17 +0000
commit3a3fa5db6c4243d77b5b5a65604901f75c898875 (patch)
treedc3f7cee69b71fe444b66c1a53f0b8049dfc9d4c
parent85f8e910fa484296afd19a4568ba939502d562f7 (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.cpp2
-rw-r--r--src/render/backend/resourceaccessor.cpp14
-rw-r--r--src/render/backend/resourceaccessor_p.h3
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,
};