diff options
author | Gunnar Sletta <gunnar.sletta@nokia.com> | 2012-01-19 12:51:43 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-02 17:20:24 +0100 |
commit | 75711510b1ad7d4ac4434ad41a0ed71cfc0344dc (patch) | |
tree | fc8fae2ea9c623d76cb670e3b9cda9a0e125f573 /src | |
parent | 6181676ca61f39f389a8c3ca293c369e7f80b1e8 (diff) |
Improve QSurface / QWindow API a bit and use that to avoid errors
Change-Id: Iadba1c3a7b8e6bc7f145455132cefed2a905c11d
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qopenglcontext.cpp | 11 | ||||
-rw-r--r-- | src/gui/kernel/qplatformsurface_qpa.cpp | 4 | ||||
-rw-r--r-- | src/gui/kernel/qplatformsurface_qpa.h | 6 | ||||
-rw-r--r-- | src/gui/kernel/qsurface.cpp | 47 | ||||
-rw-r--r-- | src/gui/kernel/qsurface.h | 25 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.h | 1 |
6 files changed, 79 insertions, 15 deletions
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp index f6481d3bb0..1b6d1d34c4 100644 --- a/src/gui/kernel/qopenglcontext.cpp +++ b/src/gui/kernel/qopenglcontext.cpp @@ -288,6 +288,12 @@ bool QOpenGLContext::makeCurrent(QSurface *surface) if (!surface->surfaceHandle()) return false; + if (surface->surfaceType() != QSurface::OpenGLSurface) { + qWarning() << "QOpenGLContext::makeBuffers() called with non-opengl surface"; + return false; + } + + if (d->platformGLContext->makeCurrent(surface->surfaceHandle())) { QOpenGLContextPrivate::setCurrentContext(this); d->surface = surface; @@ -354,6 +360,11 @@ void QOpenGLContext::swapBuffers(QSurface *surface) return; } + if (surface->surfaceType() != QSurface::OpenGLSurface) { + qWarning() << "QOpenGLContext::swapBuffers() called with non-opengl surface"; + return; + } + QPlatformSurface *surfaceHandle = surface->surfaceHandle(); if (!surfaceHandle) return; diff --git a/src/gui/kernel/qplatformsurface_qpa.cpp b/src/gui/kernel/qplatformsurface_qpa.cpp index 56b8f615c0..aeb73da2a3 100644 --- a/src/gui/kernel/qplatformsurface_qpa.cpp +++ b/src/gui/kernel/qplatformsurface_qpa.cpp @@ -43,12 +43,12 @@ QT_BEGIN_NAMESPACE -QSurface::SurfaceType QPlatformSurface::surfaceType() const +QSurface::SurfaceClass QPlatformSurface::surfaceClass() const { return m_type; } -QPlatformSurface::QPlatformSurface(QSurface::SurfaceType type) : m_type(type) +QPlatformSurface::QPlatformSurface(QSurface::SurfaceClass type) : m_type(type) { } diff --git a/src/gui/kernel/qplatformsurface_qpa.h b/src/gui/kernel/qplatformsurface_qpa.h index b57bbea6ea..af23ad3a85 100644 --- a/src/gui/kernel/qplatformsurface_qpa.h +++ b/src/gui/kernel/qplatformsurface_qpa.h @@ -56,12 +56,12 @@ class Q_GUI_EXPORT QPlatformSurface public: virtual QSurfaceFormat format() const = 0; - QSurface::SurfaceType surfaceType() const; + QSurface::SurfaceClass surfaceClass() const; private: - QPlatformSurface(QSurface::SurfaceType type); + QPlatformSurface(QSurface::SurfaceClass type); - QSurface::SurfaceType m_type; + QSurface::SurfaceClass m_type; friend class QPlatformWindow; }; diff --git a/src/gui/kernel/qsurface.cpp b/src/gui/kernel/qsurface.cpp index 24079c55ab..eb2676802b 100644 --- a/src/gui/kernel/qsurface.cpp +++ b/src/gui/kernel/qsurface.cpp @@ -43,12 +43,53 @@ QT_BEGIN_NAMESPACE -QSurface::QSurface(SurfaceType type) - : m_type(type) + +/*! + \class QSurface + \brief The QSurface class is an abstraction of renderable surfaces in Qt. + + The size of the surface is accessible with the size() function. The rendering + specific attributes of the surface are accessible through the format() function. + */ + + +/*! + \enum QSurface::SurfaceClass + + The SurfaceClass enum describes the actual subclass of the surface. + + \value Window The surface is an instance of QWindow. + */ + + +/*! + \enum QSurface::SurfaceType + + The SurfaceType enum describes what type of surface the. + + \value RasterSurface The surface is is composed of pixels and can be rendered to using + a software rasterizer like Qt's raster paint engine. + \value OpenGLSurface The surface is an OpenGL compatible surface and can be used + in conjunction with QOpenGLContext. + */ + + +/*! + QSize QSurface::size() const + + Returns the size of the surface in pixels. + */ + + + +QSurface::QSurface(SurfaceClass type) + : m_type(type), m_reserved(0) { } -QSurface::SurfaceType QSurface::surfaceType() const + + +QSurface::SurfaceClass QSurface::surfaceClass() const { return m_type; } diff --git a/src/gui/kernel/qsurface.h b/src/gui/kernel/qsurface.h index fd8eaaf058..a8900fde33 100644 --- a/src/gui/kernel/qsurface.h +++ b/src/gui/kernel/qsurface.h @@ -45,6 +45,8 @@ #include <QtCore/qnamespace.h> #include <QtGui/qsurfaceformat.h> +#include <QtCore/qsize.h> + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -52,26 +54,37 @@ QT_BEGIN_NAMESPACE class QPlatformSurface; +class QSurfacePrivate; + class Q_GUI_EXPORT QSurface { public: - enum SurfaceType { + enum SurfaceClass { Window }; + enum SurfaceType { + RasterSurface, + OpenGLSurface + }; + virtual ~QSurface(); - SurfaceType surfaceType() const; + SurfaceClass surfaceClass() const; virtual QSurfaceFormat format() const = 0; virtual QPlatformSurface *surfaceHandle() const = 0; -private: - QSurface(SurfaceType type); + virtual SurfaceType surfaceType() const = 0; + + virtual QSize size() const = 0; + +protected: + QSurface(SurfaceClass type); - SurfaceType m_type; + SurfaceClass m_type; - friend class QWindow; + QSurfacePrivate *m_reserved; }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index 4e6a8591d8..98b468b142 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -93,7 +93,6 @@ class Q_GUI_EXPORT QWindow : public QObject, public QSurface Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation WRITE reportContentOrientationChange NOTIFY contentOrientationChanged) public: - enum SurfaceType { RasterSurface, OpenGLSurface }; QWindow(QScreen *screen = 0); QWindow(QWindow *parent); |