void ShaderGenerator::apply(osg::ProxyNode& node) { if ( !_active ) return; if ( ignore(&node) ) return; if ( node.getLoadingExternalReferenceMode() != osg::ProxyNode::LOAD_IMMEDIATELY ) { // rewrite the filenames to include the shadergen pseudo-loader extension so // that dynamically loaded children will have the same shadergen applied. for( unsigned i=0; i<node.getNumFileNames(); ++i ) { const std::string& filename = node.getFileName( i ); if (!filename.empty() && osgDB::getLowerCaseFileExtension(filename).compare(SHADERGEN_PL_EXTENSION) != 0 ) { node.setFileName( i, Stringify() << filename << "." << SHADERGEN_PL_EXTENSION ); } } } apply( static_cast<osg::Group&>(node) ); }
virtual void apply( osg::ProxyNode& proxy ) { proxy.setDatabasePath( archive_name ); std::string name = proxy.getFileName( 0 ); std::string simple = osgDB::getSimpleFileName( name ); proxy.setFileName( 0, simple ); osgGIS::notify( osg::INFO ) << " Rewrote " << name << " as " << simple << std::endl; osg::NodeVisitor::apply( proxy ); }
static bool writeFileNames( osgDB::OutputStream& os, const osg::ProxyNode& node ) { os << node.getNumFileNames() << os.BEGIN_BRACKET << std::endl; for ( unsigned int i=0; i<node.getNumFileNames(); ++i ) { os.writeWrappedString( node.getFileName(i) ); os << std::endl; } os << os.END_BRACKET << std::endl; return true; }
static bool writeChildren( osgDB::OutputStream& os, const osg::ProxyNode& node ) { unsigned int size=node.getNumFileNames(), dynamicLoadedSize=0; for ( unsigned int i=0; i<size; ++i ) { if ( !node.getFileName(i).empty() ) dynamicLoadedSize++; } unsigned int realSize = size-dynamicLoadedSize; os << realSize; if ( realSize>0 ) { os << os.BEGIN_BRACKET << std::endl; for ( unsigned int i=0; i<size; ++i ) { if ( !node.getFileName(i).empty() ) continue; if ( i<node.getNumChildren() ) os << node.getChild(i); } os << os.END_BRACKET; } os << std::endl; return true; }
void FltExportVisitor::writeExternalReference(const osg::ProxyNode &proxy) { uint16 length(216); // Set sane defaults for the override flags unsigned long flags = COLOR_PALETTE_OVERRIDE | MATERIAL_PALETTE_OVERRIDE | TEXTURE_PALETTE_OVERRIDE | LIGHT_POINT_PALETTE_OVERRIDE | SHADER_PALETTE_OVERRIDE; // Selectively turn off overrides for resources we don't need const ParentPools *pp = dynamic_cast<const ParentPools*>(proxy.getUserData()); if (pp && pp->getColorPool()) flags &= ~COLOR_PALETTE_OVERRIDE; if (pp && pp->getMaterialPool()) flags &= ~MATERIAL_PALETTE_OVERRIDE; if (pp && pp->getTexturePool()) flags &= ~TEXTURE_PALETTE_OVERRIDE; if (pp && pp->getLightSourcePool()) flags &= ~LIGHT_SOURCE_PALETTE_OVERRIDE; if (pp && pp->getLPAppearancePool()) flags &= ~LIGHT_POINT_PALETTE_OVERRIDE; if (pp && pp->getShaderPool()) flags &= ~SHADER_PALETTE_OVERRIDE; _records->writeInt16((int16) EXTERNAL_REFERENCE_OP); _records->writeInt16(length); _records->writeString(proxy.getFileName(0), 200); _records->writeInt32(0); // Reserved _records->writeInt32(flags); _records->writeInt16(0); // ViewAsBoundingBox flag _records->writeInt16(0); // Reserved }