Skip to content

Commit b855d00

Browse files
committed
ShaderManager: Add effects() method
1 parent 0e43c14 commit b855d00

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

src/shadermanager.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ static const std::unordered_map<ShaderManager::Effect, bool> EFFECT_SHAPE_CHANGE
6060
{ ShaderManager::Effect::Whirl, true }, { ShaderManager::Effect::Pixelate, true }, { ShaderManager::Effect::Mosaic, true }
6161
};
6262

63+
std::unordered_set<ShaderManager::Effect> ShaderManager::m_effects; // populated by effects()
64+
6365
Q_GLOBAL_STATIC(ShaderManager, globalInstance)
6466

6567
ShaderManager::Registrar ShaderManager::m_registrar;
@@ -156,6 +158,16 @@ void ShaderManager::setUniforms(QOpenGLShaderProgram *program, int textureUnit,
156158
program->setUniformValue(EFFECT_UNIFORM_NAME.at(effect), value);
157159
}
158160

161+
const std::unordered_set<ShaderManager::Effect> &ShaderManager::effects()
162+
{
163+
if (m_effects.empty()) {
164+
for (const auto &[effect, name] : EFFECT_TO_NAME)
165+
m_effects.insert(effect);
166+
}
167+
168+
return m_effects;
169+
}
170+
159171
bool ShaderManager::effectShapeChanges(Effect effect)
160172
{
161173
Q_ASSERT(EFFECT_SHAPE_CHANGES.find(effect) != EFFECT_SHAPE_CHANGES.cend());

src/shadermanager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <QObject>
66
#include <memory>
7+
#include <unordered_set>
78

89
class QOpenGLShaderProgram;
910
class QOpenGLShader;
@@ -34,6 +35,7 @@ class ShaderManager : public QObject
3435
static void getUniformValuesForEffects(const std::unordered_map<Effect, double> &effectValues, std::unordered_map<Effect, float> &dst);
3536
void setUniforms(QOpenGLShaderProgram *program, int textureUnit, const QSize skinSize, const std::unordered_map<Effect, double> &effectValues);
3637

38+
static const std::unordered_set<Effect> &effects();
3739
static bool effectShapeChanges(Effect effect);
3840

3941
private:
@@ -47,6 +49,7 @@ class ShaderManager : public QObject
4749
QOpenGLShaderProgram *createShaderProgram(const std::unordered_map<Effect, double> &effectValues);
4850

4951
static Registrar m_registrar;
52+
static std::unordered_set<Effect> m_effects;
5053

5154
QOpenGLShader *m_vertexShader = nullptr;
5255
std::unordered_map<int, QOpenGLShaderProgram *> m_shaderPrograms;

test/shadermanager/shadermanager_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,20 @@ TEST_F(ShaderManagerTest, MosaicEffectValue)
448448
program->release();
449449
}
450450

451+
TEST_F(ShaderManagerTest, Effects)
452+
{
453+
ASSERT_EQ(
454+
ShaderManager::effects(),
455+
std::unordered_set<ShaderManager::Effect>(
456+
{ ShaderManager::Effect::Color,
457+
ShaderManager::Effect::Brightness,
458+
ShaderManager::Effect::Ghost,
459+
ShaderManager::Effect::Fisheye,
460+
ShaderManager::Effect::Whirl,
461+
ShaderManager::Effect::Pixelate,
462+
ShaderManager::Effect::Mosaic }));
463+
}
464+
451465
TEST_F(ShaderManagerTest, EffectShapeChanges)
452466
{
453467
ASSERT_FALSE(ShaderManager::effectShapeChanges(ShaderManager::Effect::Color));

0 commit comments

Comments
 (0)