35 const EGLint redSize = std::max(surfaceFormat.redBufferSize(), 0);
36 const EGLint greenSize = std::max(surfaceFormat.greenBufferSize(), 0);
37 const EGLint blueSize = std::max(surfaceFormat.blueBufferSize(), 0);
38 const EGLint alphaSize = std::max(surfaceFormat.alphaBufferSize(), 0);
39 const EGLint depthSize = std::max(surfaceFormat.depthBufferSize(), 0);
40 const EGLint stencilSize = std::max(surfaceFormat.stencilBufferSize(), 0);
42 const EGLint renderableType =
isOpenGLES() ? EGL_OPENGL_ES2_BIT : EGL_OPENGL_BIT;
45 const QList<EGLint> attributes{
46 EGL_SURFACE_TYPE, surfaceType,
47 EGL_RED_SIZE, redSize,
48 EGL_GREEN_SIZE, greenSize,
49 EGL_BLUE_SIZE, blueSize,
50 EGL_ALPHA_SIZE, alphaSize,
51 EGL_DEPTH_SIZE, depthSize,
52 EGL_STENCIL_SIZE, stencilSize,
53 EGL_RENDERABLE_TYPE, renderableType,
57 if (!eglChooseConfig(display->
handle(), attributes.data(),
nullptr, 0, &configCount)) {
58 qCWarning(KWIN_QPA,
"eglChooseConfig failed: %x", eglGetError());
59 return EGL_NO_CONFIG_KHR;
61 if (configCount == 0) {
62 qCWarning(KWIN_QPA,
"eglChooseConfig did not return any configs");
63 return EGL_NO_CONFIG_KHR;
66 QList<EGLConfig> configs(configCount);
67 if (!eglChooseConfig(display->
handle(), attributes.data(), configs.data(), configCount, &configCount)) {
68 qCWarning(KWIN_QPA,
"eglChooseConfig failed: %x", eglGetError());
69 return EGL_NO_CONFIG_KHR;
71 if (configCount != configs.size()) {
72 qCWarning(KWIN_QPA,
"eglChooseConfig did not return requested configs");
73 return EGL_NO_CONFIG_KHR;
76 for (
const EGLConfig &config : std::as_const(configs)) {
77 EGLint redConfig, greenConfig, blueConfig, alphaConfig;
78 eglGetConfigAttrib(display->
handle(), config, EGL_RED_SIZE, &redConfig);
79 eglGetConfigAttrib(display->
handle(), config, EGL_GREEN_SIZE, &greenConfig);
80 eglGetConfigAttrib(display->
handle(), config, EGL_BLUE_SIZE, &blueConfig);
81 eglGetConfigAttrib(display->
handle(), config, EGL_ALPHA_SIZE, &alphaConfig);
83 if ((redSize == 0 || redSize == redConfig) && (greenSize == 0 || greenSize == greenConfig) && (blueSize == 0 || blueSize == blueConfig) && (alphaSize == 0 || alphaSize == alphaConfig)) {
102 eglGetConfigAttrib(display->
handle(), config, EGL_RED_SIZE, &redSize);
103 eglGetConfigAttrib(display->
handle(), config, EGL_GREEN_SIZE, &greenSize);
104 eglGetConfigAttrib(display->
handle(), config, EGL_BLUE_SIZE, &blueSize);
105 eglGetConfigAttrib(display->
handle(), config, EGL_ALPHA_SIZE, &alphaSize);
106 eglGetConfigAttrib(display->
handle(), config, EGL_STENCIL_SIZE, &stencilSize);
107 eglGetConfigAttrib(display->
handle(), config, EGL_DEPTH_SIZE, &depthSize);
108 eglGetConfigAttrib(display->
handle(), config, EGL_SAMPLES, &sampleCount);
111 format.setRedBufferSize(redSize);
112 format.setGreenBufferSize(greenSize);
113 format.setBlueBufferSize(blueSize);
114 format.setAlphaBufferSize(alphaSize);
115 format.setStencilBufferSize(stencilSize);
116 format.setDepthBufferSize(depthSize);
117 format.setSamples(sampleCount);
118 format.setRenderableType(
isOpenGLES() ? QSurfaceFormat::OpenGLES : QSurfaceFormat::OpenGL);