-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcustomitem.h
90 lines (62 loc) · 1.71 KB
/
customitem.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//------------------------------------------------------------------------------
// Created : 2015-2-11
// Author : Dmitry Sokolov <mr.dmitry.sokolov@gmail.com>
// Description :
//------------------------------------------------------------------------------
#ifndef CUSTOMITEM_H
#define CUSTOMITEM_H
#include <QQuickItem>
#define FBO__
#if !defined(FBO__)
#include <QQuickWindow>
#include <QOpenGLFunctions>
class CustomItemRenderer : public QObject, protected QOpenGLFunctions
{
Q_OBJECT
public:
void setViewport(const QRectF &vp) { m_viewport = vp; }
public slots:
virtual void render();
private:
QRectF m_viewport;
};
class CustomItemBase : public QQuickItem
{
Q_OBJECT
public:
explicit CustomItemBase(QQuickItem * parent = nullptr);
virtual ~CustomItemBase();
public slots:
void sync();
void cleanup();
private slots:
void handleWindowChanged(QQuickWindow * win);
protected:
CustomItemRenderer * m_renderer;
};
#else
#include <QQuickFramebufferObject>
class CustomItemRenderer : public QQuickFramebufferObject::Renderer
{
public:
CustomItemRenderer() {}
virtual ~CustomItemRenderer() {}
public:
virtual void render();
virtual QOpenGLFramebufferObject * createFramebufferObject(const QSize & size);
};
class CustomItemBase : public QQuickFramebufferObject
{
Q_OBJECT
public:
explicit CustomItemBase(QQuickItem *parent = nullptr) : QQuickFramebufferObject(parent) {}
virtual Renderer * createRenderer() const { return new CustomItemRenderer; }
};
#endif
class CustomItem : public CustomItemBase
{
public:
CustomItem(QQuickItem * parent = nullptr) : CustomItemBase(parent) {}
virtual ~CustomItem() {}
};
#endif // CUSTOMITEM_H