4 using System.Collections.Generic;
6 using SiliconStudio.Paradox.DataModel;
7 using SiliconStudio.Paradox.Effects.Data;
8 using SiliconStudio.Paradox.Effects.Modules;
9 using SiliconStudio.Paradox.Games;
10 using SiliconStudio.Paradox.Graphics;
11 using SiliconStudio.Core;
12 using SiliconStudio.Core.Mathematics;
13 using SiliconStudio.Paradox.Shaders;
15 namespace SiliconStudio.
Paradox.Effects
22 private RenderPass boundingBoxPass, heatShimmerPass, heatShimmerComposePass;
23 private List<EffectMesh> effectMeshes =
new List<EffectMesh>();
38 BoundingBoxes =
new List<Mesh>();
39 PreferredFormat = PixelFormat.R16G16B16A16_Float;
62 public List<Mesh> BoundingBoxes {
get;
private set; }
68 boundingBoxPass =
new RenderPass(
"BoundingBoxPass").KeepAliveBy(
this);
69 heatShimmerPass =
new RenderPass(
"HeatShimmerPass").KeepAliveBy(
this);
70 heatShimmerComposePass =
new RenderPass(
"HeatShimmerComposePass").KeepAliveBy(
this);
73 public override void Load()
77 RenderPass.AddPass(boundingBoxPass, heatShimmerPass, heatShimmerComposePass);
82 EnableSetTargets =
true,
83 EnableClearTarget =
true,
88 bbRenderTargetPlugin.Apply();
90 Parameters.AddSources(ViewParameters);
91 Parameters.SetDefault(RenderTargetKeys.DepthStencilSource);
92 Parameters.SetDefault(TexturingKeys.Sampler);
93 bbRenderTargetPlugin.Parameters.AddSources(Parameters);
95 EffectOld minMaxEffect = this.EffectSystemOld.BuildEffect(
"MinMax")
97 .Using(
new BasicShaderPlugin(
"TransformationWVP") {
RenderPassPlugin = bbRenderTargetPlugin })
98 .KeepAliveBy(ActiveObjects)
99 .InstantiatePermutation()
100 .KeepAliveBy(ActiveObjects);
103 heatShimmerPass.Parameters.AddSources(Parameters);
104 heatShimmerPass.Parameters.AddSources(NoisePlugin.Parameters);
106 EffectOld heatShimmerEffect = this.EffectSystemOld.BuildEffect(
"HeatShimmer")
109 new BasicShaderPlugin(
112 Mixins =
new List<ShaderClassSource>()
116 new ShaderClassSource(
"PostEffectHeatShimmer", Debug ? 1 : 0,
false ? 1 : 0, 3)},
117 Compositions =
new Dictionary<string, ShaderSource>() {
122 .KeepAliveBy(ActiveObjects)
123 .InstantiatePermutation()
124 .KeepAliveBy(ActiveObjects);
126 EffectOld heatShimmerDisplayEffect = this.EffectSystemOld.BuildEffect(
"HeatShimmer")
128 .Using(
new BasicShaderPlugin(
new ShaderClassSource(
"PostEffectHeatShimmerDisplay", Debug ? 1 : 0)) {
RenderPass = heatShimmerComposePass })
129 .KeepAliveBy(ActiveObjects)
130 .InstantiatePermutation()
131 .KeepAliveBy(ActiveObjects);
133 if (OfflineCompilation)
136 Parameters.Set(RenderTargetKeys.DepthStencilSource, DepthStencil.Texture);
137 Parameters.Set(TexturingKeys.Sampler, GraphicsDevice.SamplerStates.PointClamp);
142 var renderTargetDesc = RenderSource.Description;
143 var bbRenderTarget = Texture2D.New(
GraphicsDevice, renderTargetDesc.Width, renderTargetDesc.Height, PixelFormat.R32G32_Float, TextureFlags.ShaderResource | TextureFlags.RenderTarget).KeepAliveBy(ActiveObjects);
145 bbRenderTargetPlugin.RenderTarget = bbRenderTarget.ToRenderTarget();
148 foreach (var bbMeshData
in BoundingBoxes)
151 var bbMesh =
new EffectMesh(minMaxEffect, bbMeshData).KeepAliveBy(ActiveObjects);
154 effectMeshes.Add(bbMesh);
155 RenderSystem.GlobalMeshes.AddMesh(bbMesh);
161 var shimmerTexture = Texture2D.New(
GraphicsDevice, renderTargetDesc.Width, renderTargetDesc.Height, PixelFormat.R8_UNorm, TextureFlags.ShaderResource | TextureFlags.RenderTarget);
162 var shimmerRenderTarget = shimmerTexture.ToRenderTarget();
163 heatShimmerPass.StartPass += context => context.GraphicsDevice.Clear(shimmerRenderTarget, Color.Black);
165 var quadMesh =
new EffectMesh(heatShimmerEffect).KeepAliveBy(ActiveObjects);
166 quadMesh.Parameters.Set(TexturingKeys.Texture1, bbRenderTarget);
167 quadMesh.Parameters.Set(RenderTargetKeys.RenderTarget, shimmerRenderTarget);
169 effectMeshes.Add(quadMesh);
170 RenderSystem.GlobalMeshes.AddMesh(quadMesh);
175 quadMesh =
new EffectMesh(heatShimmerDisplayEffect).KeepAliveBy(ActiveObjects);
176 quadMesh.Parameters.Set(TexturingKeys.Texture0, RenderSource);
177 quadMesh.Parameters.Set(TexturingKeys.Texture1, shimmerTexture);
178 quadMesh.Parameters.Set(RenderTargetKeys.RenderTarget,
RenderTarget);
180 effectMeshes.Add(quadMesh);
181 RenderSystem.GlobalMeshes.AddMesh(quadMesh);
186 if (!OfflineCompilation)
188 foreach (var effectMesh
in effectMeshes)
189 RenderSystem.GlobalMeshes.RemoveMesh(effectMesh);
190 effectMeshes.Clear();
193 RenderPass.RemovePass(boundingBoxPass);
194 RenderPass.RemovePass(heatShimmerPass);
195 RenderPass.RemovePass(heatShimmerComposePass);
A renderable texture view.
A mixin performing a combination of ShaderClassSource and other mixins.
Plugin used to render to a GBuffer from a MainPlugin.
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.
HeatShimmerPlugin()
Initializes a new instance of class LightShaftsPlugin.
HeatShimmerPlugin(string name)
Initializes a new instance of class LightShaftsPlugin.
A Texture 2D frontend to SharpDX.Direct3D11.Texture2D.
Level10 render pass using a depth buffer and a render target.
override void Initialize()
RenderPass is a hierarchy that defines how to collect and render meshes.
PixelFormat
Defines various types of pixel formats.
A container to handle a hierarchical collection of effect variables.
A shader class used for mixin.