/// <summary>
/// Copy the details of this pass to the target pass.
/// </summary>
/// <param name="target">Destination pass to copy this pass's attributes to.</param>
public void CopyTo( Pass target )
{
target._name = _name;
target._hashCode = _hashCode;
// surface
target._ambient = _ambient.Clone();
target._diffuse = _diffuse.Clone();
target._specular = _specular.Clone();
target._emissive = _emissive.Clone();
target._shininess = _shininess;
target._tracking = _tracking;
// fog
target._fogOverride = _fogOverride;
target._fogMode = _fogMode;
target._fogColor = _fogColor.Clone();
target._fogStart = _fogStart;
target._fogEnd = _fogEnd;
target._fogDensity = _fogDensity;
// default blending
target._sourceBlendFactor = _sourceBlendFactor;
target._destinationBlendFactor = _destinationBlendFactor;
target._depthCheck = _depthCheck;
target._depthWrite = _depthWrite;
target._alphaRejectFunction = _alphaRejectFunction;
target._alphaRejectValue = _alphaRejectValue;
target._colorWriteEnabled = _colorWriteEnabled;
target._depthFunction = _depthFunction;
target._depthBiasConstant = _depthBiasConstant;
target._depthBiasSlopeScale = _depthBiasSlopeScale;
target._cullingMode = _cullingMode;
target._manualCullingMode = _manualCullingMode;
target._lightingEnabled = _lightingEnabled;
target._maxSimultaneousLights = _maxSimultaneousLights;
target._iteratePerLight = _iteratePerLight;
target._runOnlyForOneLightType = _runOnlyForOneLightType;
target._onlyLightType = _onlyLightType;
target._shadingMode = _shadingMode;
target._polygonMode = _polygonMode;
target.IterationCount = IterationCount;
// vertex program
if ( _vertexProgramUsage != null )
{
target._vertexProgramUsage = _vertexProgramUsage.Clone();
}
else
{
target._vertexProgramUsage = null;
}
// shadow caster vertex program
if ( shadowCasterVertexProgramUsage != null )
{
target.shadowCasterVertexProgramUsage = shadowCasterVertexProgramUsage.Clone();
}
else
{
target.shadowCasterVertexProgramUsage = null;
}
// shadow receiver vertex program
if ( _shadowReceiverVertexProgramUsage != null )
{
target._shadowReceiverVertexProgramUsage = _shadowReceiverVertexProgramUsage.Clone();
}
else
{
target._shadowReceiverVertexProgramUsage = null;
}
// fragment program
if ( _fragmentProgramUsage != null )
{
target._fragmentProgramUsage = _fragmentProgramUsage.Clone();
}
else
{
target._fragmentProgramUsage = null;
}
// shadow caster fragment program
if ( _shadowCasterFragmentProgramUsage != null )
{
target._shadowCasterFragmentProgramUsage = _shadowCasterFragmentProgramUsage.Clone();
}
else
{
target._shadowCasterFragmentProgramUsage = null;
}
// shadow receiver fragment program
if ( _shadowReceiverFragmentProgramUsage != null )
{
target._shadowReceiverFragmentProgramUsage = _shadowReceiverFragmentProgramUsage.Clone();
}
else
{
target._shadowReceiverFragmentProgramUsage = null;
}
// Clear texture units but doesn't notify need recompilation in the case
// we are cloning, The parent material will take care of this.
target.textureUnitStates.Clear();
// Copy texture units
for ( int i = 0; i < textureUnitStates.Count; i++ )
{
TextureUnitState newState = new TextureUnitState( target );
TextureUnitState src = (TextureUnitState)textureUnitStates[ i ];
src.CopyTo( newState );
target.textureUnitStates.Add( newState );
}
target.DirtyHash();
}