public static async Task <Material> GenerateAsync(MaterialDescriptor descriptor, MaterialGeneratorContext context) { context.PushMaterialDescriptor(descriptor); for (int passIndex = 0; passIndex < context.PassCount; passIndex++) { MaterialPass materialPass = context.PushPass(); descriptor.Visit(context); materialPass.PipelineState = await context.CreateGraphicsPipelineStateAsync(); var shaderResources = context.ConstantBufferViews.Concat(context.ShaderResourceViews).Concat(context.UnorderedAccessViews); if (shaderResources.Count() > 0) { materialPass.ShaderResourceViewDescriptorSet = new DescriptorSet(context.GraphicsDevice, shaderResources.Count()); materialPass.ShaderResourceViewDescriptorSet.AddConstantBufferViews(context.ConstantBufferViews); materialPass.ShaderResourceViewDescriptorSet.AddShaderResourceViews(context.ShaderResourceViews); materialPass.ShaderResourceViewDescriptorSet.AddUnorderedAccessViews(context.UnorderedAccessViews); } if (context.Samplers.Count > 0) { materialPass.SamplerDescriptorSet = new DescriptorSet(context.GraphicsDevice, context.Samplers.Count, DescriptorHeapType.Sampler); materialPass.SamplerDescriptorSet.AddSamplers(context.Samplers); } context.PopPass(); } context.PopMaterialDescriptor(); return(context.Material); }
public static async Task <Material> GenerateAsync(MaterialDescriptor descriptor, MaterialGeneratorContext context) { context.PushMaterialDescriptor(descriptor); for (int passIndex = 0; passIndex < context.PassCount; passIndex++) { MaterialPass materialPass = context.PushPass(); context.Visit(descriptor.Attributes); InputElementDescription[] inputElements = new[] { new InputElementDescription("Position", 0, PixelFormat.R32G32B32Float, 0), new InputElementDescription("Normal", 0, PixelFormat.R32G32B32Float, 1), new InputElementDescription("Tangent", 0, PixelFormat.R32G32B32A32Float, 2), new InputElementDescription("TexCoord", 0, PixelFormat.R32G32Float, 3) }; materialPass.PipelineState = await context.CreateGraphicsPipelineStateAsync(inputElements); materialPass.ShaderResourceViewDescriptorSet = context.CreateShaderResourceViewDescriptorSet(); materialPass.SamplerDescriptorSet = context.CreateSamplerDescriptorSet(); context.PopPass(); } context.PopMaterialDescriptor(); return(context.Material); }