]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/material/EffectCullVisitor.cxx
Work around apparent OSG 3.2.0 normal binding bug.
[simgear.git] / simgear / scene / material / EffectCullVisitor.cxx
index 36f85eb4fc99e940326ae74a14997ae7147377ae..4f84552e56584dda0cc1ea3ee4ef583b869b0595 100644 (file)
 #include "Effect.hxx"
 #include "Technique.hxx"
 
+#include <simgear/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,19 +86,26 @@ void EffectCullVisitor::apply(osg::Geode& node)
 
 }
 
+void EffectCullVisitor::reset()
+{
+    _lightList.clear();
+
+    osgUtil::CullVisitor::reset();
+}
+
 void EffectCullVisitor::clearBufferList()
 {
     _bufferList.clear();
 }
 
-void EffectCullVisitor::addBuffer(int i, osg::Texture2D* tex)
+void EffectCullVisitor::addBuffer(std::string b, osg::Texture2D* tex)
 {
-    _bufferList.insert(std::make_pair(i,tex));
+    _bufferList.insert(std::make_pair(b,tex));
 }
 
-osg::Texture2D* EffectCullVisitor::getBuffer(int i)
+osg::Texture2D* EffectCullVisitor::getBuffer(std::string b)
 {
-    return _bufferList[i];
+    return _bufferList[b];
 }
 
 }