From e22971073ee10ee891c61a94f934b0b3403cc5a7 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Fri, 21 Sep 2018 15:33:34 +0200 Subject: GLTexture: mark texture for upload when it's recreated and contains data In some cases, a GLTexture will destroy its internal OpenGL texture before recreating it (when it requires a new allocation due to some property change). When this happens, we need to ensure we also request our content data to be uploaded after the new internal OpenGL texture is recreated. Change-Id: Ifd3f8a1e40e5fad63d117417006c65fade5c2b39 Task-number: QTBUG-70551 Reviewed-by: Sean Harmer --- src/render/renderers/opengl/textures/gltexture.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/render') diff --git a/src/render/renderers/opengl/textures/gltexture.cpp b/src/render/renderers/opengl/textures/gltexture.cpp index b61d06a80..e98f3965d 100644 --- a/src/render/renderers/opengl/textures/gltexture.cpp +++ b/src/render/renderers/opengl/textures/gltexture.cpp @@ -212,6 +212,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; } -- cgit v1.2.3 From 6eb906bf5770370a8a5c15568d9f9463863e53a4 Mon Sep 17 00:00:00 2001 From: Mauro Persano Date: Sat, 22 Sep 2018 09:55:52 -0300 Subject: Use GLSL texture() instead of texture2D() on ES3 Change-Id: Icfec19e5bd76f6a6ca53700a5a3705aa97763859 Reviewed-by: Paul Lemire --- src/render/materialsystem/prototypes/default.json | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/render') diff --git a/src/render/materialsystem/prototypes/default.json b/src/render/materialsystem/prototypes/default.json index 535f144d7..0b971f456 100644 --- a/src/render/materialsystem/prototypes/default.json +++ b/src/render/materialsystem/prototypes/default.json @@ -85,6 +85,15 @@ "substitution": "highp vec4 $color = texture2D($name, $coord);", "headerSnippets": [ "uniform sampler2D $name;" ] }, + { + "format": { + "api": "OpenGLES", + "major": 3, + "minor": 0 + }, + "substitution": "highp vec4 $color = texture($name, $coord);", + "headerSnippets": [ "uniform sampler2D $name;" ] + }, { "format": { "api": "OpenGLCoreProfile", -- cgit v1.2.3 From dbaf2319dace853ae6c0badd7f46c7631961ad09 Mon Sep 17 00:00:00 2001 From: Mauro Persano Date: Sat, 22 Sep 2018 10:02:01 -0300 Subject: ES3 deprecated gl_FragColor, use output variable instead Change-Id: I9a6a7ee88db5471a1c4ed88ed13c99d66b764d93 Reviewed-by: Paul Lemire --- src/render/materialsystem/prototypes/default.json | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/render') diff --git a/src/render/materialsystem/prototypes/default.json b/src/render/materialsystem/prototypes/default.json index 0b971f456..7f196c8df 100644 --- a/src/render/materialsystem/prototypes/default.json +++ b/src/render/materialsystem/prototypes/default.json @@ -118,6 +118,15 @@ }, "substitution": "gl_FragColor = $fragColor;" }, + { + "format": { + "api": "OpenGLES", + "major": 3, + "minor": 0 + }, + "substitution": "fragColor = $fragColor;", + "headerSnippets": [ "out highp vec4 fragColor;" ] + }, { "format": { "api": "OpenGLCoreProfile", -- cgit v1.2.3 From c8e95f84095f3627a6b63ef66751525616c96d5d Mon Sep 17 00:00:00 2001 From: Mauro Persano Date: Sat, 22 Sep 2018 10:11:09 -0300 Subject: Add metalRoughFunction to ES3 Change-Id: I5ac330462bf051285dafbfa4554aa97e6657ac65 Reviewed-by: Mike Krus Reviewed-by: Paul Lemire --- src/render/materialsystem/prototypes/default.json | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/render') diff --git a/src/render/materialsystem/prototypes/default.json b/src/render/materialsystem/prototypes/default.json index 7f196c8df..63c39164c 100644 --- a/src/render/materialsystem/prototypes/default.json +++ b/src/render/materialsystem/prototypes/default.json @@ -461,6 +461,15 @@ "outputColor" ], "rules": [ + { + "format": { + "api": "OpenGLES", + "major": 3, + "minor": 0 + }, + "substitution": "highp vec4 $outputColor = metalRoughFunction($baseColor, $metalness, $roughness, $ambientOcclusion, $worldPosition, $worldView, $worldNormal);", + "headerSnippets": [ "#pragma include :/shaders/es3/metalrough.inc.frag" ] + }, { "format": { "api": "OpenGLCoreProfile", -- cgit v1.2.3 From ff07ec93db2b56fb3c3047549a1ad7c7d0e367e8 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 3 Oct 2018 08:46:28 +0200 Subject: Fix leak with VAOManager MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I09f15de230c571adb580bdbb3250405f562f255b Task-number: QTBUG-70892 Reviewed-by: Juan José Casafranca Reviewed-by: Sean Harmer --- src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp | 5 +++++ src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h | 1 + src/render/renderers/opengl/renderer/renderer.cpp | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src/render') 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 7319fd0e5..e1d237622 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -2142,7 +2142,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()); } } } -- cgit v1.2.3 From 08f979f96f454fb407a86b939d48c66dc354d623 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Thu, 4 Oct 2018 10:20:02 +0200 Subject: Further complete missing functions on ES3 helpers Change-Id: I62e83c360619a2e096401330a61a6f2602b743d2 Task-number: QTBUG-70660 Reviewed-by: Sean Harmer --- .../renderers/opengl/graphicshelpers/graphicshelperes3.cpp | 8 ++++++++ .../opengl/graphicshelpers/graphicshelperes3_2.cpp | 13 +++++++++++++ .../opengl/graphicshelpers/graphicshelperes3_2_p.h | 1 + .../renderers/opengl/graphicshelpers/graphicshelperes3_p.h | 1 + 4 files changed, 23 insertions(+) (limited to 'src/render') 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; -- cgit v1.2.3