// the EffectChain holds textures and other OpenGL objects that are tied to the
// context.
-#include <GL/glew.h>
+#include <epoxy/gl.h>
#include <stdio.h>
#include <map>
#include <set>
// Identifier used to create unique variables in GLSL.
// Unique per-phase to increase cacheability of compiled shaders.
std::map<Node *, std::string> effect_ids;
+
+ // The geometry needed to draw this quad, bound to the vertex array
+ // object. (Seemingly it's actually a win not to upload geometry every
+ // frame, even for something as small as a quad, due to fewer state
+ // changes.)
+ GLuint vao;
+ GLuint position_vbo, texcoord_vbo;
};
class EffectChain {
std::map<Effect *, Node *> node_map;
Effect *dither_effect;
+ std::map<void *, GLuint> fbos; // One for each OpenGL context.
std::vector<Input *> inputs; // Also contained in nodes.
std::vector<Phase *> phases;