/// <summary> /// Assign the Keys to the textures in the tree. /// </summary> /// <param name="node">The node to look into.</param> /// <param name="getTextureKey">The delegate function to get the correct key.</param> private void AssignParameterKeys(IMaterialNode node, TextureKeyGetter getTextureKey) { var allTextures = GatherTextureValues(node).Distinct().ToList(); var textureKeys = new Dictionary <string, ParameterKey <Graphics.Texture> >(); foreach (var texSlot in allTextures) { //TODO: compare texture sampling method ParameterKey <Graphics.Texture> pk; var textureName = texSlot.TextureName; if (textureName == null || !textureKeys.TryGetValue(textureName, out pk)) { pk = getTextureKey(this); if (textureName != null) { textureKeys.Add(textureName, pk); } } texSlot.UsedParameterKey = pk; texSlot.Sampler.SamplerParameterKey = TexturingKeys.Sampler; } }
/// <summary> /// Assign the Keys to the textures and the samplers in the list. /// </summary> /// <param name="nodes">List of nodes.</param> /// <param name="samplers">The list of sampler existing outside of MaterialTextureNode</param> /// <param name="getTextureKey">The delegate function to get the correct key.</param> private void AssignParameterKeys(IEnumerable <MaterialTextureNode> nodes, IEnumerable <NodeParameterSampler> samplers, TextureKeyGetter getTextureKey) { var textureKeys = new Dictionary <IMaterialNode, ParameterKey <Graphics.Texture> >(); var samplerKeys = new Dictionary <SamplerDescription, ParameterKey <SamplerState> >(); int samplerIndex = 0; // assign the predefined keys foreach (var texSlot in nodes.Distinct()) { if (!texSlot.AutoAssignKey && texSlot.Key != null) { texSlot.UsedParameterKey = (ParameterKey <Graphics.Texture>)texSlot.Key; textureKeys.Add(texSlot, texSlot.UsedParameterKey); usedTextureKeys.Add(texSlot.UsedParameterKey); } } // assign/generate all the keys foreach (var texSlot in nodes.Distinct()) { ParameterKey <Graphics.Texture> textureParameterKey; if (!textureKeys.TryGetValue(texSlot, out textureParameterKey)) { textureParameterKey = getTextureKey(this); textureKeys.Add(texSlot, textureParameterKey); } texSlot.UsedParameterKey = textureParameterKey; SetSamplerKey(texSlot.Sampler, samplerKeys, ref samplerIndex); } if (samplers != null) { foreach (var gen in samplers) { SetSamplerKey(gen, samplerKeys, ref samplerIndex); } } }