@@ -12,6 +12,8 @@ using namespace scratchcpprender;
1212
1313using ConverterFunc = float (*)(float );
1414
15+ static const double pi = std::acos(-1 ); // TODO: Use std::numbers::pi in C++20
16+
1517static float wrapClamp (float n, float min, float max)
1618{
1719 // TODO: Move this to a separate class
@@ -36,25 +38,33 @@ static const std::unordered_map<ShaderManager::Effect, const char *> EFFECT_TO_N
3638 { ShaderManager::Effect::Color, " color" },
3739 { ShaderManager::Effect::Brightness, " brightness" },
3840 { ShaderManager::Effect::Ghost, " ghost" },
39- { ShaderManager::Effect::Fisheye, " fisheye" }
41+ { ShaderManager::Effect::Fisheye, " fisheye" },
42+ { ShaderManager::Effect::Whirl, " whirl" }
4043};
4144
4245static const std::unordered_map<ShaderManager::Effect, const char *> EFFECT_UNIFORM_NAME = {
4346 { ShaderManager::Effect::Color, " u_color" },
4447 { ShaderManager::Effect::Brightness, " u_brightness" },
4548 { ShaderManager::Effect::Ghost, " u_ghost" },
46- { ShaderManager::Effect::Fisheye, " u_fisheye" }
49+ { ShaderManager::Effect::Fisheye, " u_fisheye" },
50+ { ShaderManager::Effect::Whirl, " u_whirl" }
4751};
4852
4953static const std::unordered_map<ShaderManager::Effect, ConverterFunc> EFFECT_CONVERTER = {
5054 { ShaderManager::Effect::Color, [](float x) { return wrapClamp (x / 200 .0f , 0 .0f , 1 .0f ); } },
5155 { ShaderManager::Effect::Brightness, [](float x) { return std::clamp (x, -100 .0f , 100 .0f ) / 100 .0f ; } },
5256 { ShaderManager::Effect::Ghost, [](float x) { return 1 - std::clamp (x, 0 .0f , 100 .0f ) / 100 .0f ; } },
53- { ShaderManager::Effect::Fisheye, [](float x) { return std::max (0 .0f , (x + 100 .0f ) / 100 .0f ); } }
57+ { ShaderManager::Effect::Fisheye, [](float x) { return std::max (0 .0f , (x + 100 .0f ) / 100 .0f ); } },
58+ { ShaderManager::Effect::Whirl, [](float x) { return x * (float )pi / 180 .0f ; } }
5459};
5560
56- static const std::unordered_map<ShaderManager::Effect, bool >
57- EFFECT_SHAPE_CHANGES = { { ShaderManager::Effect::Color, false }, { ShaderManager::Effect::Brightness, false }, { ShaderManager::Effect::Ghost, false }, { ShaderManager::Effect::Fisheye, true } };
61+ static const std::unordered_map<ShaderManager::Effect, bool > EFFECT_SHAPE_CHANGES = {
62+ { ShaderManager::Effect::Color, false },
63+ { ShaderManager::Effect::Brightness, false },
64+ { ShaderManager::Effect::Ghost, false },
65+ { ShaderManager::Effect::Fisheye, true },
66+ { ShaderManager::Effect::Whirl, true }
67+ };
5868
5969Q_GLOBAL_STATIC (ShaderManager, globalInstance)
6070
0 commit comments