-#ifndef _EFFECT_H
-#define _EFFECT_H 1
+#ifndef _MOVIT_EFFECT_H
+#define _MOVIT_EFFECT_H 1
// Effect is the base class for every effect. It basically represents a single
// GLSL function, with an optional set of user-settable parameters.
#include <map>
#include <string>
-#include "util.h"
+#include "defs.h"
+
+namespace movit {
class EffectChain;
class Node;
};
// Can alias on a float[4].
-struct RGBATriplet {
- RGBATriplet(float r, float g, float b, float a)
+struct RGBATuple {
+ RGBATuple(float r, float g, float b, float a)
: r(r), g(g), b(b), a(a) {}
float r, g, b, a;
// if you have several, they will be INPUT1(), INPUT2(), and so on.
virtual unsigned num_inputs() const { return 1; }
+ // Inform the effect that it has been just added to the EffectChain.
+ // The primary use for this is to store the ResourcePool uesd by
+ // the chain; for modifications to it, rewrite_graph() below
+ // is probably a better fit.
+ virtual void inform_added(EffectChain *chain) {}
+
// Let the effect rewrite the effect chain as it sees fit.
// Most effects won't need to do this, but this is very useful
// if you have an effect that consists of multiple sub-effects
void register_vec3(const std::string &key, float *values);
void register_vec4(const std::string &key, float *values);
- // This will register a 1D texture, which will be bound to a sampler
- // when your GLSL code runs (so it corresponds 1:1 to a sampler2D uniform
- // in GLSL).
- //
- // Note that if you change the contents of <values>, you will need to
- // call invalidate_1d_texture() to have the picture re-uploaded on the
- // next frame. This is in contrast to all the other parameters, which are
- // set anew every frame.
- 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<std::string, int *> params_int;
std::map<std::string, float *> params_float;
std::map<std::string, float *> params_vec2;
std::map<std::string, float *> params_vec3;
std::map<std::string, float *> params_vec4;
- std::map<std::string, Texture1D> params_tex_1d;
};
-#endif // !defined(_EFFECT_H)
+} // namespace movit
+
+#endif // !defined(_MOVIT_EFFECT_H)