summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qsurfaceformat.cpp12
-rw-r--r--src/platformsupport/cglconvenience/cglconvenience.mm8
-rw-r--r--src/plugins/platforms/windows/qwindowsglcontext.cpp7
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;