@@ -1003,8 +1003,16 @@ const InternedString g_arrayOutputNames[maxArrayInputAdapterSize + 1] = {
10031003const boost::regex g_rampElementRegex ( " ^(.*)\\ [(.*)\\ ]\\ .y(.*)$" );
10041004const boost::regex g_splineAdapterInRegex ( " ^in([0-9]+)(\\ ..*)?$" );
10051005
1006+ struct RampInputAdapterParameters
1007+ {
1008+ InternedString adapterHandle;
1009+ size_t origSize;
1010+ size_t expandedSize;
1011+ int knotOffset;
1012+ };
1013+
10061014template < typename TypedRamp >
1007- std::tuple< InternedString, size_t , size_t , size_t > createRampInputAdapter (
1015+ RampInputAdapterParameters createRampInputAdapter (
10081016 ShaderNetwork *network, const TypedData<TypedRamp> *rampData,
10091017 const IECore::CompoundDataMap &newParameters, const IECore::InternedString &rampParameterName,
10101018 const ShaderNetwork::Parameter &destination
@@ -1052,7 +1060,7 @@ std::tuple< InternedString, size_t, size_t, size_t > createRampInputAdapter(
10521060 { destination.shader , splineValuesName }
10531061 ) );
10541062
1055- return std::make_tuple ( adapterHandle, rampData->readable ().points .size (), splineValues.size (), rampData->readable ().oslStartPointMultiplicity () ) ;
1063+ return { adapterHandle, rampData->readable ().points .size (), splineValues.size (), rampData->readable ().oslStartPointMultiplicity () } ;
10561064}
10571065
10581066} // namespace
@@ -1238,7 +1246,7 @@ void ShaderNetworkAlgo::expandRamps( ShaderNetwork *network, std::string targetP
12381246 // parameter for the shader, and holds the name of the adapter shader, and the offset we
12391247 // need to use when accessing the knot vector.
12401248
1241- std::map< IECore::InternedString, std::tuple< IECore::InternedString, size_t , size_t , size_t > > currentRampArrayAdapters;
1249+ std::map< IECore::InternedString, RampInputAdapterParameters > currentRampArrayAdapters;
12421250
12431251 std::vector< ShaderNetwork::Connection > connectionsToAdd;
12441252 ShaderNetwork::ConnectionRange inputConnections = network->inputConnections ( s.first );
@@ -1271,7 +1279,7 @@ void ShaderNetworkAlgo::expandRamps( ShaderNetwork *network, std::string targetP
12711279 }
12721280
12731281 // Insert a conversion shader to handle connection to component
1274- auto [ adapterIter, newlyInserted ] = currentRampArrayAdapters.insert ( { parameterName, std::make_tuple ( IECore::InternedString (), 0 , 0 , 0 ) } );
1282+ auto [ adapterIter, newlyInserted ] = currentRampArrayAdapters.insert ( { parameterName, RampInputAdapterParameters ( ) } );
12751283 if ( newlyInserted )
12761284 {
12771285 if ( colorRampData )
@@ -1288,7 +1296,7 @@ void ShaderNetworkAlgo::expandRamps( ShaderNetwork *network, std::string targetP
12881296 }
12891297 }
12901298
1291- const auto [ adapterHandle, origSize, expandedSize, knotOffset ] = adapterIter->second ;
1299+ const RampInputAdapterParameters &adapterParms = adapterIter->second ;
12921300
12931301 int elementId;
12941302 std::string_view elementIdString ( stringViewFromMatch ( destName, rampElementMatch, 2 ) );
@@ -1301,9 +1309,9 @@ void ShaderNetworkAlgo::expandRamps( ShaderNetwork *network, std::string targetP
13011309 throw IECore::Exception ( StringAlgo::concat ( " Invalid ramp point index " , elementIdString ) );
13021310 }
13031311
1304- if ( elementId < 0 || elementId >= (int )origSize )
1312+ if ( elementId < 0 || elementId >= (int )adapterParms. origSize )
13051313 {
1306- throw IECore::Exception ( " Connection to ramp index " + std::to_string ( elementId ) + " is out of range in ramp with " + std::to_string ( origSize ) + " points." );
1314+ throw IECore::Exception ( " Connection to ramp index " + std::to_string ( elementId ) + " is out of range in ramp with " + std::to_string ( adapterParms. origSize ) + " points." );
13071315 }
13081316
13091317 // Map connections to the corresponding parameters of the expanded ramp. When mapping the
@@ -1321,16 +1329,16 @@ void ShaderNetworkAlgo::expandRamps( ShaderNetwork *network, std::string targetP
13211329 if ( elementId == 0 )
13221330 {
13231331 outIndexMin = 0 ;
1324- outIndexMax = knotOffset;
1332+ outIndexMax = adapterParms. knotOffset ;
13251333 }
1326- else if ( elementId == (int )( origSize - 1 ) )
1334+ else if ( elementId == (int )( adapterParms. origSize - 1 ) )
13271335 {
1328- outIndexMin = elementId + knotOffset;
1329- outIndexMax = expandedSize - 1 ;
1336+ outIndexMin = elementId + adapterParms. knotOffset ;
1337+ outIndexMax = adapterParms. expandedSize - 1 ;
13301338 }
13311339 else
13321340 {
1333- outIndexMin = outIndexMax = elementId + knotOffset;
1341+ outIndexMin = outIndexMax = elementId + adapterParms. knotOffset ;
13341342 }
13351343
13361344 for ( int i = outIndexMin; i <= outIndexMax; i++ )
@@ -1341,7 +1349,7 @@ void ShaderNetworkAlgo::expandRamps( ShaderNetwork *network, std::string targetP
13411349 destinationName = StringAlgo::concat ( destinationName.string (), stringViewFromMatch ( destName, rampElementMatch, 3 ) );
13421350 }
13431351
1344- network->addConnection ( { connection.source , { adapterHandle, destinationName } } );
1352+ network->addConnection ( { connection.source , { adapterParms. adapterHandle , destinationName } } );
13451353 }
13461354 }
13471355
0 commit comments