X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=effect.h;h=a1852fc12e09f9a1abf454d0167241b26c7d3e1a;hb=825ae6ce6e426b11beb9ba2089b2c440e7ed94b2;hp=afac5dc91c840ad6f273786498c1233547927343;hpb=79f0ebd9606956e2988d9485b9d4c701e975c7f1;p=movit diff --git a/effect.h b/effect.h index afac5dc..a1852fc 100644 --- a/effect.h +++ b/effect.h @@ -196,7 +196,16 @@ public: // 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; } + // Cannot be set for compute shaders. + virtual bool one_to_one_sampling() const { return strong_one_to_one_sampling(); } + + // Similar in use to one_to_one_sampling(), but even stricter: + // The effect must not use texture coordinate in any way beyond + // giving it unmodified to its (single) input. This allows it to + // also be used after a compute shader, in the same phase. + // + // An effect that it strong one-to-one must also be one-to-one. + virtual bool strong_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). See also @@ -340,7 +349,8 @@ public: // Set a parameter; intended to be called from user code. // Neither of these take ownership of the pointer. - virtual bool set_int(const std::string&, int value) MUST_CHECK_RESULT; + virtual bool set_int(const std::string &key, int value) MUST_CHECK_RESULT; + virtual bool set_ivec2(const std::string &key, const int *values) MUST_CHECK_RESULT; virtual bool set_float(const std::string &key, float value) MUST_CHECK_RESULT; virtual bool set_vec2(const std::string &key, const float *values) MUST_CHECK_RESULT; virtual bool set_vec3(const std::string &key, const float *values) MUST_CHECK_RESULT; @@ -357,6 +367,7 @@ protected: // These correspond directly to int/float/vec2/vec3/vec4 in GLSL. void register_int(const std::string &key, int *value); + void register_ivec2(const std::string &key, int *values); void register_float(const std::string &key, float *value); void register_vec2(const std::string &key, float *values); void register_vec3(const std::string &key, float *values); @@ -384,7 +395,8 @@ protected: // except for register_int as noted above. void register_uniform_sampler2d(const std::string &key, const int *value); void register_uniform_bool(const std::string &key, const bool *value); - void register_uniform_int(const std::string &key, const int *value); // Note: Requires GLSL 1.30 or newer. + void register_uniform_int(const std::string &key, const int *value); + void register_uniform_ivec2(const std::string &key, const int *values); void register_uniform_float(const std::string &key, const float *value); void register_uniform_vec2(const std::string &key, const float *values); void register_uniform_vec3(const std::string &key, const float *values); @@ -397,6 +409,7 @@ protected: private: std::map params_int; + std::map params_ivec2; std::map params_float; std::map params_vec2; std::map params_vec3; @@ -407,6 +420,7 @@ private: std::vector> uniforms_sampler2d; std::vector> uniforms_bool; std::vector> uniforms_int; + std::vector> uniforms_ivec2; std::vector> uniforms_float; std::vector> uniforms_vec2; std::vector> uniforms_vec3;