private void CreatePipeline() { // Processor Entities.Processors.Add(new CubemapSourceProcessor(GraphicsDevice)); // Rendering pipeline RenderSystem.Pipeline.Renderers.Add(new CameraSetter(Services)); RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services) { ClearColor = Color.CornflowerBlue, EnableClearDepth = true, ClearDepth = 1f }); // Create G-buffer pass var gbufferPipeline = new RenderPipeline("GBuffer"); // Renders the G-buffer for opaque geometry. gbufferPipeline.Renderers.Add(new ModelRenderer(Services, "CubemapIBLEffect.XenkoGBufferShaderPass")); var gbufferProcessor = new GBufferRenderProcessor(Services, gbufferPipeline, GraphicsDevice.DepthStencilBuffer, false); // Add sthe G-buffer pass to the pipeline. RenderSystem.Pipeline.Renderers.Add(gbufferProcessor); var readOnlyDepthBuffer = GraphicsDevice.DepthStencilBuffer; // TODO ToDepthStencilBuffer(true); IBLRenderer = new LightingIBLRenderer(Services, "CubemapIBLSpecular", readOnlyDepthBuffer); RenderSystem.Pipeline.Renderers.Add(IBLRenderer); RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services) { ClearColor = Color.CornflowerBlue, EnableClearDepth = false, }); RenderSystem.Pipeline.Renderers.Add(new DelegateRenderer(Services) { Render = ShowIBL }); }
/// <summary> /// Creates the rendering pipeline /// </summary> private void CreatePipeline() { var renderers = RenderSystem.Pipeline.Renderers; var width = GraphicsDevice.BackBuffer.Width; var height = GraphicsDevice.BackBuffer.Height; var viewport = new Viewport(0, 0, width, height); var clearColor = Color.Black; var effectName = "ParadoxCraftEffectMain"; var fowardEffectName = "ParadoxCraftEffectForward"; var prepassEffectName = "ParadoxCraftPrepassEffect"; // Adds a light processor that will track all the entities that have a light component. // This will also handle the shadows (allocation, activation etc.). var lightProcessor = Entities.GetProcessor <LightShadowProcessor>(); if (lightProcessor == null) { Entities.Processors.Add(new DynamicLightShadowProcessor(GraphicsDevice, false)); } // Camera renderers.Add(new CameraSetter(Services)); // Create G-buffer pass var gbufferPipeline = new RenderPipeline("GBuffer"); // Renders the G-buffer for opaque geometry. gbufferPipeline.Renderers.Add(new ModelRenderer(Services, effectName + ".ParadoxGBufferShaderPass").AddOpaqueFilter()); var gbufferProcessor = new GBufferRenderProcessor(Services, gbufferPipeline, GraphicsDevice.DepthStencilBuffer, false); // Add sthe G-buffer pass to the pipeline. renderers.Add(gbufferProcessor); // Performs the light prepass on opaque geometry. // Adds this pass to the pipeline. var lightDeferredProcessor = new LightingPrepassRenderer(Services, prepassEffectName, GraphicsDevice.DepthStencilBuffer, gbufferProcessor.GBufferTexture); renderers.Add(lightDeferredProcessor); renderers.Add(new RenderTargetSetter(Services) { ClearColor = clearColor, EnableClearDepth = false, RenderTarget = GraphicsDevice.BackBuffer, DepthStencil = GraphicsDevice.DepthStencilBuffer, Viewport = viewport }); renderers.Add(new RenderStateSetter(Services) { DepthStencilState = GraphicsDevice.DepthStencilStates.Default, RasterizerState = GraphicsDevice.RasterizerStates.CullBack }); // Renders all the meshes with the correct lighting. renderers.Add(new ModelRenderer(Services, fowardEffectName).AddLightForwardSupport()); // Blend atmoshpere inscatter on top renderers.Add(new AtmosphereRenderer(Services, Atmosphere, Sunlight)); // Wireframe mode if (isWireframe) { GraphicsDevice.Parameters.Set(Effect.RasterizerStateKey, RasterizerState.New(GraphicsDevice, new RasterizerStateDescription(CullMode.None) { FillMode = FillMode.Wireframe })); } GraphicsDevice.Parameters.Set(RenderingParameters.UseDeferred, true); }
private void CreatePipeline() { // Processor Entities.Processors.Add(new CubemapSourceProcessor(GraphicsDevice)); // Rendering pipeline RenderSystem.Pipeline.Renderers.Add(new CameraSetter(Services)); RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services) { ClearColor = Color.CornflowerBlue, EnableClearDepth = true, ClearDepth = 1f }); // Create G-buffer pass var gbufferPipeline = new RenderPipeline("GBuffer"); // Renders the G-buffer for opaque geometry. gbufferPipeline.Renderers.Add(new ModelRenderer(Services, "CubemapIBLEffect.XenkoGBufferShaderPass")); var gbufferProcessor = new GBufferRenderProcessor(Services, gbufferPipeline, GraphicsDevice.DepthStencilBuffer, false); // Add sthe G-buffer pass to the pipeline. RenderSystem.Pipeline.Renderers.Add(gbufferProcessor); var readOnlyDepthBuffer = GraphicsDevice.DepthStencilBuffer; // TODO ToDepthStencilBuffer(true); IBLRenderer = new LightingIBLRenderer(Services, "CubemapIBLSpecular", readOnlyDepthBuffer); RenderSystem.Pipeline.Renderers.Add(IBLRenderer); RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services) { ClearColor = Color.CornflowerBlue, EnableClearDepth = false, }); RenderSystem.Pipeline.Renderers.Add(new DelegateRenderer(Services) { Render = ShowIBL }); }