diff options
author | Paul Olav Tvete <paul.tvete@nokia.com> | 2012-03-01 17:28:18 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@nokia.com> | 2012-03-01 17:54:18 +0100 |
commit | 6fa64420f8a0d58ce5774f34b6df4f5502044fbc (patch) | |
tree | 5c2878d9362d0cafef300eaf57c6a8af9fc3c8c9 | |
parent | 6d3f23feb9b1ca1392d018702b62387d773a7be4 (diff) |
Make direct rendering work after QPlatformScreenBuffer refactoring
Change-Id: Iebd082678264178987e2550370663ed2b44a8916
Reviewed-by: Andy Nichols <andy.nichols@nokia.com>
-rw-r--r-- | src/compositor/wayland_wrapper/wlcompositor.cpp | 14 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/wlsurface.cpp | 13 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/wlsurface.h | 2 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/wlsurfacebuffer.cpp | 1 |
4 files changed, 15 insertions, 15 deletions
diff --git a/src/compositor/wayland_wrapper/wlcompositor.cpp b/src/compositor/wayland_wrapper/wlcompositor.cpp index b6941d2a1..49694b5aa 100644 --- a/src/compositor/wayland_wrapper/wlcompositor.cpp +++ b/src/compositor/wayland_wrapper/wlcompositor.cpp @@ -109,6 +109,7 @@ Compositor *Compositor::instance() Compositor::Compositor(WaylandCompositor *qt_compositor) : m_display(new Display) , m_default_input_device(0) + , m_pageFlipper(0) , m_shm(m_display) , m_current_frame(0) , m_last_queued_buf(-1) @@ -158,12 +159,7 @@ Compositor::Compositor(WaylandCompositor *qt_compositor) QSocketNotifier *sockNot = new QSocketNotifier(fd, QSocketNotifier::Read, this); connect(sockNot, SIGNAL(activated(int)), this, SLOT(processWaylandEvents())); - m_pageFlipper = QGuiApplication::primaryScreen()->handle()->pageFlipper(); - if (m_pageFlipper) { - connect(m_pageFlipper,SIGNAL(bufferReleased(QPlatformScreenBuffer*)),this,SLOT(releaseBuffer(QPlatformScreenBuffer*))); - } - - + qRegisterMetaType<SurfaceBuffer*>("SurfaceBuffer*"); //initialize distancefieldglyphcache here } @@ -330,6 +326,10 @@ void Compositor::enableSubSurfaceExtension() bool Compositor::setDirectRenderSurface(Surface *surface) { #ifdef QT_COMPOSITOR_WAYLAND_GL + if (!m_pageFlipper) { + m_pageFlipper = QGuiApplication::primaryScreen()->handle()->pageFlipper(); + } + if (m_graphics_hw_integration && m_graphics_hw_integration->setDirectRenderSurface(surface ? surface->waylandSurface() : 0)) { m_directRenderSurface = surface; return true; @@ -436,7 +436,7 @@ void Compositor::feedRetainedSelectionData(QMimeData *data) void Compositor::scheduleReleaseBuffer(SurfaceBuffer *screenBuffer) { - QMetaObject::invokeMethod(this,"releaseBuffer",Q_ARG(SurfaceBuffer *,screenBuffer)); + QMetaObject::invokeMethod(this,"releaseBuffer",Q_ARG(SurfaceBuffer*,screenBuffer)); } void Compositor::overrideSelection(QMimeData *data) diff --git a/src/compositor/wayland_wrapper/wlsurface.cpp b/src/compositor/wayland_wrapper/wlsurface.cpp index fd06a5bfc..7aa75160c 100644 --- a/src/compositor/wayland_wrapper/wlsurface.cpp +++ b/src/compositor/wayland_wrapper/wlsurface.cpp @@ -203,7 +203,7 @@ void Surface::sendFrameCallback() m_frontBuffer = m_backBuffer; } - advanceBufferQueue(); + bool updateNeeded = advanceBufferQueue(); uint time = Compositor::currentTimeMsecs(); struct wl_resource *frame_callback; @@ -211,10 +211,10 @@ void Surface::sendFrameCallback() wl_resource_post_event(frame_callback,WL_CALLBACK_DONE,time); wl_resource_destroy(frame_callback,Compositor::currentTimeMsecs()); } - wl_list_init(&m_frame_callback_list); - doUpdate(); + if (updateNeeded) + doUpdate(); } void Surface::frameFinished() @@ -267,7 +267,7 @@ Compositor *Surface::compositor() const return m_compositor; } -void Surface::advanceBufferQueue() +bool Surface::advanceBufferQueue() { //has current buffer been displayed, //do we have another buffer in the queue @@ -289,7 +289,7 @@ void Surface::advanceBufferQueue() } if (!m_backBuffer) - return; //we have no new backbuffer; + return false; //we have no new backbuffer; if (m_backBuffer->waylandBufferHandle()) { if (width != m_backBuffer->width() || @@ -311,9 +311,10 @@ void Surface::advanceBufferQueue() } else { m_backBuffer = 0; + return false; } - + return true; } void Surface::doUpdate() { diff --git a/src/compositor/wayland_wrapper/wlsurface.h b/src/compositor/wayland_wrapper/wlsurface.h index 86f8d33a2..7ad0bcd53 100644 --- a/src/compositor/wayland_wrapper/wlsurface.h +++ b/src/compositor/wayland_wrapper/wlsurface.h @@ -145,7 +145,7 @@ private: QSize m_size; inline SurfaceBuffer *currentSurfaceBuffer() const; - void advanceBufferQueue(); + bool advanceBufferQueue(); void doUpdate(); SurfaceBuffer *createSurfaceBuffer(struct wl_buffer *buffer); void frameFinishedInternal(); diff --git a/src/compositor/wayland_wrapper/wlsurfacebuffer.cpp b/src/compositor/wayland_wrapper/wlsurfacebuffer.cpp index 9c83925df..01d4c1201 100644 --- a/src/compositor/wayland_wrapper/wlsurfacebuffer.cpp +++ b/src/compositor/wayland_wrapper/wlsurfacebuffer.cpp @@ -118,7 +118,6 @@ void SurfaceBuffer::release() void SurfaceBuffer::scheduledRelease() { - qDebug() << Q_FUNC_INFO; m_page_flipper_has_buffer = false; if (!m_surface_has_buffer) destructBufferState(); |