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; }
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) ); }
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; }
// _filenameList static bool checkFileNames( const osg::ProxyNode& node ) { return node.getNumFileNames()>0; }