Respect the QSurfaceFormat when constructing a QOpenGLContext on Mac
Change-Id: I1a17d2e7e060d9931d84afeb0fd42bc3b1f44e5d Reviewed-on: http://codereview.qt-project.org/5527 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
This commit is contained in:
parent
9457f8ea91
commit
fff26f6287
@ -42,6 +42,7 @@
|
||||
#include "cglconvenience_p.h"
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <Cocoa/Cocoa.h>
|
||||
#include <QVector>
|
||||
|
||||
void (*qcgl_getProcAddress(const QByteArray &procName))()
|
||||
{
|
||||
@ -81,26 +82,36 @@ QSurfaceFormat qcgl_surfaceFormat()
|
||||
return format;
|
||||
}
|
||||
|
||||
void *qcgl_createNSOpenGLPixelFormat()
|
||||
void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format)
|
||||
{
|
||||
NSOpenGLPixelFormatAttribute attrs[] =
|
||||
{
|
||||
NSOpenGLPFADoubleBuffer,
|
||||
NSOpenGLPFADepthSize, 32,
|
||||
NSOpenGLPFAMultisample,
|
||||
NSOpenGLPFASampleBuffers, (NSOpenGLPixelFormatAttribute)1,
|
||||
NSOpenGLPFASamples, (NSOpenGLPixelFormatAttribute) 8,
|
||||
0
|
||||
};
|
||||
|
||||
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
|
||||
QVector<NSOpenGLPixelFormatAttribute> attrs;
|
||||
|
||||
attrs.append(NSOpenGLPFADoubleBuffer);
|
||||
|
||||
if (format.depthBufferSize() > 0)
|
||||
attrs << NSOpenGLPFADepthSize << format.depthBufferSize();
|
||||
if (format.stencilBufferSize() > 0)
|
||||
attrs << NSOpenGLPFAStencilSize << format.stencilBufferSize();
|
||||
if (format.alphaBufferSize() > 0)
|
||||
attrs << NSOpenGLPFAAlphaSize << format.alphaBufferSize();
|
||||
|
||||
if (format.samples() > 0) {
|
||||
attrs << NSOpenGLPFAMultisample
|
||||
<< NSOpenGLPFASampleBuffers << (NSOpenGLPixelFormatAttribute) 1
|
||||
<< NSOpenGLPFASamples << (NSOpenGLPixelFormatAttribute) format.samples();
|
||||
}
|
||||
|
||||
attrs << 0;
|
||||
|
||||
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs.constData()];
|
||||
return pixelFormat;
|
||||
}
|
||||
|
||||
CGLContextObj qcgl_createGlContext()
|
||||
{
|
||||
CGLContextObj context;
|
||||
NSOpenGLPixelFormat *format = reinterpret_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||
NSOpenGLPixelFormat *format = reinterpret_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat(qcgl_surfaceFormat()));
|
||||
CGLPixelFormatObj cglFormat = static_cast<CGLPixelFormatObj>([format CGLPixelFormatObj]);
|
||||
CGLCreateContext(cglFormat ,NULL, &context);
|
||||
return context;
|
||||
|
@ -48,7 +48,7 @@
|
||||
|
||||
void (*qcgl_getProcAddress(const QByteArray &procName))();
|
||||
QSurfaceFormat qcgl_surfaceFormat();
|
||||
void *qcgl_createNSOpenGLPixelFormat();
|
||||
void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format);
|
||||
CGLContextObj qcgl_createGlContext();
|
||||
|
||||
#endif // QMACGLCONVENIENCE_H
|
||||
|
@ -68,7 +68,7 @@ public:
|
||||
|
||||
void update();
|
||||
|
||||
static NSOpenGLPixelFormat *createNSOpenGLPixelFormat();
|
||||
static NSOpenGLPixelFormat *createNSOpenGLPixelFormat(const QSurfaceFormat &format);
|
||||
NSOpenGLContext *nsOpenGLContext() const;
|
||||
|
||||
private:
|
||||
|
@ -53,7 +53,7 @@ QCocoaGLContext::QCocoaGLContext(const QSurfaceFormat &format, QPlatformOpenGLCo
|
||||
{
|
||||
QCocoaAutoReleasePool pool; // For the SG Canvas render thread.
|
||||
|
||||
NSOpenGLPixelFormat *pixelFormat = static_cast <NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||
NSOpenGLPixelFormat *pixelFormat = static_cast <NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat(format));
|
||||
NSOpenGLContext *actualShare = share ? static_cast<QCocoaGLContext *>(share)->m_context : 0;
|
||||
|
||||
m_context = [NSOpenGLContext alloc];
|
||||
@ -128,9 +128,9 @@ void QCocoaGLContext::update()
|
||||
[m_context update];
|
||||
}
|
||||
|
||||
NSOpenGLPixelFormat *QCocoaGLContext::createNSOpenGLPixelFormat()
|
||||
NSOpenGLPixelFormat *QCocoaGLContext::createNSOpenGLPixelFormat(const QSurfaceFormat &format)
|
||||
{
|
||||
return static_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||
return static_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat(format));
|
||||
}
|
||||
|
||||
NSOpenGLContext *QCocoaGLContext::nsOpenGLContext() const
|
||||
|
Loading…
Reference in New Issue
Block a user