X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=effect_chain.h;h=716a970a3ab59748e99d94da43b2a9239fdca871;hb=f909bfe0621e8c844695ef327b71457893633cae;hp=35931f8058fb1a7d763fdb7572ccd2f94bb4d945;hpb=7366e74b75fa1ac3267709c12417179819b86acb;p=movit diff --git a/effect_chain.h b/effect_chain.h index 35931f8..716a970 100644 --- a/effect_chain.h +++ b/effect_chain.h @@ -394,10 +394,15 @@ public: // except that it is more efficient if the last phase contains a compute shader. // Thus, prefer this to render_to_fbo() where possible. // - // The format must currently be GL_RGBA16F, and only one destination - // texture is supported. Both of these restrictions will be lifted in the future. + // Only one destination texture is supported. This restriction will be lifted + // in the future. + // + // All destination textures must be exactly of size x , + // and must either come from the same ResourcePool the effect uses, or outlive + // the EffectChain (otherwise, we could be allocating FBOs that end up being + // stale). Textures must also have valid state; in particular, they must either + // be mipmap complete or have a non-mipmapped minification mode. // - // All destination textures must be exactly of size x . // width and height can not be zero. struct DestinationTexture { GLuint texnum; @@ -481,8 +486,11 @@ private: unsigned x, unsigned y, unsigned width, unsigned height); // Execute one phase, ie. set up all inputs, effects and outputs, and render the quad. - void execute_phase(Phase *phase, bool render_to_texture, - std::map *output_textures, + // If is empty, uses whatever output is current (and the phase must not be + // a compute shader). + void execute_phase(Phase *phase, + const std::map &output_textures, + const std::vector &destinations, std::set *generated_mipmaps); // Set up uniforms for one phase. The program must already be bound.