summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@nokia.com>2012-03-01 17:28:18 +0100
committerAndy Nichols <andy.nichols@nokia.com>2012-03-01 17:54:18 +0100
commit6fa64420f8a0d58ce5774f34b6df4f5502044fbc (patch)
tree5c2878d9362d0cafef300eaf57c6a8af9fc3c8c9
parent6d3f23feb9b1ca1392d018702b62387d773a7be4 (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.cpp14
-rw-r--r--src/compositor/wayland_wrapper/wlsurface.cpp13
-rw-r--r--src/compositor/wayland_wrapper/wlsurface.h2
-rw-r--r--src/compositor/wayland_wrapper/wlsurfacebuffer.cpp1
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();