X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=effect.h;h=196682f3f3f652450dd01aa809d5394064d46da6;hp=f92201e6b40d56ab6812dac7669ce09da13f6a69;hb=3915264bd8fde4d550e47c10a67a2741625b9033;hpb=bc5560403f4e43d1a32e5e8d94bca68922647779 diff --git a/effect.h b/effect.h index f92201e..196682f 100644 --- a/effect.h +++ b/effect.h @@ -23,21 +23,22 @@ struct RGBTriplet { }; // Convenience functions that deal with prepending the prefix. -void set_uniform_float(GLhandleARB glsl_program_num, const std::string &prefix, const std::string &key, float value); -void set_uniform_vec2(GLhandleARB glsl_program_num, const std::string &prefix, const std::string &key, const float *values); -void set_uniform_vec3(GLhandleARB glsl_program_num, const std::string &prefix, const std::string &key, const float *values); +void set_uniform_int(GLuint glsl_program_num, const std::string &prefix, const std::string &key, int value); +void set_uniform_float(GLuint glsl_program_num, const std::string &prefix, const std::string &key, float value); +void set_uniform_vec2(GLuint glsl_program_num, const std::string &prefix, const std::string &key, const float *values); +void set_uniform_vec3(GLuint glsl_program_num, const std::string &prefix, const std::string &key, const float *values); class Effect { public: - virtual bool needs_linear_light() { return true; } - virtual bool needs_srgb_primaries() { return true; } - virtual bool needs_many_samples() { return false; } - virtual bool needs_mipmaps() { return false; } + virtual bool needs_linear_light() const { return true; } + virtual bool needs_srgb_primaries() const { return true; } + virtual bool needs_many_samples() const { return false; } + virtual bool needs_mipmaps() const { return false; } - virtual std::string output_convenience_uniforms(); - virtual std::string output_glsl() = 0; + virtual std::string output_convenience_uniforms() const; + virtual std::string output_fragment_shader() = 0; - virtual void set_uniforms(GLhandleARB glsl_program_num, const std::string& prefix); + virtual void set_uniforms(GLuint glsl_program_num, const std::string& prefix, unsigned *sampler_num); // Neither of these take ownership. bool set_int(const std::string&, int value); @@ -51,12 +52,22 @@ protected: 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); + void register_1d_texture(const std::string &key, float *values, size_t size); + void invalidate_1d_texture(const std::string &key); private: + struct Texture1D { + float *values; + size_t size; + bool needs_update; + GLuint texture_num; + }; + std::map params_int; std::map params_float; std::map params_vec2; std::map params_vec3; + std::map params_tex_1d; }; #endif // !defined(_EFFECT_H)