// 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
// 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;
// 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);
// 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);
private:
std::map<std::string, int *> params_int;
+ std::map<std::string, int *> params_ivec2;
std::map<std::string, float *> params_float;
std::map<std::string, float *> params_vec2;
std::map<std::string, float *> params_vec3;
std::vector<Uniform<int>> uniforms_sampler2d;
std::vector<Uniform<bool>> uniforms_bool;
std::vector<Uniform<int>> uniforms_int;
+ std::vector<Uniform<int>> uniforms_ivec2;
std::vector<Uniform<float>> uniforms_float;
std::vector<Uniform<float>> uniforms_vec2;
std::vector<Uniform<float>> uniforms_vec3;