]> git.mxchange.org Git - simgear.git/commitdiff
Save work on shadows
authorFrederic Bouvier <fredfgfs01@free.fr>
Sun, 5 Feb 2012 22:35:39 +0000 (23:35 +0100)
committerFrederic Bouvier <fredfgfs01@free.fr>
Sun, 4 Mar 2012 19:21:49 +0000 (20:21 +0100)
simgear/scene/material/EffectCullVisitor.cxx
simgear/scene/material/EffectCullVisitor.hxx

index 36f85eb4fc99e940326ae74a14997ae7147377ae..9960a4d4c98bdb241e4e11665f5cd33a999940aa 100644 (file)
 #include "Effect.hxx"
 #include "Technique.hxx"
 
+#include <scene\util\RenderConstants.hxx>
+
 namespace simgear
 {
 
 using osgUtil::CullVisitor;
 
-EffectCullVisitor::EffectCullVisitor()
+EffectCullVisitor::EffectCullVisitor(bool collectLights) :
+    _collectLights(collectLights)
 {
 }
 
@@ -56,6 +59,9 @@ void EffectCullVisitor::apply(osg::Geode& node)
         CullVisitor::apply(node);
         return;
     }
+    if (_collectLights && ( eg->getNodeMask() & MODELLIGHT_BIT ) ) {
+        _lightList.push_back( eg );
+    }
     Effect* effect = eg->getEffect();
     Technique* technique = 0;
     if (!effect) {
@@ -80,6 +86,13 @@ void EffectCullVisitor::apply(osg::Geode& node)
 
 }
 
+void EffectCullVisitor::reset()
+{
+    _lightList.clear();
+
+    osgUtil::CullVisitor::reset();
+}
+
 void EffectCullVisitor::clearBufferList()
 {
     _bufferList.clear();
index 4f0054dd7270e94c8c27b2f2976397de9e13a9c8..c4d3c6300ad3181d80028afbffe2265d1a5662af 100644 (file)
@@ -29,14 +29,16 @@ class Texture2D;
 
 namespace simgear
 {
+class EffectGeode;
 class EffectCullVisitor : public osgUtil::CullVisitor
 {
 public:
-    EffectCullVisitor();
+    EffectCullVisitor(bool collectLights = false);
     EffectCullVisitor(const EffectCullVisitor&);
     virtual osgUtil::CullVisitor* clone() const;
     using osgUtil::CullVisitor::apply;
     virtual void apply(osg::Geode& node);
+    virtual void reset();
 
     void clearBufferList();
     void addBuffer(int i, osg::Texture2D* tex);
@@ -44,6 +46,8 @@ public:
 
 private:
     std::map<int,osg::ref_ptr<osg::Texture2D> > _bufferList;
+    std::vector<osg::ref_ptr<EffectGeode> > _lightList;
+    bool _collectLights;
 };
 }
 #endif