66#include < scratchcpp/scratchconfiguration.h>
77#include < shadermanager.h>
88#include < graphicseffect.h>
9+ #include < renderedtargetmock.h>
910
1011#include " ../common.h"
1112
@@ -34,6 +35,7 @@ class ShaderManagerTest : public testing::Test
3435
3536 QOpenGLContext m_context;
3637 QOffscreenSurface m_surface;
38+ RenderedTargetMock m_target;
3739};
3840
3941TEST_F (ShaderManagerTest, RegisteredEffects)
@@ -71,7 +73,7 @@ TEST_F(ShaderManagerTest, GetShaderProgram)
7173 ShaderManager manager;
7274 const std::unordered_map<ShaderManager::Effect, double > effects = { { ShaderManager::Effect::Color, 64.9 }, { ShaderManager::Effect::Ghost, 12.5 } };
7375
74- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
76+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
7577 ASSERT_EQ (program->parent (), &manager);
7678 ASSERT_TRUE (program->isLinked ());
7779
@@ -83,21 +85,36 @@ TEST_F(ShaderManagerTest, GetShaderProgram)
8385 ASSERT_EQ (frag->shaderType (), QOpenGLShader::Fragment);
8486
8587 // Test shader program cache
86- program = manager.getShaderProgram (effects);
88+ program = manager.getShaderProgram (&m_target, effects);
8789 ASSERT_EQ (program, program);
8890
89- program = manager.getShaderProgram (effects);
91+ program = manager.getShaderProgram (&m_target, effects);
9092 ASSERT_EQ (program, program);
9193}
9294
95+ TEST_F (ShaderManagerTest, GetShaderProgram_AnotherTarget)
96+ {
97+ ShaderManager manager;
98+ const std::unordered_map<ShaderManager::Effect, double > effects = { { ShaderManager::Effect::Color, 64.9 }, { ShaderManager::Effect::Ghost, 12.5 } };
99+
100+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
101+
102+ RenderedTargetMock anotherTarget;
103+ QOpenGLShaderProgram *anotherProgram = manager.getShaderProgram (&anotherTarget, effects);
104+ ASSERT_NE (anotherProgram, nullptr );
105+ ASSERT_NE (anotherProgram, program);
106+
107+ ASSERT_EQ (manager.getShaderProgram (&anotherTarget, effects), anotherProgram);
108+ }
109+
93110TEST_F (ShaderManagerTest, SetUniforms)
94111{
95112 QOpenGLFunctions glF (&m_context);
96113 glF.initializeOpenGLFunctions ();
97114 ShaderManager manager;
98115
99116 std::unordered_map<ShaderManager::Effect, double > effects = { { ShaderManager::Effect::Color, 64.9 }, { ShaderManager::Effect::Ghost, 12.5 } };
100- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
117+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
101118 program->bind ();
102119 manager.setUniforms (program, 4 , QSize (), effects);
103120
@@ -130,7 +147,7 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
130147
131148 // In range
132149 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 64.9 } };
133- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
150+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
134151 program->bind ();
135152 manager.setUniforms (program, 0 , QSize (), effects);
136153 manager.getUniformValuesForEffects (effects, values);
@@ -142,7 +159,7 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
142159
143160 // Below the minimum
144161 effects[effect] = -395.7 ;
145- program = manager.getShaderProgram (effects);
162+ program = manager.getShaderProgram (&m_target, effects);
146163 program->bind ();
147164 manager.setUniforms (program, 0 , QSize (), effects);
148165 manager.getUniformValuesForEffects (effects, values);
@@ -154,7 +171,7 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
154171
155172 // Above the maximum
156173 effects[effect] = 579.05 ;
157- program = manager.getShaderProgram (effects);
174+ program = manager.getShaderProgram (&m_target, effects);
158175 program->bind ();
159176 manager.setUniforms (program, 0 , QSize (), effects);
160177 manager.getUniformValuesForEffects (effects, values);
@@ -181,7 +198,7 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
181198
182199 // In range
183200 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 4.6 } };
184- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
201+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
185202 program->bind ();
186203 manager.setUniforms (program, 0 , QSize (), effects);
187204 manager.getUniformValuesForEffects (effects, values);
@@ -193,7 +210,7 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
193210
194211 // Below the minimum
195212 effects[effect] = -102.9 ;
196- program = manager.getShaderProgram (effects);
213+ program = manager.getShaderProgram (&m_target, effects);
197214 program->bind ();
198215 manager.setUniforms (program, 0 , QSize (), effects);
199216 manager.getUniformValuesForEffects (effects, values);
@@ -205,7 +222,7 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
205222
206223 // Above the maximum
207224 effects[effect] = 353.2 ;
208- program = manager.getShaderProgram (effects);
225+ program = manager.getShaderProgram (&m_target, effects);
209226 program->bind ();
210227 manager.setUniforms (program, 0 , QSize (), effects);
211228 manager.getUniformValuesForEffects (effects, values);
@@ -232,7 +249,7 @@ TEST_F(ShaderManagerTest, GhostEffectValue)
232249
233250 // In range
234251 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 58.5 } };
235- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
252+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
236253 program->bind ();
237254 manager.setUniforms (program, 0 , QSize (), effects);
238255 manager.getUniformValuesForEffects (effects, values);
@@ -281,7 +298,7 @@ TEST_F(ShaderManagerTest, FisheyeEffectValue)
281298
282299 // In range
283300 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 58.5 } };
284- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
301+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
285302 program->bind ();
286303 manager.setUniforms (program, 0 , QSize (), effects);
287304 manager.getUniformValuesForEffects (effects, values);
@@ -329,7 +346,7 @@ TEST_F(ShaderManagerTest, WhirlEffectValue)
329346
330347 // In range
331348 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 58.5 } };
332- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
349+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
333350 program->bind ();
334351 manager.setUniforms (program, 0 , QSize (), effects);
335352 manager.getUniformValuesForEffects (effects, values);
@@ -366,7 +383,7 @@ TEST_F(ShaderManagerTest, PixelateEffectValue)
366383
367384 // In range
368385 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 58.5 } };
369- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
386+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
370387 program->bind ();
371388 manager.setUniforms (program, 0 , QSize (), effects);
372389 manager.getUniformValuesForEffects (effects, values);
@@ -403,7 +420,7 @@ TEST_F(ShaderManagerTest, MosaicEffectValue)
403420
404421 // In range
405422 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 58.5 } };
406- QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
423+ QOpenGLShaderProgram *program = manager.getShaderProgram (&m_target, effects);
407424 program->bind ();
408425 manager.setUniforms (program, 0 , QSize (), effects);
409426 manager.getUniformValuesForEffects (effects, values);
0 commit comments