diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-16 01:00:49 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-16 01:00:49 +0200 |
commit | faab18c65ab63617c2e03a27a7a03dfae050292f (patch) | |
tree | 891a02e8876ee84d999d7d172f0f7c38d174366d /src/gui | |
parent | 06ca5c49e7fb6dd23eab3a02de404c82e03bc5db (diff) | |
parent | 9cc040a806fd2e6f1458e801a99311168d594c77 (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: Ifd83db69416230175ddc3161f640b612755018fc
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/rhi/qrhigles2.cpp | 28 | ||||
-rw-r--r-- | src/gui/rhi/qrhigles2_p_p.h | 1 |
2 files changed, 22 insertions, 7 deletions
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp index e355979626..dec28cac9b 100644 --- a/src/gui/rhi/qrhigles2.cpp +++ b/src/gui/rhi/qrhigles2.cpp @@ -525,6 +525,11 @@ void QRhiGles2::destroy() ensureContext(); executeDeferredReleases(); + if (vao) { + f->glDeleteVertexArrays(1, &vao); + vao = 0; + } + for (uint shader : m_shaderCache) f->glDeleteShader(shader); m_shaderCache.clear(); @@ -1151,6 +1156,13 @@ const QRhiNativeHandles *QRhiGles2::nativeHandles(QRhiCommandBuffer *cb) return nullptr; } +static void addBoundaryCommand(QGles2CommandBuffer *cbD, QGles2CommandBuffer::Command::Cmd type) +{ + QGles2CommandBuffer::Command cmd; + cmd.cmd = type; + cbD->commands.append(cmd); +} + void QRhiGles2::beginExternal(QRhiCommandBuffer *cb) { if (ofr.active) { @@ -1166,6 +1178,9 @@ void QRhiGles2::beginExternal(QRhiCommandBuffer *cb) QGles2CommandBuffer *cbD = QRHI_RES(QGles2CommandBuffer, cb); executeCommandBuffer(cbD); cbD->resetCommands(); + + if (vao) + f->glBindVertexArray(0); } void QRhiGles2::endExternal(QRhiCommandBuffer *cb) @@ -1183,17 +1198,12 @@ void QRhiGles2::endExternal(QRhiCommandBuffer *cb) enqueueBarriersForPass(cbD); } + addBoundaryCommand(cbD, QGles2CommandBuffer::Command::ResetFrame); + if (cbD->currentTarget) enqueueBindFramebuffer(cbD->currentTarget, cbD); } -static void addBoundaryCommand(QGles2CommandBuffer *cb, QGles2CommandBuffer::Command::Cmd type) -{ - QGles2CommandBuffer::Command cmd; - cmd.cmd = type; - cb->commands.append(cmd); -} - QRhi::FrameOpResult QRhiGles2::beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) { Q_UNUSED(flags); @@ -1913,6 +1923,10 @@ void QRhiGles2::executeCommandBuffer(QRhiCommandBuffer *cb) if (vao) f->glBindVertexArray(0); break; + case QGles2CommandBuffer::Command::ResetFrame: + if (vao) + f->glBindVertexArray(vao); + break; case QGles2CommandBuffer::Command::Viewport: f->glViewport(GLint(cmd.args.viewport.x), GLint(cmd.args.viewport.y), GLsizei(cmd.args.viewport.w), GLsizei(cmd.args.viewport.h)); f->glDepthRangef(cmd.args.viewport.d0, cmd.args.viewport.d1); diff --git a/src/gui/rhi/qrhigles2_p_p.h b/src/gui/rhi/qrhigles2_p_p.h index 8814d9c19d..cc945876e6 100644 --- a/src/gui/rhi/qrhigles2_p_p.h +++ b/src/gui/rhi/qrhigles2_p_p.h @@ -300,6 +300,7 @@ struct QGles2CommandBuffer : public QRhiCommandBuffer enum Cmd { BeginFrame, EndFrame, + ResetFrame, Viewport, Scissor, BlendConstants, |