Save work on shadows

This commit is contained in:
Frederic Bouvier
2012-03-04 20:21:49 +01:00
parent 6d3766e913
commit 2af409f54d
2 changed files with 19 additions and 2 deletions
+14 -1
View File
@@ -27,12 +27,15 @@
#include "Effect.hxx" #include "Effect.hxx"
#include "Technique.hxx" #include "Technique.hxx"
#include <scene\util\RenderConstants.hxx>
namespace simgear namespace simgear
{ {
using osgUtil::CullVisitor; using osgUtil::CullVisitor;
EffectCullVisitor::EffectCullVisitor() EffectCullVisitor::EffectCullVisitor(bool collectLights) :
_collectLights(collectLights)
{ {
} }
@@ -56,6 +59,9 @@ void EffectCullVisitor::apply(osg::Geode& node)
CullVisitor::apply(node); CullVisitor::apply(node);
return; return;
} }
if (_collectLights && ( eg->getNodeMask() & MODELLIGHT_BIT ) ) {
_lightList.push_back( eg );
}
Effect* effect = eg->getEffect(); Effect* effect = eg->getEffect();
Technique* technique = 0; Technique* technique = 0;
if (!effect) { if (!effect) {
@@ -80,6 +86,13 @@ void EffectCullVisitor::apply(osg::Geode& node)
} }
void EffectCullVisitor::reset()
{
_lightList.clear();
osgUtil::CullVisitor::reset();
}
void EffectCullVisitor::clearBufferList() void EffectCullVisitor::clearBufferList()
{ {
_bufferList.clear(); _bufferList.clear();
+5 -1
View File
@@ -29,14 +29,16 @@ class Texture2D;
namespace simgear namespace simgear
{ {
class EffectGeode;
class EffectCullVisitor : public osgUtil::CullVisitor class EffectCullVisitor : public osgUtil::CullVisitor
{ {
public: public:
EffectCullVisitor(); EffectCullVisitor(bool collectLights = false);
EffectCullVisitor(const EffectCullVisitor&); EffectCullVisitor(const EffectCullVisitor&);
virtual osgUtil::CullVisitor* clone() const; virtual osgUtil::CullVisitor* clone() const;
using osgUtil::CullVisitor::apply; using osgUtil::CullVisitor::apply;
virtual void apply(osg::Geode& node); virtual void apply(osg::Geode& node);
virtual void reset();
void clearBufferList(); void clearBufferList();
void addBuffer(int i, osg::Texture2D* tex); void addBuffer(int i, osg::Texture2D* tex);
@@ -44,6 +46,8 @@ public:
private: private:
std::map<int,osg::ref_ptr<osg::Texture2D> > _bufferList; std::map<int,osg::ref_ptr<osg::Texture2D> > _bufferList;
std::vector<osg::ref_ptr<EffectGeode> > _lightList;
bool _collectLights;
}; };
} }
#endif #endif