4 using SiliconStudio.Core;
5 using SiliconStudio.Core.Mathematics;
6 using SiliconStudio.Paradox.Effects.Modules.Processors;
7 using SiliconStudio.Paradox.Effects.Modules.Renderers;
8 using SiliconStudio.Paradox.EntityModel;
9 using SiliconStudio.Paradox.Graphics;
11 namespace SiliconStudio.
Paradox.Effects.Modules
15 #region Public methods
28 if (serviceRegistry == null)
throw new ArgumentNullException(
"serviceRegistry");
29 if (effectName == null)
throw new ArgumentNullException(
"effectName");
31 var renderSystem = serviceRegistry.GetSafeServiceAs<
RenderSystem>();
36 AddLightProcessor(serviceRegistry, graphicsService.GraphicsDevice, useShadows);
38 var mainPipeline = renderSystem.Pipeline;
41 mainPipeline.Renderers.Add(
new CameraSetter(serviceRegistry));
46 AddShadowMap(serviceRegistry, mainPipeline, effectName);
51 ClearColor = clearColor,
52 RenderTarget = graphicsService.GraphicsDevice.BackBuffer,
53 DepthStencil = graphicsService.GraphicsDevice.DepthStencilBuffer
57 if (backgroundName != null)
61 mainPipeline.Renderers.Add(
new ModelRenderer(serviceRegistry, effectName).AddLightForwardSupport());
65 mainPipeline.Renderers.Add(
new UIRenderer(serviceRegistry));
79 CreateDefaultForward(game.
Services, effectName, clearColor, useShadows, ui, backgroundName);
88 if (game == null)
throw new ArgumentNullException(
"game");
90 var serviceRegistry = game.Services;
91 if (serviceRegistry == null)
94 var renderSystem = serviceRegistry.GetSafeServiceAs<
RenderSystem>();
95 var entitySystem = serviceRegistry.GetServiceAs<
EntitySystem>();
97 var mainPipeline = renderSystem.Pipeline;
122 if (serviceRegistry == null)
throw new ArgumentNullException(
"serviceRegistry");
123 if (effectName == null)
throw new ArgumentNullException(
"effectName");
125 var renderSystem = serviceRegistry.GetSafeServiceAs<
RenderSystem>();
130 AddLightProcessor(serviceRegistry, graphicsService.GraphicsDevice, useShadows);
133 var mainPipeline = renderSystem.Pipeline;
136 mainPipeline.Renderers.Add(
new CameraSetter(serviceRegistry));
141 AddShadowMap(serviceRegistry, mainPipeline, effectName);
147 gbufferPipeline.Renderers.Add(
new ModelRenderer(serviceRegistry, effectName +
".ParadoxGBufferShaderPass").AddOpaqueFilter());
148 var gbufferProcessor =
new GBufferRenderProcessor(serviceRegistry, gbufferPipeline, graphicsService.GraphicsDevice.DepthStencilBuffer,
false);
151 mainPipeline.Renderers.Add(gbufferProcessor);
155 var lightDeferredProcessor =
new LightingPrepassRenderer(serviceRegistry, prepassEffectName, graphicsService.GraphicsDevice.DepthStencilBuffer.Texture, gbufferProcessor.GBufferTexture);
156 mainPipeline.Renderers.Add(lightDeferredProcessor);
161 ClearColor = clearColor,
162 EnableClearDepth =
false,
163 RenderTarget = graphicsService.GraphicsDevice.BackBuffer,
164 DepthStencil = graphicsService.GraphicsDevice.DepthStencilBuffer,
165 Viewport =
new Viewport(0, 0, graphicsService.GraphicsDevice.BackBuffer.Width, graphicsService.GraphicsDevice.BackBuffer.Height)
169 if (backgroundName != null)
174 mainPipeline.Renderers.Add(
new ModelRenderer(serviceRegistry, effectName).AddOpaqueFilter());
177 EnableClearDepth =
false,
178 EnableClearTarget =
false,
179 RenderTarget = graphicsService.GraphicsDevice.BackBuffer,
180 DepthStencil = graphicsService.GraphicsDevice.DepthStencilBuffer,
181 Viewport =
new Viewport(0, 0, graphicsService.GraphicsDevice.BackBuffer.Width, graphicsService.GraphicsDevice.BackBuffer.Height)
186 mainPipeline.Renderers.Add(
new ModelRenderer(serviceRegistry, effectName).AddTransparentFilter());
190 mainPipeline.Renderers.Add(
new UIRenderer(serviceRegistry));
192 graphicsService.GraphicsDevice.Parameters.Set(RenderingParameters.UseDeferred,
true);
204 public static void CreateDefaultDeferred(
Game game,
string effectName,
string prepassEffectName,
Color clearColor,
bool useShadows,
bool ui,
string backgroundName = null)
206 CreateDefaultDeferred(game.
Services, effectName, prepassEffectName, clearColor, useShadows, ui, backgroundName);
215 if (game == null)
throw new ArgumentNullException(
"game");
217 var serviceRegistry = game.Services;
218 if (serviceRegistry == null)
221 var renderSystem = serviceRegistry.GetSafeServiceAs<
RenderSystem>();
222 var entitySystem = serviceRegistry.GetServiceAs<
EntitySystem>();
224 var mainPipeline = renderSystem.Pipeline;
245 #region Private methods
250 shadowMapPipeline.Renderers.Add(
new ModelRenderer(serviceRegistry, effectName +
".ShadowMapCaster").AddContextActiveLayerFilter().AddShadowCasterFilter());
252 var shadowMapRenderer =
new ShadowMapRenderer(serviceRegistry, shadowMapPipeline);
253 pipeline.Renderers.Add(shadowMapRenderer);
255 return shadowMapRenderer;
260 var entitySystem = serviceRegistry.GetServiceAs<
EntitySystem>();
261 if (entitySystem != null)
264 if (lightProcessor == null)
Service providing method to access GraphicsDevice life-cycle.
The renderer in charge of drawing the UI.
A renderable texture view.
static void CreateDefaultDeferred(Game game, string effectName, string prepassEffectName, Color clearColor, bool useShadows, bool ui, string backgroundName=null)
Creates a basic deferred rendering pipeline.
Contains depth-stencil state for the device.
This renderer draws a full-screen image as background. The ratio or the texture used is preserved...
A service registry is a IServiceProvider that provides methods to register and unregister services...
A processor that updates camera view and projection along the setup of RenderTargetSetter ...
ServiceRegistry Services
Gets the service container.
Performs primitive-based rendering, creates resources, handles system-level variables, adjusts gamma ramp levels, and creates shaders. See The+GraphicsDevice+class to learn more about the class.
static void CreateDefaultForward(Game game, string effectName, Color clearColor, bool useShadows, bool ui, string backgroundName=null)
Creates a basic forward rendering pipeline.
Renders its RenderSystem.Pipeline, which will usually result in drawing all meshes, UI, etc...
Manage a collection of entities.
Defines the window dimensions of a render-target surface onto which a 3D volume projects.
Represents a 32-bit color (4 bytes) in the form of RGBA (in byte order: R, G, B, A).
static void DestroyDefaultDeferredPipeline(Game game)
Destroys the deferred rendering pipeline.
This Renderer is responsible to prepare and render meshes for a specific pass.
static void CreateDefaultForward(IServiceRegistry serviceRegistry, string effectName, Color clearColor, bool useShadows, bool ui, string backgroundName)
Creates a basic forward rendering pipeline.
static void CreateDefaultDeferred(IServiceRegistry serviceRegistry, string effectName, string prepassEffectName, Color clearColor, bool useShadows, bool ui, string backgroundName)
Creates a basic deferred rendering pipeline.
A processor that setup a RenderTarget and a DepthStencil on a RenderPass.
A class allocating as many shadow map as possible without any predefined memory budget.
Defines an entry point for mesh instantiation and recursive rendering.
static void DestroyDefaultForwardPipeline(Game game)
Destroys the forward rendering pipeline.
Sets given render state during rendering.