Save work on shadows

This commit is contained in:
Frederic Bouvier
2012-02-05 23:35:39 +01:00
parent 6d3766e913
commit 2af409f54d
2 changed files with 19 additions and 2 deletions

View File

@@ -27,12 +27,15 @@
#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();

View 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