Krita Source Code Documentation
Loading...
Searching...
No Matches
KisOpenGLContextSwitchLock.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2025 Dmitry Kazakov <dimula73@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
#include "
KisOpenGLContextSwitchLock.h
"
8
9
#include <QOpenGLContext>
10
#include <QOpenGLWidget>
11
12
13
namespace
{
14
15
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
16
inline
bool
shouldUseLock()
17
{
18
# if defined(Q_OS_MACOS) || defined(Q_OS_ANDROID)
25
return
true
;
26
# else
27
static
const
bool
s_shouldUseLock = qEnvironmentVariableIsSet(
"KRITA_USE_STRICT_OPENGL_CONTEXT_SWITCH"
);
28
return
s_shouldUseLock;
29
# endif
30
}
31
#endif
32
}
33
34
KisOpenGLContextSwitchLockAdapter::KisOpenGLContextSwitchLockAdapter
(QOpenGLWidget *targetWidget)
35
: m_targetWidget(targetWidget)
36
{
37
}
38
39
void
KisOpenGLContextSwitchLockAdapter::lock
() {
40
m_oldContext
= QOpenGLContext::currentContext();
41
m_oldSurface
=
m_oldContext
?
m_oldContext
->surface() :
nullptr
;
42
m_targetWidget
->makeCurrent();
43
}
44
45
void
KisOpenGLContextSwitchLockAdapter::unlock
() {
46
if
(
m_oldContext
) {
47
m_oldContext
->makeCurrent(
m_oldSurface
);
48
}
else
{
49
m_targetWidget
->doneCurrent();
50
}
51
}
52
53
void
KisOpenGLContextSwitchLockAdapterSkipOnQt5::lock
()
54
{
55
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
56
if
(!shouldUseLock())
return
;
57
#endif
58
KisOpenGLContextSwitchLockAdapter::lock
();
59
}
60
61
void
KisOpenGLContextSwitchLockAdapterSkipOnQt5::unlock
()
62
{
63
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
64
if
(!shouldUseLock())
return
;
65
#endif
66
KisOpenGLContextSwitchLockAdapter::unlock
();
67
}
KisOpenGLContextSwitchLock.h
KisOpenGLContextSwitchLockAdapterSkipOnQt5::unlock
void unlock()
Definition
KisOpenGLContextSwitchLock.cpp:61
KisOpenGLContextSwitchLockAdapterSkipOnQt5::lock
void lock()
Definition
KisOpenGLContextSwitchLock.cpp:53
KisOpenGLContextSwitchLockAdapter::unlock
void unlock()
Definition
KisOpenGLContextSwitchLock.cpp:45
KisOpenGLContextSwitchLockAdapter::m_oldSurface
QSurface * m_oldSurface
Definition
KisOpenGLContextSwitchLock.h:28
KisOpenGLContextSwitchLockAdapter::KisOpenGLContextSwitchLockAdapter
KisOpenGLContextSwitchLockAdapter(QOpenGLWidget *targetWidget)
Definition
KisOpenGLContextSwitchLock.cpp:34
KisOpenGLContextSwitchLockAdapter::m_oldContext
QOpenGLContext * m_oldContext
Definition
KisOpenGLContextSwitchLock.h:27
KisOpenGLContextSwitchLockAdapter::lock
void lock()
Definition
KisOpenGLContextSwitchLock.cpp:39
KisOpenGLContextSwitchLockAdapter::m_targetWidget
QOpenGLWidget * m_targetWidget
Definition
KisOpenGLContextSwitchLock.h:26
libs
ui
opengl
KisOpenGLContextSwitchLock.cpp
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52