EGL/GLX: Resolve depth buffer more intelligently

If a depth buffer size >=32 is requested, try 24 bits as a fallback.

Task-number: QTBUG-44029
Done-with: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Change-Id: I43157d17c2bfe19b3b4a9139412e4c297e6150b7
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
This commit is contained in:
Louai Al-Khanji 2016-03-28 10:37:44 -07:00
parent 77c0730f55
commit 36bc247775
2 changed files with 16 additions and 11 deletions

View File

@ -172,6 +172,17 @@ bool q_reduceConfigAttributes(QVector<EGLint> *configAttributes)
return true;
}
i = configAttributes->indexOf(EGL_DEPTH_SIZE);
if (i >= 0) {
if (configAttributes->at(i + 1) >= 32)
configAttributes->replace(i + 1, 24);
else if (configAttributes->at(i + 1) > 1)
configAttributes->replace(i + 1, 1);
else
configAttributes->remove(i, 2);
return true;
}
i = configAttributes->indexOf(EGL_ALPHA_SIZE);
if (i >= 0) {
configAttributes->remove(i,2);
@ -195,14 +206,6 @@ bool q_reduceConfigAttributes(QVector<EGLint> *configAttributes)
return true;
}
i = configAttributes->indexOf(EGL_DEPTH_SIZE);
if (i >= 0) {
if (configAttributes->at(i + 1) > 1)
configAttributes->replace(i + 1, 1);
else
configAttributes->remove(i, 2);
return true;
}
#ifdef EGL_BIND_TO_TEXTURE_RGB
i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGB);
if (i >= 0) {

View File

@ -323,7 +323,11 @@ QSurfaceFormat qglx_reduceSurfaceFormat(const QSurfaceFormat &format, bool *redu
QSurfaceFormat retFormat = format;
*reduced = true;
if (retFormat.redBufferSize() > 1) {
if (retFormat.depthBufferSize() >= 32) {
retFormat.setDepthBufferSize(24);
} else if (retFormat.depthBufferSize() > 0) {
retFormat.setDepthBufferSize(0);
} else if (retFormat.redBufferSize() > 1) {
retFormat.setRedBufferSize(1);
} else if (retFormat.greenBufferSize() > 1) {
retFormat.setGreenBufferSize(1);
@ -337,8 +341,6 @@ QSurfaceFormat qglx_reduceSurfaceFormat(const QSurfaceFormat &format, bool *redu
retFormat.setStencilBufferSize(0);
}else if (retFormat.hasAlpha()) {
retFormat.setAlphaBufferSize(0);
}else if (retFormat.depthBufferSize() > 0) {
retFormat.setDepthBufferSize(0);
}else if (retFormat.swapBehavior() != QSurfaceFormat::SingleBuffer) {
retFormat.setSwapBehavior(QSurfaceFormat::SingleBuffer);
}else{