Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
GBufferShaderPlugin.cs
Go to the documentation of this file.
1 // Copyright (c) 2011 Silicon Studio
2 
3 using System.Linq;
4 
5 using SiliconStudio.Paradox.Games;
6 using SiliconStudio.Paradox.Shaders;
7 
8 namespace SiliconStudio.Paradox.Effects
9 {
10  /// <summary>
11  /// Shader effect used with <see cref="GBufferPlugin"/>
12  /// </summary>
13  public class GBufferShaderPlugin : ShaderPlugin<GBufferPlugin>
14  {
15  [EffectDefinitionProperty]
16  public ShaderSource Mixin { get; set; }
17 
18  public override void SetupShaders(EffectMesh effectMesh)
19  {
20  // Duplicate the main shader
21  throw new System.NotImplementedException();
22  EffectShaderPass mainShaderPass;
23  //var mainShaderPass = FindShaderPassFromPlugin(RenderPassPlugin.MainTargetPlugin);
24  DefaultShaderPass.Shader = (ShaderMixinSource)mainShaderPass.Shader.Clone();
25  DefaultShaderPass.Macros.AddRange(mainShaderPass.Macros);
26  DefaultShaderPass.SubMeshDataKey = mainShaderPass.SubMeshDataKey;
27 
28  // G-Buffer construction
29  // ExtractGBuffer: Extract POSITION + NORMAL
30  DefaultShaderPass.Shader.Mixins.Add("GBuffer");
31  DefaultShaderPass.Shader.Mixins.Add("NormalVSStream");
32 
33  mainShaderPass.Shader.Mixins.Remove("PositionVSStream");
34  mainShaderPass.Shader.Mixins.Remove("NormalVSStream");
35  mainShaderPass.Shader.Mixins.Add("NormalVSGBuffer");
36  mainShaderPass.Shader.Mixins.Add("SpecularPowerGBuffer");
37  mainShaderPass.Shader.Mixins.Add("PositionVSGBuffer");
38 
39  // Apply Mixin
40  if (Mixin != null)
41  BasicShaderPlugin.ApplyMixinClass(DefaultShaderPass.Shader, Mixin, true);
42  }
43 
44  public override void SetupResources(EffectMesh effectMesh)
45  {
46  base.SetupResources(effectMesh);
47  Effect.PrepareMesh += SetupMeshResources;
48  }
49 
50  private void SetupMeshResources(EffectOld effect, EffectMesh effectMesh)
51  {
52  effectMesh.Parameters.Set(DepthStencilStateKey, RenderPassPlugin.DepthStencilStateZReadOnly);
53  }
54  }
55 }
A mixin performing a combination of ShaderClassSource and other mixins.
override void SetupResources(EffectMesh effectMesh)
override void SetupShaders(EffectMesh effectMesh)
Shader effect used with GBufferPlugin