public MeshDepthShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources,
            MeshShaderResources meshShaderResources)
            : base(
                graphicsDevice,
                "MeshDepth",
                new GlobalResourceSetIndices(0u, LightingType.None, null, null, null, 2u),
                MeshShaderResources.MeshVertex.VertexDescriptors)
        {
            var depthRasterizerState = RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise;

            depthRasterizerState.DepthClipEnabled   = false;
            depthRasterizerState.ScissorTestEnabled = false;

            var resourceLayouts = new[]
            {
                globalShaderResources.GlobalConstantsResourceLayout,
                meshShaderResources.MeshConstantsResourceLayout,
                meshShaderResources.RenderItemConstantsResourceLayout,
                meshShaderResources.SkinningResourceLayout
            };

            Pipeline = AddDisposable(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                                         new GraphicsPipelineDescription(
                                             BlendStateDescription.SingleDisabled,
                                             DepthStencilStateDescription.DepthOnlyLessEqual,
                                             depthRasterizerState,
                                             PrimitiveTopology.TriangleList,
                                             ShaderSet.Description,
                                             resourceLayouts,
                                             ShadowData.DepthPassDescription)));
        }
Exemplo n.º 2
0
        public RoadShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources)
            : base(
                graphicsDevice,
                "Road",
                new GlobalResourceSetIndices(0u, LightingType.Terrain, 1u, 2u, 3u, null),
                RoadVertex.VertexDescriptor)
        {
            _materialResourceLayout = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceLayout(
                                                        new ResourceLayoutDescription(
                                                            new ResourceLayoutElementDescription("Texture", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("Sampler", ResourceKind.Sampler, ShaderStages.Fragment))));

            var resourceLayouts = new[]
            {
                globalShaderResources.GlobalConstantsResourceLayout,
                globalShaderResources.GlobalLightingConstantsResourceLayout,
                globalShaderResources.GlobalCloudResourceLayout,
                globalShaderResources.GlobalShadowResourceLayout,
                _materialResourceLayout
            };

            Pipeline = AddDisposable(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                                         new GraphicsPipelineDescription(
                                             BlendStateDescription.SingleAlphaBlend,
                                             DepthStencilStateDescription.DepthOnlyLessEqualRead,
                                             RasterizerStateDescriptionUtility.CullNoneSolid, // TODO
                                             PrimitiveTopology.TriangleList,
                                             ShaderSet.Description,
                                             resourceLayouts,
                                             RenderPipeline.GameOutputDescription)));
        }
Exemplo n.º 3
0
        public ShaderResourceManager(
            GraphicsDevice graphicsDevice,
            StandardGraphicsResources standardGraphicsResources)
        {
            using (GameTrace.TraceDurationEvent("ShaderResourceManager()"))
            {
                Global = AddDisposable(new GlobalShaderResources(graphicsDevice, standardGraphicsResources.SolidWhiteTexture));
                Mesh   = AddDisposable(new MeshShaderResources(graphicsDevice));

                RadiusCursor = AddDisposable(new RadiusCursorDecalShaderResources(graphicsDevice, standardGraphicsResources.Aniso4xClampSampler));

                FixedFunction = AddDisposable(new FixedFunctionShaderResources(graphicsDevice, Global, Mesh));
                MeshDepth     = AddDisposable(new MeshDepthShaderResources(graphicsDevice, Global, Mesh));
                Particle      = AddDisposable(new ParticleShaderResources(graphicsDevice, Global));
                Road          = AddDisposable(new RoadShaderResources(graphicsDevice, Global, RadiusCursor));
                Sprite        = AddDisposable(new SpriteShaderResources(graphicsDevice));
                Terrain       = AddDisposable(new TerrainShaderResources(graphicsDevice, Global, RadiusCursor));
                Water         = AddDisposable(new WaterShaderResources(graphicsDevice, Global));

                _shaderMaterialResources = new Dictionary <string, ShaderMaterialShaderResources>
                {
                    { "NormalMapped", AddDisposable(new NormalMappedShaderResources(graphicsDevice, Global, Mesh)) },
                    { "Simple", AddDisposable(new SimpleShaderResources(graphicsDevice, Global, Mesh)) }
                };
            }
        }
Exemplo n.º 4
0
        public GlobalShaderResourceData(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources)
        {
            _globalConstantBufferShared = AddDisposable(new ConstantBuffer <GlobalShaderResources.GlobalConstantsShared>(graphicsDevice, "GlobalConstantsShared"));
            _globalConstantBufferVS     = AddDisposable(new ConstantBuffer <GlobalShaderResources.GlobalConstantsVS>(graphicsDevice, "GlobalConstantsVS"));
            _globalConstantBufferPS     = AddDisposable(new ConstantBuffer <GlobalShaderResources.GlobalConstantsPS>(graphicsDevice, "GlobalConstantsPS"));

            GlobalConstantsResourceSet = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceSet(
                                                           new ResourceSetDescription(
                                                               globalShaderResources.GlobalConstantsResourceLayout,
                                                               _globalConstantBufferShared.Buffer,
                                                               _globalConstantBufferVS.Buffer,
                                                               _globalConstantBufferPS.Buffer)));

            _globalLightingBufferVS = AddDisposable(new ConstantBuffer <GlobalShaderResources.LightingConstantsVS>(graphicsDevice, "GlobalLightingConstantsVS (terrain)"));
            SetGlobalLightingBufferVS(graphicsDevice);

            _globalLightingTerrainBufferPS = AddDisposable(new ConstantBuffer <GlobalShaderResources.LightingConstantsPS>(graphicsDevice, "GlobalLightingConstantsPS (terrain)"));
            _globalLightingObjectBufferPS  = AddDisposable(new ConstantBuffer <GlobalShaderResources.LightingConstantsPS>(graphicsDevice, "GlobalLightingConstantsPS (objects)"));

            GlobalLightingConstantsTerrainResourceSet = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceSet(
                                                                          new ResourceSetDescription(
                                                                              globalShaderResources.GlobalLightingConstantsResourceLayout,
                                                                              _globalLightingBufferVS.Buffer,
                                                                              _globalLightingTerrainBufferPS.Buffer)));

            GlobalLightingConstantsObjectResourceSet = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceSet(
                                                                         new ResourceSetDescription(
                                                                             globalShaderResources.GlobalLightingConstantsResourceLayout,
                                                                             _globalLightingBufferVS.Buffer,
                                                                             _globalLightingObjectBufferPS.Buffer)));
        }
Exemplo n.º 5
0
 public SimpleShaderResources(
     GraphicsDevice graphicsDevice,
     GlobalShaderResources globalShaderResources,
     MeshShaderResources meshShaderResources)
     : base(
         graphicsDevice,
         globalShaderResources,
         meshShaderResources,
         "Simple",
         CreateMaterialResourceBindings)
 {
 }
Exemplo n.º 6
0
 public NormalMappedShaderResources(
     GraphicsDevice graphicsDevice,
     GlobalShaderResources globalShaderResources,
     MeshShaderResources meshShaderResources)
     : base(
         graphicsDevice,
         globalShaderResources,
         meshShaderResources,
         "NormalMapped",
         CreateMaterialResourceBindings)
 {
 }
Exemplo n.º 7
0
 public ResourceLayout[] CreateResourceLayouts(
     GlobalShaderResources globalShaderResources,
     ResourceLayout materialResourceLayout)
 {
     return(new[]
     {
         globalShaderResources.GlobalConstantsResourceLayout,
         globalShaderResources.GlobalLightingConstantsResourceLayout,
         globalShaderResources.GlobalCloudResourceLayout,
         globalShaderResources.GlobalShadowResourceLayout,
         MeshConstantsResourceLayout,
         materialResourceLayout,
         SamplerResourceLayout,
         RenderItemConstantsResourceLayout,
         SkinningResourceLayout
     });
 }
Exemplo n.º 8
0
        public TerrainShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources,
            RadiusCursorDecalShaderResources radiusCursorDecalShaderResources)
            : base(
                graphicsDevice,
                "Terrain",
                new GlobalResourceSetIndices(0u, LightingType.Terrain, 1u, 2u, 3u, null),
                TerrainVertex.VertexDescriptor)
        {
            _materialResourceLayout = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceLayout(
                                                        new ResourceLayoutDescription(
                                                            new ResourceLayoutElementDescription("TerrainMaterialConstants", ResourceKind.UniformBuffer, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("TileData", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("CliffDetails", ResourceKind.StructuredBufferReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("TextureDetails", ResourceKind.StructuredBufferReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("Textures", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("MacroTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("CausticsTextures", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("Sampler", ResourceKind.Sampler, ShaderStages.Fragment))));

            var resourceLayouts = new[]
            {
                globalShaderResources.GlobalConstantsResourceLayout,
                globalShaderResources.GlobalLightingConstantsResourceLayout,
                globalShaderResources.GlobalCloudResourceLayout,
                globalShaderResources.GlobalShadowResourceLayout,
                _materialResourceLayout,
                radiusCursorDecalShaderResources.RadiusCursorDecalsResourceLayout,
            };

            Pipeline = AddDisposable(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                                         new GraphicsPipelineDescription(
                                             BlendStateDescription.SingleDisabled,
                                             DepthStencilStateDescription.DepthOnlyLessEqual,
                                             RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise,
                                             PrimitiveTopology.TriangleList, // TODO: Use triangle strip
                                             ShaderSet.Description,
                                             resourceLayouts,
                                             RenderPipeline.GameOutputDescription)));
        }
Exemplo n.º 9
0
        public GlobalShaderResourceData(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources,
            StandardGraphicsResources standardGraphicsResources)
        {
            _graphicsDevice            = graphicsDevice;
            _globalShaderResources     = globalShaderResources;
            _standardGraphicsResources = standardGraphicsResources;

            _globalConstantBuffer = AddDisposable(new ConstantBuffer <GlobalShaderResources.GlobalConstants>(graphicsDevice, "GlobalConstants"));

            GlobalConstantsResourceSet = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceSet(
                                                           new ResourceSetDescription(
                                                               globalShaderResources.GlobalConstantsResourceLayout,
                                                               _globalConstantBuffer.Buffer)));

            _globalLightingBufferVS = AddDisposable(new ConstantBuffer <GlobalShaderResources.LightingConstantsVS>(graphicsDevice, "GlobalLightingConstantsVS"));
            SetGlobalLightingBufferVS(graphicsDevice);

            _globalLightingBufferPS = AddDisposable(new ConstantBuffer <GlobalShaderResources.LightingConstantsPS>(graphicsDevice, "GlobalLightingConstantsPS"));
        }
Exemplo n.º 10
0
        public WaterShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources)
            : base(
                graphicsDevice,
                "Water",
                new GlobalResourceSetIndices(0u, LightingType.Terrain, 1u, 2u, 3u, null),
                WaterVertex.VertexDescriptor)
        {
            WaterResourceLayout = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceLayout(
                                                    new ResourceLayoutDescription(
                                                        new ResourceLayoutElementDescription("WaterConstantsPS", ResourceKind.UniformBuffer, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("WaterTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("BumpTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("WaterSampler", ResourceKind.Sampler, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("ReflectionMap", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("ReflectionMapSampler", ResourceKind.Sampler, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("RefractionMap", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("RefractionMapSampler", ResourceKind.Sampler, ShaderStages.Fragment),
                                                        new ResourceLayoutElementDescription("RefractionDepthMap", ResourceKind.TextureReadOnly, ShaderStages.Fragment))));

            var resourceLayouts = new[]
            {
                globalShaderResources.GlobalConstantsResourceLayout,
                globalShaderResources.GlobalLightingConstantsResourceLayout,
                globalShaderResources.GlobalCloudResourceLayout,
                globalShaderResources.GlobalShadowResourceLayout,
                WaterResourceLayout
            };

            Pipeline = AddDisposable(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                                         new GraphicsPipelineDescription(
                                             BlendStateDescription.SingleAlphaBlend,
                                             DepthStencilStateDescription.DepthOnlyLessEqualRead,
                                             RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise,
                                             PrimitiveTopology.TriangleList,
                                             ShaderSet.Description,
                                             resourceLayouts,
                                             RenderPipeline.GameOutputDescription)));
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
0
        public ParticleShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources)
            : base(
                graphicsDevice,
                "Particle",
                new GlobalResourceSetIndices(0u, LightingType.None, null, null, null, null),
                ParticleVertex.VertexDescriptor)
        {
            _particleResourceLayout = AddDisposable(graphicsDevice.ResourceFactory.CreateResourceLayout(
                                                        new ResourceLayoutDescription(
                                                            new ResourceLayoutElementDescription("RenderItemConstants", ResourceKind.UniformBuffer, ShaderStages.Vertex),
                                                            new ResourceLayoutElementDescription("ParticleConstants", ResourceKind.UniformBuffer, ShaderStages.Vertex),
                                                            new ResourceLayoutElementDescription("ParticleTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment),
                                                            new ResourceLayoutElementDescription("Sampler", ResourceKind.Sampler, ShaderStages.Fragment))));

            var resourceLayouts = new[]
            {
                globalShaderResources.GlobalConstantsResourceLayout,
                _particleResourceLayout
            };

            Pipeline CreatePipeline(in BlendStateDescription blendStateDescription)
            {
                return(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                           new GraphicsPipelineDescription(
                               blendStateDescription,
                               DepthStencilStateDescription.DepthOnlyLessEqualRead,
                               RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise,
                               PrimitiveTopology.TriangleList,
                               ShaderSet.Description,
                               resourceLayouts,
                               RenderPipeline.GameOutputDescription)));
            }

            _alphaPipeline    = AddDisposable(CreatePipeline(BlendStateDescription.SingleAlphaBlend));
            _additivePipeline = AddDisposable(CreatePipeline(BlendStateDescriptionUtility.SingleAdditiveBlendNoAlpha));
        }
Exemplo n.º 13
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)));
        }