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
|
DEFINES += QT_NO_CAST_FROM_ASCII
|
||||||
PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
|
PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
|
||||||
|
|
||||||
|
include(cglconvenience/cglconvenience.pri)
|
||||||
include(dnd/dnd.pri)
|
include(dnd/dnd.pri)
|
||||||
include(eglconvenience/eglconvenience.pri)
|
include(eglconvenience/eglconvenience.pri)
|
||||||
include(eventdispatchers/eventdispatchers.pri)
|
include(eventdispatchers/eventdispatchers.pri)
|
||||||
|
@ -2,13 +2,14 @@
|
|||||||
#include "qcocoawindow.h"
|
#include "qcocoawindow.h"
|
||||||
#include <qdebug.h>
|
#include <qdebug.h>
|
||||||
#include <QtCore/private/qcore_mac_p.h>
|
#include <QtCore/private/qcore_mac_p.h>
|
||||||
|
#include <QtPlatformSupport/private/cglconvenience_p.h>
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
QCocoaGLContext::QCocoaGLContext(const QSurfaceFormat &format, QPlatformGLContext *share)
|
QCocoaGLContext::QCocoaGLContext(const QSurfaceFormat &format, QPlatformGLContext *share)
|
||||||
: m_format(format)
|
: m_format(format)
|
||||||
{
|
{
|
||||||
NSOpenGLPixelFormat *pixelFormat = createNSOpenGLPixelFormat();
|
NSOpenGLPixelFormat *pixelFormat = static_cast <NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||||
NSOpenGLContext *actualShare = share ? static_cast<QCocoaGLContext *>(share)->m_context : 0;
|
NSOpenGLContext *actualShare = share ? static_cast<QCocoaGLContext *>(share)->m_context : 0;
|
||||||
|
|
||||||
m_context = [NSOpenGLContext alloc];
|
m_context = [NSOpenGLContext alloc];
|
||||||
@ -69,15 +70,7 @@ void QCocoaGLContext::doneCurrent()
|
|||||||
|
|
||||||
void (*QCocoaGLContext::getProcAddress(const QByteArray &procName))()
|
void (*QCocoaGLContext::getProcAddress(const QByteArray &procName))()
|
||||||
{
|
{
|
||||||
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
|
return qcgl_getProcAddress(procName);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QCocoaGLContext::update()
|
void QCocoaGLContext::update()
|
||||||
@ -87,15 +80,7 @@ void QCocoaGLContext::update()
|
|||||||
|
|
||||||
NSOpenGLPixelFormat *QCocoaGLContext::createNSOpenGLPixelFormat()
|
NSOpenGLPixelFormat *QCocoaGLContext::createNSOpenGLPixelFormat()
|
||||||
{
|
{
|
||||||
NSOpenGLPixelFormatAttribute attrs[] =
|
return static_cast<NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat());
|
||||||
{
|
|
||||||
NSOpenGLPFADoubleBuffer,
|
|
||||||
NSOpenGLPFADepthSize, 32,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
|
|
||||||
return pixelFormat;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NSOpenGLContext *QCocoaGLContext::nsOpenGLContext() const
|
NSOpenGLContext *QCocoaGLContext::nsOpenGLContext() const
|
||||||
|
Loading…
Reference in New Issue
Block a user