Skip to content
Snippets Groups Projects
Commit 6fa64420 authored by Paul Olav Tvete's avatar Paul Olav Tvete Committed by Andy Nichols
Browse files

Make direct rendering work after QPlatformScreenBuffer refactoring


Change-Id: Iebd082678264178987e2550370663ed2b44a8916
Reviewed-by: default avatarAndy Nichols <andy.nichols@nokia.com>
parent 6d3f23fe
Branches caf_migration/github/5.7
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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() {
......
......@@ -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();
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment