diff options
author | Kurt Pattyn <pattyn.kurt@gmail.com> | 2014-03-11 14:12:46 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-19 20:12:08 +0100 |
commit | 3ff15f1e987e59b5c35224d7f2230905c4a5f3d0 (patch) | |
tree | 9a675c2cc8f11ec22c69d3a27474841e06c34c91 | |
parent | 379238496d0bf339a717a311e91949deb2e45485 (diff) |
QOpenGLContext: Use color depth information from QSurfaceFormat
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 <laszlo.agocs@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r-- | src/gui/kernel/qsurfaceformat.cpp | 12 | ||||
-rw-r--r-- | src/platformsupport/cglconvenience/cglconvenience.mm | 8 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsglcontext.cpp | 7 |
3 files changed, 26 insertions, 1 deletions
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; |