Move Node and Phase out from being inner classes, given that we soon want to expose...
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 8 Oct 2012 10:21:16 +0000 (12:21 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 8 Oct 2012 10:21:16 +0000 (12:21 +0200)
effect_chain.cpp
effect_chain.h

index b4be148..1d84e89 100644 (file)
@@ -74,9 +74,9 @@ void EffectChain::add_effect_raw(Effect *effect, const std::vector<Effect *> &in
        node_map[effect] = node;
 }
 
-void EffectChain::find_all_nonlinear_inputs(EffectChain::Node *node,
-                                            std::vector<EffectChain::Node *> *nonlinear_inputs,
-                                            std::vector<EffectChain::Node *> *intermediates)
+void EffectChain::find_all_nonlinear_inputs(Node *node,
+                                            std::vector<Node *> *nonlinear_inputs,
+                                            std::vector<Node *> *intermediates)
 {
        if (node->output_gamma_curve == GAMMA_LINEAR) {
                return;
@@ -92,7 +92,7 @@ void EffectChain::find_all_nonlinear_inputs(EffectChain::Node *node,
        }
 }
 
-EffectChain::Node *EffectChain::normalize_to_linear_gamma(EffectChain::Node *input)
+Node *EffectChain::normalize_to_linear_gamma(Node *input)
 {
        // Find out if all the inputs can be set to deliver sRGB inputs.
        // If so, we can just ask them to do that instead of inserting a
@@ -140,7 +140,7 @@ EffectChain::Node *EffectChain::normalize_to_linear_gamma(EffectChain::Node *inp
        return node;
 }
 
-EffectChain::Node *EffectChain::normalize_to_srgb(EffectChain::Node *input)
+Node *EffectChain::normalize_to_srgb(Node *input)
 {
        assert(input->output_gamma_curve == GAMMA_LINEAR);
        ColorSpaceConversionEffect *colorspace_conversion = new ColorSpaceConversionEffect();
@@ -218,9 +218,9 @@ std::string replace_prefix(const std::string &text, const std::string &prefix)
        return output;
 }
 
-EffectChain::Phase *EffectChain::compile_glsl_program(
-       const std::vector<EffectChain::Node *> &inputs,
-       const std::vector<EffectChain::Node *> &effects)
+Phase *EffectChain::compile_glsl_program(
+       const std::vector<Node *> &inputs,
+       const std::vector<Node *> &effects)
 {
        assert(!effects.empty());
 
@@ -312,7 +312,7 @@ EffectChain::Phase *EffectChain::compile_glsl_program(
 //
 // We follow a quite simple depth-first search from the output, although
 // without any explicit recursion.
-void EffectChain::construct_glsl_programs(EffectChain::Node *output)
+void EffectChain::construct_glsl_programs(Node *output)
 {
        // Which effects have already been completed in this phase?
        // We need to keep track of it, as an effect with multiple outputs
@@ -414,7 +414,7 @@ void EffectChain::construct_glsl_programs(EffectChain::Node *output)
        std::reverse(phases.begin(), phases.end());
 }
 
-void EffectChain::find_output_size(EffectChain::Phase *phase)
+void EffectChain::find_output_size(Phase *phase)
 {
        Node *output_node = phase->effects.back();
 
index 9d389d5..e6e2d72 100644 (file)
@@ -8,6 +8,49 @@
 #include "image_format.h"
 #include "input.h"
 
+class EffectChain;
+class Phase;
+
+// A node in the graph; basically an effect and some associated information.
+class Node {
+public:
+       Effect *effect;
+
+       // Edges in the graph (forward and backward).
+       std::vector<Node *> outgoing_links;
+       std::vector<Node *> incoming_links;
+
+private:
+       // Identifier used to create unique variables in GLSL.
+       std::string effect_id;
+
+       // If output goes to RTT (otherwise, none of these are set).
+       // The Phsae pointer is a but ugly; we should probably fix so
+       // that Phase takes other phases as inputs, instead of Node.
+       GLuint output_texture;
+       unsigned output_texture_width, output_texture_height;
+       Phase *phase;
+
+       // Used during the building of the effect chain.
+       ColorSpace output_color_space;
+       GammaCurve output_gamma_curve;
+
+       friend class EffectChain;
+};
+
+// A rendering phase; a single GLSL program rendering a single quad.
+struct Phase {
+       GLint glsl_program_num;
+       bool input_needs_mipmaps;
+
+       // Inputs are only inputs from other phases (ie., those that come from RTT);
+       // input textures are not counted here.
+       std::vector<Node *> inputs;
+
+       std::vector<Node *> effects;  // In order.
+       unsigned output_width, output_height;
+};
+
 class EffectChain {
 public:
        EffectChain(unsigned width, unsigned height);
@@ -62,44 +105,6 @@ public:
        }
 
 private:
-       struct Phase;
-
-       // A node in the graph; basically an effect and some associated information.
-       struct Node {
-               Effect *effect;
-
-               // Identifier used to create unique variables in GLSL.
-               std::string effect_id;
-
-               // Edges in the graph (forward and backward).
-               std::vector<Node *> outgoing_links;
-               std::vector<Node *> incoming_links;
-
-               // If output goes to RTT (otherwise, none of these are set).
-               // The Phsae pointer is a but ugly; we should probably fix so
-               // that Phase takes other phases as inputs, instead of Node.
-               GLuint output_texture;
-               unsigned output_texture_width, output_texture_height;
-               Phase *phase;
-
-               // Used during the building of the effect chain.
-               ColorSpace output_color_space;
-               GammaCurve output_gamma_curve;  
-       };
-
-       // A rendering phase; a single GLSL program rendering a single quad.
-       struct Phase {
-               GLint glsl_program_num;
-               bool input_needs_mipmaps;
-
-               // Inputs are only inputs from other phases (ie., those that come from RTT);
-               // input textures are not counted here.
-               std::vector<Node *> inputs;
-
-               std::vector<Node *> effects;  // In order.
-               unsigned output_width, output_height;
-       };
-
        // Determine the preferred output size of a given phase.
        // Requires that all input phases (if any) already have output sizes set.
        void find_output_size(Phase *phase);
@@ -135,5 +140,4 @@ private:
        bool finalized;
 };
 
-
 #endif // !defined(_EFFECT_CHAIN_H)