]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/effect.h
Support effects and subordinate sequences inside sequence templates
[libs/gl.git] / source / effects / effect.h
index a4f108fbcf9f739bcca08fc55b520fe0d5fab202..eadb4dc845984a3d8e04d83e93d6a819df81bdf0 100644 (file)
@@ -2,14 +2,12 @@
 #define MSP_GL_EFFECT_H_
 
 #include <set>
-#include <msp/core/refptr.h>
+#include <msp/datafile/objectloader.h>
 #include "renderable.h"
 
 namespace Msp {
 namespace GL {
 
-class Sampler;
-
 /**
 Effects are used to wrap other renderables and give them additional visual
 properties.  An Effect's render method should set up the necessary state, call
@@ -17,17 +15,35 @@ the wrapped Renderable's render method, and clean up after itself.
 */
 class Effect: public Renderable
 {
+public:
+       struct Template
+       {
+               class Loader: public DataFile::CollectionObjectLoader<Template>
+               {
+               public:
+                       Loader(Template &, Collection &);
+               protected:
+                       virtual void init_actions();
+               };
+
+               std::string content_name;
+
+               virtual ~Template() = default;
+
+               virtual Effect *create(const std::map<std::string, Renderable *> &) const = 0;
+       };
+
 protected:
        Renderable &renderable;
-       std::set<Tag> enabled_passes;
+       std::set<Tag> enabled_methods;
 
 protected:
        Effect(Renderable &);
 public:
        virtual ~Effect() { }
 
-       void enable_for_pass(Tag);
-       void disable_for_pass(Tag);
+       void enable_for_method(Tag);
+       void disable_for_method(Tag);
 
        virtual const Matrix *get_matrix() const { return renderable.get_matrix(); }
        virtual const Geometry::BoundingSphere<float, 3> *get_bounding_sphere() const { return renderable.get_bounding_sphere(); }