Save work on shadows
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user