Example #1
0
        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);
        }