GLuint WaylandSurface::texture() const
{
Q_D(const WaylandSurface);
- return d->surface->textureId();
+ return d->surface->texture();
}
#else //QT_COMPOSITOR_WAYLAND_GL
uint WaylandSurface::texture() const
void Compositor::frameFinished()
{
- wl_display_post_frame(m_display->handle(), currentTimeMsecs());
+ QSet<Surface *>::iterator i;
+ for (i = m_dirty_surfaces.begin(); i != m_dirty_surfaces.end(); i++) {
+ wl_display_post_frame(m_display->handle(), (*i)->base(), currentTimeMsecs());
+ }
+ m_dirty_surfaces.clear();
}
void Compositor::createSurface(struct wl_client *client, int id)
setPointerFocus(0);
}
+void Compositor::markSurfaceAsDirty(Wayland::Surface *surface)
+{
+ m_dirty_surfaces.insert(surface);
+}
+
void Compositor::destroyClientForSurface(Surface *surface)
{
wl_client *client = surface->base()->client;
#ifndef WL_COMPOSITOR_H
#define WL_COMPOSITOR_H
+#include <QtCore/QSet>
+
#include "wloutput.h"
#include "wldisplay.h"
#include "wlshmbuffer.h"
void createSurface(struct wl_client *client, int id);
void surfaceDestroyed(Surface *surface);
+ void markSurfaceAsDirty(Surface *surface);
void destroyClientForSurface(Surface *surface);
/* shm/*/
ShmHandler m_shm;
QList<Surface *> m_surfaces;
+ QSet<Surface *> m_dirty_surfaces;
/* Render state */
uint32_t m_current_frame;
void Surface::damage(const QRect &rect)
{
Q_D(Surface);
+ d->compositor->markSurfaceAsDirty(this);
emit d->qtSurface->damaged(rect);
}
}
}
-GLuint Surface::textureId() const
+GLuint Surface::texture() const
{
Q_D(const Surface);
return d->texture_id;
QImage image() const;
#ifdef QT_COMPOSITOR_WAYLAND_GL
- GLuint textureId() const;
+ GLuint texture() const;
#endif
void sendMousePressEvent(int x, int y, Qt::MouseButton button);