From 2be243deda80d980d2605030ed7f7da8d755adee Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 11 Sep 2008 14:27:50 +0000 Subject: [PATCH] Added support for SwitchLayer into GeometryTechnique --- src/osgTerrain/GeometryTechnique.cpp | 30 +++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/osgTerrain/GeometryTechnique.cpp b/src/osgTerrain/GeometryTechnique.cpp index 5d69bbede..62ce82a11 100644 --- a/src/osgTerrain/GeometryTechnique.cpp +++ b/src/osgTerrain/GeometryTechnique.cpp @@ -298,10 +298,26 @@ void GeometryTechnique::generateGeometry(Locator* masterLocator, const osg::Vec3 } else { + + Locator* locator = colorLayer->getLocator(); + if (!locator) + { + osgTerrain::SwitchLayer* switchLayer = dynamic_cast(colorLayer); + if (switchLayer) + { + if (switchLayer->getActiveLayer()>=0 && + switchLayer->getActiveLayer()getNumLayers() && + switchLayer->getLayer(switchLayer->getActiveLayer())) + { + locator = switchLayer->getLayer(switchLayer->getActiveLayer())->getLocator(); + } + } + } + TexCoordLocatorPair& tclp = layerToTexCoordMap[colorLayer]; tclp.first = new osg::Vec2Array; tclp.first->reserve(numVertices); - tclp.second = colorLayer->getLocator() ? colorLayer->getLocator() : masterLocator; + tclp.second = locator ? locator : masterLocator; geometry->setTexCoordArray(layerNum, tclp.first.get()); } } @@ -673,6 +689,18 @@ void GeometryTechnique::applyColorLayers() osgTerrain::Layer* colorLayer = _terrainTile->getColorLayer(layerNum); if (!colorLayer) continue; + osgTerrain::SwitchLayer* switchLayer = dynamic_cast(colorLayer); + if (switchLayer) + { + if (switchLayer->getActiveLayer()<0 || switchLayer->getActiveLayer()>=switchLayer->getNumLayers()) + { + continue; + } + + colorLayer = switchLayer->getLayer(switchLayer->getActiveLayer()); + if (!colorLayer) continue; + } + osg::Image* image = colorLayer->getImage(); if (!image) continue;