summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/platformsupport/eglconvenience/qeglconvenience.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/platformsupport/eglconvenience/qeglconvenience.cpp b/src/platformsupport/eglconvenience/qeglconvenience.cpp
index 63f564c2d5..bb2613e05b 100644
--- a/src/platformsupport/eglconvenience/qeglconvenience.cpp
+++ b/src/platformsupport/eglconvenience/qeglconvenience.cpp
@@ -85,28 +85,28 @@ QVector<EGLint> q_createConfigAttributesFromFormat(const QSurfaceFormat &format)
QVector<EGLint> configAttributes;
configAttributes.append(EGL_RED_SIZE);
- configAttributes.append(redSize);
+ configAttributes.append(redSize > 0 ? redSize : 0);
configAttributes.append(EGL_GREEN_SIZE);
- configAttributes.append(greenSize);
+ configAttributes.append(greenSize > 0 ? greenSize : 0);
configAttributes.append(EGL_BLUE_SIZE);
- configAttributes.append(blueSize);
+ configAttributes.append(blueSize > 0 ? blueSize : 0);
configAttributes.append(EGL_ALPHA_SIZE);
- configAttributes.append(alphaSize);
+ configAttributes.append(alphaSize > 0 ? alphaSize : 0);
configAttributes.append(EGL_DEPTH_SIZE);
- configAttributes.append(depthSize);
+ configAttributes.append(depthSize > 0 ? depthSize : 0);
configAttributes.append(EGL_STENCIL_SIZE);
- configAttributes.append(stencilSize);
+ configAttributes.append(stencilSize > 0 ? stencilSize : 0);
configAttributes.append(EGL_SAMPLES);
- configAttributes.append(sampleCount);
+ configAttributes.append(sampleCount > 0 ? sampleCount : 0);
configAttributes.append(EGL_SAMPLE_BUFFERS);
- configAttributes.append(sampleCount? 1:0);
+ configAttributes.append(sampleCount > 0);
return configAttributes;
}
@@ -178,12 +178,19 @@ bool q_reduceConfigAttributes(QVector<EGLint> *configAttributes)
i = configAttributes->indexOf(EGL_STENCIL_SIZE);
if (i >= 0) {
- configAttributes->remove(i,2);
+ if (configAttributes->at(i + 1) > 1)
+ configAttributes->replace(i + 1, 1);
+ else
+ configAttributes->remove(i, 2);
return true;
}
+
i = configAttributes->indexOf(EGL_DEPTH_SIZE);
if (i >= 0) {
- configAttributes->remove(i,2);
+ if (configAttributes->at(i + 1) > 1)
+ configAttributes->replace(i + 1, 1);
+ else
+ configAttributes->remove(i, 2);
return true;
}
#ifdef EGL_BIND_TO_TEXTURE_RGB
@@ -232,7 +239,7 @@ EGLConfig q_configFromGLFormat(EGLDisplay display, const QSurfaceFormat &format,
i = configureAttributes.indexOf(EGL_BLUE_SIZE);
int confAttrBlue = configureAttributes.at(i+1);
i = configureAttributes.indexOf(EGL_ALPHA_SIZE);
- int confAttrAlpha = configureAttributes.at(i+1);
+ int confAttrAlpha = i == -1 ? 0 : configureAttributes.at(i+1);
EGLint size = matching;
EGLConfig *configs = new EGLConfig [size];