Guest User

Untitled

a guest
Oct 20th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.66 KB | None | 0 0
  1. using Microsoft.Xna.Framework;
  2. using Microsoft.Xna.Framework.Graphics;
  3.  
  4. namespace nullmaterials.Effects
  5. {
  6.     public class NullMaterial : NullEffect, INullMaterial
  7.     {
  8.         private EffectTechnique _compositeTechnique;
  9.         private EffectTechnique _depthpassTechnique;
  10.         private Vector3 _diffuseColor;
  11.         private EffectParameter _diffuseColorParam;
  12.         private Texture2D _diffuseTexture;
  13.         private EffectParameter _diffuseTextureParam;
  14.         private float _farClip;
  15.         private EffectParameter _farClipParam;
  16.         private float _fresnelPower;
  17.         private EffectParameter _fresnelPowerParam;
  18.         private Vector2 _invViewport;
  19.         private EffectParameter _invViewportParam;
  20.         private Texture2D _normalMap;
  21.         private EffectParameter _normalMapParam;
  22.         private EffectTechnique _prepassTechnique;
  23.         private Matrix _projection;
  24.         private Vector3 _specularColor;
  25.         private EffectParameter _specularColorParam;
  26.         private float _specularPower;
  27.         private EffectParameter _specularPowerParam;
  28.         private Matrix _view;
  29.         private Matrix _viewInverseTranspose;
  30.         private Matrix _viewProjection;
  31.         private EffectParameter _vitProjParam;
  32.         private Matrix _world;
  33.         private EffectParameter _worldParam;
  34.         private Matrix _worldView;
  35.         private Matrix _worldViewInverseTranspose;
  36.         private Matrix _worldViewProjection;
  37.         private EffectParameter _wvParam;
  38.         private EffectParameter _wvitProjParam;
  39.         private EffectParameter _wvpParam;
  40.         private EffectTechnique _normalMappedPrepassTechnique;
  41.         private EffectTechnique _texturedCompositeTechnique;
  42.         private EffectTechnique _technique;
  43.  
  44.         public NullMaterial(Effect cloneSource)
  45.             : base(cloneSource)
  46.         {
  47.             SetupMaterial();
  48.         }
  49.  
  50.  
  51.         public Texture2D NormalMap
  52.         {
  53.             get { return _normalMap; }
  54.             set
  55.             {
  56.                 _normalMap = value;
  57.                 _normalMapParam.SetValue(value);
  58.             }
  59.         }
  60.  
  61.         public Texture2D DiffuseTexture
  62.         {
  63.             get { return _diffuseTexture; }
  64.             set
  65.             {
  66.                 _diffuseTexture = value;
  67.                 _diffuseTextureParam.SetValue(value);
  68.             }
  69.         }
  70.  
  71.         public Vector3 DiffuseColor
  72.         {
  73.             get { return _diffuseColor; }
  74.             set
  75.             {
  76.                 _diffuseColor = value;
  77.                 _diffuseColorParam.SetValue(value);
  78.             }
  79.         }
  80.  
  81.         public Vector3 SpecularColor
  82.         {
  83.             get { return _specularColor; }
  84.             set
  85.             {
  86.                 _specularColor = value;
  87.                 _specularColorParam.SetValue(value);
  88.             }
  89.         }
  90.  
  91.         public float SpecularPower
  92.         {
  93.             get { return _specularPower; }
  94.             set
  95.             {
  96.                 _specularPower = value;
  97.                 _specularPowerParam.SetValue(value);
  98.             }
  99.         }
  100.  
  101.         public float FresnelPower
  102.         {
  103.             get { return _fresnelPower; }
  104.             set
  105.             {
  106.                 _fresnelPower = value;
  107.                 _fresnelPowerParam.SetValue(value);
  108.             }
  109.         }
  110.  
  111.         #region INullMaterial Members
  112.  
  113.         public Matrix ViewProjection
  114.         {
  115.             get { return _viewProjection; }
  116.             set { _viewProjection = value; }
  117.         }
  118.  
  119.         public Vector2 InverseViewport
  120.         {
  121.             get { return _invViewport; }
  122.             set
  123.             {
  124.                 _invViewport = value;
  125.                 _invViewportParam.SetValue(value);
  126.             }
  127.         }
  128.  
  129.         public Matrix World
  130.         {
  131.             get { return _world; }
  132.             set { _world = value; }
  133.         }
  134.  
  135.         public Matrix View
  136.         {
  137.             get { return _view; }
  138.             set { _view = value; }
  139.         }
  140.  
  141.         public Matrix Projection
  142.         {
  143.             get { return _projection; }
  144.             set { _projection = value; }
  145.         }
  146.  
  147.         public float FarClip
  148.         {
  149.             get { return _farClip; }
  150.             set
  151.             {
  152.                 _farClip = value;
  153.                 _farClipParam.SetValue(value);
  154.             }
  155.         }
  156.  
  157.         public void ApplyDepthPass()
  158.         {
  159.             Matrix wvp;
  160.             Matrix.Multiply(ref _world, ref _viewProjection, out wvp);
  161.             _wvpParam.SetValue(wvp);
  162.  
  163.             CurrentTechnique = _depthpassTechnique;
  164.             _depthpassTechnique.Passes[0].Apply();
  165.         }
  166.  
  167.         public void ApplyPrePass()
  168.         {
  169.             _technique = _normalMap == null ? _prepassTechnique : _normalMappedPrepassTechnique;
  170.             CurrentTechnique = _technique;
  171.             _technique.Passes[0].Apply();
  172.         }
  173.  
  174.         public void ApplyCompositePass()
  175.         {
  176.             _technique = _diffuseTexture == null ? _compositeTechnique : _texturedCompositeTechnique;
  177.             CurrentTechnique = _technique;
  178.             _technique.Passes[0].Apply();
  179.         }
  180.  
  181.         public new INullMaterial Clone()
  182.         {
  183.             return new NullMaterial(this)
  184.                        {
  185.                            DiffuseColor = DiffuseColor,
  186.                            DiffuseTexture = DiffuseTexture,
  187.                            SpecularColor = SpecularColor,
  188.                            SpecularPower = SpecularPower,
  189.                            NormalMap = NormalMap,
  190.                            FresnelPower = FresnelPower
  191.                        };
  192.         }
  193.  
  194.         public void PrepareDraw()
  195.         {
  196.             Matrix.Multiply(ref _world, ref _view, out _worldView);
  197.             Matrix.Transpose(ref _worldView, out _worldViewInverseTranspose);
  198.             Matrix.Invert(ref _worldViewInverseTranspose, out _worldViewInverseTranspose);
  199.  
  200.             Matrix.Multiply(ref _worldView, ref _projection, out _worldViewProjection);
  201.  
  202.             Matrix.Transpose(ref _view, out _viewInverseTranspose);
  203.             Matrix.Invert(ref _viewInverseTranspose, out _viewInverseTranspose);
  204.  
  205.             _worldParam.SetValue(_world);
  206.             _wvitProjParam.SetValue(_worldViewInverseTranspose);
  207.             _vitProjParam.SetValue(_viewInverseTranspose);
  208.             _wvParam.SetValue(_worldView);
  209.             _wvpParam.SetValue(_worldViewProjection);
  210.         }
  211.  
  212.         #endregion
  213.  
  214.         private void SetupMaterial()
  215.         {
  216.             _diffuseTextureParam = Parameters["DiffuseTexture"];
  217.             _diffuseColorParam = Parameters["DiffuseColor"];
  218.             _specularColorParam = Parameters["SpecularColor"];
  219.             _specularPowerParam = Parameters["SpecularPower"];
  220.             _fresnelPowerParam = Parameters["FresnelPower"];
  221.  
  222.             _normalMapParam = Parameters["NormalTexture"];
  223.  
  224.             _worldParam = Parameters["World"];
  225.             _wvParam = Parameters["WorldView"];
  226.             _wvpParam = Parameters["WorldViewProjection"];
  227.             _wvitProjParam = Parameters["WorldViewInverseTranspose"];
  228.             _vitProjParam = Parameters["ViewInverseTranspose"];
  229.             _farClipParam = Parameters["FarClip"];
  230.             _invViewportParam = Parameters["InverseViewportDimensions"];
  231.  
  232.             _prepassTechnique = Techniques["FlatPrepassTechnique"];
  233.             _normalMappedPrepassTechnique = Techniques["NormalMappedPrepassTechnique"];
  234.             _compositeTechnique = Techniques["CompositeTechnique"];
  235.             _texturedCompositeTechnique = Techniques["TexturedCompositeTechnique"];
  236.             _depthpassTechnique = Techniques["DepthTechnique"];
  237.         }
  238.     }
  239. }
Add Comment
Please, Sign In to add comment