Beispiel #1
0
        public FixedFunctionShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources,
            MeshShaderResources meshShaderResources)
            : base(
                graphicsDevice,
                "FixedFunction",
                new GlobalResourceSetIndices(0u, LightingType.Object, 1u, 2u, 3u, 7u),
                MeshShaderResources.MeshVertex.VertexDescriptors)
        {
            _pipelines = new Dictionary <PipelineKey, Pipeline>();

            _materialResourceLayout = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceLayout(
                                                        new ResourceLayoutDescription(
                                                            new ResourceLayoutElementDescription("MaterialConstants", ResourceKind.UniformBuffer, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("Texture0", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("Texture1", ResourceKind.TextureReadOnly, ShaderStages.Fragment))));

            _resourceLayouts = meshShaderResources.CreateResourceLayouts(
                globalShaderResources,
                _materialResourceLayout);
        }
Beispiel #2
0
        protected ShaderMaterialShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources,
            MeshShaderResources meshShaderResources,
            string shaderName,
            Func <IEnumerable <ResourceBinding> > createMaterialResourceBindings)
            : base(
                graphicsDevice,
                shaderName,
                new GlobalResourceSetIndices(0u, LightingType.Object, 1u, 2u, 3u, 7u),
                MeshShaderResources.MeshVertex.VertexDescriptors)
        {
            var materialResourceBindings = createMaterialResourceBindings().ToArray();

            MaterialResourceBindings = materialResourceBindings.ToDictionary(x => x.Description.Name);

            var materialResourceLayoutElements = materialResourceBindings
                                                 .Select(x => x.Description)
                                                 .ToArray();

            _materialResourceLayout = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceLayout(
                                                        new ResourceLayoutDescription(materialResourceLayoutElements)));

            var resourceLayouts = meshShaderResources.CreateResourceLayouts(
                globalShaderResources,
                _materialResourceLayout);

            Pipeline = AddDisposable(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                                         new GraphicsPipelineDescription(
                                             BlendStateDescription.SingleDisabled,
                                             DepthStencilStateDescription.DepthOnlyLessEqual,
                                             RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise,
                                             PrimitiveTopology.TriangleList,
                                             ShaderSet.Description,
                                             resourceLayouts,
                                             RenderPipeline.GameOutputDescription)));
        }