diff --git a/components/terrain/chunkmanager.cpp b/components/terrain/chunkmanager.cpp index b0860ecf28..1d6fb9e613 100644 --- a/components/terrain/chunkmanager.cpp +++ b/components/terrain/chunkmanager.cpp @@ -10,6 +10,7 @@ #include #include +#include #include "terraindrawable.hpp" #include "material.hpp" @@ -178,6 +179,9 @@ osg::ref_ptr ChunkManager::createChunk(float chunkSize, const osg::Ve geometry->setUseDisplayList(false); geometry->setUseVertexBufferObjects(true); + if (chunkSize <= 2.f) + geometry->setLightListCallback(new SceneUtil::LightListCallback); + unsigned int numVerts = (mStorage->getCellVertices()-1) * chunkSize / (1 << lod) + 1; geometry->addPrimitiveSet(mBufferCache.getIndexBuffer(numVerts, lodFlags)); diff --git a/components/terrain/terraindrawable.cpp b/components/terrain/terraindrawable.cpp index 8557233ed6..f3080e31cd 100644 --- a/components/terrain/terraindrawable.cpp +++ b/components/terrain/terraindrawable.cpp @@ -9,7 +9,6 @@ namespace Terrain TerrainDrawable::TerrainDrawable() { - mLightListCallback = new SceneUtil::LightListCallback; } TerrainDrawable::TerrainDrawable(const TerrainDrawable ©, const osg::CopyOp ©op) @@ -52,7 +51,7 @@ void TerrainDrawable::cull(osgUtil::CullVisitor *cv) if (osg::isNaN(depth)) return; - bool pushedLight = mLightListCallback->pushLightState(this, cv); + bool pushedLight = mLightListCallback && mLightListCallback->pushLightState(this, cv); for (PassVector::const_iterator it = mPasses.begin(); it != mPasses.end(); ++it) { @@ -70,6 +69,11 @@ void TerrainDrawable::setPasses(const TerrainDrawable::PassVector &passes) mPasses = passes; } +void TerrainDrawable::setLightListCallback(SceneUtil::LightListCallback *lightListCallback) +{ + mLightListCallback = lightListCallback; +} + void TerrainDrawable::compileGLObjects(osg::RenderInfo &renderInfo) const { for (PassVector::const_iterator it = mPasses.begin(); it != mPasses.end(); ++it) diff --git a/components/terrain/terraindrawable.hpp b/components/terrain/terraindrawable.hpp index d7c2bfa723..79a28deebf 100644 --- a/components/terrain/terraindrawable.hpp +++ b/components/terrain/terraindrawable.hpp @@ -37,6 +37,8 @@ namespace Terrain typedef std::vector > PassVector; void setPasses (const PassVector& passes); + void setLightListCallback(SceneUtil::LightListCallback* lightListCallback); + virtual void compileGLObjects(osg::RenderInfo& renderInfo) const; private: