/// <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.destBlendFactor = destBlendFactor;
target.depthCheck = depthCheck;
target.depthWrite = depthWrite;
target.alphaRejectFunction = alphaRejectFunction;
target.alphaRejectValue = alphaRejectValue;
target.colorWrite = colorWrite;
target.depthFunc = depthFunc;
target.depthBiasConstant = depthBiasConstant;
target.depthBiasSlopeScale = depthBiasSlopeScale;
target.cullMode = cullMode;
target.manualCullMode = manualCullMode;
target.lightingEnabled = lightingEnabled;
target.maxLights = maxLights;
target.startLight = startLight;
target.runOncePerLight = runOncePerLight;
target.lightsPerIteration = lightsPerIteration;
target.runOnlyForOneLightType = runOnlyForOneLightType;
target.onlyLightType = onlyLightType;
target.shadeOptions = shadeOptions;
target.sceneDetail = sceneDetail;
target.passIterationCount = passIterationCount;
target.pointSize = pointSize;
target.pointMinSize = pointMinSize;
target.pointMaxSize = pointMaxSize;
target.pointSpritesEnabled = pointSpritesEnabled;
target.pointAttenuationEnabled = pointAttenuationEnabled;
target.pointAttenuationConstant = pointAttenuationConstant;
target.pointAttenuationLinear = pointAttenuationLinear;
target.pointAttenuationQuadratic = pointAttenuationQuadratic;
target.contentTypeLookupBuilt = contentTypeLookupBuilt;
// 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;
}
// texture units
target.RemoveAllTextureUnitStates();
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();
}