From: Steinar H. Gunderson Date: Thu, 4 Oct 2012 13:53:30 +0000 (+0200) Subject: Rename needs_many_samples() to needs_texture_bounce(), and update the comment. X-Git-Tag: 1.0~390 X-Git-Url: https://git.sesse.net/?p=movit;a=commitdiff_plain;h=f23c7768e6c13d6a719aaea89074d86b74148aeb Rename needs_many_samples() to needs_texture_bounce(), and update the comment. --- diff --git a/blur_effect.h b/blur_effect.h index 0c7dccc..3f86e17 100644 --- a/blur_effect.h +++ b/blur_effect.h @@ -24,7 +24,7 @@ public: assert(false); } - virtual bool needs_many_samples() const { return true; } + virtual bool needs_texture_bounce() const { return true; } virtual bool needs_mipmaps() const { return true; } virtual void add_self_to_effect_chain(std::vector *chain); virtual bool set_float(const std::string &key, float value); @@ -38,7 +38,7 @@ public: SingleBlurPassEffect(); std::string output_fragment_shader(); - virtual bool needs_many_samples() const { return true; } + virtual bool needs_texture_bounce() const { return true; } virtual bool needs_mipmaps() const { return true; } void set_uniforms(GLuint glsl_program_num, const std::string &prefix, unsigned *sampler_num); diff --git a/effect.h b/effect.h index f495867..4191d4d 100644 --- a/effect.h +++ b/effect.h @@ -49,7 +49,7 @@ public: // the pixels, e.g. mirror, won't need to care, and can set this // to false. If so, the input gamma will be undefined. // - // Also see the note on needs_many_samples(), below. + // Also see the note on needs_texture_bounce(), below. virtual bool needs_linear_light() const { return true; } // Whether this effect expects its input to be in the sRGB @@ -61,19 +61,29 @@ public: // Again, most effects will want this. virtual bool needs_srgb_primaries() const { return true; } - // Whether this effect expects to be sampling many times from - // its input. If this is true, the framework will not chain the + // Whether this effect expects its input to come directly from + // a texture. If this is true, the framework will not chain the // input from other effects, but will store the results of the // chain to a temporary (RGBA fp16) texture and let this effect // sample directly from that. // - // Note that if you do _not_ set this, and do not sample on - // whole pixels (ie. you request linear filtering), it is undefined - // whether that filtering happen in linear gamma or not. - // It _could_ be (for instance in the case where the input is sRGB - // and your GPU applies gamma expansion before filtering), but you - // have no such guarantee. For most uses, however, this will be fine. - virtual bool needs_many_samples() const { return false; } + // There are two good reasons why you might want to set this: + // + // 1. You are sampling more than once from the input, + // in which case computing all the previous steps might + // be more expensive than going to a memory intermediate. + // 2. You rely on previous effects, possibly including gamma + // expansion, to happen pre-filtering instead of post-filtering. + // (This is only relevant if you actually need the filtering; if + // you sample on whole input pixels only, it makes no difference.) + // + // Note that in some cases, you might get post-filtered gamma expansion + // even when setting this option. More specifically, if you are the + // first effect in the chain, and the GPU is doing sRGB gamma + // expansion, it is undefined (from OpenGL's side) whether expansion + // happens pre- or post-filtering. For most uses, however, + // either will be fine. + virtual bool needs_texture_bounce() const { return false; } // Whether this effect expects mipmaps or not. If you set this to // true, you will be sampling with bilinear filtering; if not, diff --git a/effect_chain.cpp b/effect_chain.cpp index e728963..fcf94f8 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -208,7 +208,7 @@ void EffectChain::finalize() // and of course at the end. unsigned start = 0; for (unsigned i = 0; i < effects.size(); ++i) { - if (effects[i]->needs_many_samples() && i != start) { + if (effects[i]->needs_texture_bounce() && i != start) { phases.push_back(compile_glsl_program(start, i)); start = i; } diff --git a/main.cpp b/main.cpp index abc0a38..b41c9ed 100644 --- a/main.cpp +++ b/main.cpp @@ -150,7 +150,7 @@ int main(int argc, char **argv) glPixelStorei(GL_PACK_ALIGNMENT, 1); unsigned img_w, img_h; - unsigned char *src_img = load_image("blg_wheels_woman_1.jpg", &img_w, &img_h); + unsigned char *src_img = load_image("test.jpg", &img_w, &img_h); EffectChain chain(WIDTH, HEIGHT);