Skip to content

Commit 0a86a3f

Browse files
committed
Add skin size uniform
1 parent ca7ab44 commit 0a86a3f

File tree

5 files changed

+25
-20
lines changed

5 files changed

+25
-20
lines changed

src/penlayer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ void PenLayer::stamp(IRenderedTarget *target)
303303
m_glF->glBindVertexArray(m_vao);
304304
m_glF->glActiveTexture(GL_TEXTURE0);
305305
m_glF->glBindTexture(GL_TEXTURE_2D, texture.handle());
306-
shaderManager->setUniforms(shaderProgram, 0, effects); // set texture and effect uniforms
306+
shaderManager->setUniforms(shaderProgram, 0, texture.size(), effects); // set texture and effect uniforms
307307
m_glF->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
308308

309309
m_painter->endFrame();

src/shadermanager.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ static const QString SHADER_PREFIX = "#version 140\n";
3333
#endif
3434

3535
static const char *TEXTURE_UNIT_UNIFORM = "u_skin";
36+
static const char *SKIN_SIZE_UNIFORM = "u_skinSize";
3637

3738
static const std::unordered_map<ShaderManager::Effect, const char *> EFFECT_TO_NAME = {
3839
{ ShaderManager::Effect::Color, "color" },
@@ -146,11 +147,14 @@ void ShaderManager::getUniformValuesForEffects(const std::unordered_map<Effect,
146147
}
147148
}
148149

149-
void ShaderManager::setUniforms(QOpenGLShaderProgram *program, int textureUnit, const std::unordered_map<Effect, double> &effectValues)
150+
void ShaderManager::setUniforms(QOpenGLShaderProgram *program, int textureUnit, const QSize skinSize, const std::unordered_map<Effect, double> &effectValues)
150151
{
151152
// Set the texture unit
152153
program->setUniformValue(TEXTURE_UNIT_UNIFORM, textureUnit);
153154

155+
// Set skin size
156+
program->setUniformValue(SKIN_SIZE_UNIFORM, QVector2D(skinSize.width(), skinSize.height()));
157+
154158
// Set uniform values
155159
std::unordered_map<Effect, float> values;
156160
getUniformValuesForEffects(effectValues, values);

src/shadermanager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ class ShaderManager : public QObject
2020
Brightness = 1 << 1,
2121
Ghost = 1 << 2,
2222
Fisheye = 1 << 3,
23-
Whirl = 1 << 4
23+
Whirl = 1 << 4,
24+
Pixelate = 1 << 5
2425
};
2526

2627
explicit ShaderManager(QObject *parent = nullptr);
@@ -29,7 +30,7 @@ class ShaderManager : public QObject
2930

3031
QOpenGLShaderProgram *getShaderProgram(const std::unordered_map<Effect, double> &effectValues);
3132
static void getUniformValuesForEffects(const std::unordered_map<Effect, double> &effectValues, std::unordered_map<Effect, float> &dst);
32-
void setUniforms(QOpenGLShaderProgram *program, int textureUnit, const std::unordered_map<Effect, double> &effectValues);
33+
void setUniforms(QOpenGLShaderProgram *program, int textureUnit, const QSize skinSize, const std::unordered_map<Effect, double> &effectValues);
3334

3435
private:
3536
struct Registrar

src/targetpainter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ void TargetPainter::paint(QNanoPainter *painter)
9494
glF.glBindVertexArray(VAO);
9595
glF.glActiveTexture(GL_TEXTURE0);
9696
glF.glBindTexture(GL_TEXTURE_2D, texture.handle());
97-
shaderManager->setUniforms(shaderProgram, 0, effects); // set texture and effect uniforms
97+
shaderManager->setUniforms(shaderProgram, 0, texture.size(), effects); // set texture and effect uniforms
9898
glF.glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
9999

100100
// Process the resulting texture

test/shadermanager/shadermanager_test.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ TEST_F(ShaderManagerTest, SetUniforms)
9999
std::unordered_map<ShaderManager::Effect, double> effects = { { ShaderManager::Effect::Color, 64.9 }, { ShaderManager::Effect::Ghost, 12.5 } };
100100
QOpenGLShaderProgram *program = manager.getShaderProgram(effects);
101101
program->bind();
102-
manager.setUniforms(program, 4, effects);
102+
manager.setUniforms(program, 4, QSize(), effects);
103103

104104
GLint texUnit = -1;
105105
glF.glGetUniformiv(program->programId(), program->uniformLocation("u_skin"), &texUnit);
@@ -132,7 +132,7 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
132132
std::unordered_map<ShaderManager::Effect, double> effects = { { effect, 64.9 } };
133133
QOpenGLShaderProgram *program = manager.getShaderProgram(effects);
134134
program->bind();
135-
manager.setUniforms(program, 0, effects);
135+
manager.setUniforms(program, 0, QSize(), effects);
136136
manager.getUniformValuesForEffects(effects, values);
137137

138138
GLfloat value = 0.0f;
@@ -144,7 +144,7 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
144144
effects[effect] = -395.7;
145145
program = manager.getShaderProgram(effects);
146146
program->bind();
147-
manager.setUniforms(program, 0, effects);
147+
manager.setUniforms(program, 0, QSize(), effects);
148148
manager.getUniformValuesForEffects(effects, values);
149149

150150
value = 0.0f;
@@ -156,7 +156,7 @@ TEST_F(ShaderManagerTest, ColorEffectValue)
156156
effects[effect] = 579.05;
157157
program = manager.getShaderProgram(effects);
158158
program->bind();
159-
manager.setUniforms(program, 0, effects);
159+
manager.setUniforms(program, 0, QSize(), effects);
160160
manager.getUniformValuesForEffects(effects, values);
161161

162162
value = 0.0f;
@@ -183,7 +183,7 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
183183
std::unordered_map<ShaderManager::Effect, double> effects = { { effect, 4.6 } };
184184
QOpenGLShaderProgram *program = manager.getShaderProgram(effects);
185185
program->bind();
186-
manager.setUniforms(program, 0, effects);
186+
manager.setUniforms(program, 0, QSize(), effects);
187187
manager.getUniformValuesForEffects(effects, values);
188188

189189
GLfloat value = 0.0f;
@@ -195,7 +195,7 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
195195
effects[effect] = -102.9;
196196
program = manager.getShaderProgram(effects);
197197
program->bind();
198-
manager.setUniforms(program, 0, effects);
198+
manager.setUniforms(program, 0, QSize(), effects);
199199
manager.getUniformValuesForEffects(effects, values);
200200

201201
value = 0.0f;
@@ -207,7 +207,7 @@ TEST_F(ShaderManagerTest, BrightnessEffectValue)
207207
effects[effect] = 353.2;
208208
program = manager.getShaderProgram(effects);
209209
program->bind();
210-
manager.setUniforms(program, 0, effects);
210+
manager.setUniforms(program, 0, QSize(), effects);
211211
manager.getUniformValuesForEffects(effects, values);
212212

213213
value = 0.0f;
@@ -234,7 +234,7 @@ TEST_F(ShaderManagerTest, GhostEffectValue)
234234
std::unordered_map<ShaderManager::Effect, double> effects = { { effect, 58.5 } };
235235
QOpenGLShaderProgram *program = manager.getShaderProgram(effects);
236236
program->bind();
237-
manager.setUniforms(program, 0, effects);
237+
manager.setUniforms(program, 0, QSize(), effects);
238238
manager.getUniformValuesForEffects(effects, values);
239239

240240
GLfloat value = 0.0f;
@@ -245,7 +245,7 @@ TEST_F(ShaderManagerTest, GhostEffectValue)
245245
// Below the minimum
246246
effects[effect] = -20.8;
247247
program->bind();
248-
manager.setUniforms(program, 0, effects);
248+
manager.setUniforms(program, 0, QSize(), effects);
249249
manager.getUniformValuesForEffects(effects, values);
250250

251251
value = 0.0f;
@@ -256,7 +256,7 @@ TEST_F(ShaderManagerTest, GhostEffectValue)
256256
// Above the maximum
257257
effects[effect] = 248.2;
258258
program->bind();
259-
manager.setUniforms(program, 0, effects);
259+
manager.setUniforms(program, 0, QSize(), effects);
260260
manager.getUniformValuesForEffects(effects, values);
261261

262262
value = 0.0f;
@@ -283,7 +283,7 @@ TEST_F(ShaderManagerTest, FisheyeEffectValue)
283283
std::unordered_map<ShaderManager::Effect, double> effects = { { effect, 58.5 } };
284284
QOpenGLShaderProgram *program = manager.getShaderProgram(effects);
285285
program->bind();
286-
manager.setUniforms(program, 0, effects);
286+
manager.setUniforms(program, 0, QSize(), effects);
287287
manager.getUniformValuesForEffects(effects, values);
288288

289289
GLfloat value = 0.0f;
@@ -293,7 +293,7 @@ TEST_F(ShaderManagerTest, FisheyeEffectValue)
293293

294294
effects[effect] = -20.8;
295295
program->bind();
296-
manager.setUniforms(program, 0, effects);
296+
manager.setUniforms(program, 0, QSize(), effects);
297297
manager.getUniformValuesForEffects(effects, values);
298298

299299
value = 0.0f;
@@ -304,7 +304,7 @@ TEST_F(ShaderManagerTest, FisheyeEffectValue)
304304
// Below the minimum
305305
effects[effect] = -101;
306306
program->bind();
307-
manager.setUniforms(program, 0, effects);
307+
manager.setUniforms(program, 0, QSize(), effects);
308308
manager.getUniformValuesForEffects(effects, values);
309309

310310
value = 0.0f;
@@ -331,7 +331,7 @@ TEST_F(ShaderManagerTest, WhirlEffectValue)
331331
std::unordered_map<ShaderManager::Effect, double> effects = { { effect, 58.5 } };
332332
QOpenGLShaderProgram *program = manager.getShaderProgram(effects);
333333
program->bind();
334-
manager.setUniforms(program, 0, effects);
334+
manager.setUniforms(program, 0, QSize(), effects);
335335
manager.getUniformValuesForEffects(effects, values);
336336

337337
GLfloat value = 0.0f;
@@ -341,7 +341,7 @@ TEST_F(ShaderManagerTest, WhirlEffectValue)
341341

342342
effects[effect] = -20.8;
343343
program->bind();
344-
manager.setUniforms(program, 0, effects);
344+
manager.setUniforms(program, 0, QSize(), effects);
345345
manager.getUniformValuesForEffects(effects, values);
346346

347347
value = 0.0f;

0 commit comments

Comments
 (0)