// but if so, the threads' contexts need to be set up to share resources, since
// the EffectChain holds textures and other OpenGL objects that are tied to the
// context.
+//
+// Memory management (only relevant if you use multiple contexts):
+// See corresponding comment in resource_pool.h. This holds even if you don't
+// allocate your own ResourcePool, but let EffectChain hold its own.
-#include <GL/glew.h>
+#include <epoxy/gl.h>
#include <stdio.h>
#include <map>
#include <set>
// as the last effect. Also pushes all phases in order onto <phases>.
Phase *construct_phase(Node *output, std::map<Node *, Phase *> *completed_effects);
+ // Execute one phase, ie. set up all inputs, effects and outputs, and render the quad.
+ void execute_phase(Phase *phase, bool last_phase, std::map<Phase *, GLuint> *output_textures, std::set<Phase *> *generated_mipmaps);
+
+ // Set up the given sampler number for sampling from an RTT texture,
+ // and bind it to "tex_" plus the given GLSL variable.
+ void setup_rtt_sampler(GLuint glsl_program_num, int sampler_num, const std::string &effect_id, bool use_mipmaps);
+
// Output the current graph to the given file in a Graphviz-compatible format;
// only useful for debugging.
void output_dot(const char *filename);