]> git.sesse.net Git - movit/blobdiff - effect.h
Handle texture non-bounce a bit better.
[movit] / effect.h
index 4f740f3cec0015910b4977642b1467570751c5e6..9d95705f6a66ce344a54bd18eb83154018d85c35 100644 (file)
--- a/effect.h
+++ b/effect.h
@@ -10,7 +10,7 @@
 // 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>
@@ -18,6 +18,8 @@
 
 #include "defs.h"
 
+namespace movit {
+
 class EffectChain;
 class Node;
 
@@ -165,6 +167,15 @@ public:
        // 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)
@@ -196,6 +207,12 @@ public:
        // 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
@@ -265,4 +282,6 @@ private:
        std::map<std::string, float *> params_vec4;
 };
 
+}  // namespace movit
+
 #endif // !defined(_MOVIT_EFFECT_H)