- switch (effect) {
- case EFFECT_GAMMA_EXPANSION:
- return new GammaExpansionEffect();
- case EFFECT_GAMMA_COMPRESSION:
- return new GammaCompressionEffect();
- case EFFECT_COLOR_SPACE_CONVERSION:
- return new ColorSpaceConversionEffect();
- case EFFECT_SANDBOX:
- return new SandboxEffect();
- case EFFECT_LIFT_GAMMA_GAIN:
- return new LiftGammaGainEffect();
- case EFFECT_SATURATION:
- return new SaturationEffect();
- case EFFECT_MIRROR:
- return new MirrorEffect();
- case EFFECT_VIGNETTE:
- return new VignetteEffect();
- case EFFECT_BLUR:
- return new BlurEffect();
- case EFFECT_DIFFUSION:
- return new DiffusionEffect();
- case EFFECT_GLOW:
- return new GlowEffect();
- case EFFECT_MIX:
- return new MixEffect();
+ assert(output_gamma_curve.count(effect) != 0);
+ assert(output_gamma_curve[effect] == GAMMA_sRGB);
+ if (effect->num_inputs() == 0) {
+ effect->set_int("use_srgb_texture_format", 1);
+ } else {
+ assert(incoming_links.count(effect) == 1);
+ std::vector<Effect *> deps = incoming_links[effect];
+ assert(effect->num_inputs() == deps.size());
+ for (unsigned i = 0; i < deps.size(); ++i) {
+ set_use_srgb_texture_format(deps[i]);
+ assert(output_gamma_curve[deps[i]] == GAMMA_LINEAR);
+ }