qglengineshadermanager.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12class QGLEngineSharedShadersResource : public QOpenGLSharedResource-
13{-
14public:-
15 QGLEngineSharedShadersResource(QOpenGLContext *ctx)-
16 : QOpenGLSharedResource(ctx->shareGroup())-
17 , m_shaders(new QGLEngineSharedShaders(QGLContext::fromOpenGLContext(ctx)))-
18 {-
19 }-
20-
21 ~QGLEngineSharedShadersResource()-
22 {-
23 delete m_shaders;-
24 }-
25-
26 void invalidateResource() override-
27 {-
28 delete m_shaders;-
29 m_shaders = 0;-
30 }-
31-
32 void freeResource(QOpenGLContext *) override-
33 {-
34 }-
35-
36 QGLEngineSharedShaders *shaders() const { return m_shaders; }-
37-
38private:-
39 QGLEngineSharedShaders *m_shaders;-
40};-
41-
42class QGLShaderStorage-
43{-
44public:-
45 QGLEngineSharedShaders *shadersForThread(const QGLContext *context) {-
46 QOpenGLMultiGroupSharedResource *&shaders = m_storage.localData();-
47 if (!shaders)-
48 shaders = new QOpenGLMultiGroupSharedResource;-
49 QGLEngineSharedShadersResource *resource =-
50 shaders->value<QGLEngineSharedShadersResource>(context->contextHandle());-
51 return resource ? resource->shaders() : 0;-
52 }-
53-
54private:-
55 QThreadStorage<QOpenGLMultiGroupSharedResource *> m_storage;-
56};-
57-
58namespace { namespace Q_QGS_qt_shader_storage { typedef QGLShaderStorage Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized) guard.store(QtGlobalStatic::Destroyed); } }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ())) : value () { guard.store(QtGlobalStatic::Initialized); } } holder; return &holder.value; } } } static QGlobalStatic<QGLShaderStorage, Q_QGS_qt_shader_storage::innerFunction, Q_QGS_qt_shader_storage::guard> qt_shader_storage;;-
59-
60QGLEngineSharedShaders *QGLEngineSharedShaders::shadersForContext(const QGLContext *context)-
61{-
62 return qt_shader_storage()->shadersForThread(context);-
63}-
64-
65const char* QGLEngineSharedShaders::qShaderSnippets[] = {-
66 0,0,0,0,0,0,0,0,0,0,-
67 0,0,0,0,0,0,0,0,0,0,-
68 0,0,0,0,0,0,0,0,0,0,-
69 0,0,0,0,0-
70};-
71-
72QGLEngineSharedShaders::QGLEngineSharedShaders(const QGLContext* context)-
73 : blitShaderProg(0)-
74 , simpleShaderProg(0)-
75{-
76-
77-
78-
79-
80-
81-
82-
83 static bool snippetsPopulated = false;-
84 if (!snippetsPopulated
!snippetsPopulatedDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
85-
86 const char** code = qShaderSnippets;-
87-
88 code[MainVertexShader] = qglslMainVertexShader;-
89 code[MainWithTexCoordsVertexShader] = qglslMainWithTexCoordsVertexShader;-
90 code[MainWithTexCoordsAndOpacityVertexShader] = qglslMainWithTexCoordsAndOpacityVertexShader;-
91-
92 code[UntransformedPositionVertexShader] = qglslUntransformedPositionVertexShader;-
93 code[PositionOnlyVertexShader] = qglslPositionOnlyVertexShader;-
94 code[ComplexGeometryPositionOnlyVertexShader] = qglslComplexGeometryPositionOnlyVertexShader;-
95 code[PositionWithPatternBrushVertexShader] = qglslPositionWithPatternBrushVertexShader;-
96 code[PositionWithLinearGradientBrushVertexShader] = qglslPositionWithLinearGradientBrushVertexShader;-
97 code[PositionWithConicalGradientBrushVertexShader] = qglslPositionWithConicalGradientBrushVertexShader;-
98 code[PositionWithRadialGradientBrushVertexShader] = qglslPositionWithRadialGradientBrushVertexShader;-
99 code[PositionWithTextureBrushVertexShader] = qglslPositionWithTextureBrushVertexShader;-
100 code[AffinePositionWithPatternBrushVertexShader] = qglslAffinePositionWithPatternBrushVertexShader;-
101 code[AffinePositionWithLinearGradientBrushVertexShader] = qglslAffinePositionWithLinearGradientBrushVertexShader;-
102 code[AffinePositionWithConicalGradientBrushVertexShader] = qglslAffinePositionWithConicalGradientBrushVertexShader;-
103 code[AffinePositionWithRadialGradientBrushVertexShader] = qglslAffinePositionWithRadialGradientBrushVertexShader;-
104 code[AffinePositionWithTextureBrushVertexShader] = qglslAffinePositionWithTextureBrushVertexShader;-
105-
106 code[MainFragmentShader_CMO] = qglslMainFragmentShader_CMO;-
107 code[MainFragmentShader_CM] = qglslMainFragmentShader_CM;-
108 code[MainFragmentShader_MO] = qglslMainFragmentShader_MO;-
109 code[MainFragmentShader_M] = qglslMainFragmentShader_M;-
110 code[MainFragmentShader_CO] = qglslMainFragmentShader_CO;-
111 code[MainFragmentShader_C] = qglslMainFragmentShader_C;-
112 code[MainFragmentShader_O] = qglslMainFragmentShader_O;-
113 code[MainFragmentShader] = qglslMainFragmentShader;-
114 code[MainFragmentShader_ImageArrays] = qglslMainFragmentShader_ImageArrays;-
115-
116 code[ImageSrcFragmentShader] = qglslImageSrcFragmentShader;-
117 code[ImageSrcWithPatternFragmentShader] = qglslImageSrcWithPatternFragmentShader;-
118 code[NonPremultipliedImageSrcFragmentShader] = qglslNonPremultipliedImageSrcFragmentShader;-
119 code[CustomImageSrcFragmentShader] = qglslCustomSrcFragmentShader;-
120 code[SolidBrushSrcFragmentShader] = qglslSolidBrushSrcFragmentShader;-
121 if (!context->contextHandle()->isOpenGLES()
!context->cont...->isOpenGLES()Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
)
0-1
122 code[TextureBrushSrcFragmentShader] = qglslTextureBrushSrcFragmentShader_desktop;
executed 1 time by 1 test: code[TextureBrushSrcFragmentShader] = qglslTextureBrushSrcFragmentShader_desktop;
Executed by:
  • tst_qmdiarea - unknown status
1
123 else-
124 code[TextureBrushSrcFragmentShader] = qglslTextureBrushSrcFragmentShader_ES;
never executed: code[TextureBrushSrcFragmentShader] = qglslTextureBrushSrcFragmentShader_ES;
0
125 code[TextureBrushSrcWithPatternFragmentShader] = qglslTextureBrushSrcWithPatternFragmentShader;-
126 code[PatternBrushSrcFragmentShader] = qglslPatternBrushSrcFragmentShader;-
127 code[LinearGradientBrushSrcFragmentShader] = qglslLinearGradientBrushSrcFragmentShader;-
128 code[RadialGradientBrushSrcFragmentShader] = qglslRadialGradientBrushSrcFragmentShader;-
129 code[ConicalGradientBrushSrcFragmentShader] = qglslConicalGradientBrushSrcFragmentShader;-
130 code[ShockingPinkSrcFragmentShader] = qglslShockingPinkSrcFragmentShader;-
131-
132 code[NoMaskFragmentShader] = "";-
133 code[MaskFragmentShader] = qglslMaskFragmentShader;-
134 code[RgbMaskFragmentShaderPass1] = qglslRgbMaskFragmentShaderPass1;-
135 code[RgbMaskFragmentShaderPass2] = qglslRgbMaskFragmentShaderPass2;-
136 code[RgbMaskWithGammaFragmentShader] = "";-
137-
138 code[NoCompositionModeFragmentShader] = "";-
139 code[MultiplyCompositionModeFragmentShader] = "";-
140 code[ScreenCompositionModeFragmentShader] = "";-
141 code[OverlayCompositionModeFragmentShader] = "";-
142 code[DarkenCompositionModeFragmentShader] = "";-
143 code[LightenCompositionModeFragmentShader] = "";-
144 code[ColorDodgeCompositionModeFragmentShader] = "";-
145 code[ColorBurnCompositionModeFragmentShader] = "";-
146 code[HardLightCompositionModeFragmentShader] = "";-
147 code[SoftLightCompositionModeFragmentShader] = "";-
148 code[DifferenceCompositionModeFragmentShader] = "";-
149 code[ExclusionCompositionModeFragmentShader] = "";-
150-
151-
152-
153 for (int i = 0; i < TotalSnippetCount
i < TotalSnippetCountDescription
TRUEevaluated 54 times by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
; ++i) {
1-54
154 if (__builtin_expect(!!(!
__builtin_expe...ts[i]), false)Description
TRUEnever evaluated
FALSEevaluated 54 times by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
qShaderSnippets[i] == 0)]), false)
__builtin_expe...ts[i]), false)Description
TRUEnever evaluated
FALSEevaluated 54 times by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
0-54
155 QMessageLogger(__FILE__, 192200, __PRETTY_FUNCTION__).fatal("Shader snippet for %s (#%d) is missing!",-
156 snippetNameStr(SnippetName(i)).constData(), i);-
157 }
never executed: end of block
0
158 }
executed 54 times by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
54
159-
160 snippetsPopulated = true;-
161 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
162-
163 QGLShader* fragShader;-
164 QGLShader* vertexShader;-
165 QByteArray vertexSource;-
166 QByteArray fragSource;-
167-
168-
169 vertexSource.append(qShaderSnippets[MainVertexShader]);-
170 vertexSource.append(qShaderSnippets[PositionOnlyVertexShader]);-
171-
172 fragSource.append(qShaderSnippets[MainFragmentShader]);-
173 fragSource.append(qShaderSnippets[ShockingPinkSrcFragmentShader]);-
174-
175 simpleShaderProg = new QGLShaderProgram(context, 0);-
176-
177 CachedShader simpleShaderCache(fragSource, vertexSource);-
178-
179 bool inCache = simpleShaderCache.load(simpleShaderProg, context);-
180-
181 if (!inCache
!inCacheDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
182 vertexShader = new QGLShader(QGLShader::Vertex, context, 0);-
183 shaders.append(vertexShader);-
184 if (!vertexShader->compileSourceCode(vertexSource)
!vertexShader-...(vertexSource)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
185 QMessageLogger(__FILE__, 222230, __PRETTY_FUNCTION__).warning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile");
never executed: QMessageLogger(__FILE__, 230, __PRETTY_FUNCTION__).warning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile");
0
186-
187 fragShader = new QGLShader(QGLShader::Fragment, context, 0);-
188 shaders.append(fragShader);-
189 if (!fragShader->compileSourceCode(fragSource)
!fragShader->c...de(fragSource)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
190 QMessageLogger(__FILE__, 227235, __PRETTY_FUNCTION__).warning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile");
never executed: QMessageLogger(__FILE__, 235, __PRETTY_FUNCTION__).warning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile");
0
191-
192 simpleShaderProg->addShader(vertexShader);-
193 simpleShaderProg->addShader(fragShader);-
194-
195 simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);-
196 simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR);-
197 simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR);-
198 simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR);-
199 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
200-
201 simpleShaderProg->link();-
202-
203 if (__builtin_expect(!!(!
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
simpleShaderProg->isLinked()) {
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
0-1
if (!inCache)
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
simpleShaderCache.store(simpleShaderProg, context);
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
} else
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
()), false)
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
204 QMessageLogger(__FILE__, 244249, __PRETTY_FUNCTION__).critical("Errors linking simple shader: %s", QString(simpleShaderProg->log()).toLocal8Bit().constData());-
205 }
never executed: end of block
else {
0
206 if (!inCache
!inCacheDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
)
0-1
207 simpleShaderCache.store(simpleShaderProg, context);
executed 1 time by 1 test: simpleShaderCache.store(simpleShaderProg, context);
Executed by:
  • tst_qmdiarea - unknown status
1
208 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
209-
210-
211 vertexSource.clear();-
212 vertexSource.append(qShaderSnippets[MainWithTexCoordsVertexShader]);-
213 vertexSource.append(qShaderSnippets[UntransformedPositionVertexShader]);-
214-
215 fragSource.clear();-
216 fragSource.append(qShaderSnippets[MainFragmentShader]);-
217 fragSource.append(qShaderSnippets[ImageSrcFragmentShader]);-
218-
219 blitShaderProg = new QGLShaderProgram(context, 0);-
220-
221 CachedShader blitShaderCache(fragSource, vertexSource);-
222-
223 inCache = blitShaderCache.load(blitShaderProg, context);-
224-
225 if (!inCache
!inCacheDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
226 vertexShader = new QGLShader(QGLShader::Vertex, context, 0);-
227 shaders.append(vertexShader);-
228 if (!vertexShader->compileSourceCode(vertexSource)
!vertexShader-...(vertexSource)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
229 QMessageLogger(__FILE__, 266274, __PRETTY_FUNCTION__).warning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile");
never executed: QMessageLogger(__FILE__, 274, __PRETTY_FUNCTION__).warning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile");
0
230-
231 fragShader = new QGLShader(QGLShader::Fragment, context, 0);-
232 shaders.append(fragShader);-
233 if (!fragShader->compileSourceCode(fragSource)
!fragShader->c...de(fragSource)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
234 QMessageLogger(__FILE__, 271279, __PRETTY_FUNCTION__).warning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile");
never executed: QMessageLogger(__FILE__, 279, __PRETTY_FUNCTION__).warning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile");
0
235-
236 blitShaderProg->addShader(vertexShader);-
237 blitShaderProg->addShader(fragShader);-
238-
239 blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);-
240 blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);-
241 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
242-
243 blitShaderProg->link();-
244 if (__builtin_expect(!!(!
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
blitShaderProg->isLinked()) {
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
0-1
if (!inCache)
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
blitShaderCache.store(blitShaderProg, context);
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
} else
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
()), false)
__builtin_expe...ked()), false)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
245 QMessageLogger(__FILE__, 285290, __PRETTY_FUNCTION__).critical("Errors linking blit shader: %s", QString(blitShaderProg->log()).toLocal8Bit().constData());-
246 }
never executed: end of block
else {
0
247 if (!inCache
!inCacheDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
)
0-1
248 blitShaderCache.store(blitShaderProg, context);
executed 1 time by 1 test: blitShaderCache.store(blitShaderProg, context);
Executed by:
  • tst_qmdiarea - unknown status
1
249 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
250-
251-
252-
253-
254}-
255-
256QGLEngineSharedShaders::~QGLEngineSharedShaders()-
257{-
258-
259-
260-
261 qDeleteAll(shaders);-
262 shaders.clear();-
263-
264 qDeleteAll(cachedPrograms);-
265 cachedPrograms.clear();-
266-
267 if (blitShaderProg) {-
268 delete blitShaderProg;-
269 blitShaderProg = 0;-
270 }-
271-
272 if (simpleShaderProg) {-
273 delete simpleShaderProg;-
274 simpleShaderProg = 0;-
275 }-
276}-
277-
278-
279QByteArray QGLEngineSharedShaders::snippetNameStr(SnippetName name)-
280{-
281 QMetaEnum m = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("SnippetName"));-
282 return QByteArray(m.valueToKey(name));-
283}-
284-
285-
286-
287-
288QGLEngineShaderProg *QGLEngineSharedShaders::findProgramInCache(const QGLEngineShaderProg &prog)-
289{-
290 for (int i = 0; i < cachedPrograms.size()
i < cachedPrograms.size()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
; ++i) {
1-2
291 QGLEngineShaderProg *cachedProg = cachedPrograms[.at(i];);-
292 if (*
*cachedProg == progDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
cachedProg == prog
*cachedProg == progDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-2
293-
294 cachedPrograms.move(i, 0);-
295 cachedProg->program->bind();-
296 return
executed 2 times by 1 test: return cachedProg;
Executed by:
  • tst_qmdiarea - unknown status
cachedProg;
executed 2 times by 1 test: return cachedProg;
Executed by:
  • tst_qmdiarea - unknown status
2
297 }-
298 }
never executed: end of block
0
299-
300 QScopedPointer<QGLEngineShaderProg> newProg;-
301-
302 do {-
303 QByteArray fragSource;-
304-
305-
306 if (prog.srcPixelFragShader == CustomImageSrcFragmentShader
prog.srcPixelF...FragmentShaderDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
307 fragSource.append(prog.customStageSource);
never executed: fragSource.append(prog.customStageSource);
0
308 fragSource.append(qShaderSnippets[prog.mainFragShader]);-
309 fragSource.append(qShaderSnippets[prog.srcPixelFragShader]);-
310 if (prog.compositionFragShader
prog.compositionFragShaderDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
)
0-1
311 fragSource.append(qShaderSnippets[prog.compositionFragShader]);
executed 1 time by 1 test: fragSource.append(qShaderSnippets[prog.compositionFragShader]);
Executed by:
  • tst_qmdiarea - unknown status
1
312 if (prog.maskFragShader
prog.maskFragShaderDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
)
0-1
313 fragSource.append(qShaderSnippets[prog.maskFragShader]);
executed 1 time by 1 test: fragSource.append(qShaderSnippets[prog.maskFragShader]);
Executed by:
  • tst_qmdiarea - unknown status
1
314-
315 QByteArray vertexSource;-
316 vertexSource.append(qShaderSnippets[prog.mainVertexShader]);-
317 vertexSource.append(qShaderSnippets[prog.positionVertexShader]);-
318-
319 QScopedPointer<QGLShaderProgram> shaderProgram(new QGLShaderProgram);-
320-
321 CachedShader shaderCache(fragSource, vertexSource);-
322 bool inCache = shaderCache.load(shaderProgram.data(), QGLContext::currentContext());-
323-
324 if (!inCache
!inCacheDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
325-
326 QScopedPointer<QGLShader> fragShader(new QGLShader(QGLShader::Fragment));-
327 QByteArray description;-
328-
329-
330 description.append("Fragment shader: main=");-
331 description.append(snippetNameStr(prog.mainFragShader));-
332 description.append(", srcPixel=");-
333 description.append(snippetNameStr(prog.srcPixelFragShader));-
334 if (prog.compositionFragShader
prog.compositionFragShaderDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
335 description.append(", composition=");-
336 description.append(snippetNameStr(prog.compositionFragShader));-
337 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
338 if (prog.maskFragShader
prog.maskFragShaderDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
339 description.append(", mask=");-
340 description.append(snippetNameStr(prog.maskFragShader));-
341 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
342 fragShader->setObjectName(QString::fromLatin1(description));-
343-
344 if (!fragShader->compileSourceCode(fragSource)
!fragShader->c...de(fragSource)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
0-1
345 QMessageLogger(__FILE__, 382390, __PRETTY_FUNCTION__).warning() << "Warning:" << description << "failed to compile!";-
346 break;
never executed: break;
0
347 }-
348-
349 QScopedPointer<QGLShader> vertexShader(new QGLShader(QGLShader::Vertex));-
350-
351-
352 description.clear();-
353 description.append("Vertex shader: main=");-
354 description.append(snippetNameStr(prog.mainVertexShader));-
355 description.append(", position=");-
356 description.append(snippetNameStr(prog.positionVertexShader));-
357 vertexShader->setObjectName(QString::fromLatin1(description));-
358-
359 if (!vertexShader->compileSourceCode(vertexSource)
!vertexShader-...(vertexSource)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
0-1
360 QMessageLogger(__FILE__, 397405, __PRETTY_FUNCTION__).warning() << "Warning:" << description << "failed to compile!";-
361 break;
never executed: break;
0
362 }-
363-
364 shaders.append(vertexShader.data());-
365 shaders.append(fragShader.data());-
366 shaderProgram->addShader(vertexShader.take());-
367 shaderProgram->addShader(fragShader.take());-
368-
369-
370 shaderProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);-
371 if (prog.useTextureCoords
prog.useTextureCoordsDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
372 shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
never executed: shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
0
373 if (prog.useOpacityAttribute
prog.useOpacityAttributeDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
)
0-1
374 shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR);
never executed: shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR);
0
375 if (prog.usePmvMatrixAttribute
prog.usePmvMatrixAttributeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
376 shaderProgram->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR);-
377 shaderProgram->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR);-
378 shaderProgram->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR);-
379 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
380 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
1
381-
382 newProg.reset(new QGLEngineShaderProg(prog));-
383 newProg->program = shaderProgram.take();-
384-
385 newProg->program->link();-
386 if (newProg->program->isLinked()
newProg->program->isLinked()Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
) {
0-1
387 if (!inCache
!inCacheDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
FALSEnever evaluated
)
0-1
388 shaderCache.store(newProg->program, QGLContext::currentContext());
executed 1 time by 1 test: shaderCache.store(newProg->program, QGLContext::currentContext());
Executed by:
  • tst_qmdiarea - unknown status
1
389 }
executed 1 time by 1 test: end of block
Executed by:
  • tst_qmdiarea - unknown status
else {
1
390 QString error;-
391 error = QLatin1String("Shader program failed to link,");-
392-
393 QLatin1String br("\n");-
394 error += QLatin1String("\n Shaders Used:\n");-
395 for (int i = 0; i < newProg->program->shaders().count()
i < newProg->p...ders().count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
396 QGLShader *shader = newProg->program->shaders().at(i);-
397 error += QLatin1String(" ") + shader->objectName() + QLatin1String(": \n")-
398 + QLatin1String(shader->sourceCode()) + br;-
399 }
never executed: end of block
0
400-
401 error += QLatin1String(" Error Log:\n")-
402 + QLatin1String(" ") + newProg->program->log();-
403 QMessageLogger(__FILE__, 440448, __PRETTY_FUNCTION__).warning() << error;-
404 break;
never executed: break;
0
405 }-
406-
407 newProg->program->bind();-
408-
409 if (newProg->maskFragShader != QGLEngineSharedShaders::NoMaskFragmentShader
newProg->maskF...FragmentShaderDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
0-1
410 GLuint location = newProg->program->uniformLocation("maskTexture");-
411 newProg->program->setUniformValue(location, GLuint(1));-
412 }
never executed: end of block
0
413-
414 if (cachedPrograms.count() > 30
cachedPrograms.count() > 30Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_qmdiarea - unknown status
) {
0-1
415-
416-
417-
418 for (int i = 0; i < 5
i < 5Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
419 delete cachedPrograms.last();-
420 cachedPrograms.removeLast();-
421 }
never executed: end of block
0
422 }
never executed: end of block
0
423-
424 cachedPrograms.insert(0, newProg.data());-
425 } while (false);-
426-
427 return
executed 1 time by 1 test: return newProg.take();
Executed by:
  • tst_qmdiarea - unknown status
newProg.take();
executed 1 time by 1 test: return newProg.take();
Executed by:
  • tst_qmdiarea - unknown status
1
428}-
429-
430void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage)-
431{-
432 for (int iauto hasStageAsCustomShaderSouce = 0; i < cachedPrograms.size(); ++i) {[stage](QGLEngineShaderProg *cachedProg= cachedPrograms[i];) -> bool {-
433 if (cachedProg->customStageSource == stage->source()
cachedProg->cu...tage->source()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
434 delete cachedProg;-
435 return
never executed: return true;
true;
never executed: return true;
0
436 }-
437 return
never executed: return false;
false
never executed: return false;
never executed: return false;
;
never executed: return false;
0
438 };-
439 cachedPrograms.removeAterase(i);-
i--;
}
}std::remove_if(cachedPrograms.begin(), cachedPrograms.end(),
440 hasStageAsCustomShaderSouce),-
441 cachedPrograms.end());-
442}
never executed: end of block
0
443-
444-
445QGLEngineShaderManager::QGLEngineShaderManager(QGLContext* context)-
446 : ctx(context),-
447 shaderProgNeedsChanging(true),-
448 complexGeometry(false),-
449 srcPixelType(Qt::NoBrush),-
450 opacityMode(NoOpacity),-
451 maskType(NoMask),-
452 compositionMode(QPainter::CompositionMode_SourceOver),-
453 customSrcStage(0),-
454 currentShaderProg(0)-
455{-
456 sharedShaders = QGLEngineSharedShaders::shadersForContext(context);-
457}-
458-
459QGLEngineShaderManager::~QGLEngineShaderManager()-
460{-
461-
462 removeCustomStage();-
463}-
464-
465GLuint QGLEngineShaderManager::getUniformLocation(Uniform id)-
466{-
467 if (!currentShaderProg)-
468 return 0;-
469-
470 QVector<uint> &uniformLocations = currentShaderProg->uniformLocations;-
471 if (uniformLocations.isEmpty())-
472 uniformLocations.fill(GLuint(-1), NumUniforms);-
473-
474 static const char *const uniformNames[] = {-
475 "imageTexture",-
476 "patternColor",-
477 "globalOpacity",-
478 "depth",-
479 "maskTexture",-
480 "fragmentColor",-
481 "linearData",-
482 "angle",-
483 "halfViewportSize",-
484 "fmp",-
485 "fmp2_m_radius2",-
486 "inverse_2_fmp2_m_radius2",-
487 "sqrfr",-
488 "bradius",-
489 "invertedTextureSize",-
490 "brushTransform",-
491 "brushTexture",-
492 "matrix",-
493 "translateZ"-
494 };-
495-
496 if (uniformLocations.at(id) == GLuint(-1))-
497 uniformLocations[id] = currentShaderProg->program->uniformLocation(uniformNames[id]);-
498-
499 return uniformLocations.at(id);-
500}-
501-
502-
503void QGLEngineShaderManager::optimiseForBrushTransform(QTransform::TransformationType transformType)-
504{-
505 (void)transformType;;-
506}-
507-
508void QGLEngineShaderManager::setDirty()-
509{-
510 shaderProgNeedsChanging = true;-
511}-
512-
513void QGLEngineShaderManager::setSrcPixelType(Qt::BrushStyle style)-
514{-
515 ((!(style != Qt::NoBrush)) ? qt_assert("style != Qt::NoBrush",__FILE__,551560) : qt_noop());-
516 if (srcPixelType == PixelSrcType(style))-
517 return;-
518-
519 srcPixelType = style;-
520 shaderProgNeedsChanging = true;-
521}-
522-
523void QGLEngineShaderManager::setSrcPixelType(PixelSrcType type)-
524{-
525 if (srcPixelType == type)-
526 return;-
527-
528 srcPixelType = type;-
529 shaderProgNeedsChanging = true;-
530}-
531-
532void QGLEngineShaderManager::setOpacityMode(OpacityMode mode)-
533{-
534 if (opacityMode == mode)-
535 return;-
536-
537 opacityMode = mode;-
538 shaderProgNeedsChanging = true;-
539}-
540-
541void QGLEngineShaderManager::setMaskType(MaskType type)-
542{-
543 if (maskType == type)-
544 return;-
545-
546 maskType = type;-
547 shaderProgNeedsChanging = true;-
548}-
549-
550void QGLEngineShaderManager::setCompositionMode(QPainter::CompositionMode mode)-
551{-
552 if (compositionMode == mode)-
553 return;-
554-
555 compositionMode = mode;-
556 shaderProgNeedsChanging = true;-
557}-
558-
559void QGLEngineShaderManager::setCustomStage(QGLCustomShaderStage* stage)-
560{-
561 if (customSrcStage)-
562 removeCustomStage();-
563 customSrcStage = stage;-
564 shaderProgNeedsChanging = true;-
565}-
566-
567void QGLEngineShaderManager::removeCustomStage()-
568{-
569 if (customSrcStage)-
570 customSrcStage->setInactive();-
571 customSrcStage = 0;-
572 shaderProgNeedsChanging = true;-
573}-
574-
575QGLShaderProgram* QGLEngineShaderManager::currentProgram()-
576{-
577 if (currentShaderProg)-
578 return currentShaderProg->program;-
579 else-
580 return sharedShaders->simpleProgram();-
581}-
582-
583void QGLEngineShaderManager::useSimpleProgram()-
584{-
585 sharedShaders->simpleProgram()->bind();-
586 QGLContextPrivate* ctx_d = ctx->d_func();-
587 ctx_d->setVertexAttribArrayEnabled(QT_VERTEX_COORDS_ATTR, true);-
588 ctx_d->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, false);-
589 ctx_d->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, false);-
590 shaderProgNeedsChanging = true;-
591}-
592-
593void QGLEngineShaderManager::useBlitProgram()-
594{-
595 sharedShaders->blitProgram()->bind();-
596 QGLContextPrivate* ctx_d = ctx->d_func();-
597 ctx_d->setVertexAttribArrayEnabled(QT_VERTEX_COORDS_ATTR, true);-
598 ctx_d->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, true);-
599 ctx_d->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, false);-
600 shaderProgNeedsChanging = true;-
601}-
602-
603QGLShaderProgram* QGLEngineShaderManager::simpleProgram()-
604{-
605 return sharedShaders->simpleProgram();-
606}-
607-
608QGLShaderProgram* QGLEngineShaderManager::blitProgram()-
609{-
610 return sharedShaders->blitProgram();-
611}-
612-
613-
614-
615-
616-
617bool QGLEngineShaderManager::useCorrectShaderProg()-
618{-
619 if (!shaderProgNeedsChanging)-
620 return false;-
621-
622 bool useCustomSrc = customSrcStage != 0;-
623 if (useCustomSrc && srcPixelType != QGLEngineShaderManager::ImageSrc && srcPixelType != Qt::TexturePattern) {-
624 useCustomSrc = false;-
625 QMessageLogger(__FILE__, 661670, __PRETTY_FUNCTION__).warning("QGLEngineShaderManager - Ignoring custom shader stage for non image src");-
626 }-
627-
628 QGLEngineShaderProg requiredProgram;-
629-
630 bool texCoords = false;-
631-
632-
633-
634 requiredProgram.positionVertexShader = QGLEngineSharedShaders::InvalidSnippetName;-
635 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::InvalidSnippetName;-
636 bool isAffine = brushTransform.isAffine();-
637 if ( (srcPixelType >= Qt::Dense1Pattern) && (srcPixelType <= Qt::DiagCrossPattern) ) {-
638 if (isAffine)-
639 requiredProgram.positionVertexShader = QGLEngineSharedShaders::AffinePositionWithPatternBrushVertexShader;-
640 else-
641 requiredProgram.positionVertexShader = QGLEngineSharedShaders::PositionWithPatternBrushVertexShader;-
642-
643 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::PatternBrushSrcFragmentShader;-
644 }-
645 else switch (srcPixelType) {-
646 default:-
647 case Qt::NoBrush:-
648 QMessageLogger(__FILE__, 684693, __PRETTY_FUNCTION__).fatal("QGLEngineShaderManager::useCorrectShaderProg() - Qt::NoBrush style is set");-
649 break;-
650 case QGLEngineShaderManager::ImageSrc:-
651 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::ImageSrcFragmentShader;-
652 requiredProgram.positionVertexShader = QGLEngineSharedShaders::PositionOnlyVertexShader;-
653 texCoords = true;-
654 break;-
655 case QGLEngineShaderManager::NonPremultipliedImageSrc:-
656 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::NonPremultipliedImageSrcFragmentShader;-
657 requiredProgram.positionVertexShader = QGLEngineSharedShaders::PositionOnlyVertexShader;-
658 texCoords = true;-
659 break;-
660 case QGLEngineShaderManager::PatternSrc:-
661 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::ImageSrcWithPatternFragmentShader;-
662 requiredProgram.positionVertexShader = QGLEngineSharedShaders::PositionOnlyVertexShader;-
663 texCoords = true;-
664 break;-
665 case QGLEngineShaderManager::TextureSrcWithPattern:-
666 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::TextureBrushSrcWithPatternFragmentShader;-
667 requiredProgram.positionVertexShader = isAffine ? QGLEngineSharedShaders::AffinePositionWithTextureBrushVertexShader-
668 : QGLEngineSharedShaders::PositionWithTextureBrushVertexShader;-
669 break;-
670 case Qt::SolidPattern:-
671 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::SolidBrushSrcFragmentShader;-
672 requiredProgram.positionVertexShader = QGLEngineSharedShaders::PositionOnlyVertexShader;-
673 break;-
674 case Qt::LinearGradientPattern:-
675 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::LinearGradientBrushSrcFragmentShader;-
676 requiredProgram.positionVertexShader = isAffine ? QGLEngineSharedShaders::AffinePositionWithLinearGradientBrushVertexShader-
677 : QGLEngineSharedShaders::PositionWithLinearGradientBrushVertexShader;-
678 break;-
679 case Qt::ConicalGradientPattern:-
680 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::ConicalGradientBrushSrcFragmentShader;-
681 requiredProgram.positionVertexShader = isAffine ? QGLEngineSharedShaders::AffinePositionWithConicalGradientBrushVertexShader-
682 : QGLEngineSharedShaders::PositionWithConicalGradientBrushVertexShader;-
683 break;-
684 case Qt::RadialGradientPattern:-
685 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::RadialGradientBrushSrcFragmentShader;-
686 requiredProgram.positionVertexShader = isAffine ? QGLEngineSharedShaders::AffinePositionWithRadialGradientBrushVertexShader-
687 : QGLEngineSharedShaders::PositionWithRadialGradientBrushVertexShader;-
688 break;-
689 case Qt::TexturePattern:-
690 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::TextureBrushSrcFragmentShader;-
691 requiredProgram.positionVertexShader = isAffine ? QGLEngineSharedShaders::AffinePositionWithTextureBrushVertexShader-
692 : QGLEngineSharedShaders::PositionWithTextureBrushVertexShader;-
693 break;-
694 };-
695-
696 if (useCustomSrc) {-
697 requiredProgram.srcPixelFragShader = QGLEngineSharedShaders::CustomImageSrcFragmentShader;-
698 requiredProgram.customStageSource = customSrcStage->source();-
699 }-
700-
701 const bool hasCompose = compositionMode > QPainter::CompositionMode_Plus;-
702 const bool hasMask = maskType != QGLEngineShaderManager::NoMask;-
703-
704-
705 if (opacityMode == AttributeOpacity) {-
706 ((!(!hasCompose && !hasMask)) ? qt_assert("!hasCompose && !hasMask",__FILE__,742751) : qt_noop());-
707 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_ImageArrays;-
708 } else {-
709 bool useGlobalOpacity = (opacityMode == UniformOpacity);-
710 if (hasCompose && hasMask && useGlobalOpacity)-
711 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_CMO;-
712 if (hasCompose && hasMask && !useGlobalOpacity)-
713 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_CM;-
714 if (!hasCompose && hasMask && useGlobalOpacity)-
715 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_MO;-
716 if (!hasCompose && hasMask && !useGlobalOpacity)-
717 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_M;-
718 if (hasCompose && !hasMask && useGlobalOpacity)-
719 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_CO;-
720 if (hasCompose && !hasMask && !useGlobalOpacity)-
721 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_C;-
722 if (!hasCompose && !hasMask && useGlobalOpacity)-
723 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader_O;-
724 if (!hasCompose && !hasMask && !useGlobalOpacity)-
725 requiredProgram.mainFragShader = QGLEngineSharedShaders::MainFragmentShader;-
726 }-
727-
728 if (hasMask) {-
729 if (maskType == PixelMask) {-
730 requiredProgram.maskFragShader = QGLEngineSharedShaders::MaskFragmentShader;-
731 texCoords = true;-
732 } else if (maskType == SubPixelMaskPass1) {-
733 requiredProgram.maskFragShader = QGLEngineSharedShaders::RgbMaskFragmentShaderPass1;-
734 texCoords = true;-
735 } else if (maskType == SubPixelMaskPass2) {-
736 requiredProgram.maskFragShader = QGLEngineSharedShaders::RgbMaskFragmentShaderPass2;-
737 texCoords = true;-
738 } else if (maskType == SubPixelWithGammaMask) {-
739 requiredProgram.maskFragShader = QGLEngineSharedShaders::RgbMaskWithGammaFragmentShader;-
740 texCoords = true;-
741 } else {-
742 QMessageLogger(__FILE__, 778787, __PRETTY_FUNCTION__).critical("QGLEngineShaderManager::useCorrectShaderProg() - Unknown mask type");-
743 }-
744 } else {-
745 requiredProgram.maskFragShader = QGLEngineSharedShaders::NoMaskFragmentShader;-
746 }-
747-
748 if (hasCompose) {-
749 switch (compositionMode) {-
750 case QPainter::CompositionMode_Multiply:-
751 requiredProgram.compositionFragShader = QGLEngineSharedShaders::MultiplyCompositionModeFragmentShader;-
752 break;-
753 case QPainter::CompositionMode_Screen:-
754 requiredProgram.compositionFragShader = QGLEngineSharedShaders::ScreenCompositionModeFragmentShader;-
755 break;-
756 case QPainter::CompositionMode_Overlay:-
757 requiredProgram.compositionFragShader = QGLEngineSharedShaders::OverlayCompositionModeFragmentShader;-
758 break;-
759 case QPainter::CompositionMode_Darken:-
760 requiredProgram.compositionFragShader = QGLEngineSharedShaders::DarkenCompositionModeFragmentShader;-
761 break;-
762 case QPainter::CompositionMode_Lighten:-
763 requiredProgram.compositionFragShader = QGLEngineSharedShaders::LightenCompositionModeFragmentShader;-
764 break;-
765 case QPainter::CompositionMode_ColorDodge:-
766 requiredProgram.compositionFragShader = QGLEngineSharedShaders::ColorDodgeCompositionModeFragmentShader;-
767 break;-
768 case QPainter::CompositionMode_ColorBurn:-
769 requiredProgram.compositionFragShader = QGLEngineSharedShaders::ColorBurnCompositionModeFragmentShader;-
770 break;-
771 case QPainter::CompositionMode_HardLight:-
772 requiredProgram.compositionFragShader = QGLEngineSharedShaders::HardLightCompositionModeFragmentShader;-
773 break;-
774 case QPainter::CompositionMode_SoftLight:-
775 requiredProgram.compositionFragShader = QGLEngineSharedShaders::SoftLightCompositionModeFragmentShader;-
776 break;-
777 case QPainter::CompositionMode_Difference:-
778 requiredProgram.compositionFragShader = QGLEngineSharedShaders::DifferenceCompositionModeFragmentShader;-
779 break;-
780 case QPainter::CompositionMode_Exclusion:-
781 requiredProgram.compositionFragShader = QGLEngineSharedShaders::ExclusionCompositionModeFragmentShader;-
782 break;-
783 default:-
784 QMessageLogger(__FILE__, 820829, __PRETTY_FUNCTION__).warning("QGLEngineShaderManager::useCorrectShaderProg() - Unsupported composition mode");-
785 }-
786 } else {-
787 requiredProgram.compositionFragShader = QGLEngineSharedShaders::NoCompositionModeFragmentShader;-
788 }-
789-
790-
791 if (opacityMode == AttributeOpacity) {-
792 ((!(texCoords)) ? qt_assert("texCoords",__FILE__,828837) : qt_noop());-
793 requiredProgram.mainVertexShader = QGLEngineSharedShaders::MainWithTexCoordsAndOpacityVertexShader;-
794 } else if (texCoords) {-
795 requiredProgram.mainVertexShader = QGLEngineSharedShaders::MainWithTexCoordsVertexShader;-
796 } else {-
797 requiredProgram.mainVertexShader = QGLEngineSharedShaders::MainVertexShader;-
798 }-
799 requiredProgram.useTextureCoords = texCoords;-
800 requiredProgram.useOpacityAttribute = (opacityMode == AttributeOpacity);-
801 if (complexGeometry && srcPixelType == Qt::SolidPattern) {-
802 requiredProgram.positionVertexShader = QGLEngineSharedShaders::ComplexGeometryPositionOnlyVertexShader;-
803 requiredProgram.usePmvMatrixAttribute = false;-
804 } else {-
805 requiredProgram.usePmvMatrixAttribute = true;-
806-
807-
808-
809 complexGeometry = false;-
810 }-
811-
812-
813 currentShaderProg = sharedShaders->findProgramInCache(requiredProgram);-
814-
815 if (currentShaderProg && useCustomSrc) {-
816 customSrcStage->setUniforms(currentShaderProg->program);-
817 }-
818-
819-
820-
821 QGLContextPrivate* ctx_d = ctx->d_func();-
822 ctx_d->setVertexAttribArrayEnabled(QT_VERTEX_COORDS_ATTR, true);-
823 ctx_d->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, currentShaderProg && currentShaderProg->useTextureCoords);-
824 ctx_d->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, currentShaderProg && currentShaderProg->useOpacityAttribute);-
825-
826 shaderProgNeedsChanging = false;-
827 return true;-
828}-
829-
830-
Switch to Source codePreprocessed file

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