diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2011-06-23 15:43:55 +0200 |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2011-06-23 15:44:33 +0200 |
commit | 9f3d56e07671c286c0a3fe0cb1c00814bac2c0ce (patch) | |
tree | db27aa28e824d62034c4a0bfdb807f54c0e0822e | |
parent | c9f2063ba02cad1f1a05db5f2463da5bfc2630cf (diff) |
Get Qt compositor working with wayland EGL on refactor branch.
4 files changed, 16 insertions, 11 deletions
diff --git a/examples/qml-compositor/main.cpp b/examples/qml-compositor/main.cpp index 588697506..f5a8b2c2d 100644 --- a/examples/qml-compositor/main.cpp +++ b/examples/qml-compositor/main.cpp @@ -57,14 +57,11 @@ class QmlCompositor : public QSGView, public WaylandCompositor { Q_OBJECT public: - QmlCompositor() : WaylandCompositor(this) { + QmlCompositor() : WaylandCompositor(this, const_cast<QGLContext *>(context())) { setMouseTracking(true); setSource(QUrl(QLatin1String("qrc:qml/QmlCompositor/main.qml"))); setResizeMode(QSGView::SizeRootObjectToView); winId(); - if (windowHandle()) { - windowHandle()->glSurface(); - } } signals: @@ -132,7 +129,6 @@ int main(int argc, char *argv[]) QObject::connect(&compositor, SIGNAL(windowResized(QVariant)), compositor.rootObject(), SLOT(windowResized(QVariant))); return app.exec(); - } #include "main.moc" diff --git a/src/qt-compositor/compositor_api/waylandcompositor.cpp b/src/qt-compositor/compositor_api/waylandcompositor.cpp index 36e358a9f..183019070 100644 --- a/src/qt-compositor/compositor_api/waylandcompositor.cpp +++ b/src/qt-compositor/compositor_api/waylandcompositor.cpp @@ -48,8 +48,9 @@ #include "waylandsurfaceitem.h" #endif -WaylandCompositor::WaylandCompositor(QWidget *topLevelWidget, const char *socketName) +WaylandCompositor::WaylandCompositor(QWidget *topLevelWidget, QGLContext *context, const char *socketName) : m_compositor(0) + , m_glContext(context) , m_toplevel_widget(topLevelWidget) , m_socket_name(socketName) { @@ -101,6 +102,11 @@ WaylandSurface *WaylandCompositor::directRenderSurface() const return surf ? surf->handle() : 0; } +QGLContext * WaylandCompositor::glContext() const +{ + return m_glContext; +} + QWidget * WaylandCompositor::topLevelWidget() const { return m_toplevel_widget; diff --git a/src/qt-compositor/compositor_api/waylandcompositor.h b/src/qt-compositor/compositor_api/waylandcompositor.h index e1438d306..316941d3d 100644 --- a/src/qt-compositor/compositor_api/waylandcompositor.h +++ b/src/qt-compositor/compositor_api/waylandcompositor.h @@ -49,6 +49,7 @@ #include <QtOpenGL/QGLContext> #endif +class QGLContext; class QWidget; class QMimeData; class WaylandSurface; @@ -61,7 +62,7 @@ namespace Wayland class WaylandCompositor { public: - WaylandCompositor(QWidget *topLevelWidget = 0, const char *socketName = 0); + WaylandCompositor(QWidget *topLevelWidget = 0, QGLContext *context = 0, const char *socketName = 0); virtual ~WaylandCompositor(); void frameFinished(WaylandSurface *surface = 0); @@ -72,6 +73,7 @@ public: void setDirectRenderSurface(WaylandSurface *surface); WaylandSurface *directRenderSurface() const; + QGLContext *glContext() const; QWidget *topLevelWidget()const; virtual void surfaceCreated(WaylandSurface *surface) = 0; @@ -87,6 +89,7 @@ private: static void retainedSelectionChanged(QMimeData *mimeData, void *param); Wayland::Compositor *m_compositor; + QGLContext *m_glContext; QWidget *m_toplevel_widget; QByteArray m_socket_name; }; diff --git a/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp b/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp index 4d3ae462b..444b0e393 100644 --- a/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp +++ b/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp @@ -41,7 +41,7 @@ #include "mesaeglintegration.h" #include <QtGui/QPlatformNativeInterface> -#include <QtGui/private/qapplication_p.h> +#include <QtWidgets/private/qapplication_p.h> #define EGL_EGLEXT_PROTOTYPES #include <EGL/egl.h> @@ -82,13 +82,13 @@ void MesaEglIntegration::initializeHardware(Wayland::Display *waylandDisplay) QPlatformNativeInterface *nativeInterface = QApplicationPrivate::platformIntegration()->nativeInterface(); if (nativeInterface) { - d->egl_display = nativeInterface->nativeResourceForWidget("EglDisplay",m_compositor->topLevelWidget()); + d->egl_display = nativeInterface->nativeResourceForWindow("EglDisplay", m_compositor->topLevelWidget()->windowHandle()); if (d->egl_display) { - eglBindWaylandDisplayWL(d->egl_display,waylandDisplay->handle()); + eglBindWaylandDisplayWL(d->egl_display, waylandDisplay->handle()); } else { fprintf(stderr, "Failed to initialize egl display"); } - d->egl_context = nativeInterface->nativeResourceForWidget("EglContext",m_compositor->topLevelWidget()); + d->egl_context = nativeInterface->nativeResourceForContext("EglContext", m_compositor->glContext()->contextHandle()); } } |