From 3ff15f1e987e59b5c35224d7f2230905c4a5f3d0 Mon Sep 17 00:00:00 2001 From: Kurt Pattyn Date: Tue, 11 Mar 2014 14:12:46 +0100 Subject: QOpenGLContext: Use color depth information from QSurfaceFormat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a new QOpenGLContext is requested, the color depth information is now also taken into account on OS X and WGL. Task-number: QTBUG-37411 Change-Id: I69d04989a20de3ace041b009fbbdc03fa02cfdf8 Reviewed-by: Laszlo Agocs Reviewed-by: Morten Johan Sørvig Reviewed-by: Friedemann Kleint --- src/gui/kernel/qsurfaceformat.cpp | 12 ++++++++++++ src/platformsupport/cglconvenience/cglconvenience.mm | 8 ++++++++ src/plugins/platforms/windows/qwindowsglcontext.cpp | 7 ++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qsurfaceformat.cpp b/src/gui/kernel/qsurfaceformat.cpp index 2b6cb2d949..23c0e59779 100644 --- a/src/gui/kernel/qsurfaceformat.cpp +++ b/src/gui/kernel/qsurfaceformat.cpp @@ -522,6 +522,10 @@ int QSurfaceFormat::alphaBufferSize() const /*! Set the desired \a size in bits of the red channel of the color buffer. + + \note On Mac OSX, be sure to set the buffer size of all color channels, + otherwise this setting will have no effect. If one of the buffer sizes is not set, + the current bit-depth of the screen is used. */ void QSurfaceFormat::setRedBufferSize(int size) { @@ -533,6 +537,10 @@ void QSurfaceFormat::setRedBufferSize(int size) /*! Set the desired \a size in bits of the green channel of the color buffer. + + \note On Mac OSX, be sure to set the buffer size of all color channels, + otherwise this setting will have no effect. If one of the buffer sizes is not set, + the current bit-depth of the screen is used. */ void QSurfaceFormat::setGreenBufferSize(int size) { @@ -544,6 +552,10 @@ void QSurfaceFormat::setGreenBufferSize(int size) /*! Set the desired \a size in bits of the blue channel of the color buffer. + + \note On Mac OSX, be sure to set the buffer size of all color channels, + otherwise this setting will have no effect. If one of the buffer sizes is not set, + the current bit-depth of the screen is used. */ void QSurfaceFormat::setBlueBufferSize(int size) { diff --git a/src/platformsupport/cglconvenience/cglconvenience.mm b/src/platformsupport/cglconvenience/cglconvenience.mm index 7379919588..d0b0de8ae8 100644 --- a/src/platformsupport/cglconvenience/cglconvenience.mm +++ b/src/platformsupport/cglconvenience/cglconvenience.mm @@ -114,6 +114,14 @@ void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format) attrs << NSOpenGLPFAStencilSize << format.stencilBufferSize(); if (format.alphaBufferSize() > 0) attrs << NSOpenGLPFAAlphaSize << format.alphaBufferSize(); + if ((format.redBufferSize() > 0) && + (format.greenBufferSize() > 0) && + (format.blueBufferSize() > 0)) { + const int colorSize = format.redBufferSize() + + format.greenBufferSize() + + format.blueBufferSize(); + attrs << NSOpenGLPFAColorSize << colorSize << NSOpenGLPFAMinimumPolicy; + } if (format.samples() > 0) { attrs << NSOpenGLPFAMultisample diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp index c45c34ae4d..e7e4028079 100644 --- a/src/plugins/platforms/windows/qwindowsglcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp @@ -387,7 +387,12 @@ static int choosePixelFormat(HDC hdc, iAttributes[i++] = WGL_DRAW_TO_WINDOW_ARB; iAttributes[i++] = TRUE; iAttributes[i++] = WGL_COLOR_BITS_ARB; - iAttributes[i++] = 24; + + iAttributes[i++] = (format.redBufferSize() > 0) + && (format.greenBufferSize() > 0) + && (format.blueBufferSize() > 0) ? + format.redBufferSize() + format.greenBufferSize() + format.blueBufferSize() : + 24; switch (format.swapBehavior()) { case QSurfaceFormat::SingleBuffer: iAttributes[i++] = WGL_DOUBLE_BUFFER_ARB; -- cgit v1.2.3