X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=effect.h;h=56c34d917c5c46084e89904ed76d938cc7782269;hb=1ec439c7fb975c09029adaa9090e7f35ce6484b8;hp=16b6cbb92149f7de70cf24d92d01a1182c8c343a;hpb=8ea03db1932e4a76f457e0ecdfe31a4c8be0e0eb;p=movit diff --git a/effect.h b/effect.h index 16b6cbb..56c34d9 100644 --- a/effect.h +++ b/effect.h @@ -25,6 +25,7 @@ class Node; // Can alias on a float[2]. struct Point2D { + Point2D() {} Point2D(float x, float y) : x(x), y(y) {} @@ -33,6 +34,7 @@ struct Point2D { // Can alias on a float[3]. struct RGBTriplet { + RGBTriplet() {} RGBTriplet(float r, float g, float b) : r(r), g(g), b(b) {} @@ -41,6 +43,7 @@ struct RGBTriplet { // Can alias on a float[4]. struct RGBATuple { + RGBATuple() {} RGBATuple(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {} @@ -161,12 +164,47 @@ public: // needs mipmaps, you will also get them). virtual bool needs_mipmaps() const { return false; } + // Whether there is a direct correspondence between input and output + // texels. Specifically, the effect must not: + // + // 1. Try to sample in the border (ie., outside the 0.0 to 1.0 area). + // 2. Try to sample between texels. + // 3. Sample with an x- or y-derivative different from -1 or 1. + // (This also means needs_mipmaps() and one_to_one_sampling() + // together would make no sense.) + // + // The most common case for this would be an effect that has an exact + // 1:1-correspondence between input and output texels, e.g. SaturationEffect. + // However, more creative things, like mirroring/flipping or padding, + // would also be allowed. + // + // The primary gain from setting this is that you can sample directly + // from an effect that changes output size (see changes_output_size() below), + // without going through a bounce texture. It won't work for effects that + // set sets_virtual_output_size(), though. + // + // Does not make a lot of sense together with needs_texture_bounce(). + virtual bool one_to_one_sampling() const { return false; } + // Whether this effect wants to output to a different size than - // its input(s) (see inform_input_size(), below). If you set this to - // true, the output will be bounced to a texture (similarly to if the - // next effect set needs_texture_bounce()). + // its input(s) (see inform_input_size(), below). See also + // sets_virtual_output_size() below. virtual bool changes_output_size() const { return false; } + // Whether your get_output_size() function (see below) intends to ever set + // virtual_width different from width, or similar for height. + // It does not make sense to set this to true if changes_output_size() is false. + virtual bool sets_virtual_output_size() const { return changes_output_size(); } + + // Whether this effect is effectively sampling from a a single texture. + // If so, it will override needs_texture_bounce(); however, there are also + // two demands it needs to fulfill: + // + // 1. It needs to be an Input, ie. num_inputs() == 0. + // 2. It needs to allocate exactly one sampler in set_gl_state(), + // and allow dependent effects to change that sampler state. + virtual bool is_single_texture() const { return false; } + // If changes_output_size() is true, you must implement this to tell // the framework what output size you want. Also, you can set a // virtual width/height, which is the size the next effect (if any)