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(null); materialDescriptor.Visit(context); context.PopLayer(); context.PopMaterial(); material.Parameters.Set(MaterialKeys.VertexStageSurfaceShaders, context.ComputeShaderSource(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageSurfaceShaders, context.ComputeShaderSource(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageSurfaceShaders, context.ComputeShaderSource(MaterialShaderStage.Pixel)); material.Parameters.Set(MaterialKeys.VertexStageStreamInitializer, context.GenerateStreamInitializers(MaterialShaderStage.Vertex)); material.Parameters.Set(MaterialKeys.DomainStageStreamInitializer, context.GenerateStreamInitializers(MaterialShaderStage.Domain)); material.Parameters.Set(MaterialKeys.PixelStageStreamInitializer, context.GenerateStreamInitializers(MaterialShaderStage.Pixel)); return result; }
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; result.Material = context.Material; context.PushMaterial(materialDescriptor, rootMaterialFriendlyName); context.Step = MaterialGeneratorStep.PassesEvaluation; materialDescriptor.Visit(context); context.Step = MaterialGeneratorStep.GenerateShader; for (int pass = 0; pass < context.PassCount; ++pass) { var materialPass = context.PushPass(); context.PushLayer(null); materialDescriptor.Visit(context); context.PopLayer(); materialPass.Parameters.Set(MaterialKeys.VertexStageSurfaceShaders, context.ComputeShaderSource(MaterialShaderStage.Vertex)); materialPass.Parameters.Set(MaterialKeys.DomainStageSurfaceShaders, context.ComputeShaderSource(MaterialShaderStage.Domain)); materialPass.Parameters.Set(MaterialKeys.PixelStageSurfaceShaders, context.ComputeShaderSource(MaterialShaderStage.Pixel)); materialPass.Parameters.Set(MaterialKeys.VertexStageStreamInitializer, context.GenerateStreamInitializers(MaterialShaderStage.Vertex)); materialPass.Parameters.Set(MaterialKeys.DomainStageStreamInitializer, context.GenerateStreamInitializers(MaterialShaderStage.Domain)); materialPass.Parameters.Set(MaterialKeys.PixelStageStreamInitializer, context.GenerateStreamInitializers(MaterialShaderStage.Pixel)); context.PopPass(); } context.PopMaterial(); return(result); }
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); }