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) );
}
Exemple #2
0
 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 );
 }
Exemple #3
0
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;
}
Exemple #4
0
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
}