bool CNodeStdVLight::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < GetNumJacks_In() ) return false; CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = GetInputToWriteTo( pJ_Out->GetSmartType() ); SetAllocating( !tg ); if ( !tg ) tg = pJ_Out->AllocateVarFromSmartType(); pJ_Out->SetTemporaryVarTarget( tg ); CHLSL_Solver_StdVLight *solver = new CHLSL_Solver_StdVLight( GetUniqueIndex() ); solver->SetResourceType( res ); solver->SetState( m_bStaticLighting, m_bHalfLambert ); for ( int i = 0; i < GetNumJacks_In(); i++ ) solver->AddSourceVar( GetJack_In(i)->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); return true; }
bool CNodeDot::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < 2 ) return false; CJack *pJ1 = GetJack_In( 0 ); CJack *pJ2 = GetJack_In( 1 ); CJack *pJ_Out = GetJack_Out( 0 ); int type0 = pJ_Out->GetSmartType(); const int res = pJ_Out->GetResourceType(); if ( pJ2->GetSmartType() == HLSLVAR_FLOAT1 ) swap( pJ1, pJ2 ); CHLSL_Var *tg = GetInputToWriteTo( type0 ); SetAllocating( !tg ); if ( !tg ) tg = pJ_Out->AllocateVarFromSmartType(); pJ_Out->SetTemporaryVarTarget( tg ); CHLSL_Solver_Dot *solver = new CHLSL_Solver_Dot( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddSourceVar( pJ1->GetTemporaryVarTarget_End() ); solver->AddSourceVar( pJ2->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); //Msg("add solver has %i src vars\n", solver->GetNumSourceVars()); return true; }
void CNodeBreak::UpdateNode() { int iJacksRequired = 1; for ( int i = 0; i < max( GetNumJacks_In(), GetNumJacks_Out() ); i++ ) { const bool bJackInValid = i < GetNumJacks_In(); const bool bJackOutValid = i < GetNumJacks_Out(); if ( bJackInValid && GetJack_In( i )->GetNumBridgesConnected() ) iJacksRequired++; else if ( bJackOutValid && GetJack_Out( i )->GetNumBridgesConnected() ) iJacksRequired++; } //CUtlVector< int >hSmartTypes_Out; //for ( int i = 0; i < GetNumJacks_Out(); i++ ) // hSmartTypes_Out.AddToTail( GetJack_Out(i)->GetSmartType() ); CUtlVector< BridgeRestoreInfo* >m_hRestoreBridges_In; CUtlVector< BridgeRestoreInfo* >m_hRestoreBridges_Out; CreateBridgeRestoreData_In( CBaseNode::BY_COUNT, m_hRestoreBridges_In ); CreateBridgeRestoreData_Out( CBaseNode::BY_COUNT, m_hRestoreBridges_Out ); GenerateJacks_Input( iJacksRequired ); GenerateJacks_Output( iJacksRequired ); RestoreBridgesFromList_In( m_hRestoreBridges_In ); RestoreBridgesFromList_Out( m_hRestoreBridges_Out ); //for ( int i = 0; i < GetNumJacks_Out(); i++ ) // GetJack_Out( i )->SetSmartType( hSmartTypes_Out[i] ); //hSmartTypes_Out.Purge(); OnUpdateHierachy( NULL, NULL ); }
bool CNodeSubtract::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < 2 ) return false; CJack *pJ1 = GetJack_In( 0 ); CJack *pJ2 = GetJack_In( 1 ); CJack *pJ_Out = GetJack_Out( 0 ); int type1 = pJ1->GetSmartType(); int type2 = pJ2->GetSmartType(); const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = GetInputToWriteTo( max( type1, type2 ) ); SetAllocating( !tg ); if ( !tg ) tg = pJ_Out->AllocateVarFromSmartType(); pJ_Out->SetTemporaryVarTarget( tg ); CHLSL_Solver_Subtract *solver = new CHLSL_Solver_Subtract( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddSourceVar( pJ1->GetTemporaryVarTarget_End() ); solver->AddSourceVar( pJ2->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); return true; }
void CNodeUtility_Assign::UpdateOutputs() { if ( !GetNumJacks_Out() || !GetNumJacks_In() ) return; if ( GetErrorLevel() != ERRORLEVEL_NONE ) return SetOutputsUndefined(); GetJack_Out( 0 )->SetSmartType( GetJack_In(0)->GetSmartType() ); }
void CNodeSubtract::UpdateOutputs() { if ( !GetNumJacks_Out() || !GetNumJacks_In() ) return; if ( GetErrorLevel() != ERRORLEVEL_NONE ) return SetOutputsUndefined(); GetJack_Out( 0 )->SetSmartType( max( GetJack_In(0)->GetSmartType(), GetJack_In(1)->GetSmartType() ) ); }
bool CNodeVCompression::CreateSolvers(GenericShaderData *ShaderData) { const bool bUseTangent = m_iCompressionMode == COMPRESSION_MODE_NORMAL_TANGENT; SetAllocating( true ); CHLSL_Solver_VCompression *solver = new CHLSL_Solver_VCompression( GetUniqueIndex() ); solver->SetCompressionType( m_iCompressionMode ); solver->AddSourceVar( GetJack_In(0)->GetTemporaryVarTarget_End() ); solver->AddTargetVar( GetJack_Out(0)->AllocateVarFromSmartType() ); if ( bUseTangent ) { solver->AddSourceVar( GetJack_In(1)->GetTemporaryVarTarget_End() ); solver->AddTargetVar( GetJack_Out(1)->AllocateVarFromSmartType() ); } AddSolver( solver ); return true; }
void CNodeClip::UpdateOutputs() { for ( int i = 0; i < GetNumJacks_In(); i++ ) { if ( GetJack_In( i )->GetNumBridgesConnected() < 1 ) break; int iSmartTypeIn = GetJack_In( i )->GetSmartType(); if ( iSmartTypeIn < 0 ) return SetOutputsUndefined(); GetJack_Out( i )->SetSmartType( iSmartTypeIn ); } }
bool CNodeLightscale::CreateSolvers(GenericShaderData *ShaderData) { CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); SetAllocating( false ); CHLSL_Var *tg = pJ_Out->AllocateVarFromSmartType(); tg->MakeConstantOnly(); CHLSL_Solver_Lightscale *solver = new CHLSL_Solver_Lightscale( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddTargetVar( tg ); solver->SetState( m_iLightScale ); AddSolver( solver ); return true; }
bool CNodeRandom::CreateSolvers(GenericShaderData *ShaderData) { CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = pJ_Out->AllocateVarFromSmartType(); tg->MakeConstantOnly(); CHLSL_Solver_Random *solver = new CHLSL_Solver_Random( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddTargetVar( tg ); solver->SetState( m_iNumComponents, m_flValue_Min, m_flValue_Max ); AddSolver( solver ); return true; }
bool CNodeConstant::CreateSolvers(GenericShaderData *ShaderData) { CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = pJ_Out->AllocateVarFromSmartType(); tg->MakeConstantOnly(); CHLSL_Solver_Constant *solver = new CHLSL_Solver_Constant( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddTargetVar( tg ); solver->SetComponentInfo( m_iChannelInfo ); AddSolver( solver ); return true; }
bool CNodeCustom::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < GetNumJacks_In() ) return false; Assert( m_pCode_Function && Q_strlen( m_pCode_Function ) ); Assert( m_bInline || Q_strlen(m_szFilePath) ); SetAllocating( true ); char *pszFuncString = CKVPacker::ConvertKVSafeString( m_pCode_Function, false ); char *pszGlobalString = CKVPacker::ConvertKVSafeString( m_pCode_Global, false ); int iHierachyType = GetHierachyTypeIterateFullyRecursive(); int envflags = m_iEnvFlags; if ( iHierachyType & HLSLHIERACHY_PS ) envflags &= ~NODECUSTOM_ADDENV_LIGHTING_VS; if ( iHierachyType & HLSLHIERACHY_VS ) envflags &= ~NODECUSTOM_ADDENV_LIGHTING_PS; CHLSL_Solver_Custom *solver = new CHLSL_Solver_Custom( GetUniqueIndex() ); solver->SetResourceType( RESOURCETYPE_VARIABLE ); solver->Init( pszGlobalString, pszFuncString, envflags, m_szFunctionName, m_szFilePath, m_hszVarNames_In, m_hszVarNames_Out, this ); delete [] pszFuncString; delete [] pszGlobalString; for ( int i = 0; i < GetNumJacks_In(); i++ ) solver->AddSourceVar( GetJack_In( i )->GetTemporaryVarTarget_End() ); for ( int i = 0; i < GetNumJacks_Out(); i++ ) { CJack *pJ = GetJack_Out( i ); CHLSL_Var *pTg = pJ->AllocateVarFromSmartType(); solver->AddTargetVar( pTg ); } AddSolver( solver ); return true; }
bool CNodeBreak::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_Out() != GetNumJacks_In() ) return false; CHLSL_Solver_Break *solver = new CHLSL_Solver_Break( GetUniqueIndex() ); for ( int i = 0; i < GetNumJacks_In(); i++ ) { CJack *pJ_In = GetJack_In( i ); if ( pJ_In->GetNumBridgesConnected() < 1 ) break; GetJack_Out( i )->SetTemporaryVarTarget( pJ_In->GetTemporaryVarTarget_End() ); } AddSolver( solver ); return true; }
bool CNodeClip::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < GetNumJacks_In() ) return false; CJack *pJ_In_0 = GetJack_In( 0 ); CJack *pJ_Out_0 = GetJack_Out( 0 ); CHLSL_Var *pt = pJ_In_0->GetTemporaryVarTarget_End(); pJ_Out_0->SetTemporaryVarTarget( pt ); CHLSL_Solver_Clip *solver = new CHLSL_Solver_Clip( GetUniqueIndex() ); solver->AddSourceVar( pt ); solver->AddTargetVar( pt ); AddSolver( solver ); return true; }
bool CNodeMultiply::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < 2 ) return false; CJack *pJ1 = GetJack_In( 0 ); CJack *pJ2 = GetJack_In( 1 ); CJack *pJ_Out = GetJack_Out( 0 ); int type1 = pJ1->GetSmartType(); int type2 = pJ2->GetSmartType(); const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = NULL; if ( type1 == type2 || type1 == HLSLVAR_FLOAT1 || type2 == HLSLVAR_FLOAT1 ) tg = GetInputToWriteTo( max( type1, type2 ) ); else if ( type1 == HLSLVAR_FLOAT3 && type2 == HLSLVAR_MATRIX3X3 ) tg = GetInputToWriteTo( HLSLVAR_FLOAT3 ); else if ( type1 == HLSLVAR_FLOAT3 && type2 == HLSLVAR_MATRIX4X3 ) tg = GetInputToWriteTo( HLSLVAR_FLOAT3 ); else if ( type1 == HLSLVAR_FLOAT4 && type2 == HLSLVAR_MATRIX4X4 ) tg = GetInputToWriteTo( HLSLVAR_FLOAT4 ); else if ( type1 == HLSLVAR_MATRIX3X3 && type2 == HLSLVAR_FLOAT3 ) tg = GetInputToWriteTo( HLSLVAR_FLOAT3 ); SetAllocating( !tg ); if ( !tg ) tg = pJ_Out->AllocateVarFromSmartType(); pJ_Out->SetTemporaryVarTarget( tg ); CHLSL_Solver_Multiply *solver = new CHLSL_Solver_Multiply( GetUniqueIndex() ); solver->SetMatrixRotationOnly( m_bMatrixRotation ); solver->SetResourceType( res ); solver->AddSourceVar( pJ1->GetTemporaryVarTarget_End() ); solver->AddSourceVar( pJ2->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); //Msg("add solver has %i src vars\n", solver->GetNumSourceVars()); return true; }
bool CNodeStdSkinning::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < GetNumJacks_In() ) return false; SetAllocating( true ); CHLSL_Solver_StdSkinning *solver = new CHLSL_Solver_StdSkinning( GetUniqueIndex() ); solver->SetState( m_iSkinMode ); for ( int i = 0; i < GetNumJacks_In(); i++ ) solver->AddSourceVar( GetJack_In(i)->GetTemporaryVarTarget_End() ); for ( int i = 0; i < GetNumJacks_Out(); i++ ) solver->AddTargetVar( GetJack_Out(i)->AllocateVarFromSmartType() ); AddSolver( solver ); return true; }
bool CNodeUtility_Declare::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < 1 ) return false; CJack *pJ1 = GetJack_In( 0 ); CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); SetAllocating( true ); CHLSL_Var *tg = pJ_Out->AllocateVarFromSmartType(); CHLSL_Solver_Utility_Declare *solver = new CHLSL_Solver_Utility_Declare( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddSourceVar( pJ1->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); return true; }
bool CNodeVSInput::CreateSolvers(GenericShaderData *ShaderData) { for ( int i = 0; i < GetNumJacks_Out(); i++ ) { CJack *pJ = GetJack_Out( i ); if ( !pJ->GetNumBridgesConnected() ) continue; const int res = pJ->GetResourceType(); CHLSL_Var *var = pJ->AllocateVarFromSmartType(); var->MakeConstantOnly(); CHLSL_Solver_ReadSemantics *solver = new CHLSL_Solver_ReadSemantics( GetUniqueIndex() ); solver->SendVSSetup( curSetup ); solver->SetResourceType( res ); solver->AddTargetVar( var ); AddSolver( solver ); } SmartCreateDummySolver(); return true; }
bool CNodeUtility_Assign::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < 2 ) return false; CJack *pJ1 = GetJack_In( 0 ); CJack *pJ2 = GetJack_In( 1 ); CJack *pJ_Out = GetJack_Out( 0 ); if ( !pJ1->GetTemporaryVarTarget_End()->CanBeOverwritten() ) { SetOutputsUndefined(); OnShowSolverErrored(); return false; } const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = pJ1->GetTemporaryVarTarget_End_Smart( pJ1->GetSmartType(), true ); Assert( tg ); if ( !tg->CanBeOverwritten() ) tg = NULL; if ( !( tg->GetType() & pJ1->GetSmartType() ) ) tg = NULL; SetAllocating( !tg ); if ( !tg ) tg = pJ_Out->AllocateVarFromSmartType(); pJ_Out->SetTemporaryVarTarget( tg ); CHLSL_Solver_Utility_Assign *solver = new CHLSL_Solver_Utility_Assign( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddSourceVar( pJ1->GetTemporaryVarTarget_End() ); solver->AddSourceVar( pJ2->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); return true; }
bool CNodeBumpBasis::CreateSolvers(GenericShaderData *ShaderData) { for ( int i = 0; i < GetNumJacks_Out(); i++ ) { CJack *pJCur = GetJack_Out(i); if ( !pJCur->GetNumBridgesConnected() && i != 0 ) continue; const int res = pJCur->GetResourceType(); CHLSL_Var *tg = pJCur->AllocateVarFromSmartType(); tg->MakeConstantOnly(); CHLSL_Solver_BumpBasis *solver = new CHLSL_Solver_BumpBasis( GetUniqueIndex() ); solver->SetResourceType( res ); solver->AddTargetVar( tg ); solver->SetState( i ); AddSolver( solver ); } return !!GetNumSolvers(); }
bool CNodeMCompose::CreateSolvers(GenericShaderData *ShaderData) { if ( GetNumJacks_In_Connected() < GetNumJacks_In() ) return false; CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); CHLSL_Var *tg = pJ_Out->AllocateVarFromSmartType(); SetAllocating( true ); CHLSL_Solver_MComp *solver = new CHLSL_Solver_MComp( GetUniqueIndex() ); solver->SetResourceType( res ); solver->SetState( iTargetMatrix, bColumns ); for ( int i = 0; i < GetNumJacks_In(); i++ ) solver->AddSourceVar( GetJack_In(i)->GetTemporaryVarTarget_End() ); solver->AddTargetVar( tg ); AddSolver( solver ); return true; }
bool CNodeCallback::CreateSolvers(GenericShaderData *ShaderData) { if ( !szCallbackName || !Q_strlen( szCallbackName ) || !iNumComponents ) return false; int target = shaderEdit->FindCallback( szCallbackName ); if ( target < 0 ) return false; CJack *pJ_Out = GetJack_Out( 0 ); const int res = pJ_Out->GetResourceType(); SetAllocating( true ); CHLSL_Var *tg = pJ_Out->AllocateVarFromSmartType(); tg->MakeConstantOnly(); CHLSL_Solver_Callback *solver = new CHLSL_Solver_Callback( GetUniqueIndex() ); solver->SetState( target, szCallbackName, iNumComponents ); solver->SetResourceType( res ); solver->AddTargetVar( tg ); AddSolver( solver ); return true; }
void CNodeMultiply::UpdateOutputs() { if ( !GetNumJacks_Out() || !GetNumJacks_In() ) return; if ( GetErrorLevel() != ERRORLEVEL_NONE ) return SetOutputsUndefined(); CJack *pJO = GetJack_Out( 0 ); int vartype_jack_0 = GetJack_In( 0 )->GetSmartType(); int vartype_jack_1 = GetJack_In( 1 )->GetSmartType(); int iGoalSmarttype = HLSLVAR_FLOAT4; // matrices out if ( vartype_jack_0 == HLSLVAR_MATRIX3X3 && vartype_jack_1 == HLSLVAR_MATRIX3X3 ) iGoalSmarttype = HLSLVAR_MATRIX3X3; else if ( vartype_jack_0 == HLSLVAR_MATRIX4X4 && vartype_jack_1 == HLSLVAR_MATRIX4X4 ) iGoalSmarttype = HLSLVAR_MATRIX4X4; else if ( vartype_jack_0 == HLSLVAR_MATRIX4X3 && vartype_jack_1 == HLSLVAR_MATRIX4X4 ) iGoalSmarttype = HLSLVAR_MATRIX4X4; // vector out else if ( vartype_jack_0 == HLSLVAR_FLOAT1 || vartype_jack_1 == HLSLVAR_FLOAT1 ) iGoalSmarttype = max( vartype_jack_0, vartype_jack_1 ); else if ( vartype_jack_0 == vartype_jack_1 ) iGoalSmarttype = vartype_jack_0; // vector transform out else if ( vartype_jack_1 == HLSLVAR_MATRIX3X3 || vartype_jack_0 == HLSLVAR_MATRIX3X3 || vartype_jack_1 == HLSLVAR_MATRIX4X3 || ( vartype_jack_1 == HLSLVAR_MATRIX4X4 && m_bMatrixRotation ) ) iGoalSmarttype = HLSLVAR_FLOAT3; return pJO->SetSmartType( iGoalSmarttype ); //GetJack_Out( 0 )->SetSmartType( max( GetJack_In(0)->GetSmartType(), GetJack_In(1)->GetSmartType() ) ); }
void CNodeLightscale::UpdateNode() { GetJack_Out( 0 )->SetName( GetLightscaleGameString( m_iLightScale ) ); }
void CNodeVSInput::Setup( SETUP_HLSL_VS_Input info ) { int numOutputs = 1; if ( info.bFlexDelta_enabled ) numOutputs += 2; if ( info.bBlendweights_enabled ) numOutputs += 2; if ( info.bNormal_enabled ) numOutputs += 1; if ( info.bTangentspace_enabled ) numOutputs += 2; numOutputs += info.iTexcoords_num; numOutputs += info.iVertexcolor_num; CUtlVector< BridgeRestoreInfo* >m_hRestoreBridges; CreateBridgeRestoreData_Out( CBaseNode::BY_NAME, m_hRestoreBridges ); GenerateJacks_Output( numOutputs ); int curOutput = 0; GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_POS_3 ); LockJackOutput_Flags( curOutput, HLSLVAR_FLOAT3, "Position" );curOutput++; if ( info.bFlexDelta_enabled ) { GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_FLEXDELTA ); LockJackOutput_Flags( curOutput, HLSLVAR_FLOAT3, "Flex offset" );curOutput++; GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_FLEXDELTA_NORMAL ); LockJackOutput_Flags( curOutput, HLSLVAR_FLOAT3, "Flex normal" );curOutput++; } if ( info.bBlendweights_enabled ) { GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_BONE_WEIGHTS ); LockJackOutput_Flags( curOutput, HLSLVAR_FLOAT4, "Bone weights" );curOutput++; GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_BONE_INDICES ); LockJackOutput_Flags( curOutput, HLSLVAR_FLOAT4, "Bone indices" );curOutput++; } if ( info.bNormal_enabled ) { int normalFlag = info.bNormal_enabled_compression ? HLSLVAR_FLOAT4 : HLSLVAR_FLOAT3; GetJack_Out( curOutput )->SetResourceType( info.bNormal_enabled_compression ? RESOURCETYPE_NORMAL_4 : RESOURCETYPE_NORMAL ); LockJackOutput_Flags( curOutput, normalFlag, "Normal" );curOutput++; } if ( info.bTangentspace_enabled ) { int tangentStype = info.bTangentspace_enabled_skinning ? HLSLVAR_FLOAT4 : HLSLVAR_FLOAT3; int tangentSRestype = info.bTangentspace_enabled_skinning ? RESOURCETYPE_TANGENTS_4 : RESOURCETYPE_TANGENTS_3; GetJack_Out( curOutput )->SetResourceType( tangentSRestype ); LockJackOutput_Flags( curOutput, tangentStype, "Tangent S" );curOutput++; GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_TANGENTT ); LockJackOutput_Flags( curOutput, HLSLVAR_FLOAT3, "Tangent T" );curOutput++; } for ( int i = 0; i < info.iTexcoords_num; i++ ) { Assert( i < 3 ); GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_TEXCOORD_0 + i ); LockJackOutput_Flags( curOutput, info.iDataTypeFlag_TexCoords[i], VarArgs("TexCoords %i",i) );curOutput++; } for ( int i = 0; i < info.iVertexcolor_num; i++ ) { Assert( i < 2 ); GetJack_Out( curOutput )->SetResourceType( RESOURCETYPE_COLOR_0 + i ); LockJackOutput_Flags( curOutput, info.iDataTypeFlag_Color[i], VarArgs("Color %i",i) );curOutput++; } curSetup = info; RestoreBridgesFromList_Out( m_hRestoreBridges ); }