Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qopenglcustomshaderstage.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
include
"qopenglcustomshaderstage_p.h"
6
#
include
"qopenglengineshadermanager_p.h"
7
#
include
"qopenglpaintengine_p.h"
8
#
include
<
private
/
qpainter_p
.
h
>
9
10
#
include
<
QtCore
/
qpointer
.
h
>
11
12
QT_BEGIN_NAMESPACE
13
14
class
QOpenGLCustomShaderStagePrivate
15
{
16
public
:
17
QOpenGLCustomShaderStagePrivate
() :
18
m_manager
(
nullptr
) {}
19
20
QPointer
<
QOpenGLEngineShaderManager
>
m_manager
;
21
QByteArray
m_source
;
22
};
23
24
25
26
27
QOpenGLCustomShaderStage::QOpenGLCustomShaderStage()
28
: d_ptr(
new
QOpenGLCustomShaderStagePrivate)
29
{
30
}
31
32
QOpenGLCustomShaderStage::~QOpenGLCustomShaderStage()
33
{
34
Q_D(QOpenGLCustomShaderStage);
35
if
(d->m_manager) {
36
d->m_manager->removeCustomStage();
37
d->m_manager->sharedShaders->cleanupCustomStage(
this
);
38
}
39
delete
d_ptr;
40
}
41
42
void
QOpenGLCustomShaderStage::setUniformsDirty()
43
{
44
Q_D(QOpenGLCustomShaderStage);
45
if
(d->m_manager)
46
d->m_manager->setDirty();
// ### Probably a bit overkill!
47
}
48
49
bool
QOpenGLCustomShaderStage::setOnPainter(QPainter* p)
50
{
51
Q_D(QOpenGLCustomShaderStage);
52
if
(p->paintEngine()->type() != QPaintEngine::OpenGL2) {
53
qWarning(
"QOpenGLCustomShaderStage::setOnPainter() - paint engine not OpenGL2"
);
54
return
false
;
55
}
56
if
(d->m_manager)
57
qWarning(
"Custom shader is already set on a painter"
);
58
59
QOpenGL2PaintEngineEx *engine =
static_cast
<QOpenGL2PaintEngineEx*>(p->paintEngine());
60
d->m_manager = QOpenGL2PaintEngineExPrivate::shaderManagerForEngine(engine);
61
Q_ASSERT(d->m_manager);
62
63
d->m_manager->setCustomStage(
this
);
64
return
true
;
65
}
66
67
void
QOpenGLCustomShaderStage::removeFromPainter(QPainter* p)
68
{
69
Q_D(QOpenGLCustomShaderStage);
70
if
(p->paintEngine()->type() != QPaintEngine::OpenGL2)
71
return
;
72
73
QOpenGL2PaintEngineEx *engine =
static_cast
<QOpenGL2PaintEngineEx*>(p->paintEngine());
74
d->m_manager = QOpenGL2PaintEngineExPrivate::shaderManagerForEngine(engine);
75
Q_ASSERT(d->m_manager);
76
77
// Just set the stage to null, don't call removeCustomStage().
78
// This should leave the program in a compiled/linked state
79
// if the next custom shader stage is this one again.
80
d->m_manager->setCustomStage(
nullptr
);
81
d->m_manager =
nullptr
;
82
}
83
84
QByteArray QOpenGLCustomShaderStage::source()
const
85
{
86
Q_D(
const
QOpenGLCustomShaderStage);
87
return
d->m_source;
88
}
89
90
// Called by the shader manager if another custom shader is attached or
91
// the manager is deleted
92
void
QOpenGLCustomShaderStage::setInactive()
93
{
94
Q_D(QOpenGLCustomShaderStage);
95
d->m_manager =
nullptr
;
96
}
97
98
void
QOpenGLCustomShaderStage::setSource(
const
QByteArray& s)
99
{
100
Q_D(QOpenGLCustomShaderStage);
101
d->m_source = s;
102
}
103
104
QT_END_NAMESPACE
QOpenGLCustomShaderStagePrivate
Definition
qopenglcustomshaderstage.cpp:15
QOpenGLCustomShaderStagePrivate::QOpenGLCustomShaderStagePrivate
QOpenGLCustomShaderStagePrivate()
Definition
qopenglcustomshaderstage.cpp:17
QOpenGLCustomShaderStagePrivate::m_source
QByteArray m_source
Definition
qopenglcustomshaderstage.cpp:21
QOpenGLCustomShaderStagePrivate::m_manager
QPointer< QOpenGLEngineShaderManager > m_manager
Definition
qopenglcustomshaderstage.cpp:20
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtbase
src
opengl
qopenglcustomshaderstage.cpp
Generated on
for Qt by
1.18.0