X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=effect_chain.h;h=2e89c3bcc38717473c10f8b05cfffe80a68b9689;hp=e07c2e9061b9b01f68d6baf753dacec03cead707;hb=6f1efa8348a90a393187c12d70fd10d81bbd2c99;hpb=06ba8d86c019208682d8883dc7187df37b027814 diff --git a/effect_chain.h b/effect_chain.h index e07c2e9..2e89c3b 100644 --- a/effect_chain.h +++ b/effect_chain.h @@ -83,6 +83,21 @@ enum YCbCrOutputSplitting { YCBCR_OUTPUT_PLANAR, }; +// Where (0,0) is taken to be in the output. If you want to render to an +// OpenGL screen, you should keep the default of bottom-left, as that is +// OpenGL's natural coordinate system. However, there are cases, such as if you +// render to an FBO and read the pixels back into some other system, where +// you'd want a top-left origin; if so, an additional flip step will be added +// at the very end (but done in a vertex shader, so it will have zero extra +// cost). +// +// Note that Movit's coordinate system in general consistently puts (0,0) in +// the top left for _input_, no matter what you set as output origin. +enum OutputOrigin { + OUTPUT_ORIGIN_BOTTOM_LEFT, + OUTPUT_ORIGIN_TOP_LEFT, +}; + // A node in the graph; basically an effect and some associated information. class Node { public: @@ -225,6 +240,14 @@ public: this->num_dither_bits = num_bits; } + // Set where (0,0) is taken to be in the output. The default is + // OUTPUT_ORIGIN_BOTTOM_LEFT, which is usually what you want + // (see OutputOrigin above for more details). + void set_output_origin(OutputOrigin output_origin) + { + this->output_origin = output_origin; + } + void finalize(); // Measure the GPU time used for each actual phase during rendering. @@ -378,6 +401,7 @@ private: std::vector phases; unsigned num_dither_bits; + OutputOrigin output_origin; bool finalized; ResourcePool *resource_pool;