summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mkspecs/features/qt.prf4
-rw-r--r--src/corelib/animation/qabstractanimation.cpp56
-rw-r--r--src/corelib/animation/qabstractanimation.h3
-rw-r--r--src/corelib/animation/qabstractanimation_p.h5
-rw-r--r--src/corelib/io/qprocess_unix.cpp30
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp18
-rw-r--r--src/corelib/kernel/qcoreapplication.h1
-rw-r--r--src/corelib/kernel/qcoreapplication_p.h2
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm1
-rw-r--r--src/gui/kernel/qsessionmanager_qpa.cpp2
-rw-r--r--src/gui/painting/qpaintengine_mac.cpp4
-rw-r--r--src/gui/text/qfontengine_ft_p.h9
-rw-r--r--src/gui/text/qfontengine_p.h8
-rw-r--r--src/gui/text/qrawfont_p.h2
-rw-r--r--src/gui/text/qstatictext.cpp10
-rw-r--r--src/opengl/gl2paintengineex/qtriangulator.cpp17
-rw-r--r--src/opengl/gl2paintengineex/qtriangulator_p.h12
-rw-r--r--src/opengl/qgl.cpp31
-rw-r--r--src/opengl/qgl.h10
-rw-r--r--src/opengl/qgl_p.h6
-rw-r--r--src/opengl/qglfunctions.cpp198
-rw-r--r--src/opengl/qglfunctions.h7
-rw-r--r--src/opengl/qglpaintdevice_p.h2
-rw-r--r--src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h1
-rw-r--r--src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri9
-rw-r--r--src/plugins/platforms/wayland/qwaylandbuffer.h1
-rw-r--r--src/plugins/platforms/wayland/qwaylandinputdevice.cpp21
-rw-r--r--src/plugins/platforms/wayland/qwaylandintegration.cpp7
-rw-r--r--src/plugins/platforms/wayland/qwaylandintegration.h3
-rw-r--r--src/plugins/platforms/wayland/qwaylandnativeinterface.cpp72
-rw-r--r--src/plugins/platforms/wayland/qwaylandnativeinterface.h60
-rw-r--r--src/plugins/platforms/wayland/qwaylandwindow.h3
-rw-r--r--src/plugins/platforms/wayland/wayland.pro2
33 files changed, 465 insertions, 152 deletions
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index 191a449719..e4a5ef7162 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -35,6 +35,9 @@ plugin { #Qt plugins
INCLUDEPATH = $$QMAKE_INCDIR_QT $$INCLUDEPATH #prepending prevents us from picking up "stale" includes
win32:INCLUDEPATH += $$QMAKE_INCDIR_QT/ActiveQt
+# As declarative now uses OpenGL in the API, force include it to avoid having to update all projects
+contains(QT, declarative): QT += opengl
+
# As order does matter for static libs, we reorder the QT variable here
TMPLIBS = declarative webkit phonon multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core meegographicssystemhelper
for(QTLIB, $$list($$TMPLIBS)) {
@@ -48,6 +51,7 @@ for(QTLIB, $$list($$QT_UNKNOWN)) {
!contains(TMPLIBS, $$QTLIB):message("Warning: unknown QT: $$QTLIB")
}
+
QT_PLUGIN_VERIFY = QTPLUGIN DEPLOYMENT_PLUGIN
for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
for(QTPLUG, $$list($$lower($$unique($$QT_CURRENT_VERIFY)))) {
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 602cf8a6fd..f399d7c4cf 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -260,7 +260,8 @@ void QUnifiedTimer::restartAnimationTimer()
} else if (!driver->isRunning() || isPauseTimerActive) {
driver->start();
isPauseTimerActive = false;
- }
+ } else if (runningLeafAnimations == 0)
+ driver->stop();
}
void QUnifiedTimer::setTimingInterval(int interval)
@@ -389,20 +390,50 @@ int QUnifiedTimer::closestPauseAnimationTimeToFinish()
return closestTimeToFinish;
}
+
void QUnifiedTimer::installAnimationDriver(QAnimationDriver *d)
{
- if (driver->isRunning()) {
- qWarning("QUnifiedTimer: Cannot change animation driver while animations are running");
+ if (driver != &defaultDriver) {
+ qWarning("QUnifiedTimer: animation driver already installed...");
return;
}
- if (driver && driver != &defaultDriver)
- delete driver;
+ if (driver->isRunning()) {
+ driver->stop();
+ d->start();
+ }
driver = d;
+
+}
+
+
+void QUnifiedTimer::uninstallAnimationDriver(QAnimationDriver *d)
+{
+ if (driver != d) {
+ qWarning("QUnifiedTimer: trying to uninstall a driver that is not installed...");
+ return;
+ }
+
+ driver = &defaultDriver;
+
+ if (d->isRunning()) {
+ d->stop();
+ driver->start();
+ }
}
/*!
+ Returns true if \a d is the currently installed animation driver
+ and is not the default animation driver (which can never be uninstalled).
+*/
+bool QUnifiedTimer::canUninstallAnimationDriver(QAnimationDriver *d)
+{
+ return d == driver && driver != &defaultDriver;
+}
+
+
+/*!
\class QAnimationDriver
\brief The QAnimationDriver class is used to exchange the mechanism that drives animations.
@@ -424,6 +455,12 @@ QAnimationDriver::QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent)
{
}
+QAnimationDriver::~QAnimationDriver()
+{
+ QUnifiedTimer *timer = QUnifiedTimer::instance(true);
+ if (timer->canUninstallAnimationDriver(this))
+ uninstall();
+}
/*!
Advances the animation based on the current time. This function should
@@ -453,6 +490,15 @@ void QAnimationDriver::install()
timer->installAnimationDriver(this);
}
+/*!
+ Uninstalls this animation driver.
+ */
+void QAnimationDriver::uninstall()
+{
+ QUnifiedTimer *timer = QUnifiedTimer::instance(true);
+ timer->uninstallAnimationDriver(this);
+}
+
bool QAnimationDriver::isRunning() const
{
return d_func()->running;
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index 0900870ce2..a0cb0f93d0 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -141,9 +141,12 @@ class Q_CORE_EXPORT QAnimationDriver : public QObject
public:
QAnimationDriver(QObject *parent = 0);
+ ~QAnimationDriver();
void advance();
+
void install();
+ void uninstall();
bool isRunning() const;
diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h
index ba92960f6b..1cba4644a8 100644
--- a/src/corelib/animation/qabstractanimation_p.h
+++ b/src/corelib/animation/qabstractanimation_p.h
@@ -180,10 +180,15 @@ public:
static void updateAnimationTimer();
void installAnimationDriver(QAnimationDriver *driver);
+ void uninstallAnimationDriver(QAnimationDriver *driver);
+ bool canUninstallAnimationDriver(QAnimationDriver *driver);
void restartAnimationTimer();
void updateAnimationsTime();
+ //useful for profiling/debugging
+ int runningAnimationCount() { return animations.count(); }
+
protected:
void timerEvent(QTimerEvent *);
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 3af9b46df8..f53742b815 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -171,17 +171,27 @@ private:
Q_GLOBAL_STATIC(QMutex, processManagerGlobalMutex)
-static QProcessManager *processManager() {
+static QProcessManager *processManagerInstance = 0;
+
+static QProcessManager *processManager()
+{
// The constructor of QProcessManager should be called only once
// so we cannot use Q_GLOBAL_STATIC directly for QProcessManager
QMutex *mutex = processManagerGlobalMutex();
QMutexLocker locker(mutex);
- static QProcessManager processManager;
- return &processManager;
+
+ if (!processManagerInstance)
+ QProcessPrivate::initializeProcessManager();
+
+ Q_ASSERT(processManagerInstance);
+ return processManagerInstance;
}
QProcessManager::QProcessManager()
{
+ // can only be called from main thread
+ Q_ASSERT(!qApp || qApp->thread() == QThread::currentThread());
+
#if defined (QPROCESS_DEBUG)
qDebug() << "QProcessManager::QProcessManager()";
#endif
@@ -197,6 +207,8 @@ QProcessManager::QProcessManager()
action.sa_handler = qt_sa_sigchld_handler;
action.sa_flags = SA_NOCLDSTOP;
::sigaction(SIGCHLD, &action, &qt_sa_old_sigchld_handler);
+
+ processManagerInstance = this;
}
QProcessManager::~QProcessManager()
@@ -221,6 +233,8 @@ QProcessManager::~QProcessManager()
if (currentAction.sa_handler == qt_sa_sigchld_handler) {
::sigaction(SIGCHLD, &qt_sa_old_sigchld_handler, 0);
}
+
+ processManagerInstance = 0;
}
void QProcessManager::run()
@@ -1287,7 +1301,15 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a
void QProcessPrivate::initializeProcessManager()
{
- (void) processManager();
+ if (qApp && qApp->thread() != QThread::currentThread()) {
+ // The process manager must be initialized in the main thread
+ // Note: The call below will re-enter this function, but in the right thread,
+ // so the else statement below will be executed.
+ QMetaObject::invokeMethod(qApp, "_q_initializeProcessManager", Qt::BlockingQueuedConnection);
+ } else {
+ static QProcessManager processManager;
+ Q_UNUSED(processManager);
+ }
}
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index be86c58d47..e0841cbadc 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -392,6 +392,16 @@ void QCoreApplicationPrivate::createEventDispatcher()
#endif
}
+void QCoreApplicationPrivate::_q_initializeProcessManager()
+{
+#ifndef QT_NO_PROCESS
+# ifdef Q_OS_UNIX
+ QProcessPrivate::initializeProcessManager();
+# endif
+#endif
+}
+
+
QThread *QCoreApplicationPrivate::theMainThread = 0;
QThread *QCoreApplicationPrivate::mainThread()
{
@@ -656,12 +666,6 @@ void QCoreApplication::init()
}
#endif
-#if defined(Q_OS_UNIX) && !(defined(QT_NO_PROCESS))
- // Make sure the process manager thread object is created in the main
- // thread.
- QProcessPrivate::initializeProcessManager();
-#endif
-
#ifdef QT_EVAL
extern void qt_core_eval_init(uint);
qt_core_eval_init(d->application_type);
@@ -2728,3 +2732,5 @@ int QCoreApplication::loopLevel()
*/
QT_END_NAMESPACE
+
+#include "moc_qcoreapplication.cpp"
diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h
index 3957158d83..024c5096c9 100644
--- a/src/corelib/kernel/qcoreapplication.h
+++ b/src/corelib/kernel/qcoreapplication.h
@@ -205,6 +205,7 @@ protected:
QCoreApplication(QCoreApplicationPrivate &p);
private:
+ Q_PRIVATE_SLOT(d_func(), void _q_initializeProcessManager())
static bool sendSpontaneousEvent(QObject *receiver, QEvent *event);
bool notifyInternal(QObject *receiver, QEvent *event);
diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h
index add2a3553e..fdceab4724 100644
--- a/src/corelib/kernel/qcoreapplication_p.h
+++ b/src/corelib/kernel/qcoreapplication_p.h
@@ -85,6 +85,8 @@ public:
bool sendThroughObjectEventFilters(QObject *, QEvent *);
bool notify_helper(QObject *, QEvent *);
+ void _q_initializeProcessManager();
+
virtual QString appName() const;
virtual void createEventDispatcher();
static void removePostedEvent(QEvent *);
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index b5e5d186b8..e885d1552c 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -334,7 +334,6 @@ static int qCocoaViewCount = 0;
//
// Qt will then forward the update to the children.
if (qwidget->isWindow()) {
- qwidget->update(qwidget->rect());
qwidgetprivate->syncBackingStore(qwidget->rect());
}
}
diff --git a/src/gui/kernel/qsessionmanager_qpa.cpp b/src/gui/kernel/qsessionmanager_qpa.cpp
index ef532d7981..68685b4fed 100644
--- a/src/gui/kernel/qsessionmanager_qpa.cpp
+++ b/src/gui/kernel/qsessionmanager_qpa.cpp
@@ -42,6 +42,8 @@
#include <qsessionmanager.h>
#include <private/qobject_p.h>
+#include <qapplication.h>
+
#ifndef QT_NO_SESSIONMANAGER
QT_BEGIN_NAMESPACE
diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp
index 8aab7c7a4b..c6d061dea8 100644
--- a/src/gui/painting/qpaintengine_mac.cpp
+++ b/src/gui/painting/qpaintengine_mac.cpp
@@ -100,7 +100,9 @@ QMacCGContext::QMacCGContext(QPainter *p)
int devType = p->device()->devType();
if (pe->type() == QPaintEngine::Raster
- && (devType == QInternal::Widget || devType == QInternal::Pixmap)) {
+ && (devType == QInternal::Widget ||
+ devType == QInternal::Pixmap ||
+ devType == QInternal::Image)) {
extern CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice);
CGColorSpaceRef colorspace = qt_mac_colorSpaceForDeviceType(pe->paintDevice());
diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h
index 887efed843..8733498cb7 100644
--- a/src/gui/text/qfontengine_ft_p.h
+++ b/src/gui/text/qfontengine_ft_p.h
@@ -311,14 +311,7 @@ private:
virtual HB_Error getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints);
- enum HintStyle {
- HintNone,
- HintLight,
- HintMedium,
- HintFull
- };
-
- void setDefaultHintStyle(HintStyle style);
+ virtual void setDefaultHintStyle(HintStyle style);
HintStyle defaultHintStyle() const { return default_hint_style; }
protected:
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 5b39fd39ad..30277b5156 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -248,6 +248,14 @@ public:
static QByteArray convertToPostscriptFontFamilyName(const QByteArray &fontFamily);
+ enum HintStyle {
+ HintNone,
+ HintLight,
+ HintMedium,
+ HintFull
+ };
+ virtual void setDefaultHintStyle(HintStyle) { }
+
QAtomicInt ref;
QFontDef fontDef;
uint cache_cost; // amount of mem used in kb by the font
diff --git a/src/gui/text/qrawfont_p.h b/src/gui/text/qrawfont_p.h
index f9a9ab55cd..18f3e7d006 100644
--- a/src/gui/text/qrawfont_p.h
+++ b/src/gui/text/qrawfont_p.h
@@ -62,7 +62,7 @@
QT_BEGIN_NAMESPACE
namespace { class CustomFontFileLoader; }
-class Q_AUTOTEST_EXPORT QRawFontPrivate
+class Q_GUI_EXPORT QRawFontPrivate
{
public:
QRawFontPrivate()
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index 1cfb4b61f9..5bee497a3e 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -714,17 +714,13 @@ QStaticTextItem::~QStaticTextItem()
{
if (m_userData != 0 && !m_userData->ref.deref())
delete m_userData;
- if (!m_fontEngine->ref.deref())
- delete m_fontEngine;
+ m_fontEngine->ref.deref();
}
void QStaticTextItem::setFontEngine(QFontEngine *fe)
{
- if (m_fontEngine != 0) {
- if (!m_fontEngine->ref.deref())
- delete m_fontEngine;
- }
-
+ if (m_fontEngine != 0)
+ m_fontEngine->ref.deref();
m_fontEngine = fe;
if (m_fontEngine != 0)
m_fontEngine->ref.ref();
diff --git a/src/opengl/gl2paintengineex/qtriangulator.cpp b/src/opengl/gl2paintengineex/qtriangulator.cpp
index 94024f3d74..a5faa36b4a 100644
--- a/src/opengl/gl2paintengineex/qtriangulator.cpp
+++ b/src/opengl/gl2paintengineex/qtriangulator.cpp
@@ -1564,6 +1564,19 @@ QVertexSet<T> QTriangulator<T>::triangulate()
template <typename T>
QVertexSet<T> QTriangulator<T>::polyline()
{
+ for (int i = 0; i < m_vertices.size(); ++i) {
+ Q_ASSERT(qAbs(m_vertices.at(i).x) < (1 << 21));
+ Q_ASSERT(qAbs(m_vertices.at(i).y) < (1 << 21));
+ }
+
+ if (!(m_hint & (QVectorPath::OddEvenFill | QVectorPath::WindingFill)))
+ m_hint |= QVectorPath::OddEvenFill;
+
+ if (m_hint & QVectorPath::NonConvexShapeMask) {
+ ComplexToSimple c2s(this);
+ c2s.decompose();
+ }
+
QVertexSet<T> result;
result.indices = m_indices;
result.vertices.resize(2 * m_vertices.size());
@@ -3084,7 +3097,7 @@ QPolylineSet qPolyline(const QVectorPath &path,
} else {
QTriangulator<quint16> triangulator;
triangulator.initialize(path, matrix, lod);
- QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ QVertexSet<quint16> vertexSet = triangulator.polyline();
polyLineSet.vertices = vertexSet.vertices;
polyLineSet.indices.setDataUshort(vertexSet.indices);
}
@@ -3104,7 +3117,7 @@ QPolylineSet qPolyline(const QPainterPath &path,
} else {
QTriangulator<quint16> triangulator;
triangulator.initialize(path, matrix, lod);
- QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ QVertexSet<quint16> vertexSet = triangulator.polyline();
polyLineSet.vertices = vertexSet.vertices;
polyLineSet.indices.setDataUshort(vertexSet.indices);
}
diff --git a/src/opengl/gl2paintengineex/qtriangulator_p.h b/src/opengl/gl2paintengineex/qtriangulator_p.h
index a205b923e9..081738addf 100644
--- a/src/opengl/gl2paintengineex/qtriangulator_p.h
+++ b/src/opengl/gl2paintengineex/qtriangulator_p.h
@@ -58,7 +58,7 @@
QT_BEGIN_NAMESPACE
-class QVertexIndexVector
+class Q_OPENGL_EXPORT QVertexIndexVector
{
public:
enum Type {
@@ -111,7 +111,7 @@ private:
QVector<quint16> indices16;
};
-struct QTriangleSet
+struct Q_OPENGL_EXPORT QTriangleSet
{
inline QTriangleSet() { }
inline QTriangleSet(const QTriangleSet &other) : vertices(other.vertices), indices(other.indices) { }
@@ -122,14 +122,14 @@ struct QTriangleSet
QVertexIndexVector indices; // [i[0], j[0], k[0], i[1], j[1], k[1], i[2], ...]
};
-struct QPolylineSet
+struct Q_OPENGL_EXPORT QPolylineSet
{
inline QPolylineSet() { }
inline QPolylineSet(const QPolylineSet &other) : vertices(other.vertices), indices(other.indices) { }
QPolylineSet &operator = (const QPolylineSet &other) {vertices = other.vertices; indices = other.indices; return *this;}
QVector<qreal> vertices; // [x[0], y[0], x[1], y[1], x[2], ...]
- QVertexIndexVector indices;
+ QVertexIndexVector indices; // End of polyline is marked with -1.
};
// The vertex coordinates of the returned triangle set will be rounded to a grid with a mesh size
@@ -139,9 +139,9 @@ struct QPolylineSet
// 'lod' is the level of detail. Default is 1. Curves are split into more lines when 'lod' is higher.
QTriangleSet qTriangulate(const qreal *polygon, int count, uint hint = QVectorPath::PolygonHint | QVectorPath::OddEvenFill, const QTransform &matrix = QTransform());
QTriangleSet qTriangulate(const QVectorPath &path, const QTransform &matrix = QTransform(), qreal lod = 1);
-QTriangleSet qTriangulate(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1);
+QTriangleSet Q_OPENGL_EXPORT qTriangulate(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1);
QPolylineSet qPolyline(const QVectorPath &path, const QTransform &matrix = QTransform(), qreal lod = 1);
-QPolylineSet qPolyline(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1);
+QPolylineSet Q_OPENGL_EXPORT qPolyline(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1);
QT_END_NAMESPACE
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 057fb55e2c..7ce35f8d1c 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -43,6 +43,7 @@
#include "qplatformdefs.h"
#include "qgl.h"
#include <qdebug.h>
+#include <qglfunctions.h>
#if defined(Q_WS_X11)
#include "private/qt_x11_p.h"
@@ -1663,6 +1664,7 @@ const QGLContext *qt_gl_transfer_context(const QGLContext *ctx)
QGLContextPrivate::QGLContextPrivate(QGLContext *context)
: internal_context(false)
, q_ptr(context)
+ , functions(0)
{
group = new QGLContextGroup(context);
texture_destroyer = new QGLTextureDestroyer;
@@ -1671,6 +1673,8 @@ QGLContextPrivate::QGLContextPrivate(QGLContext *context)
QGLContextPrivate::~QGLContextPrivate()
{
+ delete functions;
+
if (!group->m_refs.deref()) {
Q_ASSERT(group->context() == q_ptr);
delete group;
@@ -2711,6 +2715,19 @@ int QGLContextPrivate::maxTextureSize()
}
/*!
+ Returns a QGLFunctions object that is initialized for this context.
+ */
+QGLFunctions *QGLContext::functions() const
+{
+ QGLContextPrivate *d = const_cast<QGLContextPrivate *>(d_func());
+ if (!d->functions) {
+ d->functions = new QGLFunctions(this);
+ d->functions->initializeGLFunctions(this);
+ }
+ return d->functions;
+}
+
+/*!
Generates and binds a 2D GL texture to the current context, based
on \a image. The generated texture id is returned and can be used in
later \c glBindTexture() calls.
@@ -3792,6 +3809,20 @@ QGLWidget::QGLWidget(QWidget *parent, const QGLWidget* shareWidget, Qt::WindowFl
d->init(new QGLContext(QGLFormat::defaultFormat(), this), shareWidget);
}
+/*!
+ \internal
+ */
+QGLWidget::QGLWidget(QGLWidgetPrivate &dd, const QGLFormat &format, QWidget *parent, const QGLWidget *shareWidget, Qt::WindowFlags f)
+ : QWidget(dd, parent, f | Qt::MSWindowsOwnDC)
+{
+ Q_D(QGLWidget);
+ setAttribute(Qt::WA_PaintOnScreen);
+ setAttribute(Qt::WA_NoSystemBackground);
+ setAutoFillBackground(true); // for compatibility
+ d->init(new QGLContext(format, this), shareWidget);
+
+}
+
/*!
Constructs an OpenGL widget with parent \a parent.
diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h
index c57995d8d0..dfd1ae1824 100644
--- a/src/opengl/qgl.h
+++ b/src/opengl/qgl.h
@@ -307,6 +307,8 @@ Q_OPENGL_EXPORT bool operator!=(const QGLFormat&, const QGLFormat&);
Q_OPENGL_EXPORT QDebug operator<<(QDebug, const QGLFormat &);
#endif
+class QGLFunctions;
+
class Q_OPENGL_EXPORT QGLContext
{
Q_DECLARE_PRIVATE(QGLContext)
@@ -332,6 +334,8 @@ public:
virtual void swapBuffers() const;
+ QGLFunctions *functions() const;
+
enum BindOption {
NoBindOption = 0x0000,
InvertedYBindOption = 0x0001,
@@ -466,6 +470,7 @@ private:
friend class QX11GLPixmapData;
friend class QX11GLSharedContexts;
friend class QGLContextResourceBase;
+ friend class QSGDistanceFieldGlyphCache;
private:
Q_DISABLE_COPY(QGLContext)
};
@@ -589,6 +594,11 @@ protected:
virtual void glDraw();
int fontDisplayListBase(const QFont & fnt, int listBase = 2000); // ### Qt 5: remove
+ QGLWidget(QGLWidgetPrivate &dd,
+ const QGLFormat &format = QGLFormat(),
+ QWidget *parent = 0,
+ const QGLWidget* shareWidget = 0,
+ Qt::WindowFlags f = 0);
private:
Q_DISABLE_COPY(QGLWidget)
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 50d13c9540..6a503fab90 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -159,7 +159,7 @@ public:
QGLFormat::OpenGLContextProfile profile;
};
-class QGLWidgetPrivate : public QWidgetPrivate
+class Q_OPENGL_EXPORT QGLWidgetPrivate : public QWidgetPrivate
{
Q_DECLARE_PUBLIC(QGLWidget)
public:
@@ -441,6 +441,8 @@ public:
QHash<QGLContextResourceBase *, void *> m_resources;
QGLTextureDestroyer *texture_destroyer;
+ QGLFunctions *functions;
+
bool vertexAttributeArraysEnabledState[QT_GL_VERTEX_ARRAY_TRACKED_COUNT];
static inline QGLContextGroup *contextGroup(const QGLContext *ctx) { return ctx->d_ptr->group; }
@@ -499,7 +501,7 @@ private:
QGLContext *m_ctx;
};
-class QGLTextureDestroyer : public QObject
+class Q_OPENGL_EXPORT QGLTextureDestroyer : public QObject
{
Q_OBJECT
public:
diff --git a/src/opengl/qglfunctions.cpp b/src/opengl/qglfunctions.cpp
index be8219a07f..8027081543 100644
--- a/src/opengl/qglfunctions.cpp
+++ b/src/opengl/qglfunctions.cpp
@@ -1348,7 +1348,7 @@ void QGLFunctions::initializeGLFunctions(const QGLContext *context)
#ifndef QT_OPENGL_ES_2
-static void qglfResolveActiveTexture(GLenum texture)
+static void QGLF_APIENTRY qglfResolveActiveTexture(GLenum texture)
{
typedef void (QGLF_APIENTRYP type_glActiveTexture)(GLenum texture);
@@ -1368,7 +1368,7 @@ static void qglfResolveActiveTexture(GLenum texture)
funcs->activeTexture = qglfResolveActiveTexture;
}
-static void qglfResolveAttachShader(GLuint program, GLuint shader)
+static void QGLF_APIENTRY qglfResolveAttachShader(GLuint program, GLuint shader)
{
typedef void (QGLF_APIENTRYP type_glAttachShader)(GLuint program, GLuint shader);
@@ -1388,7 +1388,7 @@ static void qglfResolveAttachShader(GLuint program, GLuint shader)
funcs->attachShader = qglfResolveAttachShader;
}
-static void qglfResolveBindAttribLocation(GLuint program, GLuint index, const char* name)
+static void QGLF_APIENTRY qglfResolveBindAttribLocation(GLuint program, GLuint index, const char* name)
{
typedef void (QGLF_APIENTRYP type_glBindAttribLocation)(GLuint program, GLuint index, const char* name);
@@ -1408,7 +1408,7 @@ static void qglfResolveBindAttribLocation(GLuint program, GLuint index, const ch
funcs->bindAttribLocation = qglfResolveBindAttribLocation;
}
-static void qglfResolveBindBuffer(GLenum target, GLuint buffer)
+static void QGLF_APIENTRY qglfResolveBindBuffer(GLenum target, GLuint buffer)
{
typedef void (QGLF_APIENTRYP type_glBindBuffer)(GLenum target, GLuint buffer);
@@ -1438,7 +1438,7 @@ static void qglfResolveBindBuffer(GLenum target, GLuint buffer)
funcs->bindBuffer = qglfResolveBindBuffer;
}
-static void qglfResolveBindFramebuffer(GLenum target, GLuint framebuffer)
+static void QGLF_APIENTRY qglfResolveBindFramebuffer(GLenum target, GLuint framebuffer)
{
typedef void (QGLF_APIENTRYP type_glBindFramebuffer)(GLenum target, GLuint framebuffer);
@@ -1468,7 +1468,7 @@ static void qglfResolveBindFramebuffer(GLenum target, GLuint framebuffer)
funcs->bindFramebuffer = qglfResolveBindFramebuffer;
}
-static void qglfResolveBindRenderbuffer(GLenum target, GLuint renderbuffer)
+static void QGLF_APIENTRY qglfResolveBindRenderbuffer(GLenum target, GLuint renderbuffer)
{
typedef void (QGLF_APIENTRYP type_glBindRenderbuffer)(GLenum target, GLuint renderbuffer);
@@ -1498,7 +1498,7 @@ static void qglfResolveBindRenderbuffer(GLenum target, GLuint renderbuffer)
funcs->bindRenderbuffer = qglfResolveBindRenderbuffer;
}
-static void qglfResolveBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+static void QGLF_APIENTRY qglfResolveBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
{
typedef void (QGLF_APIENTRYP type_glBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
@@ -1528,7 +1528,7 @@ static void qglfResolveBlendColor(GLclampf red, GLclampf green, GLclampf blue, G
funcs->blendColor = qglfResolveBlendColor;
}
-static void qglfResolveBlendEquation(GLenum mode)
+static void QGLF_APIENTRY qglfResolveBlendEquation(GLenum mode)
{
typedef void (QGLF_APIENTRYP type_glBlendEquation)(GLenum mode);
@@ -1558,7 +1558,7 @@ static void qglfResolveBlendEquation(GLenum mode)
funcs->blendEquation = qglfResolveBlendEquation;
}
-static void qglfResolveBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+static void QGLF_APIENTRY qglfResolveBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
{
typedef void (QGLF_APIENTRYP type_glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha);
@@ -1588,7 +1588,7 @@ static void qglfResolveBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
funcs->blendEquationSeparate = qglfResolveBlendEquationSeparate;
}
-static void qglfResolveBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+static void QGLF_APIENTRY qglfResolveBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{
typedef void (QGLF_APIENTRYP type_glBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
@@ -1618,7 +1618,7 @@ static void qglfResolveBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum sr
funcs->blendFuncSeparate = qglfResolveBlendFuncSeparate;
}
-static void qglfResolveBufferData(GLenum target, qgl_GLsizeiptr size, const void* data, GLenum usage)
+static void QGLF_APIENTRY qglfResolveBufferData(GLenum target, qgl_GLsizeiptr size, const void* data, GLenum usage)
{
typedef void (QGLF_APIENTRYP type_glBufferData)(GLenum target, qgl_GLsizeiptr size, const void* data, GLenum usage);
@@ -1648,7 +1648,7 @@ static void qglfResolveBufferData(GLenum target, qgl_GLsizeiptr size, const void
funcs->bufferData = qglfResolveBufferData;
}
-static void qglfResolveBufferSubData(GLenum target, qgl_GLintptr offset, qgl_GLsizeiptr size, const void* data)
+static void QGLF_APIENTRY qglfResolveBufferSubData(GLenum target, qgl_GLintptr offset, qgl_GLsizeiptr size, const void* data)
{
typedef void (QGLF_APIENTRYP type_glBufferSubData)(GLenum target, qgl_GLintptr offset, qgl_GLsizeiptr size, const void* data);
@@ -1678,7 +1678,7 @@ static void qglfResolveBufferSubData(GLenum target, qgl_GLintptr offset, qgl_GLs
funcs->bufferSubData = qglfResolveBufferSubData;
}
-static GLenum qglfResolveCheckFramebufferStatus(GLenum target)
+static GLenum QGLF_APIENTRY qglfResolveCheckFramebufferStatus(GLenum target)
{
typedef GLenum (QGLF_APIENTRYP type_glCheckFramebufferStatus)(GLenum target);
@@ -1708,7 +1708,7 @@ static GLenum qglfResolveCheckFramebufferStatus(GLenum target)
return GLenum(0);
}
-static void qglfResolveCompileShader(GLuint shader)
+static void QGLF_APIENTRY qglfResolveCompileShader(GLuint shader)
{
typedef void (QGLF_APIENTRYP type_glCompileShader)(GLuint shader);
@@ -1728,7 +1728,7 @@ static void qglfResolveCompileShader(GLuint shader)
funcs->compileShader = qglfResolveCompileShader;
}
-static void qglfResolveCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
+static void QGLF_APIENTRY qglfResolveCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
{
typedef void (QGLF_APIENTRYP type_glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
@@ -1758,7 +1758,7 @@ static void qglfResolveCompressedTexImage2D(GLenum target, GLint level, GLenum i
funcs->compressedTexImage2D = qglfResolveCompressedTexImage2D;
}
-static void qglfResolveCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
+static void QGLF_APIENTRY qglfResolveCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
{
typedef void (QGLF_APIENTRYP type_glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
@@ -1788,7 +1788,7 @@ static void qglfResolveCompressedTexSubImage2D(GLenum target, GLint level, GLint
funcs->compressedTexSubImage2D = qglfResolveCompressedTexSubImage2D;
}
-static GLuint qglfResolveCreateProgram()
+static GLuint QGLF_APIENTRY qglfResolveCreateProgram()
{
typedef GLuint (QGLF_APIENTRYP type_glCreateProgram)();
@@ -1808,7 +1808,7 @@ static GLuint qglfResolveCreateProgram()
return GLuint(0);
}
-static GLuint qglfResolveCreateShader(GLenum type)
+static GLuint QGLF_APIENTRY qglfResolveCreateShader(GLenum type)
{
typedef GLuint (QGLF_APIENTRYP type_glCreateShader)(GLenum type);
@@ -1828,7 +1828,7 @@ static GLuint qglfResolveCreateShader(GLenum type)
return GLuint(0);
}
-static void qglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers)
+static void QGLF_APIENTRY qglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers)
{
typedef void (QGLF_APIENTRYP type_glDeleteBuffers)(GLsizei n, const GLuint* buffers);
@@ -1858,7 +1858,7 @@ static void qglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers)
funcs->deleteBuffers = qglfResolveDeleteBuffers;
}
-static void qglfResolveDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
+static void QGLF_APIENTRY qglfResolveDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
{
typedef void (QGLF_APIENTRYP type_glDeleteFramebuffers)(GLsizei n, const GLuint* framebuffers);
@@ -1888,7 +1888,7 @@ static void qglfResolveDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
funcs->deleteFramebuffers = qglfResolveDeleteFramebuffers;
}
-static void qglfResolveDeleteProgram(GLuint program)
+static void QGLF_APIENTRY qglfResolveDeleteProgram(GLuint program)
{
typedef void (QGLF_APIENTRYP type_glDeleteProgram)(GLuint program);
@@ -1908,7 +1908,7 @@ static void qglfResolveDeleteProgram(GLuint program)
funcs->deleteProgram = qglfResolveDeleteProgram;
}
-static void qglfResolveDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
+static void QGLF_APIENTRY qglfResolveDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
{
typedef void (QGLF_APIENTRYP type_glDeleteRenderbuffers)(GLsizei n, const GLuint* renderbuffers);
@@ -1938,7 +1938,7 @@ static void qglfResolveDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffer
funcs->deleteRenderbuffers = qglfResolveDeleteRenderbuffers;
}
-static void qglfResolveDeleteShader(GLuint shader)
+static void QGLF_APIENTRY qglfResolveDeleteShader(GLuint shader)
{
typedef void (QGLF_APIENTRYP type_glDeleteShader)(GLuint shader);
@@ -1958,7 +1958,7 @@ static void qglfResolveDeleteShader(GLuint shader)
funcs->deleteShader = qglfResolveDeleteShader;
}
-static void qglfResolveDetachShader(GLuint program, GLuint shader)
+static void QGLF_APIENTRY qglfResolveDetachShader(GLuint program, GLuint shader)
{
typedef void (QGLF_APIENTRYP type_glDetachShader)(GLuint program, GLuint shader);
@@ -1978,7 +1978,7 @@ static void qglfResolveDetachShader(GLuint program, GLuint shader)
funcs->detachShader = qglfResolveDetachShader;
}
-static void qglfResolveDisableVertexAttribArray(GLuint index)
+static void QGLF_APIENTRY qglfResolveDisableVertexAttribArray(GLuint index)
{
typedef void (QGLF_APIENTRYP type_glDisableVertexAttribArray)(GLuint index);
@@ -1998,7 +1998,7 @@ static void qglfResolveDisableVertexAttribArray(GLuint index)
funcs->disableVertexAttribArray = qglfResolveDisableVertexAttribArray;
}
-static void qglfResolveEnableVertexAttribArray(GLuint index)
+static void QGLF_APIENTRY qglfResolveEnableVertexAttribArray(GLuint index)
{
typedef void (QGLF_APIENTRYP type_glEnableVertexAttribArray)(GLuint index);
@@ -2018,7 +2018,7 @@ static void qglfResolveEnableVertexAttribArray(GLuint index)
funcs->enableVertexAttribArray = qglfResolveEnableVertexAttribArray;
}
-static void qglfResolveFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+static void QGLF_APIENTRY qglfResolveFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
typedef void (QGLF_APIENTRYP type_glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
@@ -2048,7 +2048,7 @@ static void qglfResolveFramebufferRenderbuffer(GLenum target, GLenum attachment,
funcs->framebufferRenderbuffer = qglfResolveFramebufferRenderbuffer;
}
-static void qglfResolveFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+static void QGLF_APIENTRY qglfResolveFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{
typedef void (QGLF_APIENTRYP type_glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
@@ -2078,7 +2078,7 @@ static void qglfResolveFramebufferTexture2D(GLenum target, GLenum attachment, GL
funcs->framebufferTexture2D = qglfResolveFramebufferTexture2D;
}
-static void qglfResolveGenBuffers(GLsizei n, GLuint* buffers)
+static void QGLF_APIENTRY qglfResolveGenBuffers(GLsizei n, GLuint* buffers)
{
typedef void (QGLF_APIENTRYP type_glGenBuffers)(GLsizei n, GLuint* buffers);
@@ -2108,7 +2108,7 @@ static void qglfResolveGenBuffers(GLsizei n, GLuint* buffers)
funcs->genBuffers = qglfResolveGenBuffers;
}
-static void qglfResolveGenerateMipmap(GLenum target)
+static void QGLF_APIENTRY qglfResolveGenerateMipmap(GLenum target)
{
typedef void (QGLF_APIENTRYP type_glGenerateMipmap)(GLenum target);
@@ -2138,7 +2138,7 @@ static void qglfResolveGenerateMipmap(GLenum target)
funcs->generateMipmap = qglfResolveGenerateMipmap;
}
-static void qglfResolveGenFramebuffers(GLsizei n, GLuint* framebuffers)
+static void QGLF_APIENTRY qglfResolveGenFramebuffers(GLsizei n, GLuint* framebuffers)
{
typedef void (QGLF_APIENTRYP type_glGenFramebuffers)(GLsizei n, GLuint* framebuffers);
@@ -2168,7 +2168,7 @@ static void qglfResolveGenFramebuffers(GLsizei n, GLuint* framebuffers)
funcs->genFramebuffers = qglfResolveGenFramebuffers;
}
-static void qglfResolveGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
+static void QGLF_APIENTRY qglfResolveGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
{
typedef void (QGLF_APIENTRYP type_glGenRenderbuffers)(GLsizei n, GLuint* renderbuffers);
@@ -2198,7 +2198,7 @@ static void qglfResolveGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
funcs->genRenderbuffers = qglfResolveGenRenderbuffers;
}
-static void qglfResolveGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
+static void QGLF_APIENTRY qglfResolveGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
{
typedef void (QGLF_APIENTRYP type_glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
@@ -2218,7 +2218,7 @@ static void qglfResolveGetActiveAttrib(GLuint program, GLuint index, GLsizei buf
funcs->getActiveAttrib = qglfResolveGetActiveAttrib;
}
-static void qglfResolveGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
+static void QGLF_APIENTRY qglfResolveGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
{
typedef void (QGLF_APIENTRYP type_glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
@@ -2238,7 +2238,7 @@ static void qglfResolveGetActiveUniform(GLuint program, GLuint index, GLsizei bu
funcs->getActiveUniform = qglfResolveGetActiveUniform;
}
-static void qglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
+static void QGLF_APIENTRY qglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
{
typedef void (QGLF_APIENTRYP type_glGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
@@ -2258,7 +2258,7 @@ static void qglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsi
funcs->getAttachedShaders = qglfResolveGetAttachedShaders;
}
-static int qglfResolveGetAttribLocation(GLuint program, const char* name)
+static int QGLF_APIENTRY qglfResolveGetAttribLocation(GLuint program, const char* name)
{
typedef int (QGLF_APIENTRYP type_glGetAttribLocation)(GLuint program, const char* name);
@@ -2278,7 +2278,7 @@ static int qglfResolveGetAttribLocation(GLuint program, const char* name)
return int(0);
}
-static void qglfResolveGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params);
@@ -2308,7 +2308,7 @@ static void qglfResolveGetBufferParameteriv(GLenum target, GLenum pname, GLint*
funcs->getBufferParameteriv = qglfResolveGetBufferParameteriv;
}
-static void qglfResolveGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
@@ -2338,7 +2338,7 @@ static void qglfResolveGetFramebufferAttachmentParameteriv(GLenum target, GLenum
funcs->getFramebufferAttachmentParameteriv = qglfResolveGetFramebufferAttachmentParameteriv;
}
-static void qglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetProgramiv)(GLuint program, GLenum pname, GLint* params);
@@ -2358,7 +2358,7 @@ static void qglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params)
funcs->getProgramiv = qglfResolveGetProgramiv;
}
-static void qglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
+static void QGLF_APIENTRY qglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
{
typedef void (QGLF_APIENTRYP type_glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog);
@@ -2378,7 +2378,7 @@ static void qglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsize
funcs->getProgramInfoLog = qglfResolveGetProgramInfoLog;
}
-static void qglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint* params);
@@ -2408,7 +2408,7 @@ static void qglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, G
funcs->getRenderbufferParameteriv = qglfResolveGetRenderbufferParameteriv;
}
-static void qglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetShaderiv)(GLuint shader, GLenum pname, GLint* params);
@@ -2428,7 +2428,7 @@ static void qglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params)
funcs->getShaderiv = qglfResolveGetShaderiv;
}
-static void qglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
+static void QGLF_APIENTRY qglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
{
typedef void (QGLF_APIENTRYP type_glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog);
@@ -2448,14 +2448,14 @@ static void qglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei*
funcs->getShaderInfoLog = qglfResolveGetShaderInfoLog;
}
-static void qglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+static void QGLF_APIENTRY qglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
{
Q_UNUSED(shadertype);
Q_UNUSED(precisiontype);
range[0] = range[1] = precision[0] = 0;
}
-static void qglfResolveGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+static void QGLF_APIENTRY qglfResolveGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
{
typedef void (QGLF_APIENTRYP type_glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
@@ -2485,7 +2485,7 @@ static void qglfResolveGetShaderPrecisionFormat(GLenum shadertype, GLenum precis
funcs->getShaderPrecisionFormat(shadertype, precisiontype, range, precision);
}
-static void qglfResolveGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
+static void QGLF_APIENTRY qglfResolveGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
{
typedef void (QGLF_APIENTRYP type_glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, char* source);
@@ -2505,7 +2505,7 @@ static void qglfResolveGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei*
funcs->getShaderSource = qglfResolveGetShaderSource;
}
-static void qglfResolveGetUniformfv(GLuint program, GLint location, GLfloat* params)
+static void QGLF_APIENTRY qglfResolveGetUniformfv(GLuint program, GLint location, GLfloat* params)
{
typedef void (QGLF_APIENTRYP type_glGetUniformfv)(GLuint program, GLint location, GLfloat* params);
@@ -2525,7 +2525,7 @@ static void qglfResolveGetUniformfv(GLuint program, GLint location, GLfloat* par
funcs->getUniformfv = qglfResolveGetUniformfv;
}
-static void qglfResolveGetUniformiv(GLuint program, GLint location, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetUniformiv(GLuint program, GLint location, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetUniformiv)(GLuint program, GLint location, GLint* params);
@@ -2545,7 +2545,7 @@ static void qglfResolveGetUniformiv(GLuint program, GLint location, GLint* param
funcs->getUniformiv = qglfResolveGetUniformiv;
}
-static int qglfResolveGetUniformLocation(GLuint program, const char* name)
+static int QGLF_APIENTRY qglfResolveGetUniformLocation(GLuint program, const char* name)
{
typedef int (QGLF_APIENTRYP type_glGetUniformLocation)(GLuint program, const char* name);
@@ -2565,7 +2565,7 @@ static int qglfResolveGetUniformLocation(GLuint program, const char* name)
return int(0);
}
-static void qglfResolveGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
+static void QGLF_APIENTRY qglfResolveGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
{
typedef void (QGLF_APIENTRYP type_glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params);
@@ -2585,7 +2585,7 @@ static void qglfResolveGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* pa
funcs->getVertexAttribfv = qglfResolveGetVertexAttribfv;
}
-static void qglfResolveGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
+static void QGLF_APIENTRY qglfResolveGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
{
typedef void (QGLF_APIENTRYP type_glGetVertexAttribiv)(GLuint index, GLenum pname, GLint* params);
@@ -2605,7 +2605,7 @@ static void qglfResolveGetVertexAttribiv(GLuint index, GLenum pname, GLint* para
funcs->getVertexAttribiv = qglfResolveGetVertexAttribiv;
}
-static void qglfResolveGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
+static void QGLF_APIENTRY qglfResolveGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
{
typedef void (QGLF_APIENTRYP type_glGetVertexAttribPointerv)(GLuint index, GLenum pname, void** pointer);
@@ -2625,7 +2625,7 @@ static void qglfResolveGetVertexAttribPointerv(GLuint index, GLenum pname, void*
funcs->getVertexAttribPointerv = qglfResolveGetVertexAttribPointerv;
}
-static GLboolean qglfResolveIsBuffer(GLuint buffer)
+static GLboolean QGLF_APIENTRY qglfResolveIsBuffer(GLuint buffer)
{
typedef GLboolean (QGLF_APIENTRYP type_glIsBuffer)(GLuint buffer);
@@ -2655,7 +2655,7 @@ static GLboolean qglfResolveIsBuffer(GLuint buffer)
return GLboolean(0);
}
-static GLboolean qglfResolveIsFramebuffer(GLuint framebuffer)
+static GLboolean QGLF_APIENTRY qglfResolveIsFramebuffer(GLuint framebuffer)
{
typedef GLboolean (QGLF_APIENTRYP type_glIsFramebuffer)(GLuint framebuffer);
@@ -2685,12 +2685,12 @@ static GLboolean qglfResolveIsFramebuffer(GLuint framebuffer)
return GLboolean(0);
}
-static GLboolean qglfSpecialIsProgram(GLuint program)
+static GLboolean QGLF_APIENTRY qglfSpecialIsProgram(GLuint program)
{
return program != 0;
}
-static GLboolean qglfResolveIsProgram(GLuint program)
+static GLboolean QGLF_APIENTRY qglfResolveIsProgram(GLuint program)
{
typedef GLboolean (QGLF_APIENTRYP type_glIsProgram)(GLuint program);
@@ -2710,7 +2710,7 @@ static GLboolean qglfResolveIsProgram(GLuint program)
return funcs->isProgram(program);
}
-static GLboolean qglfResolveIsRenderbuffer(GLuint renderbuffer)
+static GLboolean QGLF_APIENTRY qglfResolveIsRenderbuffer(GLuint renderbuffer)
{
typedef GLboolean (QGLF_APIENTRYP type_glIsRenderbuffer)(GLuint renderbuffer);
@@ -2740,12 +2740,12 @@ static GLboolean qglfResolveIsRenderbuffer(GLuint renderbuffer)
return GLboolean(0);
}
-static GLboolean qglfSpecialIsShader(GLuint shader)
+static GLboolean QGLF_APIENTRY qglfSpecialIsShader(GLuint shader)
{
return shader != 0;
}
-static GLboolean qglfResolveIsShader(GLuint shader)
+static GLboolean QGLF_APIENTRY qglfResolveIsShader(GLuint shader)
{
typedef GLboolean (QGLF_APIENTRYP type_glIsShader)(GLuint shader);
@@ -2765,7 +2765,7 @@ static GLboolean qglfResolveIsShader(GLuint shader)
return funcs->isShader(shader);
}
-static void qglfResolveLinkProgram(GLuint program)
+static void QGLF_APIENTRY qglfResolveLinkProgram(GLuint program)
{
typedef void (QGLF_APIENTRYP type_glLinkProgram)(GLuint program);
@@ -2785,11 +2785,11 @@ static void qglfResolveLinkProgram(GLuint program)
funcs->linkProgram = qglfResolveLinkProgram;
}
-static void qglfSpecialReleaseShaderCompiler()
+static void QGLF_APIENTRY qglfSpecialReleaseShaderCompiler()
{
}
-static void qglfResolveReleaseShaderCompiler()
+static void QGLF_APIENTRY qglfResolveReleaseShaderCompiler()
{
typedef void (QGLF_APIENTRYP type_glReleaseShaderCompiler)();
@@ -2809,7 +2809,7 @@ static void qglfResolveReleaseShaderCompiler()
funcs->releaseShaderCompiler();
}
-static void qglfResolveRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+static void QGLF_APIENTRY qglfResolveRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{
typedef void (QGLF_APIENTRYP type_glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
@@ -2839,7 +2839,7 @@ static void qglfResolveRenderbufferStorage(GLenum target, GLenum internalformat,
funcs->renderbufferStorage = qglfResolveRenderbufferStorage;
}
-static void qglfResolveSampleCoverage(GLclampf value, GLboolean invert)
+static void QGLF_APIENTRY qglfResolveSampleCoverage(GLclampf value, GLboolean invert)
{
typedef void (QGLF_APIENTRYP type_glSampleCoverage)(GLclampf value, GLboolean invert);
@@ -2869,7 +2869,7 @@ static void qglfResolveSampleCoverage(GLclampf value, GLboolean invert)
funcs->sampleCoverage = qglfResolveSampleCoverage;
}
-static void qglfResolveShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length)
+static void QGLF_APIENTRY qglfResolveShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length)
{
typedef void (QGLF_APIENTRYP type_glShaderBinary)(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length);
@@ -2889,7 +2889,7 @@ static void qglfResolveShaderBinary(GLint n, const GLuint* shaders, GLenum binar
funcs->shaderBinary = qglfResolveShaderBinary;
}
-static void qglfResolveShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
+static void QGLF_APIENTRY qglfResolveShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
{
typedef void (QGLF_APIENTRYP type_glShaderSource)(GLuint shader, GLsizei count, const char** string, const GLint* length);
@@ -2909,7 +2909,7 @@ static void qglfResolveShaderSource(GLuint shader, GLsizei count, const char** s
funcs->shaderSource = qglfResolveShaderSource;
}
-static void qglfResolveStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+static void QGLF_APIENTRY qglfResolveStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
{
typedef void (QGLF_APIENTRYP type_glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask);
@@ -2939,7 +2939,7 @@ static void qglfResolveStencilFuncSeparate(GLenum face, GLenum func, GLint ref,
funcs->stencilFuncSeparate = qglfResolveStencilFuncSeparate;
}
-static void qglfResolveStencilMaskSeparate(GLenum face, GLuint mask)
+static void QGLF_APIENTRY qglfResolveStencilMaskSeparate(GLenum face, GLuint mask)
{
typedef void (QGLF_APIENTRYP type_glStencilMaskSeparate)(GLenum face, GLuint mask);
@@ -2969,7 +2969,7 @@ static void qglfResolveStencilMaskSeparate(GLenum face, GLuint mask)
funcs->stencilMaskSeparate = qglfResolveStencilMaskSeparate;
}
-static void qglfResolveStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+static void QGLF_APIENTRY qglfResolveStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
{
typedef void (QGLF_APIENTRYP type_glStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
@@ -2999,7 +2999,7 @@ static void qglfResolveStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail,
funcs->stencilOpSeparate = qglfResolveStencilOpSeparate;
}
-static void qglfResolveUniform1f(GLint location, GLfloat x)
+static void QGLF_APIENTRY qglfResolveUniform1f(GLint location, GLfloat x)
{
typedef void (QGLF_APIENTRYP type_glUniform1f)(GLint location, GLfloat x);
@@ -3019,7 +3019,7 @@ static void qglfResolveUniform1f(GLint location, GLfloat x)
funcs->uniform1f = qglfResolveUniform1f;
}
-static void qglfResolveUniform1fv(GLint location, GLsizei count, const GLfloat* v)
+static void QGLF_APIENTRY qglfResolveUniform1fv(GLint location, GLsizei count, const GLfloat* v)
{
typedef void (QGLF_APIENTRYP type_glUniform1fv)(GLint location, GLsizei count, const GLfloat* v);
@@ -3039,7 +3039,7 @@ static void qglfResolveUniform1fv(GLint location, GLsizei count, const GLfloat*
funcs->uniform1fv = qglfResolveUniform1fv;
}
-static void qglfResolveUniform1i(GLint location, GLint x)
+static void QGLF_APIENTRY qglfResolveUniform1i(GLint location, GLint x)
{
typedef void (QGLF_APIENTRYP type_glUniform1i)(GLint location, GLint x);
@@ -3059,7 +3059,7 @@ static void qglfResolveUniform1i(GLint location, GLint x)
funcs->uniform1i = qglfResolveUniform1i;
}
-static void qglfResolveUniform1iv(GLint location, GLsizei count, const GLint* v)
+static void QGLF_APIENTRY qglfResolveUniform1iv(GLint location, GLsizei count, const GLint* v)
{
typedef void (QGLF_APIENTRYP type_glUniform1iv)(GLint location, GLsizei count, const GLint* v);
@@ -3079,7 +3079,7 @@ static void qglfResolveUniform1iv(GLint location, GLsizei count, const GLint* v)
funcs->uniform1iv = qglfResolveUniform1iv;
}
-static void qglfResolveUniform2f(GLint location, GLfloat x, GLfloat y)
+static void QGLF_APIENTRY qglfResolveUniform2f(GLint location, GLfloat x, GLfloat y)
{
typedef void (QGLF_APIENTRYP type_glUniform2f)(GLint location, GLfloat x, GLfloat y);
@@ -3099,7 +3099,7 @@ static void qglfResolveUniform2f(GLint location, GLfloat x, GLfloat y)
funcs->uniform2f = qglfResolveUniform2f;
}
-static void qglfResolveUniform2fv(GLint location, GLsizei count, const GLfloat* v)
+static void QGLF_APIENTRY qglfResolveUniform2fv(GLint location, GLsizei count, const GLfloat* v)
{
typedef void (QGLF_APIENTRYP type_glUniform2fv)(GLint location, GLsizei count, const GLfloat* v);
@@ -3119,7 +3119,7 @@ static void qglfResolveUniform2fv(GLint location, GLsizei count, const GLfloat*
funcs->uniform2fv = qglfResolveUniform2fv;
}
-static void qglfResolveUniform2i(GLint location, GLint x, GLint y)
+static void QGLF_APIENTRY qglfResolveUniform2i(GLint location, GLint x, GLint y)
{
typedef void (QGLF_APIENTRYP type_glUniform2i)(GLint location, GLint x, GLint y);
@@ -3139,7 +3139,7 @@ static void qglfResolveUniform2i(GLint location, GLint x, GLint y)
funcs->uniform2i = qglfResolveUniform2i;
}
-static void qglfResolveUniform2iv(GLint location, GLsizei count, const GLint* v)
+static void QGLF_APIENTRY qglfResolveUniform2iv(GLint location, GLsizei count, const GLint* v)
{
typedef void (QGLF_APIENTRYP type_glUniform2iv)(GLint location, GLsizei count, const GLint* v);
@@ -3159,7 +3159,7 @@ static void qglfResolveUniform2iv(GLint location, GLsizei count, const GLint* v)
funcs->uniform2iv = qglfResolveUniform2iv;
}
-static void qglfResolveUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+static void QGLF_APIENTRY qglfResolveUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
{
typedef void (QGLF_APIENTRYP type_glUniform3f)(GLint location, GLfloat x, GLfloat y, GLfloat z);
@@ -3179,7 +3179,7 @@ static void qglfResolveUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z
funcs->uniform3f = qglfResolveUniform3f;
}
-static void qglfResolveUniform3fv(GLint location, GLsizei count, const GLfloat* v)
+static void QGLF_APIENTRY qglfResolveUniform3fv(GLint location, GLsizei count, const GLfloat* v)
{
typedef void (QGLF_APIENTRYP type_glUniform3fv)(GLint location, GLsizei count, const GLfloat* v);
@@ -3199,7 +3199,7 @@ static void qglfResolveUniform3fv(GLint location, GLsizei count, const GLfloat*
funcs->uniform3fv = qglfResolveUniform3fv;
}
-static void qglfResolveUniform3i(GLint location, GLint x, GLint y, GLint z)
+static void QGLF_APIENTRY qglfResolveUniform3i(GLint location, GLint x, GLint y, GLint z)
{
typedef void (QGLF_APIENTRYP type_glUniform3i)(GLint location, GLint x, GLint y, GLint z);
@@ -3219,7 +3219,7 @@ static void qglfResolveUniform3i(GLint location, GLint x, GLint y, GLint z)
funcs->uniform3i = qglfResolveUniform3i;
}
-static void qglfResolveUniform3iv(GLint location, GLsizei count, const GLint* v)
+static void QGLF_APIENTRY qglfResolveUniform3iv(GLint location, GLsizei count, const GLint* v)
{
typedef void (QGLF_APIENTRYP type_glUniform3iv)(GLint location, GLsizei count, const GLint* v);
@@ -3239,7 +3239,7 @@ static void qglfResolveUniform3iv(GLint location, GLsizei count, const GLint* v)
funcs->uniform3iv = qglfResolveUniform3iv;
}
-static void qglfResolveUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+static void QGLF_APIENTRY qglfResolveUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
typedef void (QGLF_APIENTRYP type_glUniform4f)(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
@@ -3259,7 +3259,7 @@ static void qglfResolveUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z
funcs->uniform4f = qglfResolveUniform4f;
}
-static void qglfResolveUniform4fv(GLint location, GLsizei count, const GLfloat* v)
+static void QGLF_APIENTRY qglfResolveUniform4fv(GLint location, GLsizei count, const GLfloat* v)
{
typedef void (QGLF_APIENTRYP type_glUniform4fv)(GLint location, GLsizei count, const GLfloat* v);
@@ -3279,7 +3279,7 @@ static void qglfResolveUniform4fv(GLint location, GLsizei count, const GLfloat*
funcs->uniform4fv = qglfResolveUniform4fv;
}
-static void qglfResolveUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+static void QGLF_APIENTRY qglfResolveUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
{
typedef void (QGLF_APIENTRYP type_glUniform4i)(GLint location, GLint x, GLint y, GLint z, GLint w);
@@ -3299,7 +3299,7 @@ static void qglfResolveUniform4i(GLint location, GLint x, GLint y, GLint z, GLin
funcs->uniform4i = qglfResolveUniform4i;
}
-static void qglfResolveUniform4iv(GLint location, GLsizei count, const GLint* v)
+static void QGLF_APIENTRY qglfResolveUniform4iv(GLint location, GLsizei count, const GLint* v)
{
typedef void (QGLF_APIENTRYP type_glUniform4iv)(GLint location, GLsizei count, const GLint* v);
@@ -3319,7 +3319,7 @@ static void qglfResolveUniform4iv(GLint location, GLsizei count, const GLint* v)
funcs->uniform4iv = qglfResolveUniform4iv;
}
-static void qglfResolveUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+static void QGLF_APIENTRY qglfResolveUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
typedef void (QGLF_APIENTRYP type_glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
@@ -3339,7 +3339,7 @@ static void qglfResolveUniformMatrix2fv(GLint location, GLsizei count, GLboolean
funcs->uniformMatrix2fv = qglfResolveUniformMatrix2fv;
}
-static void qglfResolveUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+static void QGLF_APIENTRY qglfResolveUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
typedef void (QGLF_APIENTRYP type_glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
@@ -3359,7 +3359,7 @@ static void qglfResolveUniformMatrix3fv(GLint location, GLsizei count, GLboolean
funcs->uniformMatrix3fv = qglfResolveUniformMatrix3fv;
}
-static void qglfResolveUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+static void QGLF_APIENTRY qglfResolveUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
typedef void (QGLF_APIENTRYP type_glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
@@ -3379,7 +3379,7 @@ static void qglfResolveUniformMatrix4fv(GLint location, GLsizei count, GLboolean
funcs->uniformMatrix4fv = qglfResolveUniformMatrix4fv;
}
-static void qglfResolveUseProgram(GLuint program)
+static void QGLF_APIENTRY qglfResolveUseProgram(GLuint program)
{
typedef void (QGLF_APIENTRYP type_glUseProgram)(GLuint program);
@@ -3399,7 +3399,7 @@ static void qglfResolveUseProgram(GLuint program)
funcs->useProgram = qglfResolveUseProgram;
}
-static void qglfResolveValidateProgram(GLuint program)
+static void QGLF_APIENTRY qglfResolveValidateProgram(GLuint program)
{
typedef void (QGLF_APIENTRYP type_glValidateProgram)(GLuint program);
@@ -3419,7 +3419,7 @@ static void qglfResolveValidateProgram(GLuint program)
funcs->validateProgram = qglfResolveValidateProgram;
}
-static void qglfResolveVertexAttrib1f(GLuint indx, GLfloat x)
+static void QGLF_APIENTRY qglfResolveVertexAttrib1f(GLuint indx, GLfloat x)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib1f)(GLuint indx, GLfloat x);
@@ -3439,7 +3439,7 @@ static void qglfResolveVertexAttrib1f(GLuint indx, GLfloat x)
funcs->vertexAttrib1f = qglfResolveVertexAttrib1f;
}
-static void qglfResolveVertexAttrib1fv(GLuint indx, const GLfloat* values)
+static void QGLF_APIENTRY qglfResolveVertexAttrib1fv(GLuint indx, const GLfloat* values)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib1fv)(GLuint indx, const GLfloat* values);
@@ -3459,7 +3459,7 @@ static void qglfResolveVertexAttrib1fv(GLuint indx, const GLfloat* values)
funcs->vertexAttrib1fv = qglfResolveVertexAttrib1fv;
}
-static void qglfResolveVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
+static void QGLF_APIENTRY qglfResolveVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib2f)(GLuint indx, GLfloat x, GLfloat y);
@@ -3479,7 +3479,7 @@ static void qglfResolveVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
funcs->vertexAttrib2f = qglfResolveVertexAttrib2f;
}
-static void qglfResolveVertexAttrib2fv(GLuint indx, const GLfloat* values)
+static void QGLF_APIENTRY qglfResolveVertexAttrib2fv(GLuint indx, const GLfloat* values)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib2fv)(GLuint indx, const GLfloat* values);
@@ -3499,7 +3499,7 @@ static void qglfResolveVertexAttrib2fv(GLuint indx, const GLfloat* values)
funcs->vertexAttrib2fv = qglfResolveVertexAttrib2fv;
}
-static void qglfResolveVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+static void QGLF_APIENTRY qglfResolveVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib3f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
@@ -3519,7 +3519,7 @@ static void qglfResolveVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat
funcs->vertexAttrib3f = qglfResolveVertexAttrib3f;
}
-static void qglfResolveVertexAttrib3fv(GLuint indx, const GLfloat* values)
+static void QGLF_APIENTRY qglfResolveVertexAttrib3fv(GLuint indx, const GLfloat* values)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib3fv)(GLuint indx, const GLfloat* values);
@@ -3539,7 +3539,7 @@ static void qglfResolveVertexAttrib3fv(GLuint indx, const GLfloat* values)
funcs->vertexAttrib3fv = qglfResolveVertexAttrib3fv;
}
-static void qglfResolveVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+static void QGLF_APIENTRY qglfResolveVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib4f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
@@ -3559,7 +3559,7 @@ static void qglfResolveVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat
funcs->vertexAttrib4f = qglfResolveVertexAttrib4f;
}
-static void qglfResolveVertexAttrib4fv(GLuint indx, const GLfloat* values)
+static void QGLF_APIENTRY qglfResolveVertexAttrib4fv(GLuint indx, const GLfloat* values)
{
typedef void (QGLF_APIENTRYP type_glVertexAttrib4fv)(GLuint indx, const GLfloat* values);
@@ -3579,7 +3579,7 @@ static void qglfResolveVertexAttrib4fv(GLuint indx, const GLfloat* values)
funcs->vertexAttrib4fv = qglfResolveVertexAttrib4fv;
}
-static void qglfResolveVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
+static void QGLF_APIENTRY qglfResolveVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
{
typedef void (QGLF_APIENTRYP type_glVertexAttribPointer)(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr);
diff --git a/src/opengl/qglfunctions.h b/src/opengl/qglfunctions.h
index 44d9bad9fa..759af4f939 100644
--- a/src/opengl/qglfunctions.h
+++ b/src/opengl/qglfunctions.h
@@ -59,6 +59,10 @@ QT_MODULE(OpenGL)
typedef ptrdiff_t qgl_GLintptr;
typedef ptrdiff_t qgl_GLsizeiptr;
+#ifdef Q_WS_WIN
+# define QGLF_APIENTRY APIENTRY
+#endif
+
#ifndef Q_WS_MAC
# ifndef QGLF_APIENTRYP
# ifdef QGLF_APIENTRY
@@ -1945,6 +1949,9 @@ inline void QGLFunctions::glVertexAttribPointer(GLuint indx, GLint size, GLenum
#ifndef GL_RGBA4
#define GL_RGBA4 0x8056
#endif
+#ifndef GL_BGRA
+#define GL_BGRA 0x80E1
+#endif
#ifndef GL_SAMPLE_ALPHA_TO_COVERAGE
#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
#endif
diff --git a/src/opengl/qglpaintdevice_p.h b/src/opengl/qglpaintdevice_p.h
index f4176fb2e7..241e3091c6 100644
--- a/src/opengl/qglpaintdevice_p.h
+++ b/src/opengl/qglpaintdevice_p.h
@@ -90,7 +90,7 @@ protected:
// Wraps a QGLWidget
class QGLWidget;
-class QGLWidgetGLPaintDevice : public QGLPaintDevice
+class Q_OPENGL_EXPORT QGLWidgetGLPaintDevice : public QGLPaintDevice
{
public:
QGLWidgetGLPaintDevice();
diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h
index 549d039bf8..856321dec8 100644
--- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h
+++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h
@@ -63,7 +63,6 @@ private:
QWaylandEglIntegration *mEglIntegration;
QWaylandGLContext *mGLContext;
struct wl_egl_window *mWaylandEglWindow;
- EGLConfig mConfig;
const QWaylandWindow *mParentWindow;
};
diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri b/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri
index bc978645c4..cd0701150f 100644
--- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri
+++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri
@@ -1,12 +1,11 @@
+include (../../../eglconvenience/eglconvenience.pri)
+
LIBS += -lwayland-egl -lEGL
INCLUDEPATH += $$PWD
SOURCES += $$PWD/qwaylandeglintegration.cpp \
$$PWD/qwaylandglcontext.cpp \
- $$PWD/qwaylandeglwindow.cpp \
- $$PWD/../../../eglconvenience/qeglconvenience.cpp
+ $$PWD/qwaylandeglwindow.cpp
HEADERS += $$PWD/qwaylandeglintegration.h \
$$PWD/qwaylandglcontext.h \
- $$PWD/qwaylandeglwindow.h \
- $$PWD/../../../eglconvenience/qeglconvenience.h \
- gl_integration/wayland_egl/qwaylandeglinclude.h
+ $$PWD/qwaylandeglwindow.h
diff --git a/src/plugins/platforms/wayland/qwaylandbuffer.h b/src/plugins/platforms/wayland/qwaylandbuffer.h
index 8779d5fda0..faeb3e85b1 100644
--- a/src/plugins/platforms/wayland/qwaylandbuffer.h
+++ b/src/plugins/platforms/wayland/qwaylandbuffer.h
@@ -44,6 +44,7 @@
#include <QtCore/QSize>
+#include <wayland-client.h>
#include <wayland-client-protocol.h>
class QWaylandBuffer {
diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
index 6c2f341f64..2d7df1d613 100644
--- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
+++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
@@ -101,6 +101,12 @@ void QWaylandInputDevice::inputHandleMotion(void *data,
QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data;
QWaylandWindow *window = inputDevice->mPointerFocus;
+ if (window == NULL) {
+ /* We destroyed the pointer focus surface, but the server
+ * didn't get the message yet. */
+ return;
+ }
+
inputDevice->mSurfacePos = QPoint(surface_x, surface_y);
inputDevice->mGlobalPos = QPoint(x, y);
inputDevice->mTime = time;
@@ -120,6 +126,12 @@ void QWaylandInputDevice::inputHandleButton(void *data,
QWaylandWindow *window = inputDevice->mPointerFocus;
Qt::MouseButton qt_button;
+ if (window == NULL) {
+ /* We destroyed the pointer focus surface, but the server
+ * didn't get the message yet. */
+ return;
+ }
+
switch (button) {
case 272:
qt_button = Qt::LeftButton;
@@ -229,6 +241,12 @@ void QWaylandInputDevice::inputHandleKey(void *data,
QEvent::Type type;
char s[2];
+ if (window == NULL) {
+ /* We destroyed the keyboard focus surface, but the server
+ * didn't get the message yet. */
+ return;
+ }
+
code = key + inputDevice->mXkb->min_key_code;
level = 0;
@@ -250,9 +268,6 @@ void QWaylandInputDevice::inputHandleKey(void *data,
sym = translateKey(sym, s, sizeof s);
- qWarning("keycode %d, sym %d, string %d, modifiers 0x%x",
- code, sym, s[0], (int) inputDevice->mModifiers);
-
if (window) {
QWindowSystemInterface::handleKeyEvent(window->widget(),
time, type, sym,
diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp
index 3f3ee5e571..b6401f6d06 100644
--- a/src/plugins/platforms/wayland/qwaylandintegration.cpp
+++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp
@@ -44,6 +44,7 @@
#include "qwaylanddisplay.h"
#include "qwaylandshmsurface.h"
#include "qwaylandshmwindow.h"
+#include "qwaylandnativeinterface.h"
#include "qgenericunixfontdatabase.h"
@@ -62,9 +63,15 @@ QWaylandIntegration::QWaylandIntegration(bool useOpenGL)
: mFontDb(new QGenericUnixFontDatabase())
, mDisplay(new QWaylandDisplay())
, mUseOpenGL(useOpenGL)
+ , mNativeInterface(new QWaylandNativeInterface)
{
}
+QPlatformNativeInterface * QWaylandIntegration::nativeInterface() const
+{
+ return mNativeInterface;
+}
+
QList<QPlatformScreen *>
QWaylandIntegration::screens() const
{
diff --git a/src/plugins/platforms/wayland/qwaylandintegration.h b/src/plugins/platforms/wayland/qwaylandintegration.h
index fc9b8d6a6e..71f6d9c7b3 100644
--- a/src/plugins/platforms/wayland/qwaylandintegration.h
+++ b/src/plugins/platforms/wayland/qwaylandintegration.h
@@ -63,12 +63,15 @@ public:
QPlatformFontDatabase *fontDatabase() const;
+ QPlatformNativeInterface *nativeInterface() const;
+
private:
bool hasOpenGL() const;
QPlatformFontDatabase *mFontDb;
QWaylandDisplay *mDisplay;
bool mUseOpenGL;
+ QPlatformNativeInterface *mNativeInterface;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp b/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp
new file mode 100644
index 0000000000..c3bfba03cc
--- /dev/null
+++ b/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwaylandnativeinterface.h"
+
+#include "qwaylanddisplay.h"
+#include "qwaylandwindow.h"
+#include <QtGui/private/qapplication_p.h>
+
+void *QWaylandNativeInterface::nativeResourceForWidget(const QByteArray &resourceString, QWidget *widget)
+{
+ QByteArray lowerCaseResource = resourceString.toLower();
+
+ if (lowerCaseResource == "display")
+ return qPlatformScreenForWidget(widget)->display()->wl_display();
+ if (lowerCaseResource == "surface") {
+ return ((QWaylandWindow *) widget->platformWindow())->wl_surface();
+ }
+
+ return NULL;
+}
+
+
+QWaylandScreen * QWaylandNativeInterface::qPlatformScreenForWidget(QWidget *widget)
+{
+ QWaylandScreen *screen;
+
+ if (widget) {
+ screen = static_cast<QWaylandScreen *>(QPlatformScreen::platformScreenForWidget(widget));
+ } else {
+ screen = static_cast<QWaylandScreen *>(QApplicationPrivate::platformIntegration()->screens()[0]);
+ }
+ return screen;
+}
diff --git a/src/plugins/platforms/wayland/qwaylandnativeinterface.h b/src/plugins/platforms/wayland/qwaylandnativeinterface.h
new file mode 100644
index 0000000000..ac4cdb9a22
--- /dev/null
+++ b/src/plugins/platforms/wayland/qwaylandnativeinterface.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWAYLANDNATIVEINTERFACE_H
+#define QWAYLANDNATIVEINTERFACE_H
+
+#include "qwaylandscreen.h"
+
+#include <QtGui/QPlatformNativeInterface>
+
+class QWaylandNativeInterface : public QPlatformNativeInterface
+{
+public:
+ void *nativeResourceForWidget(const QByteArray &resourceString,
+ QWidget *widget);
+
+private:
+ static QWaylandScreen *qPlatformScreenForWidget(QWidget *widget);
+};
+
+
+#endif // QWAYLANDNATIVEINTERFACE_H
diff --git a/src/plugins/platforms/wayland/qwaylandwindow.h b/src/plugins/platforms/wayland/qwaylandwindow.h
index 1e605088ad..47d49a70d9 100644
--- a/src/plugins/platforms/wayland/qwaylandwindow.h
+++ b/src/plugins/platforms/wayland/qwaylandwindow.h
@@ -74,6 +74,9 @@ public:
void damage(const QRegion &region);
void waitForFrameSync();
+
+ struct wl_surface *wl_surface() const { return mSurface; }
+
protected:
struct wl_surface *mSurface;
virtual void newSurfaceCreated();
diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro
index 59454384c2..8d2d4b50af 100644
--- a/src/plugins/platforms/wayland/wayland.pro
+++ b/src/plugins/platforms/wayland/wayland.pro
@@ -8,6 +8,7 @@ DEFINES += $$QMAKE_DEFINES_WAYLAND
SOURCES = main.cpp \
qwaylandintegration.cpp \
+ qwaylandnativeinterface.cpp \
qwaylandshmsurface.cpp \
qwaylandinputdevice.cpp \
qwaylandcursor.cpp \
@@ -17,6 +18,7 @@ SOURCES = main.cpp \
qwaylandshmwindow.cpp
HEADERS = qwaylandintegration.h \
+ qwaylandnativeinterface.h \
qwaylandcursor.h \
qwaylanddisplay.h \
qwaylandwindow.h \