本文整理匯總了C#中System.Function.ResolveLocalParameter方法的典型用法代碼示例。如果您正苦於以下問題:C# Function.ResolveLocalParameter方法的具體用法?C# Function.ResolveLocalParameter怎麽用?C# Function.ResolveLocalParameter使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類System.Function
的用法示例。
在下文中一共展示了Function.ResolveLocalParameter方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: GenerateLocalSplitParameters
/// <summary>
/// Generates local parameters for the split parameters and perform packing/unpacking operation using them.
/// </summary>
/// <param name="fun"> </param>
/// <param name="progType"> </param>
/// <param name="mergedParams"> </param>
/// <param name="splitParams"> </param>
/// <param name="localParamsMap"> </param>
internal static void GenerateLocalSplitParameters( Function func, GpuProgramType progType,
List<MergeParameter> mergedParams,
List<Parameter> splitParams,
Dictionary<Parameter, Parameter> localParamsMap )
{
//No split params created.
if ( splitParams.Count == 0 )
{
return;
}
//Create the local parameters + map from source to local
for ( int i = 0; i < splitParams.Count; i++ )
{
Parameter srcParameter = splitParams[ i ];
Parameter localParameter = func.ResolveLocalParameter( srcParameter.Semantic, srcParameter.Index,
"lssplit_" + srcParameter.Name, srcParameter.Type );
localParamsMap.Add( srcParameter, localParameter );
}
int invocationCounter = 0;
//Establish link between the local parameter to the merged parameter.
for ( int i = 0; i < mergedParams.Count; i++ )
{
var curMergeParameter = mergedParams[ i ];
for ( int p = 0; p < curMergeParameter.SourceParameterCount; p++ )
{
Parameter srcMergedParameter = curMergeParameter.SourceParameter[ p ];
if ( localParamsMap.ContainsKey( srcMergedParameter ) )
{
//Case it is the vertex shader -> assign the local parameter to the output merged parameter
if ( progType == GpuProgramType.Vertex )
{
var curFuncInvocation = new FunctionInvocation( FFPRenderState.FFPFuncAssign,
(int)
FFPRenderState.FFPVertexShaderStage.
VSPostProcess, invocationCounter++ );
curFuncInvocation.PushOperand( localParamsMap[ srcMergedParameter ], Operand.OpSemantic.In,
curMergeParameter.GetSourceParameterMask( p ) );
curFuncInvocation.PushOperand(
curMergeParameter.GetDestinationParameter( (int)Operand.OpSemantic.Out, i ),
Operand.OpSemantic.Out, curMergeParameter.GetDestinationParameterMask( p ) );
func.AddAtomInstance( curFuncInvocation );
}
else if ( progType == GpuProgramType.Fragment )
{
var curFuncInvocation = new FunctionInvocation( FFPRenderState.FFPFuncAssign,
(int)
FFPRenderState.FFPFragmentShaderStage.
PSPreProcess, invocationCounter++ );
curFuncInvocation.PushOperand(
curMergeParameter.GetDestinationParameter( (int)Operand.OpSemantic.In, i ),
Operand.OpSemantic.In, curMergeParameter.GetDestinationParameterMask( p ) );
curFuncInvocation.PushOperand( localParamsMap[ srcMergedParameter ], Operand.OpSemantic.Out,
curMergeParameter.GetSourceParameterMask( p ) );
func.AddAtomInstance( curFuncInvocation );
}
}
}
}
}