Factor out CGL code for reuse in wayland.
This commit is contained in:
parent
8e8ad987a2
commit
0058f00b64
105
src/platformsupport/cglconvenience/cglconvenience.mm
Normal file
105
src/platformsupport/cglconvenience/cglconvenience.mm
Normal file
@ -0,0 +1,105 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** This file may be used under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation and
|
||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU Lesser
|
||||
** General Public License version 2.1 requirements will be met:
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License version 3.0 as published by the Free Software Foundation
|
||||
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU General
|
||||
** Public License version 3.0 requirements will be met:
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "cglconvenience_p.h"
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <Cocoa/Cocoa.h>
|
||||
|
||||
void (*qcgl_getProcAddress(const QByteArray &procName))()
|
||||
{
|
||||
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
|
||||
CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, false);
|
||||
CFBundleRef bundle = CFBundleCreate(kCFAllocatorDefault, url);
|
||||
CFStringRef procNameCF = QCFString::toCFStringRef(QString::fromAscii(procName.constData()));
|
||||
void *proc = CFBundleGetFunctionPointerForName(bundle, procNameCF);
|
||||
CFRelease(url);
|
||||
CFRelease(bundle);
|
||||
CFRelease(procNameCF);
|
||||
return (void (*) ())proc;
|
||||
}
|
||||
|
||||
// Match up with createNSOpenGLPixelFormat below!
|
||||
QSurfaceFormat qcgl_surfaceFormat()
|
||||
{
|
||||
QSurfaceFormat format;
|
||||
format.setRedBufferSize(8);
|
||||
format.setGreenBufferSize(8);
|
||||
format.setBlueBufferSize(8);
|
||||
format.setAlphaBufferSize(8);
|
||||
/*
|
||||
format.setDepthBufferSize(24);
|
||||
format.setAccumBufferSize(0);
|
||||
format.setStencilBufferSize(8);
|
||||
format.setSampleBuffers(false);
|
||||
format.setSamples(1);
|
||||
format.setDepth(true);
|
||||
format.setRgba(true);
|
||||
format.setAlpha(true);
|
||||
format.setAccum(false);
|
||||
format.setStencil(true);
|
||||
format.setStereo(false);
|
||||
format.setDirectRendering(false);
|
||||
*/
|
||||
return format;
|
||||
}
|
||||
|
||||
void *qcgl_createNSOpenGLPixelFormat()
|
||||
{
|
||||
NSOpenGLPixelFormatAttribute attrs[] =
|
||||
{
|
||||
NSOpenGLPFADoubleBuffer,
|
||||
NSOpenGLPFADepthSize, 32,
|
||||
0
|
||||
};
|
||||
|
||||
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
|
||||
return pixelFormat;
|
||||
}
|
||||
|
||||
CGLContextObj qcgl_createGlContext()
|
||||
{
|
||||
CGLContextObj context;
|
||||
NSOpenGLPixelFormat *format = reinterpret_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||
CGLPixelFormatObj cglFormat = static_cast<CGLPixelFormatObj>([format CGLPixelFormatObj]);
|
||||
CGLCreateContext(cglFormat ,NULL, &context);
|
||||
return context;
|
||||
}
|
||||
|
11
src/platformsupport/cglconvenience/cglconvenience.pri
Normal file
11
src/platformsupport/cglconvenience/cglconvenience.pri
Normal file
@ -0,0 +1,11 @@
|
||||
mac {
|
||||
INCLUDEPATH += $$PWD
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/cglconvenience_p.h
|
||||
|
||||
OBJECTIVE_SOURCES += \
|
||||
$$PWD/cglconvenience.mm
|
||||
|
||||
LIBS += -framework Cocoa -framework OpenGl
|
||||
}
|
54
src/platformsupport/cglconvenience/cglconvenience_p.h
Normal file
54
src/platformsupport/cglconvenience/cglconvenience_p.h
Normal file
@ -0,0 +1,54 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** This file may be used under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation and
|
||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU Lesser
|
||||
** General Public License version 2.1 requirements will be met:
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License version 3.0 as published by the Free Software Foundation
|
||||
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU General
|
||||
** Public License version 3.0 requirements will be met:
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMACGLCONVENIENCE_H
|
||||
#define QMACGLCONVENIENCE_H
|
||||
|
||||
#include <QSurfaceFormat>
|
||||
#include <QString>
|
||||
#include <OpenGL/OpenGL.h>
|
||||
|
||||
Q_GUI_EXPORT void (*qcgl_getProcAddress(const QByteArray &procName))();
|
||||
Q_GUI_EXPORT QSurfaceFormat qcgl_surfaceFormat();
|
||||
Q_GUI_EXPORT void *qcgl_createNSOpenGLPixelFormat();
|
||||
Q_GUI_EXPORT CGLContextObj qcgl_createGlContext();
|
||||
|
||||
#endif // QMACGLCONVENIENCE_H
|
@ -20,6 +20,7 @@ HEADERS += $$PWD/qtplatformsupportversion.h
|
||||
DEFINES += QT_NO_CAST_FROM_ASCII
|
||||
PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
|
||||
|
||||
include(cglconvenience/cglconvenience.pri)
|
||||
include(dnd/dnd.pri)
|
||||
include(eglconvenience/eglconvenience.pri)
|
||||
include(eventdispatchers/eventdispatchers.pri)
|
||||
|
@ -2,13 +2,14 @@
|
||||
#include "qcocoawindow.h"
|
||||
#include <qdebug.h>
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <QtPlatformSupport/private/cglconvenience_p.h>
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
QCocoaGLContext::QCocoaGLContext(const QSurfaceFormat &format, QPlatformGLContext *share)
|
||||
: m_format(format)
|
||||
{
|
||||
NSOpenGLPixelFormat *pixelFormat = createNSOpenGLPixelFormat();
|
||||
NSOpenGLPixelFormat *pixelFormat = static_cast <NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||
NSOpenGLContext *actualShare = share ? static_cast<QCocoaGLContext *>(share)->m_context : 0;
|
||||
|
||||
m_context = [NSOpenGLContext alloc];
|
||||
@ -67,17 +68,9 @@ void QCocoaGLContext::doneCurrent()
|
||||
[NSOpenGLContext clearCurrentContext];
|
||||
}
|
||||
|
||||
void (*QCocoaGLContext::getProcAddress(const QByteArray &procName)) ()
|
||||
void (*QCocoaGLContext::getProcAddress(const QByteArray &procName))()
|
||||
{
|
||||
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
|
||||
CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, false);
|
||||
CFBundleRef bundle = CFBundleCreate(kCFAllocatorDefault, url);
|
||||
CFStringRef procNameCF = QCFString::toCFStringRef(QString::fromAscii(procName.constData()));
|
||||
void *proc = CFBundleGetFunctionPointerForName(bundle, procNameCF);
|
||||
CFRelease(url);
|
||||
CFRelease(bundle);
|
||||
CFRelease(procNameCF);
|
||||
return (void (*) ())proc;
|
||||
return qcgl_getProcAddress(procName);
|
||||
}
|
||||
|
||||
void QCocoaGLContext::update()
|
||||
@ -87,15 +80,7 @@ void QCocoaGLContext::update()
|
||||
|
||||
NSOpenGLPixelFormat *QCocoaGLContext::createNSOpenGLPixelFormat()
|
||||
{
|
||||
NSOpenGLPixelFormatAttribute attrs[] =
|
||||
{
|
||||
NSOpenGLPFADoubleBuffer,
|
||||
NSOpenGLPFADepthSize, 32,
|
||||
0
|
||||
};
|
||||
|
||||
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
|
||||
return pixelFormat;
|
||||
return static_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||
}
|
||||
|
||||
NSOpenGLContext *QCocoaGLContext::nsOpenGLContext() const
|
||||
|
Loading…
Reference in New Issue
Block a user