diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2023-02-08 09:05:44 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2023-02-08 09:30:21 +0100 |
commit | 8f1d8139c40d8b050ac606c3d62eee7f1f37410f (patch) | |
tree | f0f3f2483bde03cd41f235ba204b4e6686cc5d8b /src/gui/rhi/qrhigles2.cpp | |
parent | 44933343937d7a6d9f6afe1f8e0b0f93a387b100 (diff) |
Avoid glDrawBuffers on ES 2.0 / WebGL 1
Fixes: QTBUG-111007
Pick-to: 6.5
Change-Id: If1d84df56ad47ac89ea43ad5091392416fe9fc5f
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Diffstat (limited to 'src/gui/rhi/qrhigles2.cpp')
-rw-r--r-- | src/gui/rhi/qrhigles2.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp index 11b1b965b8..77448a8b21 100644 --- a/src/gui/rhi/qrhigles2.cpp +++ b/src/gui/rhi/qrhigles2.cpp @@ -766,12 +766,20 @@ bool QRhiGles2::create(QRhi::Flags flags) f->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &caps.maxTextureSize); - if (caps.ctxMajor >= 3 || actualFormat.renderableType() == QSurfaceFormat::OpenGL) { + caps.gles = actualFormat.renderableType() == QSurfaceFormat::OpenGLES; + + if (!caps.gles || caps.ctxMajor >= 3) { + // non-ES or ES 3.0+ f->glGetIntegerv(GL_MAX_DRAW_BUFFERS, &caps.maxDrawBuffers); + caps.hasDrawBuffersFunc = true; f->glGetIntegerv(GL_MAX_SAMPLES, &caps.maxSamples); caps.maxSamples = qMax(1, caps.maxSamples); } else { + // ES 2.0 / WebGL 1 caps.maxDrawBuffers = 1; + caps.hasDrawBuffersFunc = false; + // This does not mean MSAA is not supported, just that we cannot query + // the supported sample counts. caps.maxSamples = 1; } @@ -781,7 +789,6 @@ bool QRhiGles2::create(QRhi::Flags flags) caps.npotTextureFull = f->hasOpenGLFeature(QOpenGLFunctions::NPOTTextures) && f->hasOpenGLFeature(QOpenGLFunctions::NPOTTextureRepeat); - caps.gles = actualFormat.renderableType() == QSurfaceFormat::OpenGLES; if (caps.gles) caps.fixedIndexPrimitiveRestart = caps.ctxMajor >= 3; // ES 3.0 else @@ -3073,7 +3080,8 @@ void QRhiGles2::executeCommandBuffer(QRhiCommandBuffer *cb) else bufs.append(caps.gles ? GL_BACK : GL_BACK_LEFT); } - f->glDrawBuffers(bufs.count(), bufs.constData()); + if (caps.hasDrawBuffersFunc) + f->glDrawBuffers(bufs.count(), bufs.constData()); if (caps.srgbCapableDefaultFramebuffer) { if (cmd.args.bindFramebuffer.srgb) f->glEnable(GL_FRAMEBUFFER_SRGB); |