Qt 6.x
The Qt SDK
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
7#include <private/qpainter_p.h>
8
10
12{
13public:
16
19};
20
21
22
23
26{
27}
28
30{
32 if (d->m_manager) {
33 d->m_manager->removeCustomStage();
34 d->m_manager->sharedShaders->cleanupCustomStage(this);
35 }
36 delete d_ptr;
37}
38
40{
42 if (d->m_manager)
43 d->m_manager->setDirty(); // ### Probably a bit overkill!
44}
45
47{
49 if (p->paintEngine()->type() != QPaintEngine::OpenGL2) {
50 qWarning("QOpenGLCustomShaderStage::setOnPainter() - paint engine not OpenGL2");
51 return false;
52 }
53 if (d->m_manager)
54 qWarning("Custom shader is already set on a painter");
55
56 QOpenGL2PaintEngineEx *engine = static_cast<QOpenGL2PaintEngineEx*>(p->paintEngine());
58 Q_ASSERT(d->m_manager);
59
60 d->m_manager->setCustomStage(this);
61 return true;
62}
63
65{
67 if (p->paintEngine()->type() != QPaintEngine::OpenGL2)
68 return;
69
70 QOpenGL2PaintEngineEx *engine = static_cast<QOpenGL2PaintEngineEx*>(p->paintEngine());
72 Q_ASSERT(d->m_manager);
73
74 // Just set the stage to null, don't call removeCustomStage().
75 // This should leave the program in a compiled/linked state
76 // if the next custom shader stage is this one again.
77 d->m_manager->setCustomStage(nullptr);
78 d->m_manager = nullptr;
79}
80
82{
83 Q_D(const QOpenGLCustomShaderStage);
84 return d->m_source;
85}
86
87// Called by the shader manager if another custom shader is attached or
88// the manager is deleted
90{
92 d->m_manager = nullptr;
93}
94
96{
98 d->m_source = s;
99}
100
\inmodule QtCore
Definition qbytearray.h:57
static QOpenGLEngineShaderManager * shaderManagerForEngine(QOpenGL2PaintEngineEx *engine)
QPointer< QOpenGLEngineShaderManager > m_manager
void setSource(const QByteArray &)
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
\inmodule QtCore
Definition qpointer.h:18
Combined button and popup list for selecting options.
#define qWarning
Definition qlogging.h:162
GLdouble s
[6]
Definition qopenglext.h:235
GLfloat GLfloat p
[1]
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QObject::connect nullptr
QJSEngine engine
[0]