]> git.tdb.fi Git - libs/gl.git/blobdiff - source/builders/sequencetemplate.cpp
Redesign depth and stencil test and blend state management
[libs/gl.git] / source / builders / sequencetemplate.cpp
index 3ad973139010ae60b6e5cc5d602a9a0e1aca8aef..18a328e1b270775a77b2686a7471addcf3faa64a 100644 (file)
@@ -140,13 +140,14 @@ SequenceTemplate::Step::Loader::Loader(Step &p, Collection &c):
 void SequenceTemplate::Step::Loader::init()
 {
        add("blend", &Loader::blend);
-       add("blend", &Loader::blend_predefined);
+       add("blend", &Loader::blend_factors);
        add("depth_test", &Loader::depth_test);
-       add("depth_test", &Loader::depth_test_predefined);
+       add("depth_test", &Loader::depth_compare);
        add("lighting", &Loader::lighting);
        add("lighting", &Loader::lighting_inline);
        add("object", &Loader::object);
        add("scene", &Loader::scene);
+       add("stencil_test", &Loader::stencil_test);
 }
 
 void SequenceTemplate::Step::Loader::set_inline_base_name(const string &n)
@@ -154,42 +155,24 @@ void SequenceTemplate::Step::Loader::set_inline_base_name(const string &n)
        inline_base_name = n;
 }
 
-void SequenceTemplate::Step::Loader::blend_predefined(const string &name)
+void SequenceTemplate::Step::Loader::blend()
 {
-       const Blend *bln = 0;
-       if(name=="alpha")
-               bln = &Blend::alpha();
-       else if(name=="additive")
-               bln = &Blend::additive();
-       else if(name=="additive_alpha")
-               bln = &Blend::additive_alpha();
-       else
-               throw key_error(name);
-
-       obj.blend = bln;
-       obj.blend.keep();
+       load_sub(obj.blend);
 }
 
-void SequenceTemplate::Step::Loader::blend(BlendFactor src, BlendFactor dest)
+void SequenceTemplate::Step::Loader::blend_factors(BlendFactor src, BlendFactor dest)
 {
-       obj.blend = new Blend(src, dest);
+       obj.blend = Blend(src, dest);
 }
 
-void SequenceTemplate::Step::Loader::depth_test_predefined(const string &name)
+void SequenceTemplate::Step::Loader::depth_test()
 {
-       const DepthTest *dtest = 0;
-       if(name=="lequal")
-               dtest = &DepthTest::lequal();
-       else
-               throw key_error(name);
-
-       obj.depth_test = dtest;
-       obj.depth_test.keep();
+       load_sub(obj.depth_test);
 }
 
-void SequenceTemplate::Step::Loader::depth_test(Predicate pred)
+void SequenceTemplate::Step::Loader::depth_compare(Predicate c)
 {
-       obj.depth_test = new DepthTest(pred);
+       obj.depth_test = DepthTest(c);
 }
 
 void SequenceTemplate::Step::Loader::lighting_inline()
@@ -215,5 +198,10 @@ void SequenceTemplate::Step::Loader::scene(const string &name)
        obj.default_renderable = &get_collection().get<Scene>(name);
 }
 
+void SequenceTemplate::Step::Loader::stencil_test()
+{
+       load_sub(obj.stencil_test);
+}
+
 } // namespace GL
 } // namespace Msp