rhi: gl: Do not let external rendering trash our vao
Task-number: QTBUG-79221 Change-Id: Ie8e6376f79c816071c12962dc054838aeaabcaa5 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>bb10
parent
027d45cb57
commit
92b9dcfe2b
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -300,6 +300,7 @@ struct QGles2CommandBuffer : public QRhiCommandBuffer
|
|||
enum Cmd {
|
||||
BeginFrame,
|
||||
EndFrame,
|
||||
ResetFrame,
|
||||
Viewport,
|
||||
Scissor,
|
||||
BlendConstants,
|
||||
|
|
|
|||
Loading…
Reference in New Issue