// effect instance; use the macro PREFIX() around your identifiers to
// automatically prepend that prefix.
-#include <GL/glew.h>
+#include <epoxy/gl.h>
#include <assert.h>
#include <stddef.h>
#include <map>
#include "defs.h"
+namespace movit {
+
class EffectChain;
class Node;
// next effect set needs_texture_bounce()).
virtual bool changes_output_size() const { return false; }
+ // Whether this effect is effectively sampling from a a single texture.
+ // If so, it will override needs_texture_bounce(); however, there are also
+ // two demands it needs to fulfill:
+ //
+ // 1. It needs to be an Input, ie. num_inputs() == 0.
+ // 2. It needs to allocate exactly one sampler in set_gl_state(),
+ // and allow dependent effects to change that sampler state.
+ virtual bool is_single_texture() const { return false; }
+
// If changes_output_size() is true, you must implement this to tell
// the framework what output size you want. Also, you can set a
// virtual width/height, which is the size the next effect (if any)
// 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
std::map<std::string, float *> params_vec4;
};
+} // namespace movit
+
#endif // !defined(_MOVIT_EFFECT_H)