OpenCoverage

qquickframebufferobject.cpp

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/items/qquickframebufferobject.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6class QQuickFramebufferObjectPrivate : public QQuickItemPrivate-
7{-
8 inline QQuickFramebufferObject* q_func() { return static_cast<QQuickFramebufferObject *>(q_ptr); } inline const QQuickFramebufferObject* q_func() const { return static_cast<const QQuickFramebufferObject *>(q_ptr); } friend class QQuickFramebufferObject;-
9public:-
10 QQuickFramebufferObjectPrivate()-
11 : followsItemSize(true)-
12 , mirrorVertically(false)-
13 , node(nullptr)-
14 {-
15 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
16-
17 bool followsItemSize;-
18 bool mirrorVertically;-
19 mutable QSGFramebufferObjectNode *node;-
20};-
21QQuickFramebufferObject::QQuickFramebufferObject(QQuickItem *parent) :-
22 QQuickItem(*new QQuickFramebufferObjectPrivate, parent)-
23{-
24 setFlag(ItemHasContents);-
25}
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
26void QQuickFramebufferObject::setTextureFollowsItemSize(bool follows)-
27{-
28 QQuickFramebufferObjectPrivate * const d = d_func();-
29 if (d->followsItemSize == follows
d->followsItemSize == followsDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
)
0-6
30 return;
never executed: return;
0
31 d->followsItemSize = follows;-
32 textureFollowsItemSizeChanged(d->followsItemSize);-
33}
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
6
34-
35bool QQuickFramebufferObject::textureFollowsItemSize() const-
36{-
37 const QQuickFramebufferObjectPrivate * const d = d_func();-
38 return
never executed: return d->followsItemSize;
d->followsItemSize;
never executed: return d->followsItemSize;
0
39}-
40void QQuickFramebufferObject::setMirrorVertically(bool enable)-
41{-
42 QQuickFramebufferObjectPrivate * const d = d_func();-
43 if (d->mirrorVertically == enable
d->mirrorVertically == enableDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
44 return;
never executed: return;
0
45 d->mirrorVertically = enable;-
46 mirrorVerticallyChanged(d->mirrorVertically);-
47 update();-
48}
never executed: end of block
0
49-
50bool QQuickFramebufferObject::mirrorVertically() const-
51{-
52 const QQuickFramebufferObjectPrivate * const d = d_func();-
53 return
never executed: return d->mirrorVertically;
d->mirrorVertically;
never executed: return d->mirrorVertically;
0
54}-
55-
56-
57-
58-
59void QQuickFramebufferObject::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)-
60{-
61 QQuickItem::geometryChanged(newGeometry, oldGeometry);-
62-
63 QQuickFramebufferObjectPrivate * const d = d_func();-
64 if (newGeometry.size() != oldGeometry.size()
newGeometry.si...eometry.size()Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEnever evaluated
&& d->followsItemSize
d->followsItemSizeDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
)
0-28
65 update();
executed 24 times by 1 test: update();
Executed by:
  • tst_qquickframebufferobject
24
66}
executed 28 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
28
67-
68class QSGFramebufferObjectNode : public QSGTextureProvider, public QSGSimpleTextureNode-
69{-
70 public:-
71#pragma GCC diagnostic push-
72 -
73#pragma GCC diagnostic ignored "-Wsuggest-override"-
74 static const QMetaObject staticMetaObject; virtual const QMetaObject *metaObject() const; virtual void *qt_metacast(const char *); virtual int qt_metacall(QMetaObject::Call, int, void **); static inline QString tr(const char *s, const char *c = nullptr, int n = -1) { return staticMetaObject.tr(s, c, n); } __attribute__ ((__deprecated__)) static inline QString trUtf8(const char *s, const char *c = nullptr, int n = -1) { return staticMetaObject.tr(s, c, n); } private:-
75#pragma GCC diagnostic ignored "-Wattributes"-
76 __attribute__((visibility("hidden"))) static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);-
77#pragma GCC diagnostic pop-
78 struct QPrivateSignal {};-
79-
80public:-
81 QSGFramebufferObjectNode()-
82 : window(nullptr)-
83 , fbo(nullptr)-
84 , msDisplayFbo(nullptr)-
85 , renderer(nullptr)-
86 , renderPending(true)-
87 , invalidatePending(false)-
88 , devicePixelRatio(1)-
89 {-
90 qsgnode_set_description(this, ([]() noexcept -> QString { enum { Size = sizeof(u"" "fbonode")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "fbonode" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return
executed 10 times by 1 test: return qstring_literal_temp;
Executed by:
  • tst_qquickframebufferobject
qstring_literal_temp;
executed 10 times by 1 test: return qstring_literal_temp;
Executed by:
  • tst_qquickframebufferobject
}()));
10
91 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
92-
93 ~QSGFramebufferObjectNode()-
94 {-
95 delete renderer;-
96 delete texture();-
97 delete fbo;-
98 delete msDisplayFbo;-
99 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
100-
101 void scheduleRender()-
102 {-
103 renderPending = true;-
104 window->update();-
105 }
executed 20 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
20
106-
107 QSGTexture *texture() const override-
108 {-
109 return
executed 20 times by 1 test: return QSGSimpleTextureNode::texture();
Executed by:
  • tst_qquickframebufferobject
QSGSimpleTextureNode::texture();
executed 20 times by 1 test: return QSGSimpleTextureNode::texture();
Executed by:
  • tst_qquickframebufferobject
20
110 }-
111-
112public :-
113 void render()-
114 {-
115 if (renderPending
renderPendingDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 30 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
) {
20-30
116 renderPending = false;-
117 fbo->bind();-
118 QOpenGLContext::currentContext()->functions()->glViewport(0, 0, fbo->width(), fbo->height());-
119 renderer->render();-
120 fbo->bindDefault();-
121-
122 if (msDisplayFbo
msDisplayFboDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
)
0-20
123 QOpenGLFramebufferObject::blitFramebuffer(msDisplayFbo, fbo);
never executed: QOpenGLFramebufferObject::blitFramebuffer(msDisplayFbo, fbo);
0
124-
125 markDirty(QSGNode::DirtyMaterial);-
126 textureChanged();-
127 }
executed 20 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
20
128 }
executed 50 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
50
129-
130 void handleScreenChange()-
131 {-
132 if (window->effectiveDevicePixelRatio() != devicePixelRatio
window->effect...vicePixelRatioDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
133 renderer->invalidateFramebufferObject();-
134 quickFbo->update();-
135 }
never executed: end of block
0
136 }
never executed: end of block
0
137-
138public:-
139 QQuickWindow *window;-
140 QOpenGLFramebufferObject *fbo;-
141 QOpenGLFramebufferObject *msDisplayFbo;-
142 QQuickFramebufferObject::Renderer *renderer;-
143 QQuickFramebufferObject *quickFbo;-
144-
145 bool renderPending;-
146 bool invalidatePending;-
147-
148 qreal devicePixelRatio;-
149};-
150-
151static inline bool isOpenGL(QSGRenderContext *rc)-
152{-
153 QSGRendererInterface *rif = rc->sceneGraphContext()->rendererInterface(rc);-
154 return
executed 10 times by 1 test: return !rif || rif->graphicsApi() == QSGRendererInterface::OpenGL;
Executed by:
  • tst_qquickframebufferobject
!rif || rif->graphicsApi() == QSGRendererInterface::OpenGL;
executed 10 times by 1 test: return !rif || rif->graphicsApi() == QSGRendererInterface::OpenGL;
Executed by:
  • tst_qquickframebufferobject
10
155}-
156-
157-
158-
159-
160QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNodeData *)-
161{-
162 QSGFramebufferObjectNode *n = static_cast<QSGFramebufferObjectNode *>(node);-
163-
164-
165-
166-
167-
168-
169 if (!n
!nDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
&& (width() <= 0
width() <= 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
|| height() <= 0
height() <= 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
))
0-10
170 return
never executed: return nullptr;
nullptr;
never executed: return nullptr;
0
171-
172 QQuickFramebufferObjectPrivate * const d = d_func();-
173-
174 if (!n
!nDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
) {
10
175 if (!isOpenGL(d->sceneGraphRenderContext())
!isOpenGL(d->s...nderContext())Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
)
0-10
176 return
never executed: return nullptr;
nullptr;
never executed: return nullptr;
0
177 if (!d->node
!d->nodeDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEnever evaluated
)
0-10
178 d->node = new QSGFramebufferObjectNode;
executed 10 times by 1 test: d->node = new QSGFramebufferObjectNode;
Executed by:
  • tst_qquickframebufferobject
10
179 n = d->node;-
180 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
181-
182 if (!n->renderer
!n->rendererDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
) {
10
183 n->window = window();-
184 n->renderer = createRenderer();-
185 n->renderer->data = n;-
186 n->quickFbo = this;-
187 connect(window(), qFlagLocation("2""beforeRendering()" "\0" __FILE__ ":" "302"), n, qFlagLocation("1""render()" "\0" __FILE__ ":" "302"));-
188 connect(window(), qFlagLocation("2""screenChanged(QScreen*)" "\0" __FILE__ ":" "303"), n, qFlagLocation("1""handleScreenChange()" "\0" __FILE__ ":" "303"));-
189 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
190-
191 n->renderer->synchronize(this);-
192-
193 QSize minFboSize = d->sceneGraphContext()->minimumFBOSize();-
194 QSize desiredFboSize(qMax<int>(minFboSize.width(), width()),-
195 qMax<int>(minFboSize.height(), height()));-
196-
197 n->devicePixelRatio = window()->effectiveDevicePixelRatio();-
198 desiredFboSize *= n->devicePixelRatio;-
199-
200 if (n->fbo
n->fboDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
&& ((d->followsItemSize
d->followsItemSizeDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
&& n->fbo->size() != desiredFboSize
n->fbo->size()...desiredFboSizeDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEnever evaluated
) || n->invalidatePending
n->invalidatePendingDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEnever evaluated
)) {
0-10
201 delete n->texture();-
202 delete n->fbo;-
203 n->fbo = nullptr;-
204 delete n->msDisplayFbo;-
205 n->msDisplayFbo = nullptr;-
206 n->invalidatePending = false;-
207 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
208-
209 if (!n->fbo
!n->fboDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEnever evaluated
) {
0-20
210 n->fbo = n->renderer->createFramebufferObject(desiredFboSize);-
211-
212 GLuint displayTexture = n->fbo->texture();-
213-
214 if (n->fbo->format().samples() > 0
n->fbo->format().samples() > 0Description
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
) {
0-20
215 n->msDisplayFbo = new QOpenGLFramebufferObject(n->fbo->size());-
216 displayTexture = n->msDisplayFbo->texture();-
217 }
never executed: end of block
0
218-
219 n->setTexture(window()->createTextureFromId(displayTexture,-
220 n->fbo->size(),-
221 QQuickWindow::TextureHasAlphaChannel));-
222 }
executed 20 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
20
223-
224 n->setTextureCoordinatesTransform(d->mirrorVertically ? QSGSimpleTextureNode::MirrorVertically : QSGSimpleTextureNode::NoTransform);-
225 n->setFiltering(d->smooth ? QSGTexture::Linear : QSGTexture::Nearest);-
226 n->setRect(0, 0, width(), height());-
227-
228 n->scheduleRender();-
229-
230 return
executed 20 times by 1 test: return n;
Executed by:
  • tst_qquickframebufferobject
n;
executed 20 times by 1 test: return n;
Executed by:
  • tst_qquickframebufferobject
20
231}-
232-
233-
234-
235-
236bool QQuickFramebufferObject::isTextureProvider() const-
237{-
238 return
never executed: return true;
true;
never executed: return true;
0
239}-
240-
241-
242-
243-
244QSGTextureProvider *QQuickFramebufferObject::textureProvider() const-
245{-
246-
247-
248-
249 if (QQuickItem::isTextureProvider()
QQuickItem::is...tureProvider()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
250 return
never executed: return QQuickItem::textureProvider();
QQuickItem::textureProvider();
never executed: return QQuickItem::textureProvider();
0
251-
252 const QQuickFramebufferObjectPrivate * const d = d_func();-
253 QQuickWindow *w = window();-
254 if (!w
!wDescription
TRUEnever evaluated
FALSEnever evaluated
|| !w->openglContext()
!w->openglContext()Description
TRUEnever evaluated
FALSEnever evaluated
|| QThread::currentThread() != w->openglContext()->thread()
QThread::curre...xt()->thread()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
255 QMessageLogger(__FILE__, 370, __PRETTY_FUNCTION__).warning("QQuickFramebufferObject::textureProvider: can only be queried on the rendering thread of an exposed window");-
256 return
never executed: return nullptr;
nullptr;
never executed: return nullptr;
0
257 }-
258 if (!isOpenGL(d->sceneGraphRenderContext())
!isOpenGL(d->s...nderContext())Description
TRUEnever evaluated
FALSEnever evaluated
)
0
259 return
never executed: return nullptr;
nullptr;
never executed: return nullptr;
0
260 if (!d->node
!d->nodeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
261 d->node = new QSGFramebufferObjectNode;
never executed: d->node = new QSGFramebufferObjectNode;
0
262 return
never executed: return d->node;
d->node;
never executed: return d->node;
0
263}-
264-
265-
266-
267-
268void QQuickFramebufferObject::releaseResources()-
269{-
270-
271-
272-
273 QQuickFramebufferObjectPrivate * const d = d_func();-
274 d->node = nullptr;-
275}
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
276-
277void QQuickFramebufferObject::invalidateSceneGraph()-
278{-
279 QQuickFramebufferObjectPrivate * const d = d_func();-
280 d->node = nullptr;-
281}
never executed: end of block
0
282QQuickFramebufferObject::Renderer::Renderer()-
283 : data(nullptr)-
284{-
285}
executed 10 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
10
286QQuickFramebufferObject::Renderer::~Renderer()-
287{-
288}-
289-
290-
291-
292-
293QOpenGLFramebufferObject *QQuickFramebufferObject::Renderer::framebufferObject() const-
294{-
295 return
executed 20 times by 1 test: return data ? ((QSGFramebufferObjectNode *) data)->fbo : nullptr;
Executed by:
  • tst_qquickframebufferobject
data ? ((QSGFramebufferObjectNode *) data)->fbo : nullptr;
executed 20 times by 1 test: return data ? ((QSGFramebufferObjectNode *) data)->fbo : nullptr;
Executed by:
  • tst_qquickframebufferobject
20
296}-
297void QQuickFramebufferObject::Renderer::synchronize(QQuickFramebufferObject *item)-
298{-
299 (void)item;;-
300}
never executed: end of block
0
301-
302-
303-
304-
305-
306void QQuickFramebufferObject::Renderer::invalidateFramebufferObject()-
307{-
308 if (data
dataDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • tst_qquickframebufferobject
FALSEnever evaluated
)
0-8
309 ((
executed 8 times by 1 test: ((QSGFramebufferObjectNode *) data)->invalidatePending = true;
Executed by:
  • tst_qquickframebufferobject
QSGFramebufferObjectNode *) data)->invalidatePending = true;
executed 8 times by 1 test: ((QSGFramebufferObjectNode *) data)->invalidatePending = true;
Executed by:
  • tst_qquickframebufferobject
8
310}
executed 8 times by 1 test: end of block
Executed by:
  • tst_qquickframebufferobject
8
311QOpenGLFramebufferObject *QQuickFramebufferObject::Renderer::createFramebufferObject(const QSize &size)-
312{-
313 return
never executed: return new QOpenGLFramebufferObject(size);
new QOpenGLFramebufferObject(size);
never executed: return new QOpenGLFramebufferObject(size);
0
314}-
315void QQuickFramebufferObject::Renderer::update()-
316{-
317 if (data
dataDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
318 ((
never executed: ((QSGFramebufferObjectNode *) data)->scheduleRender();
QSGFramebufferObjectNode *) data)->scheduleRender();
never executed: ((QSGFramebufferObjectNode *) data)->scheduleRender();
0
319}
never executed: end of block
0
320-
321-
322-
323-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.0