public static MaterialShaderResult Generate(MaterialDescriptor materialDescriptor, MaterialGeneratorContext context, string rootMaterialFriendlyName) { if (materialDescriptor == null) throw new ArgumentNullException("materialDescriptor"); if (context == null) throw new ArgumentNullException("context"); var result = new MaterialShaderResult(); context.Log = result; var material = context.Material; result.Material = context.Material; context.Parameters = material.Parameters; context.PushMaterial(materialDescriptor, rootMaterialFriendlyName); context.PushLayer(); materialDescriptor.Visit(context); context.PopLayer(); context.PopMaterial(); if (!material.Parameters.ContainsKey(MaterialKeys.TessellationShader)) material.Parameters.Set(MaterialKeys.TessellationShader, null); material.Parameters.Set(MaterialKeys.VertexStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Pixel)); material.Parameters.Set(MaterialKeys.VertexStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Pixel)); return result; }
public static MaterialShaderResult Generate(MaterialDescriptor materialDescriptor, MaterialGeneratorContext context = null) { if (materialDescriptor == null) throw new ArgumentNullException("materialDescriptor"); var result = new MaterialShaderResult(); if (context == null) { context = new MaterialGeneratorContext(new Material()); } context.Log = result; var material = context.Material; result.Material = context.Material; context.Parameters = material.Parameters; context.PushLayer(); materialDescriptor.Visit(context); context.PopLayer(); material.Parameters.Set(MaterialKeys.VertexStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Pixel)); material.Parameters.Set(MaterialKeys.VertexStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Pixel)); return result; }
public static MaterialShaderResult Generate(MaterialDescriptor materialDescriptor, MaterialGeneratorContext context = null) { if (materialDescriptor == null) { throw new ArgumentNullException("materialDescriptor"); } var result = new MaterialShaderResult(); if (context == null) { context = new MaterialGeneratorContext(new Material()); } context.Log = result; var material = context.Material; result.Material = context.Material; context.Parameters = material.Parameters; context.PushLayer(); materialDescriptor.Visit(context); context.PopLayer(); material.Parameters.Set(MaterialKeys.VertexStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Pixel)); material.Parameters.Set(MaterialKeys.VertexStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Pixel)); return(result); }
/// <summary> /// Creates a new material from the specified descriptor. /// </summary> /// <param name="descriptor">The material descriptor.</param> /// <returns>An instance of a <see cref="Material"/>.</returns> /// <exception cref="System.ArgumentNullException">descriptor</exception> /// <exception cref="System.InvalidOperationException">If an error occurs with the material description</exception> public static Material New(MaterialDescriptor descriptor) { if (descriptor == null) throw new ArgumentNullException("descriptor"); var context = new MaterialGeneratorContext(new Material()); var result = MaterialGenerator.Generate(descriptor, context); if (result.HasErrors) { throw new InvalidOperationException(string.Format("Error when creating the material [{0}]", result.ToText())); } return result.Material; }
public static MaterialShaderResult Generate(MaterialDescriptor materialDescriptor, MaterialGeneratorContext context, string rootMaterialFriendlyName) { if (materialDescriptor == null) { throw new ArgumentNullException("materialDescriptor"); } if (context == null) { throw new ArgumentNullException("context"); } var result = new MaterialShaderResult(); context.Log = result; var material = context.Material; result.Material = context.Material; context.Parameters = material.Parameters; context.PushMaterial(materialDescriptor, rootMaterialFriendlyName); context.PushLayer(); materialDescriptor.Visit(context); context.PopLayer(); context.PopMaterial(); if (!material.Parameters.ContainsKey(MaterialKeys.TessellationShader)) { material.Parameters.Set(MaterialKeys.TessellationShader, null); } material.Parameters.Set(MaterialKeys.VertexStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageSurfaceShaders, context.GenerateSurfaceShader(MaterialShaderStage.Pixel)); material.Parameters.Set(MaterialKeys.VertexStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageStreamInitializer, context.GenerateStreamInitializer(MaterialShaderStage.Pixel)); return(result); }
/// <summary> /// Creates a new material from the specified descriptor. /// </summary> /// <param name="device"></param> /// <param name="descriptor">The material descriptor.</param> /// <returns>An instance of a <see cref="Material"/>.</returns> /// <exception cref="System.ArgumentNullException">descriptor</exception> /// <exception cref="System.InvalidOperationException">If an error occurs with the material description</exception> public static Material New(GraphicsDevice device, MaterialDescriptor descriptor) { if (descriptor == null) throw new ArgumentNullException("descriptor"); var context = new MaterialGeneratorContext(new Material()); var result = MaterialGenerator.Generate(descriptor, context, string.Format("{0}:RuntimeMaterial", descriptor.MaterialId)); if (result.HasErrors) { throw new InvalidOperationException(string.Format("Error when creating the material [{0}]", result.ToText())); } var material = result.Material; var blendState = material.Parameters.Get(Graphics.Effect.BlendStateKey); if (blendState != null && blendState.GraphicsDevice == null) { var newState = BlendState.New(device, blendState.Description); material.Parameters.Set(Effect.BlendStateKey, newState); } // TODO: Add other states? return material; }