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