1212using namespace scratchcpprender ;
1313using namespace libscratchcpp ;
1414
15- static const QString VERTEX_SHADER_SRC = " :/qt/qml/ScratchCPP/Render/shaders/sprite.vert" ;
16- static const QString FRAGMENT_SHADER_SRC = " :/qt/qml/ScratchCPP/Render/shaders/sprite.frag" ;
17-
1815class ShaderManagerTest : public testing ::Test
1916{
2017 public:
@@ -27,16 +24,6 @@ class ShaderManagerTest : public testing::Test
2724 m_surface.create ();
2825 Q_ASSERT (m_surface.isValid ());
2926 m_context.makeCurrent (&m_surface);
30-
31- QFile vertSource (VERTEX_SHADER_SRC);
32- vertSource.open (QFile::ReadOnly);
33- m_vertexShader = vertSource.readAll ();
34- ASSERT_FALSE (m_vertexShader.isEmpty ());
35-
36- QFile fragSource (FRAGMENT_SHADER_SRC);
37- fragSource.open (QFile::ReadOnly);
38- m_fragmentShader = fragSource.readAll ();
39- ASSERT_FALSE (m_fragmentShader.isEmpty ());
4027 }
4128
4229 void TearDown () override
@@ -47,8 +34,6 @@ class ShaderManagerTest : public testing::Test
4734
4835 QOpenGLContext m_context;
4936 QOffscreenSurface m_surface;
50- QByteArray m_vertexShader;
51- QByteArray m_fragmentShader;
5237};
5338
5439TEST_F (ShaderManagerTest, RegisteredEffects)
@@ -110,27 +95,25 @@ TEST_F(ShaderManagerTest, SetUniforms)
11095 QOpenGLFunctions glF (&m_context);
11196 glF.initializeOpenGLFunctions ();
11297 ShaderManager manager;
113- QOpenGLShaderProgram program;
114- program.addShaderFromSourceCode (QOpenGLShader::Vertex, " #version 330 core\n " + m_vertexShader);
115- program.addShaderFromSourceCode (QOpenGLShader::Fragment, " #version 330\n #define ENABLE_color\n #define ENABLE_ghost\n " + m_fragmentShader);
11698
11799 std::unordered_map<ShaderManager::Effect, double > effects = { { ShaderManager::Effect::Color, 64.9 }, { ShaderManager::Effect::Ghost, 12.5 } };
118- program.bind ();
119- manager.setUniforms (&program, 4 , effects);
100+ QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
101+ program->bind ();
102+ manager.setUniforms (program, 4 , effects);
120103
121104 GLint texUnit = -1 ;
122- glF.glGetUniformiv (program. programId (), program. uniformLocation (" u_skin" ), &texUnit);
105+ glF.glGetUniformiv (program-> programId (), program-> uniformLocation (" u_skin" ), &texUnit);
123106 ASSERT_EQ (texUnit, 4 );
124107
125108 GLfloat value = 0 .0f ;
126- glF.glGetUniformfv (program. programId (), program. uniformLocation (" u_color" ), &value);
109+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (" u_color" ), &value);
127110 ASSERT_NE (value, 0 .0f );
128111
129112 value = 0 .0f ;
130- glF.glGetUniformfv (program. programId (), program. uniformLocation (" u_ghost" ), &value);
113+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (" u_ghost" ), &value);
131114 ASSERT_NE (value, 0 .0f );
132115
133- program. release ();
116+ program-> release ();
134117}
135118
136119TEST_F (ShaderManagerTest, ColorEffectValue)
@@ -144,44 +127,44 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
144127 QOpenGLFunctions glF (&m_context);
145128 glF.initializeOpenGLFunctions ();
146129 ShaderManager manager;
147- QOpenGLShaderProgram program;
148- program.addShaderFromSourceCode (QOpenGLShader::Vertex, " #version 330 core\n " + m_vertexShader);
149- program.addShaderFromSourceCode (QOpenGLShader::Fragment, " #version 330\n #define ENABLE_" + effectName + " \n " + m_fragmentShader);
150130
151131 // In range
152132 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 64.9 } };
153- program.bind ();
154- manager.setUniforms (&program, 0 , effects);
133+ QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
134+ program->bind ();
135+ manager.setUniforms (program, 0 , effects);
155136 manager.getUniformValuesForEffects (effects, values);
156137
157138 GLfloat value = 0 .0f ;
158- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
139+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
159140 ASSERT_EQ (value, 0 .3245f );
160141 ASSERT_EQ (values.at (effect), value);
161142
162143 // Below the minimum
163144 effects[effect] = -395.7 ;
164- program.bind ();
165- manager.setUniforms (&program, 0 , effects);
145+ program = manager.getShaderProgram (effects);
146+ program->bind ();
147+ manager.setUniforms (program, 0 , effects);
166148 manager.getUniformValuesForEffects (effects, values);
167149
168150 value = 0 .0f ;
169- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
151+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
170152 ASSERT_EQ (std::round (value * 100 .0f ) / 100 .0f , 0 .02f );
171153 ASSERT_EQ (values.at (effect), value);
172154
173155 // Above the maximum
174156 effects[effect] = 579.05 ;
175- program.bind ();
176- manager.setUniforms (&program, 0 , effects);
157+ program = manager.getShaderProgram (effects);
158+ program->bind ();
159+ manager.setUniforms (program, 0 , effects);
177160 manager.getUniformValuesForEffects (effects, values);
178161
179162 value = 0 .0f ;
180- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
163+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
181164 ASSERT_EQ (std::round (value * 100 .0f ) / 100 .0f , 0 .9f );
182165 ASSERT_EQ (values.at (effect), value);
183166
184- program. release ();
167+ program-> release ();
185168}
186169
187170TEST_F (ShaderManagerTest, BrightnessEffectValue)
@@ -195,44 +178,44 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
195178 QOpenGLFunctions glF (&m_context);
196179 glF.initializeOpenGLFunctions ();
197180 ShaderManager manager;
198- QOpenGLShaderProgram program;
199- program.addShaderFromSourceCode (QOpenGLShader::Vertex, " #version 330 core\n " + m_vertexShader);
200- program.addShaderFromSourceCode (QOpenGLShader::Fragment, " #version 330\n #define ENABLE_" + effectName + " \n " + m_fragmentShader);
201181
202182 // In range
203183 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 4.6 } };
204- program.bind ();
205- manager.setUniforms (&program, 0 , effects);
184+ QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
185+ program->bind ();
186+ manager.setUniforms (program, 0 , effects);
206187 manager.getUniformValuesForEffects (effects, values);
207188
208189 GLfloat value = 0 .0f ;
209- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
190+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
210191 ASSERT_EQ (value, 0 .046f );
211192 ASSERT_EQ (values.at (effect), value);
212193
213194 // Below the minimum
214195 effects[effect] = -102.9 ;
215- program.bind ();
216- manager.setUniforms (&program, 0 , effects);
196+ program = manager.getShaderProgram (effects);
197+ program->bind ();
198+ manager.setUniforms (program, 0 , effects);
217199 manager.getUniformValuesForEffects (effects, values);
218200
219201 value = 0 .0f ;
220- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
202+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
221203 ASSERT_EQ (value, -1 .0f );
222204 ASSERT_EQ (values.at (effect), value);
223205
224206 // Above the maximum
225207 effects[effect] = 353.2 ;
226- program.bind ();
227- manager.setUniforms (&program, 0 , effects);
208+ program = manager.getShaderProgram (effects);
209+ program->bind ();
210+ manager.setUniforms (program, 0 , effects);
228211 manager.getUniformValuesForEffects (effects, values);
229212
230213 value = 0 .0f ;
231- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
214+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
232215 ASSERT_EQ (value, 1 .0f );
233216 ASSERT_EQ (values.at (effect), value);
234217
235- program. release ();
218+ program-> release ();
236219}
237220
238221TEST_F (ShaderManagerTest, GhostEffectValue)
@@ -246,42 +229,40 @@ TEST_F(ShaderManagerTest, GhostEffectValue)
246229 QOpenGLFunctions glF (&m_context);
247230 glF.initializeOpenGLFunctions ();
248231 ShaderManager manager;
249- QOpenGLShaderProgram program;
250- program.addShaderFromSourceCode (QOpenGLShader::Vertex, " #version 330 core\n " + m_vertexShader);
251- program.addShaderFromSourceCode (QOpenGLShader::Fragment, " #version 330\n #define ENABLE_" + effectName + " \n " + m_fragmentShader);
252232
253233 // In range
254234 std::unordered_map<ShaderManager::Effect, double > effects = { { effect, 58.5 } };
255- program.bind ();
256- manager.setUniforms (&program, 0 , effects);
235+ QOpenGLShaderProgram *program = manager.getShaderProgram (effects);
236+ program->bind ();
237+ manager.setUniforms (program, 0 , effects);
257238 manager.getUniformValuesForEffects (effects, values);
258239
259240 GLfloat value = 0 .0f ;
260- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
241+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
261242 ASSERT_EQ (std::round (value * 1000 .0f ) / 1000 .0f , 0 .415f );
262243 ASSERT_EQ (values.at (effect), value);
263244
264245 // Below the minimum
265246 effects[effect] = -20.8 ;
266- program. bind ();
267- manager.setUniforms (& program, 0 , effects);
247+ program-> bind ();
248+ manager.setUniforms (program, 0 , effects);
268249 manager.getUniformValuesForEffects (effects, values);
269250
270251 value = 0 .0f ;
271- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
252+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
272253 ASSERT_EQ (value, 1 .0f );
273254 ASSERT_EQ (values.at (effect), value);
274255
275256 // Above the maximum
276257 effects[effect] = 248.2 ;
277- program. bind ();
278- manager.setUniforms (& program, 0 , effects);
258+ program-> bind ();
259+ manager.setUniforms (program, 0 , effects);
279260 manager.getUniformValuesForEffects (effects, values);
280261
281262 value = 0 .0f ;
282- glF.glGetUniformfv (program. programId (), program. uniformLocation (uniformName), &value);
263+ glF.glGetUniformfv (program-> programId (), program-> uniformLocation (uniformName), &value);
283264 ASSERT_EQ (value, 0 .0f );
284265 ASSERT_EQ (values.at (effect), value);
285266
286- program. release ();
267+ program-> release ();
287268}
0 commit comments