+ // Set number of output bits, to scale the dither.
+ // 8 is the right value for most outputs.
+ // The default, 0, is a special value that means no dither.
+ void set_dither_bits(unsigned num_bits)
+ {
+ this->num_dither_bits = num_bits;
+ }
+
+ void finalize();
+
+
+ //void render(unsigned char *src, unsigned char *dst);
+ void render_to_screen()
+ {
+ render_to_fbo(0, 0, 0);
+ }
+
+ // Render the effect chain to the given FBO. If width=height=0, keeps
+ // the current viewport.
+ void render_to_fbo(GLuint fbo, unsigned width, unsigned height);
+
+ Effect *last_added_effect() {
+ if (nodes.empty()) {
+ return NULL;
+ } else {
+ return nodes.back()->effect;
+ }
+ }
+
+ // API for manipulating the graph directly. Intended to be used from
+ // effects and by EffectChain itself.
+ //
+ // Note that for nodes with multiple inputs, the order of calls to
+ // connect_nodes() will matter.
+ Node *add_node(Effect *effect);
+ void connect_nodes(Node *sender, Node *receiver);
+ void replace_receiver(Node *old_receiver, Node *new_receiver);
+ void replace_sender(Node *new_sender, Node *receiver);
+ void insert_node_between(Node *sender, Node *middle, Node *receiver);