+// Whether you want pre- or postmultiplied alpha in the output
+// (see effect.h for a discussion of pre- versus postmultiplied alpha).
+enum OutputAlphaFormat {
+ OUTPUT_ALPHA_FORMAT_PREMULTIPLIED,
+ OUTPUT_ALPHA_FORMAT_POSTMULTIPLIED,
+};
+
+// A node in the graph; basically an effect and some associated information.
+class Node {
+public:
+ Effect *effect;
+ bool disabled;
+
+ // Edges in the graph (forward and backward).
+ std::vector<Node *> outgoing_links;
+ std::vector<Node *> incoming_links;
+
+private:
+ // Logical size of the output of this effect, ie. the resolution
+ // you would get if you sampled it as a texture. If it is undefined
+ // (since the inputs differ in resolution), it will be 0x0.
+ // If both this and output_texture_{width,height} are set,
+ // they will be equal.
+ unsigned output_width, output_height;
+
+ // If output goes to RTT, which phase it is in (otherwise unset).
+ // This is a bit ugly; we should probably fix so that Phase takes other
+ // phases as inputs, instead of Node.
+ Phase *phase;
+
+ // If the effect has is_single_texture(), or if the output went to RTT
+ // and that texture has been bound to a sampler, the sampler number
+ // will be stored here.
+ //
+ // TODO: Can an RTT texture be used as inputs to multiple effects
+ // within the same phase? If so, we have a problem with modifying
+ // sampler state here.
+ int bound_sampler_num;
+
+ // Used during the building of the effect chain.
+ Colorspace output_color_space;
+ GammaCurve output_gamma_curve;
+ AlphaType output_alpha_type;
+
+ friend class EffectChain;