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))); }
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))); }
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)) } }; } }
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))); }
public SimpleShaderResources( GraphicsDevice graphicsDevice, GlobalShaderResources globalShaderResources, MeshShaderResources meshShaderResources) : base( graphicsDevice, globalShaderResources, meshShaderResources, "Simple", CreateMaterialResourceBindings) { }
public NormalMappedShaderResources( GraphicsDevice graphicsDevice, GlobalShaderResources globalShaderResources, MeshShaderResources meshShaderResources) : base( graphicsDevice, globalShaderResources, meshShaderResources, "NormalMapped", CreateMaterialResourceBindings) { }
public ResourceLayout[] CreateResourceLayouts( GlobalShaderResources globalShaderResources, ResourceLayout materialResourceLayout) { return(new[] { globalShaderResources.GlobalConstantsResourceLayout, globalShaderResources.GlobalLightingConstantsResourceLayout, globalShaderResources.GlobalCloudResourceLayout, globalShaderResources.GlobalShadowResourceLayout, MeshConstantsResourceLayout, materialResourceLayout, SamplerResourceLayout, RenderItemConstantsResourceLayout, SkinningResourceLayout }); }
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))); }
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")); }
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))); }
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); }
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)); }
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))); }