qopenglcontext.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/kernel/qopenglcontext.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12class QOpenGLVersionProfilePrivate-
13{-
14public:-
15 QOpenGLVersionProfilePrivate()-
16 : majorVersion(0),-
17 minorVersion(0),-
18 profile(QSurfaceFormat::NoProfile)-
19 {}
never executed: end of block
0
20-
21 int majorVersion;-
22 int minorVersion;-
23 QSurfaceFormat::OpenGLContextProfile profile;-
24};-
25QOpenGLVersionProfile::QOpenGLVersionProfile()-
26 : d(new QOpenGLVersionProfilePrivate)-
27{-
28}
never executed: end of block
0
29-
30-
31-
32-
33-
34QOpenGLVersionProfile::QOpenGLVersionProfile(const QSurfaceFormat &format)-
35 : d(new QOpenGLVersionProfilePrivate)-
36{-
37 d->majorVersion = format.majorVersion();-
38 d->minorVersion = format.minorVersion();-
39 d->profile = format.profile();-
40}
never executed: end of block
0
41-
42-
43-
44-
45QOpenGLVersionProfile::QOpenGLVersionProfile(const QOpenGLVersionProfile &other)-
46 : d(new QOpenGLVersionProfilePrivate)-
47{-
48 *d = *(other.d);-
49}
never executed: end of block
0
50-
51-
52-
53-
54QOpenGLVersionProfile::~QOpenGLVersionProfile()-
55{-
56 delete d;-
57}
never executed: end of block
0
58-
59-
60-
61-
62QOpenGLVersionProfile &QOpenGLVersionProfile::operator=(const QOpenGLVersionProfile &rhs)-
63{-
64 if (this == &rhs
this == &rhsDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
65 return
never executed: return *this;
*this;
never executed: return *this;
0
66 *d = *(rhs.d);-
67 return
never executed: return *this;
*this;
never executed: return *this;
0
68}-
69-
70-
71-
72-
73-
74-
75-
76QPair<int, int> QOpenGLVersionProfile::version() const-
77{-
78 return
never executed: return qMakePair( d->majorVersion, d->minorVersion);
qMakePair( d->majorVersion, d->minorVersion);
never executed: return qMakePair( d->majorVersion, d->minorVersion);
0
79}-
80-
81-
82-
83-
84-
85-
86void QOpenGLVersionProfile::setVersion(int majorVersion, int minorVersion)-
87{-
88 d->majorVersion = majorVersion;-
89 d->minorVersion = minorVersion;-
90}
never executed: end of block
0
91-
92-
93-
94-
95-
96-
97QSurfaceFormat::OpenGLContextProfile QOpenGLVersionProfile::profile() const-
98{-
99 return
never executed: return d->profile;
d->profile;
never executed: return d->profile;
0
100}-
101-
102-
103-
104-
105-
106-
107-
108void QOpenGLVersionProfile::setProfile(QSurfaceFormat::OpenGLContextProfile profile)-
109{-
110 d->profile = profile;-
111}
never executed: end of block
0
112-
113-
114-
115-
116-
117-
118-
119bool QOpenGLVersionProfile::hasProfiles() const-
120{-
121 return
never executed: return ( d->majorVersion > 3 || (d->majorVersion == 3 && d->minorVersion > 1));
( d->majorVersion > 3
d->majorVersion > 3Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return ( d->majorVersion > 3 || (d->majorVersion == 3 && d->minorVersion > 1));
0
122 || (d->majorVersion == 3
d->majorVersion == 3Description
TRUEnever evaluated
FALSEnever evaluated
&& d->minorVersion > 1
d->minorVersion > 1Description
TRUEnever evaluated
FALSEnever evaluated
));
never executed: return ( d->majorVersion > 3 || (d->majorVersion == 3 && d->minorVersion > 1));
0
123}-
124-
125-
126-
127-
128-
129bool QOpenGLVersionProfile::isLegacyVersion() const-
130{-
131 return
never executed: return (d->majorVersion < 3 || (d->majorVersion == 3 && d->minorVersion == 0));
(d->majorVersion < 3
d->majorVersion < 3Description
TRUEnever evaluated
FALSEnever evaluated
|| (d->majorVersion == 3
d->majorVersion == 3Description
TRUEnever evaluated
FALSEnever evaluated
&& d->minorVersion == 0
d->minorVersion == 0Description
TRUEnever evaluated
FALSEnever evaluated
));
never executed: return (d->majorVersion < 3 || (d->majorVersion == 3 && d->minorVersion == 0));
0
132}-
133-
134-
135-
136-
137-
138-
139-
140bool QOpenGLVersionProfile::isValid() const-
141{-
142 return
never executed: return d->majorVersion > 0 && d->minorVersion >= 0;
d->majorVersion > 0
d->majorVersion > 0Description
TRUEnever evaluated
FALSEnever evaluated
&& d->minorVersion >= 0
d->minorVersion >= 0Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return d->majorVersion > 0 && d->minorVersion >= 0;
0
143}-
144-
145class QGuiGLThreadContext-
146{-
147public:-
148 QGuiGLThreadContext()-
149 : context(0)-
150 {-
151 }
never executed: end of block
0
152 ~QGuiGLThreadContext() {-
153 if (context
contextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
154 context->doneCurrent();
never executed: context->doneCurrent();
0
155 }
never executed: end of block
0
156 QOpenGLContext *context;-
157};-
158-
159namespace { namespace Q_QGS_qwindow_context_storage { typedef QThreadStorage<QGuiGLThreadContext *> Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized
guard.load() =...c::InitializedDescription
TRUEnever evaluated
FALSEnever evaluated
) guard.store(QtGlobalStatic::Destroyed);
never executed: guard.store(QtGlobalStatic::Destroyed);
}
never executed: end of block
}; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ())) : value () { guard.store(QtGlobalStatic::Initialized); } } holder; return
never executed: return &holder.value;
&holder.value;
never executed: return &holder.value;
} } } static QGlobalStatic<QThreadStorage<QGuiGLThreadContext *>, Q_QGS_qwindow_context_storage::innerFunction, Q_QGS_qwindow_context_storage::guard> qwindow_context_storage;;
0
160static QOpenGLContext *global_share_context = 0;-
161-
162-
163QHash<QOpenGLContext *, bool> QOpenGLContextPrivate::makeCurrentTracker;-
164QMutex QOpenGLContextPrivate::makeCurrentTrackerMutex;-
165void qt_gl_set_global_share_context(QOpenGLContext *context)-
166{-
167 global_share_context = context;-
168}
never executed: end of block
0
169-
170-
171-
172-
173QOpenGLContext *qt_gl_global_share_context()-
174{-
175 return
never executed: return global_share_context;
global_share_context;
never executed: return global_share_context;
0
176}-
177QOpenGLContext *QOpenGLContextPrivate::setCurrentContext(QOpenGLContext *context)-
178{-
179 QGuiGLThreadContext *threadContext = qwindow_context_storage()->localData();-
180 if (!threadContext
!threadContextDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
181 if (!QThread::currentThread()
!QThread::currentThread()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
182 QMessageLogger(__FILE__, 342, __PRETTY_FUNCTION__).warning("No QTLS available. currentContext won't work");-
183 return
never executed: return 0;
0;
never executed: return 0;
0
184 }-
185 threadContext = new QGuiGLThreadContext;-
186 qwindow_context_storage()->setLocalData(threadContext);-
187 }
never executed: end of block
0
188 QOpenGLContext *previous = threadContext->context;-
189 threadContext->context = context;-
190 return
never executed: return previous;
previous;
never executed: return previous;
0
191}-
192-
193int QOpenGLContextPrivate::maxTextureSize()-
194{-
195 if (max_texture_size != -1
max_texture_size != -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
196 return
never executed: return max_texture_size;
max_texture_size;
never executed: return max_texture_size;
0
197-
198 QOpenGLContext * const q = q_func();-
199 QOpenGLFunctions *funcs = q->functions();-
200 funcs->glGetIntegerv(0x0D33, &max_texture_size);-
201-
202-
203 if (!q->isOpenGLES()
!q->isOpenGLES()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
204 GLenum proxy = 0x8064;-
205-
206 GLint size;-
207 GLint next = 64;-
208 funcs->glTexImage2D(proxy, 0, 0x1908, next, next, 0, 0x1908, 0x1401, 0);-
209-
210 QOpenGLFunctions_1_0 *gl1funcs = 0;-
211 QOpenGLFunctions_3_2_Core *gl3funcs = 0;-
212-
213 if (q->format().profile() == QSurfaceFormat::CoreProfile
q->format().pr...t::CoreProfileDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
214 gl3funcs = q->versionFunctions<QOpenGLFunctions_3_2_Core>();
never executed: gl3funcs = q->versionFunctions<QOpenGLFunctions_3_2_Core>();
0
215 else-
216 gl1funcs = q->versionFunctions<QOpenGLFunctions_1_0>();
never executed: gl1funcs = q->versionFunctions<QOpenGLFunctions_1_0>();
0
217-
218 ((!(gl1funcs || gl3funcs)) ? qt_assert("gl1funcs || gl3funcs",__FILE__,378) : qt_noop());-
219-
220 if (gl1funcs
gl1funcsDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
221 gl1funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &size);
never executed: gl1funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &size);
0
222 else-
223 gl3funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &size);
never executed: gl3funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &size);
0
224-
225 if (size == 0
size == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
226 return
never executed: return max_texture_size;
max_texture_size;
never executed: return max_texture_size;
0
227 }-
228 do {-
229 size = next;-
230 next = size * 2;-
231-
232 if (next > max_texture_size
next > max_texture_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
233 break;
never executed: break;
0
234 funcs->glTexImage2D(proxy, 0, 0x1908, next, next, 0, 0x1908, 0x1401, 0);-
235 if (gl1funcs
gl1funcsDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
236 gl1funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &next);
never executed: gl1funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &next);
0
237 else-
238 gl3funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &next);
never executed: gl3funcs->glGetTexLevelParameteriv(proxy, 0, 0x1000, &next);
0
239-
240 } while (next > size
next > sizeDescription
TRUEnever evaluated
FALSEnever evaluated
);
0
241-
242 max_texture_size = size;-
243 }
never executed: end of block
0
244-
245-
246 return
never executed: return max_texture_size;
max_texture_size;
never executed: return max_texture_size;
0
247}-
248-
249-
250-
251-
252-
253QOpenGLContext* QOpenGLContext::currentContext()-
254{-
255 QGuiGLThreadContext *threadContext = qwindow_context_storage()->localData();-
256 if (threadContext
threadContextDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
257 return
never executed: return threadContext->context;
threadContext->context;
never executed: return threadContext->context;
0
258 }-
259 return
never executed: return 0;
0;
never executed: return 0;
0
260}-
261-
262-
263-
264-
265bool QOpenGLContext::areSharing(QOpenGLContext *first, QOpenGLContext *second)-
266{-
267 return
never executed: return first->shareGroup() == second->shareGroup();
first->shareGroup() == second->shareGroup();
never executed: return first->shareGroup() == second->shareGroup();
0
268}-
269-
270-
271-
272-
273-
274-
275QPlatformOpenGLContext *QOpenGLContext::handle() const-
276{-
277 const QOpenGLContextPrivate * const d = d_func();-
278 return
never executed: return d->platformGLContext;
d->platformGLContext;
never executed: return d->platformGLContext;
0
279}-
280-
281-
282-
283-
284-
285-
286-
287QPlatformOpenGLContext *QOpenGLContext::shareHandle() const-
288{-
289 const QOpenGLContextPrivate * const d = d_func();-
290 if (d->shareContext
d->shareContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
291 return
never executed: return d->shareContext->handle();
d->shareContext->handle();
never executed: return d->shareContext->handle();
0
292 return
never executed: return 0;
0;
never executed: return 0;
0
293}-
294QOpenGLContext::QOpenGLContext(QObject *parent)-
295 : QObject(*new QOpenGLContextPrivate(), parent)-
296{-
297 setScreen(QGuiApplication::primaryScreen());-
298}
never executed: end of block
0
299void QOpenGLContext::setFormat(const QSurfaceFormat &format)-
300{-
301 QOpenGLContextPrivate * const d = d_func();-
302 d->requestedFormat = format;-
303}
never executed: end of block
0
304-
305-
306-
307-
308-
309void QOpenGLContext::setShareContext(QOpenGLContext *shareContext)-
310{-
311 QOpenGLContextPrivate * const d = d_func();-
312 d->shareContext = shareContext;-
313}
never executed: end of block
0
314-
315-
316-
317-
318-
319void QOpenGLContext::setScreen(QScreen *screen)-
320{-
321 QOpenGLContextPrivate * const d = d_func();-
322 if (d->screen
d->screenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
323 disconnect(d->screen, qFlagLocation("2""destroyed(QObject*)" "\0" __FILE__ ":" "502"), this, qFlagLocation("1""_q_screenDestroyed(QObject*)" "\0" __FILE__ ":" "502"));
never executed: disconnect(d->screen, qFlagLocation("2""destroyed(QObject*)" "\0" __FILE__ ":" "502"), this, qFlagLocation("1""_q_screenDestroyed(QObject*)" "\0" __FILE__ ":" "502"));
0
324 d->screen = screen;-
325 if (!d->screen
!d->screenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
326 d->screen = QGuiApplication::primaryScreen();
never executed: d->screen = QGuiApplication::primaryScreen();
0
327 if (d->screen
d->screenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
328 connect(d->screen, qFlagLocation("2""destroyed(QObject*)" "\0" __FILE__ ":" "507"), this, qFlagLocation("1""_q_screenDestroyed(QObject*)" "\0" __FILE__ ":" "507"));
never executed: connect(d->screen, qFlagLocation("2""destroyed(QObject*)" "\0" __FILE__ ":" "507"), this, qFlagLocation("1""_q_screenDestroyed(QObject*)" "\0" __FILE__ ":" "507"));
0
329}
never executed: end of block
0
330-
331void QOpenGLContextPrivate::_q_screenDestroyed(QObject *object)-
332{-
333 QOpenGLContext * const q = q_func();-
334 if (object == static_cast<QObject *>(screen)
object == stat...ect *>(screen)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
335 screen = 0;-
336 q->setScreen(0);-
337 }
never executed: end of block
0
338}
never executed: end of block
0
339void QOpenGLContext::setNativeHandle(const QVariant &handle)-
340{-
341 QOpenGLContextPrivate * const d = d_func();-
342 d->nativeHandle = handle;-
343}
never executed: end of block
0
344QVariant QOpenGLContext::nativeHandle() const-
345{-
346 const QOpenGLContextPrivate * const d = d_func();-
347 return
never executed: return d->nativeHandle;
d->nativeHandle;
never executed: return d->nativeHandle;
0
348}-
349bool QOpenGLContext::create()-
350{-
351 QOpenGLContextPrivate * const d = d_func();-
352 if (d->platformGLContext
d->platformGLContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
353 destroy();
never executed: destroy();
0
354-
355 d->platformGLContext = QGuiApplicationPrivate::platformIntegration()->createPlatformOpenGLContext(this);-
356 if (!d->platformGLContext
!d->platformGLContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
357 return
never executed: return false;
false;
never executed: return false;
0
358 d->platformGLContext->initialize();-
359 d->platformGLContext->setContext(this);-
360 if (!d->platformGLContext->isSharing()
!d->platformGL...t->isSharing()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
361 d->shareContext = 0;
never executed: d->shareContext = 0;
0
362 d->shareGroup = d->shareContext
d->shareContextDescription
TRUEnever evaluated
FALSEnever evaluated
? d->shareContext->shareGroup() : new QOpenGLContextGroup;
0
363 d->shareGroup->d_func()->addContext(this);-
364 return
never executed: return isValid();
isValid();
never executed: return isValid();
0
365}-
366void QOpenGLContext::destroy()-
367{-
368 deleteQGLContext();-
369 QOpenGLContextPrivate * const d = d_func();-
370 if (d->platformGLContext
d->platformGLContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
371 aboutToBeDestroyed();
never executed: aboutToBeDestroyed();
0
372 if (QOpenGLContext::currentContext() == this
QOpenGLContext...text() == thisDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
373 doneCurrent();
never executed: doneCurrent();
0
374 if (d->shareGroup
d->shareGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
375 d->shareGroup->d_func()->removeContext(this);
never executed: d->shareGroup->d_func()->removeContext(this);
0
376 d->shareGroup = 0;-
377 delete d->platformGLContext;-
378 d->platformGLContext = 0;-
379 delete d->functions;-
380 d->functions = 0;-
381-
382 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(d->externalVersionFunctions)>::type> _container_((d->externalVersionFunctions)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QAbstractOpenGLFunctions *func = *_container_.i; _container_.control; _container_.control = 0) {-
383 QAbstractOpenGLFunctionsPrivate *func_d = QAbstractOpenGLFunctionsPrivate::get(func);-
384 func_d->owningContext = 0;-
385 func_d->initialized = false;-
386 }
never executed: end of block
0
387 d->externalVersionFunctions.clear();-
388 qDeleteAll(d->versionFunctions);-
389 d->versionFunctions.clear();-
390 qDeleteAll(d->versionFunctionsBackend);-
391 d->versionFunctionsBackend.clear();-
392-
393 delete d->textureFunctions;-
394 d->textureFunctions = 0;-
395-
396 d->nativeHandle = QVariant();-
397}
never executed: end of block
0
398QOpenGLContext::~QOpenGLContext()-
399{-
400 destroy();-
401-
402-
403 QOpenGLContextPrivate::cleanMakeCurrentTracker(this);-
404-
405}
never executed: end of block
0
406bool QOpenGLContext::isValid() const-
407{-
408 const QOpenGLContextPrivate * const d = d_func();-
409 return
never executed: return d->platformGLContext && d->platformGLContext->isValid();
d->platformGLContext
d->platformGLContextDescription
TRUEnever evaluated
FALSEnever evaluated
&& d->platformGLContext->isValid()
d->platformGLC...ext->isValid()Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return d->platformGLContext && d->platformGLContext->isValid();
0
410}-
411QOpenGLFunctions *QOpenGLContext::functions() const-
412{-
413 const QOpenGLContextPrivate * const d = d_func();-
414 if (!d->functions
!d->functionsDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
415 const_cast<
never executed: const_cast<QOpenGLFunctions *&>(d->functions) = new QOpenGLExtensions(QOpenGLContext::currentContext());
QOpenGLFunctions *&>(d->functions) = new QOpenGLExtensions(QOpenGLContext::currentContext());
never executed: const_cast<QOpenGLFunctions *&>(d->functions) = new QOpenGLExtensions(QOpenGLContext::currentContext());
0
416 return
never executed: return d->functions;
d->functions;
never executed: return d->functions;
0
417}-
418QOpenGLExtraFunctions *QOpenGLContext::extraFunctions() const-
419{-
420 return
never executed: return static_cast<QOpenGLExtraFunctions *>(functions());
static_cast<QOpenGLExtraFunctions *>(functions());
never executed: return static_cast<QOpenGLExtraFunctions *>(functions());
0
421}-
422QAbstractOpenGLFunctions *QOpenGLContext::versionFunctions(const QOpenGLVersionProfile &versionProfile) const-
423{-
424-
425 if (isOpenGLES()
isOpenGLES()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
426 QMessageLogger(__FILE__, 821, __PRETTY_FUNCTION__).warning("versionFunctions: Not supported on OpenGL ES");-
427 return
never executed: return 0;
0;
never executed: return 0;
0
428 }-
429-
430-
431 const QOpenGLContextPrivate * const d = d_func();-
432 const QSurfaceFormat f = format();-
433-
434-
435 QOpenGLVersionProfile vp = versionProfile;-
436 if (!vp.isValid()
!vp.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
437 vp = QOpenGLVersionProfile(f);
never executed: vp = QOpenGLVersionProfile(f);
0
438-
439-
440 const QPair<int, int> v = qMakePair(f.majorVersion(), f.minorVersion());-
441 if (v < vp.version()
v < vp.version()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
442 return
never executed: return 0;
0;
never executed: return 0;
0
443-
444-
445-
446 if (((vp.hasProfiles()
vp.hasProfiles()Description
TRUEnever evaluated
FALSEnever evaluated
&& vp.profile() != QSurfaceFormat::CoreProfile
vp.profile() !...t::CoreProfileDescription
TRUEnever evaluated
FALSEnever evaluated
) || vp.isLegacyVersion()
vp.isLegacyVersion()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
447 && f.profile() == QSurfaceFormat::CoreProfile
f.profile() ==...t::CoreProfileDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
448 return
never executed: return 0;
0;
never executed: return 0;
0
449-
450-
451 QAbstractOpenGLFunctions* funcs = 0;-
452 if (!d->versionFunctions.contains(vp)
!d->versionFun...s.contains(vp)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
453 funcs = QOpenGLVersionFunctionsFactory::create(vp);-
454 if (funcs
funcsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
455 funcs->setOwningContext(this);-
456 d->versionFunctions.insert(vp, funcs);-
457 }
never executed: end of block
0
458 }
never executed: end of block
else {
0
459 funcs = d->versionFunctions.value(vp);-
460 }
never executed: end of block
0
461-
462 if (funcs
funcsDescription
TRUEnever evaluated
FALSEnever evaluated
&& QOpenGLContext::currentContext() == this
QOpenGLContext...text() == thisDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
463 funcs->initializeOpenGLFunctions();
never executed: funcs->initializeOpenGLFunctions();
0
464-
465 return
never executed: return funcs;
funcs;
never executed: return funcs;
0
466}-
467QSet<QByteArray> QOpenGLContext::extensions() const-
468{-
469 const QOpenGLContextPrivate * const d = d_func();-
470 if (d->extensionNames.isEmpty()
d->extensionNames.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
471 QOpenGLExtensionMatcher matcher;-
472 d->extensionNames = matcher.extensions();-
473 }
never executed: end of block
0
474-
475 return
never executed: return d->extensionNames;
d->extensionNames;
never executed: return d->extensionNames;
0
476}-
477bool QOpenGLContext::hasExtension(const QByteArray &extension) const-
478{-
479 return
never executed: return extensions().contains(extension);
extensions().contains(extension);
never executed: return extensions().contains(extension);
0
480}-
481GLuint QOpenGLContext::defaultFramebufferObject() const-
482{-
483 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
484 return
never executed: return 0;
0;
never executed: return 0;
0
485-
486 const QOpenGLContextPrivate * const d = d_func();-
487 if (!d->surface
!d->surfaceDescription
TRUEnever evaluated
FALSEnever evaluated
|| !d->surface->surfaceHandle()
!d->surface->surfaceHandle()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
488 return
never executed: return 0;
0;
never executed: return 0;
0
489-
490 if (d->defaultFboRedirect
d->defaultFboRedirectDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
491 return
never executed: return d->defaultFboRedirect;
d->defaultFboRedirect;
never executed: return d->defaultFboRedirect;
0
492-
493 return
never executed: return d->platformGLContext->defaultFramebufferObject(d->surface->surfaceHandle());
d->platformGLContext->defaultFramebufferObject(d->surface->surfaceHandle());
never executed: return d->platformGLContext->defaultFramebufferObject(d->surface->surfaceHandle());
0
494}-
495bool QOpenGLContext::makeCurrent(QSurface *surface)-
496{-
497 QOpenGLContextPrivate * const d = d_func();-
498 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
499 return
never executed: return false;
false;
never executed: return false;
0
500-
501 if (thread() != QThread::currentThread()
thread() != QT...urrentThread()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
502 QMessageLogger(__FILE__, 954, __PRETTY_FUNCTION__).fatal("Cannot make QOpenGLContext current in a different thread");
never executed: QMessageLogger(__FILE__, 954, __PRETTY_FUNCTION__).fatal("Cannot make QOpenGLContext current in a different thread");
0
503-
504 if (!surface
!surfaceDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
505 doneCurrent();-
506 return
never executed: return true;
true;
never executed: return true;
0
507 }-
508-
509 if (!surface->surfaceHandle()
!surface->surfaceHandle()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
510 return
never executed: return false;
false;
never executed: return false;
0
511 if (!surface->supportsOpenGL()
!surface->supportsOpenGL()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
512 QMessageLogger(__FILE__, 964, __PRETTY_FUNCTION__).warning() << "QOpenGLContext::makeCurrent() called with non-opengl surface" << surface;-
513 return
never executed: return false;
false;
never executed: return false;
0
514 }-
515-
516 QOpenGLContext *previous = QOpenGLContextPrivate::setCurrentContext(this);-
517-
518 if (d->platformGLContext->makeCurrent(surface->surfaceHandle())
d->platformGLC...rfaceHandle())Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
519 d->surface = surface;-
520-
521 d->shareGroup->d_func()->deletePendingResources(this);-
522-
523-
524 QOpenGLContextPrivate::toggleMakeCurrentTracker(this, true);-
525-
526-
527 return
never executed: return true;
true;
never executed: return true;
0
528 }-
529-
530 QOpenGLContextPrivate::setCurrentContext(previous);-
531-
532 return
never executed: return false;
false;
never executed: return false;
0
533}-
534void QOpenGLContext::doneCurrent()-
535{-
536 QOpenGLContextPrivate * const d = d_func();-
537 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
538 return;
never executed: return;
0
539-
540 if (QOpenGLContext::currentContext() == this
QOpenGLContext...text() == thisDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
541 d->shareGroup->d_func()->deletePendingResources(this);
never executed: d->shareGroup->d_func()->deletePendingResources(this);
0
542-
543 d->platformGLContext->doneCurrent();-
544 QOpenGLContextPrivate::setCurrentContext(0);-
545-
546 d->surface = 0;-
547}
never executed: end of block
0
548-
549-
550-
551-
552-
553-
554QSurface *QOpenGLContext::surface() const-
555{-
556 const QOpenGLContextPrivate * const d = d_func();-
557 return
never executed: return d->surface;
d->surface;
never executed: return d->surface;
0
558}-
559void QOpenGLContext::swapBuffers(QSurface *surface)-
560{-
561 QOpenGLContextPrivate * const d = d_func();-
562 if (!isValid()
!isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
563 return;
never executed: return;
0
564-
565 if (!surface
!surfaceDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
566 QMessageLogger(__FILE__, 1034, __PRETTY_FUNCTION__).warning() << "QOpenGLContext::swapBuffers() called with null argument";-
567 return;
never executed: return;
0
568 }-
569-
570 if (!surface->supportsOpenGL()
!surface->supportsOpenGL()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
571 QMessageLogger(__FILE__, 1039, __PRETTY_FUNCTION__).warning() << "QOpenGLContext::swapBuffers() called with non-opengl surface";-
572 return;
never executed: return;
0
573 }-
574-
575 if (surface->surfaceClass() == QSurface::Window
surface->surfa...urface::WindowDescription
TRUEnever evaluated
FALSEnever evaluated
0
576 && !qt_window_private(static_cast<QWindow *>(surface))->receivedExpose
!qt_window_pri...receivedExposeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
577 {-
578 QMessageLogger(__FILE__, 1046, __PRETTY_FUNCTION__).warning() << "QOpenGLContext::swapBuffers() called with non-exposed window, behavior is undefined";-
579 }
never executed: end of block
0
580-
581 QPlatformSurface *surfaceHandle = surface->surfaceHandle();-
582 if (!surfaceHandle
!surfaceHandleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
583 return;
never executed: return;
0
584-
585-
586 if (!QOpenGLContextPrivate::toggleMakeCurrentTracker(this, false)
!QOpenGLContex...r(this, false)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
587 QMessageLogger(__FILE__, 1055, __PRETTY_FUNCTION__).warning() << "QOpenGLContext::swapBuffers() called without corresponding makeCurrent()";
never executed: QMessageLogger(__FILE__, 1055, __PRETTY_FUNCTION__).warning() << "QOpenGLContext::swapBuffers() called without corresponding makeCurrent()";
0
588-
589 if (surface->format().swapBehavior() == QSurfaceFormat::SingleBuffer
surface->forma...::SingleBufferDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
590 functions()->glFlush();
never executed: functions()->glFlush();
0
591 d->platformGLContext->swapBuffers(surfaceHandle);-
592}
never executed: end of block
0
593-
594-
595-
596-
597-
598-
599QFunctionPointer QOpenGLContext::getProcAddress(const QByteArray &procName) const-
600{-
601 const QOpenGLContextPrivate * const d = d_func();-
602 if (!d->platformGLContext
!d->platformGLContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
603 return
never executed: return 0;
0;
never executed: return 0;
0
604 return
never executed: return d->platformGLContext->getProcAddress(procName);
d->platformGLContext->getProcAddress(procName);
never executed: return d->platformGLContext->getProcAddress(procName);
0
605}-
606QSurfaceFormat QOpenGLContext::format() const-
607{-
608 const QOpenGLContextPrivate * const d = d_func();-
609 if (!d->platformGLContext
!d->platformGLContextDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
610 return
never executed: return d->requestedFormat;
d->requestedFormat;
never executed: return d->requestedFormat;
0
611 return
never executed: return d->platformGLContext->format();
d->platformGLContext->format();
never executed: return d->platformGLContext->format();
0
612}-
613-
614-
615-
616-
617QOpenGLContextGroup *QOpenGLContext::shareGroup() const-
618{-
619 const QOpenGLContextPrivate * const d = d_func();-
620 return
never executed: return d->shareGroup;
d->shareGroup;
never executed: return d->shareGroup;
0
621}-
622-
623-
624-
625-
626-
627-
628-
629QOpenGLContext *QOpenGLContext::shareContext() const-
630{-
631 const QOpenGLContextPrivate * const d = d_func();-
632 return
never executed: return d->shareContext;
d->shareContext;
never executed: return d->shareContext;
0
633}-
634-
635-
636-
637-
638QScreen *QOpenGLContext::screen() const-
639{-
640 const QOpenGLContextPrivate * const d = d_func();-
641 return
never executed: return d->screen;
d->screen;
never executed: return d->screen;
0
642}-
643-
644-
645-
646-
647-
648-
649-
650void *QOpenGLContext::qGLContextHandle() const-
651{-
652 const QOpenGLContextPrivate * const d = d_func();-
653 return
never executed: return d->qGLContextHandle;
d->qGLContextHandle;
never executed: return d->qGLContextHandle;
0
654}-
655-
656-
657-
658-
659-
660-
661-
662void QOpenGLContext::setQGLContextHandle(void *handle,void (*qGLContextDeleteFunction)(void *))-
663{-
664 QOpenGLContextPrivate * const d = d_func();-
665 d->qGLContextHandle = handle;-
666 d->qGLContextDeleteFunction = qGLContextDeleteFunction;-
667}
never executed: end of block
0
668-
669-
670-
671-
672void QOpenGLContext::deleteQGLContext()-
673{-
674 QOpenGLContextPrivate * const d = d_func();-
675 if (d->qGLContextDeleteFunction
d->qGLContextDeleteFunctionDescription
TRUEnever evaluated
FALSEnever evaluated
&& d->qGLContextHandle
d->qGLContextHandleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
676 d->qGLContextDeleteFunction(d->qGLContextHandle);-
677 d->qGLContextDeleteFunction = 0;-
678 d->qGLContextHandle = 0;-
679 }
never executed: end of block
0
680}
never executed: end of block
0
681void *QOpenGLContext::openGLModuleHandle()-
682{-
683-
684-
685-
686-
687-
688 return
never executed: return 0;
0;
never executed: return 0;
0
689-
690}-
691QOpenGLContext::OpenGLModuleType QOpenGLContext::openGLModuleType()-
692{-
693-
694-
695-
696-
697-
698-
699 return
never executed: return LibGL;
LibGL;
never executed: return LibGL;
0
700-
701}-
702bool QOpenGLContext::isOpenGLES() const-
703{-
704 return
never executed: return format().renderableType() == QSurfaceFormat::OpenGLES;
format().renderableType() == QSurfaceFormat::OpenGLES;
never executed: return format().renderableType() == QSurfaceFormat::OpenGLES;
0
705}-
706bool QOpenGLContext::supportsThreadedOpenGL()-
707{-
708 ((!((static_cast<QGuiApplication *>(QCoreApplication::instance())))) ? qt_assert("qGuiApp",__FILE__,1260) : qt_noop());-
709 return
never executed: return QGuiApplicationPrivate::instance()->platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL);
QGuiApplicationPrivate::instance()->platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL);
never executed: return QGuiApplicationPrivate::instance()->platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL);
0
710}-
711QOpenGLContext *QOpenGLContext::globalShareContext()-
712{-
713 ((!((static_cast<QGuiApplication *>(QCoreApplication::instance())))) ? qt_assert("qGuiApp",__FILE__,1285) : qt_noop());-
714 return
never executed: return qt_gl_global_share_context();
qt_gl_global_share_context();
never executed: return qt_gl_global_share_context();
0
715}-
716-
717-
718-
719-
720QOpenGLVersionFunctionsBackend *QOpenGLContext::functionsBackend(const QOpenGLVersionStatus &v) const-
721{-
722 const QOpenGLContextPrivate * const d = d_func();-
723 return
never executed: return d->versionFunctionsBackend.value(v, 0);
d->versionFunctionsBackend.value(v, 0);
never executed: return d->versionFunctionsBackend.value(v, 0);
0
724}-
725-
726-
727-
728-
729void QOpenGLContext::insertFunctionsBackend(const QOpenGLVersionStatus &v,-
730 QOpenGLVersionFunctionsBackend *backend)-
731{-
732 QOpenGLContextPrivate * const d = d_func();-
733 d->versionFunctionsBackend.insert(v, backend);-
734}
never executed: end of block
0
735-
736-
737-
738-
739void QOpenGLContext::removeFunctionsBackend(const QOpenGLVersionStatus &v)-
740{-
741 QOpenGLContextPrivate * const d = d_func();-
742 d->versionFunctionsBackend.remove(v);-
743}
never executed: end of block
0
744-
745-
746-
747-
748void QOpenGLContext::insertExternalFunctions(QAbstractOpenGLFunctions *f)-
749{-
750 QOpenGLContextPrivate * const d = d_func();-
751 d->externalVersionFunctions.insert(f);-
752}
never executed: end of block
0
753-
754-
755-
756-
757void QOpenGLContext::removeExternalFunctions(QAbstractOpenGLFunctions *f)-
758{-
759 QOpenGLContextPrivate * const d = d_func();-
760 d->externalVersionFunctions.remove(f);-
761}
never executed: end of block
0
762-
763-
764-
765-
766QOpenGLTextureHelper* QOpenGLContext::textureFunctions() const-
767{-
768 const QOpenGLContextPrivate * const d = d_func();-
769 return
never executed: return d->textureFunctions;
d->textureFunctions;
never executed: return d->textureFunctions;
0
770}-
771-
772-
773-
774-
775void QOpenGLContext::setTextureFunctions(QOpenGLTextureHelper* textureFuncs)-
776{-
777 QOpenGLContextPrivate * const d = d_func();-
778 d->textureFunctions = textureFuncs;-
779}
never executed: end of block
0
780QOpenGLContextGroup::QOpenGLContextGroup()-
781 : QObject(*new QOpenGLContextGroupPrivate())-
782{-
783}
never executed: end of block
0
784-
785-
786-
787-
788QOpenGLContextGroup::~QOpenGLContextGroup()-
789{-
790 QOpenGLContextGroupPrivate * const d = d_func();-
791 d->cleanup();-
792}
never executed: end of block
0
793-
794-
795-
796-
797QList<QOpenGLContext *> QOpenGLContextGroup::shares() const-
798{-
799 const QOpenGLContextGroupPrivate * const d = d_func();-
800 return
never executed: return d->m_shares;
d->m_shares;
never executed: return d->m_shares;
0
801}-
802-
803-
804-
805-
806-
807-
808QOpenGLContextGroup *QOpenGLContextGroup::currentContextGroup()-
809{-
810 QOpenGLContext *current = QOpenGLContext::currentContext();-
811 return
never executed: return current ? current->shareGroup() : 0;
current
currentDescription
TRUEnever evaluated
FALSEnever evaluated
? current->shareGroup() : 0;
never executed: return current ? current->shareGroup() : 0;
0
812}-
813-
814void QOpenGLContextGroupPrivate::addContext(QOpenGLContext *ctx)-
815{-
816 QMutexLocker locker(&m_mutex);-
817 m_refs.ref();-
818 m_shares << ctx;-
819}
never executed: end of block
0
820-
821void QOpenGLContextGroupPrivate::removeContext(QOpenGLContext *ctx)-
822{-
823 QOpenGLContextGroup * const q = q_func();-
824-
825 bool deleteObject = false;-
826-
827 {-
828 QMutexLocker locker(&m_mutex);-
829 m_shares.removeOne(ctx);-
830-
831 if (ctx == m_context
ctx == m_contextDescription
TRUEnever evaluated
FALSEnever evaluated
&& !m_shares.isEmpty()
!m_shares.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
832 m_context = m_shares.first();
never executed: m_context = m_shares.first();
0
833-
834 if (!m_refs.deref()
!m_refs.deref()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
835 cleanup();-
836 deleteObject = true;-
837 }
never executed: end of block
0
838 }-
839-
840 if (deleteObject
deleteObjectDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
841 if (q->thread() == QThread::currentThread()
q->thread() ==...urrentThread()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
842 delete q;
never executed: delete q;
0
843 else-
844 q->deleteLater();
never executed: q->deleteLater();
0
845 }-
846}
never executed: end of block
0
847-
848void QOpenGLContextGroupPrivate::cleanup()-
849{-
850 QOpenGLContextGroup * const q = q_func();-
851 {-
852 QHash<QOpenGLMultiGroupSharedResource *, QOpenGLSharedResource *>::const_iterator it, end;-
853 end = m_resources.constEnd();-
854 for (it = m_resources.constBegin(); it != end
it != endDescription
TRUEnever evaluated
FALSEnever evaluated
; ++it)
0
855 it.key()->cleanup(q, it.value());
never executed: it.key()->cleanup(q, it.value());
0
856 m_resources.clear();-
857 }-
858-
859 QList<QOpenGLSharedResource *>::iterator it = m_sharedResources.begin();-
860 QList<QOpenGLSharedResource *>::iterator end = m_sharedResources.end();-
861-
862 while (it != end
it != endDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
863 (*it)->invalidateResource();-
864 (*it)->m_group = 0;-
865 ++it;-
866 }
never executed: end of block
0
867-
868 m_sharedResources.clear();-
869-
870 qDeleteAll(m_pendingDeletion.begin(), m_pendingDeletion.end());-
871 m_pendingDeletion.clear();-
872}
never executed: end of block
0
873-
874void QOpenGLContextGroupPrivate::deletePendingResources(QOpenGLContext *ctx)-
875{-
876 QMutexLocker locker(&m_mutex);-
877-
878 const QList<QOpenGLSharedResource *> pending = m_pendingDeletion;-
879 m_pendingDeletion.clear();-
880-
881 QList<QOpenGLSharedResource *>::const_iterator it = pending.begin();-
882 QList<QOpenGLSharedResource *>::const_iterator end = pending.end();-
883 while (it != end
it != endDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
884 (*it)->freeResource(ctx);-
885 delete *it;-
886 ++it;-
887 }
never executed: end of block
0
888}
never executed: end of block
0
889QOpenGLSharedResource::QOpenGLSharedResource(QOpenGLContextGroup *group)-
890 : m_group(group)-
891{-
892 QMutexLocker locker(&m_group->d_func()->m_mutex);-
893 m_group->d_func()->m_sharedResources << this;-
894}
never executed: end of block
0
895-
896QOpenGLSharedResource::~QOpenGLSharedResource()-
897{-
898}-
899-
900-
901void QOpenGLSharedResource::free()-
902{-
903 if (!m_group
!m_groupDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
904 delete this;-
905 return;
never executed: return;
0
906 }-
907-
908 QMutexLocker locker(&m_group->d_func()->m_mutex);-
909 m_group->d_func()->m_sharedResources.removeOne(this);-
910 m_group->d_func()->m_pendingDeletion << this;-
911-
912-
913 QOpenGLContext *current = QOpenGLContext::currentContext();-
914 if (current
currentDescription
TRUEnever evaluated
FALSEnever evaluated
&& current->shareGroup() == m_group
current->share...p() == m_groupDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
915 m_group->d_func()->deletePendingResources(current);-
916 }
never executed: end of block
0
917}
never executed: end of block
0
918void QOpenGLSharedResourceGuard::freeResource(QOpenGLContext *context)-
919{-
920 if (m_id
m_idDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
921 QOpenGLFunctions functions(context);-
922 m_func(&functions, m_id);-
923 m_id = 0;-
924 }
never executed: end of block
0
925}
never executed: end of block
0
926QOpenGLMultiGroupSharedResource::QOpenGLMultiGroupSharedResource()-
927 : active(0),-
928 m_mutex(QMutex::Recursive)-
929{-
930-
931-
932-
933}
never executed: end of block
0
934-
935QOpenGLMultiGroupSharedResource::~QOpenGLMultiGroupSharedResource()-
936{-
937-
938-
939-
940 for (int i = 0; i < m_groups.size()
i < m_groups.size()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
941 if (!m_groups.at(i)->shares().isEmpty()
!m_groups.at(i...es().isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
942 QOpenGLContext *context = m_groups.at(i)->shares().first();-
943 QOpenGLSharedResource *resource = value(context);-
944 if (resource
resourceDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
945 resource->free();
never executed: resource->free();
0
946 }
never executed: end of block
0
947 m_groups.at(i)->d_func()->m_resources.remove(this);-
948 active.deref();-
949 }
never executed: end of block
0
950-
951 if (active.load() != 0
active.load() != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
952 QMessageLogger(__FILE__, 1592, __PRETTY_FUNCTION__).warning("QtGui: Resources are still available at program shutdown.\n"-
953 " This is possibly caused by a leaked QOpenGLWidget, \n"-
954 " QOpenGLFramebufferObject or QOpenGLPixelBuffer.");-
955 }
never executed: end of block
0
956-
957}
never executed: end of block
0
958-
959void QOpenGLMultiGroupSharedResource::insert(QOpenGLContext *context, QOpenGLSharedResource *value)-
960{-
961-
962-
963-
964 QOpenGLContextGroup *group = context->shareGroup();-
965 ((!(!group->d_func()->m_resources.contains(this))) ? qt_assert("!group->d_func()->m_resources.contains(this)",__FILE__,1605) : qt_noop());-
966 group->d_func()->m_resources.insert(this, value);-
967 m_groups.append(group);-
968 active.ref();-
969}
never executed: end of block
0
970-
971QOpenGLSharedResource *QOpenGLMultiGroupSharedResource::value(QOpenGLContext *context)-
972{-
973 QOpenGLContextGroup *group = context->shareGroup();-
974 return
never executed: return group->d_func()->m_resources.value(this, 0);
group->d_func()->m_resources.value(this, 0);
never executed: return group->d_func()->m_resources.value(this, 0);
0
975}-
976-
977QList<QOpenGLSharedResource *> QOpenGLMultiGroupSharedResource::resources() const-
978{-
979 QList<QOpenGLSharedResource *> result;-
980 for (QList<QOpenGLContextGroup *>::const_iterator it = m_groups.constBegin(); it != m_groups.constEnd()
it != m_groups.constEnd()Description
TRUEnever evaluated
FALSEnever evaluated
; ++it) {
0
981 QOpenGLSharedResource *resource = (*it)->d_func()->m_resources.value(const_cast<QOpenGLMultiGroupSharedResource *>(this), 0);-
982 if (resource
resourceDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
983 result << resource;
never executed: result << resource;
0
984 }
never executed: end of block
0
985 return
never executed: return result;
result;
never executed: return result;
0
986}-
987-
988void QOpenGLMultiGroupSharedResource::cleanup(QOpenGLContextGroup *group, QOpenGLSharedResource *value)-
989{-
990-
991-
992-
993 value->invalidateResource();-
994 value->free();-
995 active.deref();-
996-
997 ((!(m_groups.contains(group))) ? qt_assert("m_groups.contains(group)",__FILE__,1637) : qt_noop());-
998 m_groups.removeOne(group);-
999}
never executed: end of block
0
1000-
1001-
1002-
Switch to Source codePreprocessed file

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