summaryrefslogtreecommitdiffstats
path: root/src/render/renderers
diff options
context:
space:
mode:
authorSean Harmer <sh@theharmers.co.uk>2018-10-11 09:55:11 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2018-10-11 10:52:41 +0000
commitb4e52d6a8deef3d268ea97cb5e4ea14948117aad (patch)
tree11245e012864cca826b904d00725af60e7184c74 /src/render/renderers
parent12c76991b8ed7378f6d2645dec8dfdd5879562b1 (diff)
parent9c40f3e4269fb0a21f3555fd6a5e99e8b4ddf1d9 (diff)
Merge "Merge branch '5.12' into dev" into refs/staging/dev
Diffstat (limited to 'src/render/renderers')
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperes3.cpp8
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2.cpp13
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperes3_p.h1
-rw-r--r--src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp5
-rw-r--r--src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h1
-rw-r--r--src/render/renderers/opengl/renderer/renderer.cpp3
-rw-r--r--src/render/renderers/opengl/textures/gltexture.cpp4
8 files changed, 35 insertions, 1 deletions
diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3.cpp
index 29ecf9308..34c1e7448 100644
--- a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3.cpp
+++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3.cpp
@@ -234,6 +234,14 @@ void GraphicsHelperES3::vertexAttributePointer(GLenum shaderDataType,
}
}
+void GraphicsHelperES3::drawArraysInstanced(GLenum primitiveType, GLint first, GLsizei count, GLsizei instances)
+{
+ m_extraFuncs->glDrawArraysInstanced(primitiveType,
+ first,
+ count,
+ instances);
+}
+
void GraphicsHelperES3::readBuffer(GLenum mode)
{
m_extraFuncs->glReadBuffer(mode);
diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2.cpp
index 9dce08e4f..56da249f2 100644
--- a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2.cpp
+++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2.cpp
@@ -117,6 +117,19 @@ void GraphicsHelperES3_2::setVerticesPerPatch(GLint verticesPerPatch)
m_extraFuncs->glPatchParameteri(GL_PATCH_VERTICES, verticesPerPatch);
}
+void GraphicsHelperES3_2::drawElementsInstancedBaseVertexBaseInstance(GLenum primitiveType, GLsizei primitiveCount, GLint indexType, void *indices, GLsizei instances, GLint baseVertex, GLint baseInstance)
+{
+ if (baseInstance != 0)
+ qWarning() << "glDrawElementsInstancedBaseVertexBaseInstance is not supported with OpenGL ES 2";
+
+ m_extraFuncs->glDrawElementsInstancedBaseVertex(primitiveType,
+ primitiveCount,
+ indexType,
+ indices,
+ instances,
+ baseVertex);
+}
+
} // namespace Render
} // namespace Qt3DRender
diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2_p.h
index ed71b1e3e..259864379 100644
--- a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2_p.h
+++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_2_p.h
@@ -70,6 +70,7 @@ public:
void bindFrameBufferAttachment(QOpenGLTexture *texture, const Attachment &attachment) override;
bool frameBufferNeedsRenderBuffer(const Attachment &attachment) override;
void setVerticesPerPatch(GLint verticesPerPatch) override;
+ void drawElementsInstancedBaseVertexBaseInstance(GLenum primitiveType, GLsizei primitiveCount, GLint indexType, void *indices, GLsizei instances, GLint baseVertex = 0, GLint baseInstance = 0) override;
};
} // namespace Render
diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_p.h
index 142b7cadd..d4467cf7f 100644
--- a/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_p.h
+++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperes3_p.h
@@ -74,6 +74,7 @@ public:
void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) override;
void buildUniformBuffer(const QVariant &v, const ShaderUniform &description, QByteArray &buffer) override;
void drawBuffers(GLsizei n, const int *bufs) override;
+ void drawArraysInstanced(GLenum primitiveType, GLint first, GLsizei count, GLsizei instances) override;
void drawElementsInstancedBaseVertexBaseInstance(GLenum primitiveType, GLsizei primitiveCount, GLint indexType, void *indices, GLsizei instances, GLint baseVertex = 0, GLint baseInstance = 0) override;
void readBuffer(GLenum mode) override;
void drawBuffer(GLenum mode) override;
diff --git a/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp b/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp
index 0c4fd8c9d..f5d0a64f5 100644
--- a/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp
+++ b/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp
@@ -108,6 +108,11 @@ void OpenGLVertexArrayObject::create(SubmissionContext *ctx, const VAOIdentifier
m_owners = key;
}
+VAOIdentifier OpenGLVertexArrayObject::key() const
+{
+ return m_owners;
+}
+
// called from Render thread
void OpenGLVertexArrayObject::destroy()
{
diff --git a/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h b/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h
index eee837221..4896df9bf 100644
--- a/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h
+++ b/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h
@@ -73,6 +73,7 @@ public:
void release();
void create(SubmissionContext *ctx, const VAOIdentifier &key);
+ VAOIdentifier key() const;
void destroy();
void cleanup();
diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp
index e08c953f9..8f5205c34 100644
--- a/src/render/renderers/opengl/renderer/renderer.cpp
+++ b/src/render/renderers/opengl/renderer/renderer.cpp
@@ -2149,7 +2149,8 @@ void Renderer::cleanGraphicsResources()
OpenGLVertexArrayObject *vao = m_nodesManager->vaoManager()->data(vaoHandle);
if (vao) {
vao->destroy();
- m_nodesManager->vaoManager()->release(vaoHandle);
+ // We remove VAO from manager using its VAOIdentifier
+ m_nodesManager->vaoManager()->releaseResource(vao->key());
}
}
}
diff --git a/src/render/renderers/opengl/textures/gltexture.cpp b/src/render/renderers/opengl/textures/gltexture.cpp
index 5c565470c..2fe0e99c1 100644
--- a/src/render/renderers/opengl/textures/gltexture.cpp
+++ b/src/render/renderers/opengl/textures/gltexture.cpp
@@ -223,6 +223,10 @@ GLTexture::TextureUpdateInfo GLTexture::createOrUpdateGLTexture()
delete m_gl;
m_gl = nullptr;
textureInfo.wasUpdated = true;
+ // If we are destroyed because of some property change but still our content data
+ // make sure we are marked for upload
+ if (m_textureData || !m_imageData.empty())
+ needUpload = true;
}
m_properties.status = QAbstractTexture::Ready;