Skip to content

Commit e691f76

Browse files
committed
Improve ShaderManager test
1 parent b3da8fa commit e691f76

File tree

1 file changed

+44
-63
lines changed

1 file changed

+44
-63
lines changed

test/shadermanager/shadermanager_test.cpp

Lines changed: 44 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
using namespace scratchcpprender;
1313
using 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-
1815
class 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

5439
TEST_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

136119
TEST_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

187170
TEST_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

238221
TEST_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

Comments
 (0)