MCPcopy Create free account
hub / github.com/ImageEngine/cortex / convertObjectVector

Method convertObjectVector

src/IECoreScene/ShaderNetworkAlgo.cpp:722–777  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

720} // namespace
721
722ShaderNetworkPtr ShaderNetworkAlgo::convertObjectVector( const ObjectVector *network )
723{
724 ShaderNetworkPtr result = new ShaderNetwork;
725 for( const auto &member : network->members() )
726 {
727 const Shader *shader = runTimeCast<const Shader>( member.get() );
728 if( !shader )
729 {
730 continue;
731 }
732
733 InternedString handle = g_defaultHandle;
734 ShaderPtr shaderCopy = shader->copy();
735 std::vector<ShaderNetwork::Connection> connections;
736
737 for( auto it = shaderCopy->parameters().begin(); it != shaderCopy->parameters().end(); )
738 {
739 bool erase = false;
740 if( const auto *stringData = runTimeCast<const StringData>( it->second.get() ) )
741 {
742 if( it->first == g_handle )
743 {
744 handle = stringData->readable();
745 erase = true;
746 }
747 else if( auto p = linkedParameter( stringData->readable() ) )
748 {
749 connections.push_back( { p, { InternedString(), it->first } } );
750 erase = true;
751 }
752 }
753
754 if( erase )
755 {
756 it = shaderCopy->parameters().erase( it );
757 }
758 else
759 {
760 ++it;
761 }
762 }
763
764 result->addShader( handle, std::move( shaderCopy ) );
765 for( const auto &c : connections )
766 {
767 result->addConnection( { c.source, { handle, c.destination.name } } );
768 }
769
770 if( &member == &network->members().back() )
771 {
772 result->setOutput( { handle } );
773 }
774 }
775
776 return result;
777}
778
779//////////////////////////////////////////////////////////////////////////

Callers 1

Calls 12

linkedParameterFunction · 0.85
InternedStringFunction · 0.85
readableMethod · 0.80
getMethod · 0.45
copyMethod · 0.45
beginMethod · 0.45
parametersMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45
addShaderMethod · 0.45
addConnectionMethod · 0.45
setOutputMethod · 0.45

Tested by 1