Fix rare crashes in fontconfig fontdb due to uninitialized variable
[profile/ivi/qtbase.git] / src / platformsupport / cglconvenience / cglconvenience.mm
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the plugins of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "cglconvenience_p.h"
43 #include <QtCore/private/qcore_mac_p.h>
44 #include <Cocoa/Cocoa.h>
45 #include <QVector>
46
47 void (*qcgl_getProcAddress(const QByteArray &procName))()
48 {
49     CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
50             CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, false);
51     CFBundleRef bundle = CFBundleCreate(kCFAllocatorDefault, url);
52     CFStringRef procNameCF = QCFString::toCFStringRef(QString::fromAscii(procName.constData()));
53     void *proc = CFBundleGetFunctionPointerForName(bundle, procNameCF);
54     CFRelease(url);
55     CFRelease(bundle);
56     CFRelease(procNameCF);
57     return (void (*) ())proc;
58 }
59
60 // Match up with createNSOpenGLPixelFormat below!
61 QSurfaceFormat qcgl_surfaceFormat()
62 {
63     QSurfaceFormat format;
64     format.setRedBufferSize(8);
65     format.setGreenBufferSize(8);
66     format.setBlueBufferSize(8);
67     format.setAlphaBufferSize(8);
68 /*
69     format.setDepthBufferSize(24);
70     format.setAccumBufferSize(0);
71     format.setStencilBufferSize(8);
72     format.setSampleBuffers(false);
73     format.setSamples(1);
74     format.setDepth(true);
75     format.setRgba(true);
76     format.setAlpha(true);
77     format.setAccum(false);
78     format.setStencil(true);
79     format.setStereo(false);
80     format.setDirectRendering(false);
81 */
82     return format;
83 }
84
85 void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format)
86 {
87
88     QVector<NSOpenGLPixelFormatAttribute> attrs;
89
90     attrs.append(NSOpenGLPFADoubleBuffer);
91
92     if (format.depthBufferSize() > 0)
93         attrs <<  NSOpenGLPFADepthSize << format.depthBufferSize();
94     if (format.stencilBufferSize() > 0)
95         attrs << NSOpenGLPFAStencilSize << format.stencilBufferSize();
96     if (format.alphaBufferSize() > 0)
97         attrs << NSOpenGLPFAAlphaSize << format.alphaBufferSize();
98
99     if (format.samples() > 0) {
100         attrs << NSOpenGLPFAMultisample
101               << NSOpenGLPFASampleBuffers << (NSOpenGLPixelFormatAttribute) 1
102               << NSOpenGLPFASamples << (NSOpenGLPixelFormatAttribute) format.samples();
103     }
104
105     attrs << 0;
106
107     NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs.constData()];
108     return pixelFormat;
109 }
110
111 CGLContextObj qcgl_createGlContext()
112 {
113     CGLContextObj context;
114     NSOpenGLPixelFormat *format = reinterpret_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat(qcgl_surfaceFormat()));
115     CGLPixelFormatObj cglFormat = static_cast<CGLPixelFormatObj>([format CGLPixelFormatObj]);
116     CGLCreateContext(cglFormat ,NULL, &context);
117     return context;
118 }
119