diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-17 01:01:01 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-17 01:01:01 +0200 |
commit | 6f27bb135246b7fe9d11ba58e05d2b7661bc2080 (patch) | |
tree | 9704e1c4ffb775472a9984872c3bd292faa999a5 /src/gui/rhi/qrhigles2.cpp | |
parent | dc4212b3a694e143595968419ae5ad695ab2aa03 (diff) | |
parent | c222a9283d94ad1e29334bb2fba0beef7cc716c7 (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: Ica69de99be9c8af4d28a52e4b69e6af748ed983c
Diffstat (limited to 'src/gui/rhi/qrhigles2.cpp')
-rw-r--r-- | src/gui/rhi/qrhigles2.cpp | 28 |
1 files changed, 21 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); |