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>
This commit is contained in:
Kurt Pattyn 2014-03-11 14:12:46 +01:00 committed by The Qt Project
parent 379238496d
commit 3ff15f1e98
3 changed files with 26 additions and 1 deletions

View File

@ -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)
{

View File

@ -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

View File

@ -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;