qopenglwindow.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/kernel/qopenglwindow.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3class QOpenGLWindowPaintDevice : public QOpenGLPaintDevice-
4{-
5public:-
6 QOpenGLWindowPaintDevice(QOpenGLWindow *window) : m_window(window) { }
never executed: end of block
0
7 void ensureActiveTarget() override;-
8-
9 QOpenGLWindow *m_window;-
10};-
11-
12class QOpenGLWindowPrivate : public QPaintDeviceWindowPrivate-
13{-
14 inline QOpenGLWindow* q_func() { return static_cast<QOpenGLWindow *>(q_ptr); } inline const QOpenGLWindow* q_func() const { return static_cast<const QOpenGLWindow *>(q_ptr); } friend class QOpenGLWindow;-
15public:-
16 QOpenGLWindowPrivate(QOpenGLContext *shareContext, QOpenGLWindow::UpdateBehavior updateBehavior)-
17 : updateBehavior(updateBehavior)-
18 , hasFboBlit(false)-
19 , shareContext(shareContext)-
20 {-
21 if (!shareContext
!shareContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
22 this->shareContext = qt_gl_global_share_context();
never executed: this->shareContext = qt_gl_global_share_context();
0
23 }
never executed: end of block
0
24-
25 ~QOpenGLWindowPrivate();-
26-
27 static QOpenGLWindowPrivate *get(QOpenGLWindow *w) { return
never executed: return w->d_func();
w->d_func();
never executed: return w->d_func();
}
0
28-
29 void bindFBO();-
30 void initialize();-
31-
32 void beginPaint(const QRegion &region) override;-
33 void endPaint() override;-
34 void flush(const QRegion &region) override;-
35-
36 QOpenGLWindow::UpdateBehavior updateBehavior;-
37 bool hasFboBlit;-
38 QScopedPointer<QOpenGLContext> context;-
39 QOpenGLContext *shareContext;-
40 QScopedPointer<QOpenGLFramebufferObject> fbo;-
41 QScopedPointer<QOpenGLWindowPaintDevice> paintDevice;-
42 QOpenGLTextureBlitter blitter;-
43 QColor backgroundColor;-
44 QScopedPointer<QOffscreenSurface> offscreenSurface;-
45};-
46-
47QOpenGLWindowPrivate::~QOpenGLWindowPrivate()-
48{-
49 QOpenGLWindow * const q = q_func();-
50 if (q->isValid()
q->isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
51 q->makeCurrent();-
52 paintDevice.reset(0);-
53 fbo.reset(0);-
54 blitter.destroy();-
55 q->doneCurrent();-
56 }
never executed: end of block
0
57}
never executed: end of block
0
58-
59void QOpenGLWindowPrivate::initialize()-
60{-
61 QOpenGLWindow * const q = q_func();-
62-
63 if (context
contextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
64 return;
never executed: return;
0
65-
66 context.reset(new QOpenGLContext);-
67 context->setShareContext(shareContext);-
68 context->setFormat(q->requestedFormat());-
69 if (!context->create()
!context->create()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
70 QMessageLogger(__FILE__, 223, __PRETTY_FUNCTION__).warning("QOpenGLWindow::beginPaint: Failed to create context");
never executed: QMessageLogger(__FILE__, 223, __PRETTY_FUNCTION__).warning("QOpenGLWindow::beginPaint: Failed to create context");
0
71 if (!context->makeCurrent(q)
!context->makeCurrent(q)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
72 QMessageLogger(__FILE__, 225, __PRETTY_FUNCTION__).warning("QOpenGLWindow::beginPaint: Failed to make context current");
never executed: QMessageLogger(__FILE__, 225, __PRETTY_FUNCTION__).warning("QOpenGLWindow::beginPaint: Failed to make context current");
0
73-
74 paintDevice.reset(new QOpenGLWindowPaintDevice(q));-
75 if (updateBehavior == QOpenGLWindow::PartialUpdateBlit
updateBehavior...tialUpdateBlitDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
76 hasFboBlit = QOpenGLFramebufferObject::hasOpenGLFramebufferBlit();
never executed: hasFboBlit = QOpenGLFramebufferObject::hasOpenGLFramebufferBlit();
0
77-
78 q->initializeGL();-
79}
never executed: end of block
0
80-
81void QOpenGLWindowPrivate::beginPaint(const QRegion &region)-
82{-
83 (void)region;;-
84 QOpenGLWindow * const q = q_func();-
85-
86 initialize();-
87 context->makeCurrent(q);-
88-
89 const int deviceWidth = q->width() * q->devicePixelRatio();-
90 const int deviceHeight = q->height() * q->devicePixelRatio();-
91 const QSize deviceSize(deviceWidth, deviceHeight);-
92 if (updateBehavior > QOpenGLWindow::NoPartialUpdate
updateBehavior...oPartialUpdateDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
93 if (!fbo
!fboDescription
TRUEnever evaluated
FALSEnever evaluated
|| fbo->size() != deviceSize
fbo->size() != deviceSizeDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
94 QOpenGLFramebufferObjectFormat fboFormat;-
95 fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);-
96 if (q->requestedFormat().samples() > 0
q->requestedFo....samples() > 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
97 if (updateBehavior != QOpenGLWindow::PartialUpdateBlend
updateBehavior...ialUpdateBlendDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
98 fboFormat.setSamples(q->requestedFormat().samples());
never executed: fboFormat.setSamples(q->requestedFormat().samples());
0
99 else-
100 QMessageLogger(__FILE__, 253, __PRETTY_FUNCTION__).warning("QOpenGLWindow: PartialUpdateBlend does not support multisampling");
never executed: QMessageLogger(__FILE__, 253, __PRETTY_FUNCTION__).warning("QOpenGLWindow: PartialUpdateBlend does not support multisampling");
0
101 }-
102 fbo.reset(new QOpenGLFramebufferObject(deviceSize, fboFormat));-
103 markWindowAsDirty();-
104 }
never executed: end of block
0
105 }
never executed: end of block
else {
0
106 markWindowAsDirty();-
107 }
never executed: end of block
0
108-
109 paintDevice->setSize(QSize(deviceWidth, deviceHeight));-
110 paintDevice->setDevicePixelRatio(q->devicePixelRatio());-
111 context->functions()->glViewport(0, 0, deviceWidth, deviceHeight);-
112-
113 context->functions()->glBindFramebuffer(0x8D40, context->defaultFramebufferObject());-
114-
115 q->paintUnderGL();-
116-
117 if (updateBehavior > QOpenGLWindow::NoPartialUpdate
updateBehavior...oPartialUpdateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
118 fbo->bind();
never executed: fbo->bind();
0
119}
never executed: end of block
0
120-
121void QOpenGLWindowPrivate::endPaint()-
122{-
123 QOpenGLWindow * const q = q_func();-
124-
125 if (updateBehavior > QOpenGLWindow::NoPartialUpdate
updateBehavior...oPartialUpdateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
126 fbo->release();
never executed: fbo->release();
0
127-
128 context->functions()->glBindFramebuffer(0x8D40, context->defaultFramebufferObject());-
129-
130 if (updateBehavior == QOpenGLWindow::PartialUpdateBlit
updateBehavior...tialUpdateBlitDescription
TRUEnever evaluated
FALSEnever evaluated
&& hasFboBlit
hasFboBlitDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
131 const int deviceWidth = q->width() * q->devicePixelRatio();-
132 const int deviceHeight = q->height() * q->devicePixelRatio();-
133 QOpenGLExtensions extensions(context.data());-
134 extensions.glBindFramebuffer(0x8CA8, fbo->handle());-
135 extensions.glBindFramebuffer(0x8CA9, context->defaultFramebufferObject());-
136 extensions.glBlitFramebuffer(0, 0, deviceWidth, deviceHeight,-
137 0, 0, deviceWidth, deviceHeight,-
138 0x00004000, 0x2600);-
139 }
never executed: end of block
else if (updateBehavior > QOpenGLWindow::NoPartialUpdate
updateBehavior...oPartialUpdateDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
140 if (updateBehavior == QOpenGLWindow::PartialUpdateBlend
updateBehavior...ialUpdateBlendDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
141 context->functions()->glEnable(0x0BE2);-
142 context->functions()->glBlendFunc(0x0302, 0x0303);-
143 }
never executed: end of block
0
144 if (!blitter.isCreated()
!blitter.isCreated()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
145 blitter.create();
never executed: blitter.create();
0
146-
147 QRect windowRect(QPoint(0, 0), fbo->size());-
148 QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(windowRect, windowRect);-
149 blitter.bind();-
150 blitter.blit(fbo->texture(), target, QOpenGLTextureBlitter::OriginBottomLeft);-
151 blitter.release();-
152-
153 if (updateBehavior == QOpenGLWindow::PartialUpdateBlend
updateBehavior...ialUpdateBlendDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
154 context->functions()->glDisable(0x0BE2);
never executed: context->functions()->glDisable(0x0BE2);
0
155 }
never executed: end of block
0
156-
157 q->paintOverGL();-
158}
never executed: end of block
0
159-
160void QOpenGLWindowPrivate::bindFBO()-
161{-
162 if (updateBehavior > QOpenGLWindow::NoPartialUpdate
updateBehavior...oPartialUpdateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
163 fbo->bind();
never executed: fbo->bind();
0
164 else-
165 QOpenGLFramebufferObject::bindDefault();
never executed: QOpenGLFramebufferObject::bindDefault();
0
166}-
167-
168void QOpenGLWindowPrivate::flush(const QRegion &region)-
169{-
170 (void)region;;-
171 QOpenGLWindow * const q = q_func();-
172 context->swapBuffers(q);-
173 q->frameSwapped();-
174}
never executed: end of block
0
175-
176void QOpenGLWindowPaintDevice::ensureActiveTarget()-
177{-
178 QOpenGLWindowPrivate::get(m_window)->bindFBO();-
179}
never executed: end of block
0
180-
181-
182-
183-
184-
185-
186QOpenGLWindow::QOpenGLWindow(QOpenGLWindow::UpdateBehavior updateBehavior, QWindow *parent)-
187 : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(nullptr, updateBehavior)), parent)-
188{-
189 setSurfaceType(QSurface::OpenGLSurface);-
190}
never executed: end of block
0
191-
192-
193-
194-
195-
196-
197QOpenGLWindow::QOpenGLWindow(QOpenGLContext *shareContext, UpdateBehavior updateBehavior, QWindow *parent)-
198 : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(shareContext, updateBehavior)), parent)-
199{-
200 setSurfaceType(QSurface::OpenGLSurface);-
201}
never executed: end of block
0
202QOpenGLWindow::~QOpenGLWindow()-
203{-
204 makeCurrent();-
205}
never executed: end of block
0
206-
207-
208-
209-
210QOpenGLWindow::UpdateBehavior QOpenGLWindow::updateBehavior() const-
211{-
212 const QOpenGLWindowPrivate * const d = d_func();-
213 return
never executed: return d->updateBehavior;
d->updateBehavior;
never executed: return d->updateBehavior;
0
214}-
215-
216-
217-
218-
219-
220-
221bool QOpenGLWindow::isValid() const-
222{-
223 const QOpenGLWindowPrivate * const d = d_func();-
224 return
never executed: return d->context && d->context->isValid();
d->context
d->contextDescription
TRUEnever evaluated
FALSEnever evaluated
&& d->context->isValid()
d->context->isValid()Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return d->context && d->context->isValid();
0
225}-
226void QOpenGLWindow::makeCurrent()-
227{-
228 QOpenGLWindowPrivate * const d = d_func();-
229-
230 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
231 return;
never executed: return;
0
232-
233-
234-
235 if (handle()
handle()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
236 d->context->makeCurrent(this);-
237 }
never executed: end of block
else {
0
238 if (!d->offscreenSurface
!d->offscreenSurfaceDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
239 d->offscreenSurface.reset(new QOffscreenSurface);-
240 d->offscreenSurface->setFormat(d->context->format());-
241 d->offscreenSurface->create();-
242 }
never executed: end of block
0
243 d->context->makeCurrent(d->offscreenSurface.data());-
244 }
never executed: end of block
0
245-
246 d->bindFBO();-
247}
never executed: end of block
0
248void QOpenGLWindow::doneCurrent()-
249{-
250 QOpenGLWindowPrivate * const d = d_func();-
251-
252 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
253 return;
never executed: return;
0
254-
255 d->context->doneCurrent();-
256}
never executed: end of block
0
257-
258-
259-
260-
261QOpenGLContext *QOpenGLWindow::context() const-
262{-
263 const QOpenGLWindowPrivate * const d = d_func();-
264 return
never executed: return d->context.data();
d->context.data();
never executed: return d->context.data();
0
265}-
266-
267-
268-
269-
270QOpenGLContext *QOpenGLWindow::shareContext() const-
271{-
272 const QOpenGLWindowPrivate * const d = d_func();-
273 return
never executed: return d->shareContext;
d->shareContext;
never executed: return d->shareContext;
0
274}-
275GLuint QOpenGLWindow::defaultFramebufferObject() const-
276{-
277 const QOpenGLWindowPrivate * const d = d_func();-
278 if (d->updateBehavior > NoPartialUpdate
d->updateBehav...oPartialUpdateDescription
TRUEnever evaluated
FALSEnever evaluated
&& d->fbo
d->fboDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
279 return
never executed: return d->fbo->handle();
d->fbo->handle();
never executed: return d->fbo->handle();
0
280 else if (QOpenGLContext *ctx = QOpenGLContext::currentContext()
QOpenGLContext...rrentContext()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
281 return
never executed: return ctx->defaultFramebufferObject();
ctx->defaultFramebufferObject();
never executed: return ctx->defaultFramebufferObject();
0
282 else-
283 return
never executed: return 0;
0;
never executed: return 0;
0
284}-
285-
286extern __attribute__((visibility("default"))) QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha);-
287QImage QOpenGLWindow::grabFramebuffer()-
288{-
289 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
290 return
never executed: return QImage();
QImage();
never executed: return QImage();
0
291-
292 makeCurrent();-
293 return
never executed: return qt_gl_read_framebuffer(size() * devicePixelRatio(), false, false);
qt_gl_read_framebuffer(size() * devicePixelRatio(), false, false);
never executed: return qt_gl_read_framebuffer(size() * devicePixelRatio(), false, false);
0
294}-
295void QOpenGLWindow::initializeGL()-
296{-
297}-
298void QOpenGLWindow::resizeGL(int w, int h)-
299{-
300 (void)w;;-
301 (void)h;;-
302}
never executed: end of block
0
303void QOpenGLWindow::paintGL()-
304{-
305}-
306void QOpenGLWindow::paintUnderGL()-
307{-
308}-
309void QOpenGLWindow::paintOverGL()-
310{-
311}-
312-
313-
314-
315-
316-
317-
318void QOpenGLWindow::paintEvent(QPaintEvent *event)-
319{-
320 (void)event;;-
321 paintGL();-
322}
never executed: end of block
0
323-
324-
325-
326-
327-
328-
329void QOpenGLWindow::resizeEvent(QResizeEvent *event)-
330{-
331 (void)event;;-
332 QOpenGLWindowPrivate * const d = d_func();-
333 d->initialize();-
334 resizeGL(width(), height());-
335}
never executed: end of block
0
336-
337-
338-
339-
340int QOpenGLWindow::metric(PaintDeviceMetric metric) const-
341{-
342 const QOpenGLWindowPrivate * const d = d_func();-
343-
344 switch (metric) {-
345 case
never executed: case PdmDepth:
PdmDepth:
never executed: case PdmDepth:
0
346 if (d->paintDevice
d->paintDeviceDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
347 return
never executed: return d->paintDevice->depth();
d->paintDevice->depth();
never executed: return d->paintDevice->depth();
0
348 break;
never executed: break;
0
349 default
never executed: default:
:
never executed: default:
0
350 break;
never executed: break;
0
351 }-
352 return
never executed: return QPaintDeviceWindow::metric(metric);
QPaintDeviceWindow::metric(metric);
never executed: return QPaintDeviceWindow::metric(metric);
0
353}-
354-
355-
356-
357-
358QPaintDevice *QOpenGLWindow::redirected(QPoint *) const-
359{-
360 const QOpenGLWindowPrivate * const d = d_func();-
361 if (QOpenGLContext::currentContext() == d->context.data()
QOpenGLContext...context.data()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
362 return
never executed: return d->paintDevice.data();
d->paintDevice.data();
never executed: return d->paintDevice.data();
0
363 return
never executed: return 0;
0;
never executed: return 0;
0
364}-
365-
366-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9