Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
9#include <QtCore/qpointer.h>
10
12
14{
15public:
18
19 QPointer<QOpenGLEngineShaderManager> m_manager;
21};
22
23
24
25
30
32{
34 if (d->m_manager) {
35 d->m_manager->removeCustomStage();
36 d->m_manager->sharedShaders->cleanupCustomStage(this);
37 }
38 delete d_ptr;
39}
40
42{
44 if (d->m_manager)
45 d->m_manager->setDirty(); // ### Probably a bit overkill!
46}
47
49{
51 if (p->paintEngine()->type() != QPaintEngine::OpenGL2) {
52 qWarning("QOpenGLCustomShaderStage::setOnPainter() - paint engine not OpenGL2");
53 return false;
54 }
55 if (d->m_manager)
56 qWarning("Custom shader is already set on a painter");
57
58 QOpenGL2PaintEngineEx *engine = static_cast<QOpenGL2PaintEngineEx*>(p->paintEngine());
60 Q_ASSERT(d->m_manager);
61
62 d->m_manager->setCustomStage(this);
63 return true;
64}
65
67{
69 if (p->paintEngine()->type() != QPaintEngine::OpenGL2)
70 return;
71
72 QOpenGL2PaintEngineEx *engine = static_cast<QOpenGL2PaintEngineEx*>(p->paintEngine());
74 Q_ASSERT(d->m_manager);
75
76 // Just set the stage to null, don't call removeCustomStage().
77 // This should leave the program in a compiled/linked state
78 // if the next custom shader stage is this one again.
79 d->m_manager->setCustomStage(nullptr);
80 d->m_manager = nullptr;
81}
82
84{
85 Q_D(const QOpenGLCustomShaderStage);
86 return d->m_source;
87}
88
89// Called by the shader manager if another custom shader is attached or
90// the manager is deleted
92{
94 d->m_manager = nullptr;
95}
96
98{
100 d->m_source = s;
101}
102
\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
Combined button and popup list for selecting options.
#define qWarning
Definition qlogging.h:166
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]