38 enum RenderLoopFlags {
39 SupportsGrabWithoutExpose = 0x01
42 virtual ~QSGRenderLoop();
44 virtual void show(QQuickWindow *window) = 0;
45 virtual void hide(QQuickWindow *window) = 0;
46 virtual void resize(QQuickWindow *) {};
48 virtual void windowDestroyed(QQuickWindow *window) = 0;
50 virtual void exposureChanged(QQuickWindow *window) = 0;
51 virtual QImage grab(QQuickWindow *window) = 0;
53 virtual void update(QQuickWindow *window) = 0;
54 virtual void maybeUpdate(QQuickWindow *window) = 0;
55 virtual void handleUpdateRequest(QQuickWindow *) { }
57 virtual QAnimationDriver *animationDriver()
const = 0;
59 virtual QSGContext *sceneGraphContext()
const = 0;
60 virtual QSGRenderContext *createRenderContext(QSGContext *)
const = 0;
62 virtual void releaseResources(QQuickWindow *window) = 0;
63 virtual void postJob(QQuickWindow *window, QRunnable *job);
65 void addWindow(QQuickWindow *win) { m_windows.insert(win); }
66 void removeWindow(QQuickWindow *win) { m_windows.remove(win); }
67 QSet<QQuickWindow *> windows()
const {
return m_windows; }
69 virtual QSurface::SurfaceType windowSurfaceType()
const;
72 static QSGRenderLoop *instance();
73 static void setInstance(QSGRenderLoop *instance);
75 virtual bool interleaveIncubation()
const {
return false; }
77 virtual int flags()
const {
return 0; }
79 static void cleanup();
81 void handleContextCreationFailure(QQuickWindow *window);
84 void timeToIncubate();
87 static QSGRenderLoop *s_instance;
89 QSet<QQuickWindow *> m_windows;
bool qsg_useConsistentTiming()