Ejemplo n.º 1
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)) }
                };
            }
        }
Ejemplo n.º 2
0
        public RoadShaderResources(
            GraphicsDevice graphicsDevice,
            GlobalShaderResources globalShaderResources,
            RadiusCursorDecalShaderResources radiusCursorDecalShaderResources)
            : 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,
                radiusCursorDecalShaderResources.RadiusCursorDecalsResourceLayout,
            };

            Pipeline = AddDisposable(graphicsDevice.ResourceFactory.CreateGraphicsPipeline(
                                         new GraphicsPipelineDescription(
                                             BlendStateDescription.SingleAlphaBlend,
                                             DepthStencilStateDescription.DepthOnlyLessEqualRead,
                                             RasterizerStateDescriptionUtility.CullNoneSolid, // TODO
                                             PrimitiveTopology.TriangleList,
                                             ShaderSet.Description,
                                             resourceLayouts,
                                             RenderPipeline.GameOutputDescription)));
        }
Ejemplo n.º 3
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)));
        }