Guest
Public paste!

CentauriBoy

By: a guest | Feb 6th, 2010 | Syntax: C# | Size: 33.07 KB | Hits: 74 | Expires: Never
Copy text to clipboard
  1. //////////////////////////////////////////////////////////////////////////
  2. /// <summary>
  3. /// A helper class for setting render states of the graphics device.
  4. /// </summary>
  5. //////////////////////////////////////////////////////////////////////////
  6. public static class RSHelper
  7. {
  8.     /*********************************************************************/
  9.     // Members.
  10.     /*********************************************************************/
  11.  
  12.     #region Enumerations
  13.  
  14.     /// <summary>Render state variables.</summary>
  15.     public enum RSVar
  16.     {
  17.         AlphaBlendEnable,
  18.         AlphaBlendOperation,
  19.         AlphaDestinationBlend,
  20.         AlphaFunction,
  21.         AlphaSourceBlend,
  22.         AlphaTestEnable,
  23.         BlendFactor,
  24.         BlendFunction,
  25.         ColorWriteChannels,
  26.         ColorWriteChannels1,
  27.         ColorWriteChannels2,
  28.         ColorWriteChannels3,
  29.         CounterClockwiseStencilDepthBufferFail,
  30.         CounterClockwiseStencilFail,
  31.         CounterClockwiseStencilFunction,
  32.         CounterClockwiseStencilPass,
  33.         CullMode,
  34.         DepthBias,
  35.         DepthBufferEnable,
  36.         DepthBufferFunction,
  37.         DepthBufferWriteEnable,
  38.         DestinationBlend,
  39.         FillMode,
  40.         FogColor,
  41.         FogDensity,
  42.         FogEnable,
  43.         FogEnd,
  44.         FogStart,
  45.         FogTableMode,
  46.         FogVertexMode,
  47.         MultiSampleAntiAlias,
  48.         MultiSampleMask,
  49.         PointSize,
  50.         PointSizeMax,
  51.         PointSizeMin,
  52.         PointSpriteEnable,
  53.         RangeFogEnable,
  54.         ReferenceAlpha,
  55.         ReferenceStencil,
  56.         ScissorTestEnable,
  57.         SeparateAlphaBlendEnabled,
  58.         SlopeScaleDepthBias,
  59.         SourceBlend,
  60.         StencilDepthBufferFail,
  61.         StencilEnable,
  62.         StencilFail,
  63.         StencilFunction,
  64.         StencilMask,
  65.         StencilPass,
  66.         StencilWriteMask,
  67.         TwoSidedStencilMode,
  68.         Wrap0,
  69.         Wrap1,
  70.         Wrap2,
  71.         Wrap3,
  72.         Wrap4,
  73.         Wrap5,
  74.         Wrap6,
  75.         Wrap7,
  76.         Wrap8,
  77.         Wrap9,
  78.         Wrap10,
  79.         Wrap11,
  80.         Wrap12,
  81.         Wrap13,
  82.         Wrap14,
  83.         Wrap15,
  84.     }
  85.  
  86.     #endregion // Enumerations
  87.  
  88.     #region Internal Data Structures
  89.  
  90.     //////////////////////////////////////////////////////////////////////////
  91.     /// <summary>
  92.     /// Render state data structure.
  93.     /// </summary>
  94.     //////////////////////////////////////////////////////////////////////////
  95.     private struct RSData
  96.     {
  97.         /*********************************************************************/
  98.         // Members.
  99.         /*********************************************************************/
  100.  
  101.         #region Fields
  102.  
  103.         /// <summary>Index reference.</summary>
  104.         public int Index;
  105.  
  106.         /// <summary>Object type.</summary>
  107.         public Object Type;
  108.  
  109.         #endregion // Fields
  110.  
  111.         /*********************************************************************/
  112.         // Functions.
  113.         /*********************************************************************/
  114.  
  115.         #region Intialization
  116.  
  117.         //////////////////////////////////////////////////////////////////////////
  118.         /// <summary>
  119.         /// Alternate constructor.
  120.         /// </summary>
  121.         /// <param name="_nIndex">Index reference.</param>
  122.         /// <param name="_Type">Object type.</param>
  123.         //////////////////////////////////////////////////////////////////////////
  124.         public RSData(int _nIndex, Object _Type)
  125.         {
  126.             Index = _nIndex;
  127.             Type = _Type;
  128.         }
  129.  
  130.         #endregion // Initialization
  131.     }
  132.  
  133.     #endregion // Internal Data Structures
  134.  
  135.     #region Fields
  136.  
  137.     /// <summary>A list of changes.</summary>
  138.     private static List<RSData> m_bChangeList = new List<RSData>();
  139.  
  140.     #endregion // Fields
  141.  
  142.     /*********************************************************************/
  143.     // Functions.
  144.     /*********************************************************************/
  145.  
  146.     #region Public Methods
  147.  
  148.     //////////////////////////////////////////////////////////////////////////
  149.     /// <summary>
  150.     /// Set the current render state based on variables and values passed in.
  151.     /// <para>NOTE: When setting the values, they must be in the same order as
  152.     /// the variables list. Since no exception is thrown.</para>
  153.     /// </summary>
  154.     /// <param name="_currentRenderState">The current render state.</param>
  155.     /// <param name="_Variables">Key variables to set.</param>
  156.     /// <param name="_Values">Use in sequence with key variables. (Same order as _Variables)</param>
  157.     //////////////////////////////////////////////////////////////////////////
  158.     public static void Set(RenderState _currentRenderState, RSVar[] _Variables, params Object[] _Values)
  159.     {
  160.         //////////////////////////////////////////////////////////////////////////
  161.         // Local variable.
  162.         int nIndex = 0;
  163.         //
  164.         //////////////////////////////////////////////////////////////////////////
  165.  
  166.         //////////////////////////////////////////////////////////////////////////
  167.         // Run through the list of variables.
  168.         foreach (RSVar variable in _Variables)
  169.         {
  170.             //////////////////////////////////////////////////////////////////////////
  171.             // Check if the render state has already been activated.
  172.             if ((m_bChangeList.Count > 0 && nIndex < m_bChangeList.Count) &&
  173.                 (m_bChangeList[nIndex].Index == (int)variable && m_bChangeList[nIndex].Type.ToString() == _Values[nIndex].ToString()))
  174.             {
  175.                 ++nIndex;
  176.                 continue;
  177.             }
  178.             //
  179.             //////////////////////////////////////////////////////////////////////////
  180.  
  181.             //////////////////////////////////////////////////////////////////////////
  182.             // Determine which renderstate to modify.
  183.             switch (variable)
  184.             {
  185.                 case RSVar.AlphaBlendEnable: _currentRenderState.AlphaBlendEnable = (bool)_Values[nIndex]; break;
  186.                 case RSVar.AlphaBlendOperation: _currentRenderState.AlphaBlendOperation = (BlendFunction)_Values[nIndex]; break;
  187.                 case RSVar.AlphaDestinationBlend: _currentRenderState.AlphaDestinationBlend = (Blend)_Values[nIndex]; break;
  188.                 case RSVar.AlphaFunction: _currentRenderState.AlphaFunction = (CompareFunction)_Values[nIndex]; break;
  189.                 case RSVar.AlphaSourceBlend: _currentRenderState.AlphaSourceBlend = (Blend)_Values[nIndex]; break;
  190.                 case RSVar.AlphaTestEnable: _currentRenderState.AlphaTestEnable = (bool)_Values[nIndex]; break;
  191.                 case RSVar.BlendFactor: _currentRenderState.BlendFactor = (Color)_Values[nIndex]; break;
  192.                 case RSVar.BlendFunction: _currentRenderState.BlendFunction = (BlendFunction)_Values[nIndex]; break;
  193.                 case RSVar.ColorWriteChannels: _currentRenderState.ColorWriteChannels = (ColorWriteChannels)_Values[nIndex]; break;
  194.                 case RSVar.ColorWriteChannels1: _currentRenderState.ColorWriteChannels1 = (ColorWriteChannels)_Values[nIndex]; break;
  195.                 case RSVar.ColorWriteChannels2: _currentRenderState.ColorWriteChannels2 = (ColorWriteChannels)_Values[nIndex]; break;
  196.                 case RSVar.ColorWriteChannels3: _currentRenderState.ColorWriteChannels3 = (ColorWriteChannels)_Values[nIndex]; break;
  197.                 case RSVar.CounterClockwiseStencilDepthBufferFail: _currentRenderState.CounterClockwiseStencilDepthBufferFail = (StencilOperation)_Values[nIndex]; break;
  198.                 case RSVar.CounterClockwiseStencilFail: _currentRenderState.CounterClockwiseStencilFail = (StencilOperation)_Values[nIndex]; break;
  199.                 case RSVar.CounterClockwiseStencilFunction: _currentRenderState.CounterClockwiseStencilFunction = (CompareFunction)_Values[nIndex]; break;
  200.                 case RSVar.CounterClockwiseStencilPass: _currentRenderState.CounterClockwiseStencilPass = (StencilOperation)_Values[nIndex]; break;
  201.                 case RSVar.CullMode: _currentRenderState.CullMode = (CullMode)_Values[nIndex]; break;
  202.                 case RSVar.DepthBias: _currentRenderState.DepthBias = (float)_Values[nIndex]; break;
  203.                 case RSVar.DepthBufferEnable: _currentRenderState.AlphaBlendEnable = (bool)_Values[nIndex]; break;
  204.                 case RSVar.DepthBufferFunction: _currentRenderState.DepthBufferFunction = (CompareFunction)_Values[nIndex]; break;
  205.                 case RSVar.DepthBufferWriteEnable: _currentRenderState.DepthBufferWriteEnable = (bool)_Values[nIndex]; break;
  206.                 case RSVar.DestinationBlend: _currentRenderState.DestinationBlend = (Blend)_Values[nIndex]; break;
  207.                 case RSVar.FillMode: _currentRenderState.FillMode = (FillMode)_Values[nIndex]; break;
  208.                 case RSVar.FogColor: _currentRenderState.FogColor = (Color)_Values[nIndex]; break;
  209.                 case RSVar.FogDensity: _currentRenderState.FogDensity = (float)_Values[nIndex]; break;
  210.                 case RSVar.FogEnable: _currentRenderState.FogEnable = (bool)_Values[nIndex]; break;
  211.                 case RSVar.FogEnd: _currentRenderState.FogEnd = (float)_Values[nIndex]; break;
  212.                 case RSVar.FogStart: _currentRenderState.FogStart = (float)_Values[nIndex]; break;
  213.                 case RSVar.FogTableMode: _currentRenderState.FogTableMode = (FogMode)_Values[nIndex]; break;
  214.                 case RSVar.FogVertexMode: _currentRenderState.FogVertexMode = (FogMode)_Values[nIndex]; break;
  215.                 case RSVar.MultiSampleAntiAlias: _currentRenderState.MultiSampleAntiAlias = (bool)_Values[nIndex]; break;
  216.                 case RSVar.MultiSampleMask: _currentRenderState.MultiSampleMask = (int)_Values[nIndex]; break;
  217.                 case RSVar.PointSize: _currentRenderState.PointSize = (float)_Values[nIndex]; break;
  218.                 case RSVar.PointSizeMax: _currentRenderState.PointSizeMax = (float)_Values[nIndex]; break;
  219.                 case RSVar.PointSizeMin: _currentRenderState.PointSizeMin = (float)_Values[nIndex]; break;
  220.                 case RSVar.PointSpriteEnable: _currentRenderState.PointSpriteEnable = (bool)_Values[nIndex]; break;
  221.                 case RSVar.RangeFogEnable: _currentRenderState.RangeFogEnable = (bool)_Values[nIndex]; break;
  222.                 case RSVar.ReferenceAlpha: _currentRenderState.ReferenceAlpha = (int)_Values[nIndex]; break;
  223.                 case RSVar.ReferenceStencil: _currentRenderState.ReferenceStencil = (int)_Values[nIndex]; break;
  224.                 case RSVar.ScissorTestEnable: _currentRenderState.ScissorTestEnable = (bool)_Values[nIndex]; break;
  225.                 case RSVar.SeparateAlphaBlendEnabled: _currentRenderState.SeparateAlphaBlendEnabled = (bool)_Values[nIndex]; break;
  226.                 case RSVar.SlopeScaleDepthBias: _currentRenderState.SlopeScaleDepthBias = (float)_Values[nIndex]; break;
  227.                 case RSVar.SourceBlend: _currentRenderState.SourceBlend = (Blend)_Values[nIndex]; break;
  228.                 case RSVar.StencilDepthBufferFail: _currentRenderState.StencilDepthBufferFail = (StencilOperation)_Values[nIndex]; break;
  229.                 case RSVar.StencilEnable: _currentRenderState.StencilEnable = (bool)_Values[nIndex]; break;
  230.                 case RSVar.StencilFail: _currentRenderState.StencilFail = (StencilOperation)_Values[nIndex]; break;
  231.                 case RSVar.StencilFunction: _currentRenderState.StencilFunction = (CompareFunction)_Values[nIndex]; break;
  232.                 case RSVar.StencilMask: _currentRenderState.StencilMask = (int)_Values[nIndex]; break;
  233.                 case RSVar.StencilPass: _currentRenderState.StencilPass = (StencilOperation)_Values[nIndex]; break;
  234.                 case RSVar.StencilWriteMask: _currentRenderState.StencilWriteMask = (int)_Values[nIndex]; break;
  235.                 case RSVar.TwoSidedStencilMode: _currentRenderState.TwoSidedStencilMode = (bool)_Values[nIndex]; break;
  236.                 case RSVar.Wrap0: _currentRenderState.Wrap0 = (TextureWrapCoordinates)_Values[nIndex]; break;
  237.                 case RSVar.Wrap1: _currentRenderState.Wrap1 = (TextureWrapCoordinates)_Values[nIndex]; break;
  238.                 case RSVar.Wrap2: _currentRenderState.Wrap2 = (TextureWrapCoordinates)_Values[nIndex]; break;
  239.                 case RSVar.Wrap3: _currentRenderState.Wrap3 = (TextureWrapCoordinates)_Values[nIndex]; break;
  240.                 case RSVar.Wrap4: _currentRenderState.Wrap4 = (TextureWrapCoordinates)_Values[nIndex]; break;
  241.                 case RSVar.Wrap5: _currentRenderState.Wrap5 = (TextureWrapCoordinates)_Values[nIndex]; break;
  242.                 case RSVar.Wrap6: _currentRenderState.Wrap6 = (TextureWrapCoordinates)_Values[nIndex]; break;
  243.                 case RSVar.Wrap7: _currentRenderState.Wrap7 = (TextureWrapCoordinates)_Values[nIndex]; break;
  244.                 case RSVar.Wrap8: _currentRenderState.Wrap8 = (TextureWrapCoordinates)_Values[nIndex]; break;
  245.                 case RSVar.Wrap9: _currentRenderState.Wrap9 = (TextureWrapCoordinates)_Values[nIndex]; break;
  246.                 case RSVar.Wrap10: _currentRenderState.Wrap10 = (TextureWrapCoordinates)_Values[nIndex]; break;
  247.                 case RSVar.Wrap11: _currentRenderState.Wrap11 = (TextureWrapCoordinates)_Values[nIndex]; break;
  248.                 case RSVar.Wrap12: _currentRenderState.Wrap12 = (TextureWrapCoordinates)_Values[nIndex]; break;
  249.                 case RSVar.Wrap13: _currentRenderState.Wrap13 = (TextureWrapCoordinates)_Values[nIndex]; break;
  250.                 case RSVar.Wrap14: _currentRenderState.Wrap14 = (TextureWrapCoordinates)_Values[nIndex]; break;
  251.                 case RSVar.Wrap15: _currentRenderState.Wrap15 = (TextureWrapCoordinates)_Values[nIndex]; break;
  252.  
  253.                 default:
  254.                     break;
  255.             }
  256.             //
  257.             //////////////////////////////////////////////////////////////////////////
  258.  
  259.             //////////////////////////////////////////////////////////////////////////
  260.             // Add to the list of changes.
  261.             m_bChangeList.Add(new RSData((int)variable, _Values[nIndex]));
  262.  
  263.             // Run through the list, in reverse, to determine if this render state has
  264.             // been added and modified.
  265.             for (int i = m_bChangeList.Count - 2; i >= 0; --i)
  266.             {
  267.                 // This means we found the same render state but it has been modified.
  268.                 // So we will need to copy it and remove the last added one.
  269.                 if (m_bChangeList[i].Index == (int)variable)
  270.                 {
  271.                     // Remove at current location, insert new data and remove the last added data.
  272.                     m_bChangeList.RemoveAt(i);
  273.                     m_bChangeList.Insert(i, new RSData((int)variable, _Values[nIndex]));
  274.                     m_bChangeList.RemoveAt(m_bChangeList.Count - 1);
  275.                 }
  276.             }
  277.  
  278.             // Increment index.
  279.             ++nIndex;
  280.             //
  281.             //////////////////////////////////////////////////////////////////////////
  282.         }
  283.         //
  284.         //////////////////////////////////////////////////////////////////////////
  285.     }
  286.  
  287.     //////////////////////////////////////////////////////////////////////////
  288.     /// <summary>
  289.     /// Reset the current render state based on variables passed in.
  290.     /// </summary>
  291.     /// <param name="_currentRenderState">The current render state.</param>
  292.     /// <param name="_Variables">Key variables to reset.</param>
  293.     //////////////////////////////////////////////////////////////////////////
  294.     public static void Reset(RenderState _currentRenderState, RSVar[] _Variables)
  295.     {
  296.         //////////////////////////////////////////////////////////////////////////
  297.         // Check if there were any changes made.
  298.         if (m_bChangeList.Count > 0)
  299.         {
  300.             //////////////////////////////////////////////////////////////////////////
  301.             // Run through the list of variables.
  302.             foreach (RSVar variable in _Variables)
  303.             {
  304.                 //////////////////////////////////////////////////////////////////////////
  305.                 // Determine which renderstate to modify.
  306.                 switch (variable)
  307.                 {
  308.                     case RSVar.AlphaBlendEnable: _currentRenderState.AlphaBlendEnable = false; break;
  309.                     case RSVar.AlphaBlendOperation: _currentRenderState.AlphaBlendOperation = BlendFunction.Add; break;
  310.                     case RSVar.AlphaDestinationBlend: _currentRenderState.AlphaDestinationBlend = Blend.One; break;
  311.                     case RSVar.AlphaFunction: _currentRenderState.AlphaFunction = CompareFunction.Always; break;
  312.                     case RSVar.AlphaSourceBlend: _currentRenderState.AlphaSourceBlend = Blend.One; break;
  313.                     case RSVar.AlphaTestEnable: _currentRenderState.AlphaTestEnable = false; break;
  314.                     case RSVar.BlendFactor: _currentRenderState.BlendFactor = Color.White; break;
  315.                     case RSVar.BlendFunction: _currentRenderState.BlendFunction = BlendFunction.Add; break;
  316.                     case RSVar.ColorWriteChannels: _currentRenderState.ColorWriteChannels = ColorWriteChannels.None; break;
  317.                     case RSVar.ColorWriteChannels1: _currentRenderState.ColorWriteChannels1 = ColorWriteChannels.None; break;
  318.                     case RSVar.ColorWriteChannels2: _currentRenderState.ColorWriteChannels2 = ColorWriteChannels.None; break;
  319.                     case RSVar.ColorWriteChannels3: _currentRenderState.ColorWriteChannels3 = ColorWriteChannels.None; break;
  320.                     case RSVar.CounterClockwiseStencilDepthBufferFail: _currentRenderState.CounterClockwiseStencilDepthBufferFail = StencilOperation.Keep; break;
  321.                     case RSVar.CounterClockwiseStencilFail: _currentRenderState.CounterClockwiseStencilFail = StencilOperation.Keep; break;
  322.                     case RSVar.CounterClockwiseStencilFunction: _currentRenderState.CounterClockwiseStencilFunction = CompareFunction.Always; break;
  323.                     case RSVar.CounterClockwiseStencilPass: _currentRenderState.CounterClockwiseStencilPass = StencilOperation.Keep; break;
  324.                     case RSVar.CullMode: _currentRenderState.CullMode = CullMode.CullCounterClockwiseFace; break;
  325.                     case RSVar.DepthBias: _currentRenderState.DepthBias = 0f; break;
  326.                     case RSVar.DepthBufferEnable: _currentRenderState.DepthBufferEnable = false; break;
  327.                     case RSVar.DepthBufferFunction: _currentRenderState.DepthBufferFunction = CompareFunction.LessEqual; break;
  328.                     case RSVar.DepthBufferWriteEnable: _currentRenderState.DepthBufferWriteEnable = true; break;
  329.                     case RSVar.DestinationBlend: _currentRenderState.DestinationBlend = Blend.Zero; break;
  330.                     case RSVar.FillMode: _currentRenderState.FillMode = FillMode.Solid; break;
  331.                     case RSVar.FogColor: _currentRenderState.FogColor = Color.TransparentBlack; break;
  332.                     case RSVar.FogDensity: _currentRenderState.FogDensity = 1f; break;
  333.                     case RSVar.FogEnable: _currentRenderState.FogEnable = false; break;
  334.                     case RSVar.FogEnd: _currentRenderState.FogEnd = 1f; break;
  335.                     case RSVar.FogStart: _currentRenderState.FogStart = 0f; break;
  336.                     case RSVar.FogTableMode: _currentRenderState.FogTableMode = FogMode.None; break;
  337.                     case RSVar.FogVertexMode: _currentRenderState.FogVertexMode = FogMode.None; break;
  338.                     case RSVar.MultiSampleAntiAlias: _currentRenderState.MultiSampleAntiAlias = true; break;
  339.                     case RSVar.MultiSampleMask: unchecked { _currentRenderState.MultiSampleMask = (int)0xffffffff; } break;
  340.                     case RSVar.PointSize: _currentRenderState.PointSize = 64f; break;
  341.                     case RSVar.PointSizeMax: _currentRenderState.PointSizeMax = 64f; break;
  342.                     case RSVar.PointSizeMin: _currentRenderState.PointSizeMin = 1f; break;
  343.                     case RSVar.PointSpriteEnable: _currentRenderState.PointSpriteEnable = false; break;
  344.                     case RSVar.RangeFogEnable: _currentRenderState.RangeFogEnable = false; break;
  345.                     case RSVar.ReferenceAlpha: _currentRenderState.ReferenceAlpha = 0; break;
  346.                     case RSVar.ReferenceStencil: _currentRenderState.ReferenceStencil = 0; break;
  347.                     case RSVar.ScissorTestEnable: _currentRenderState.ScissorTestEnable = false; break;
  348.                     case RSVar.SeparateAlphaBlendEnabled: _currentRenderState.SeparateAlphaBlendEnabled = false; break;
  349.                     case RSVar.SlopeScaleDepthBias: _currentRenderState.SlopeScaleDepthBias = 0; break;
  350.                     case RSVar.SourceBlend: _currentRenderState.SourceBlend = Blend.One; break;
  351.                     case RSVar.StencilDepthBufferFail: _currentRenderState.StencilDepthBufferFail = StencilOperation.Keep; break;
  352.                     case RSVar.StencilEnable: _currentRenderState.StencilEnable = false; break;
  353.                     case RSVar.StencilFail: _currentRenderState.StencilFail = StencilOperation.Keep; break;
  354.                     case RSVar.StencilFunction: _currentRenderState.StencilFunction = CompareFunction.Always; break;
  355.                     case RSVar.StencilMask: _currentRenderState.StencilMask = Int32.MaxValue; break;
  356.                     case RSVar.StencilPass: _currentRenderState.StencilPass = StencilOperation.Keep; break;
  357.                     case RSVar.StencilWriteMask: _currentRenderState.StencilWriteMask = Int32.MaxValue; break;
  358.                     case RSVar.TwoSidedStencilMode: _currentRenderState.TwoSidedStencilMode = false; break;
  359.                     case RSVar.Wrap0: _currentRenderState.Wrap0 = TextureWrapCoordinates.Zero; break;
  360.                     case RSVar.Wrap1: _currentRenderState.Wrap1 = TextureWrapCoordinates.Zero; break;
  361.                     case RSVar.Wrap2: _currentRenderState.Wrap2 = TextureWrapCoordinates.Zero; break;
  362.                     case RSVar.Wrap3: _currentRenderState.Wrap3 = TextureWrapCoordinates.Zero; break;
  363.                     case RSVar.Wrap4: _currentRenderState.Wrap4 = TextureWrapCoordinates.Zero; break;
  364.                     case RSVar.Wrap5: _currentRenderState.Wrap5 = TextureWrapCoordinates.Zero; break;
  365.                     case RSVar.Wrap6: _currentRenderState.Wrap6 = TextureWrapCoordinates.Zero; break;
  366.                     case RSVar.Wrap7: _currentRenderState.Wrap7 = TextureWrapCoordinates.Zero; break;
  367.                     case RSVar.Wrap8: _currentRenderState.Wrap8 = TextureWrapCoordinates.Zero; break;
  368.                     case RSVar.Wrap9: _currentRenderState.Wrap9 = TextureWrapCoordinates.Zero; break;
  369.                     case RSVar.Wrap10: _currentRenderState.Wrap10 = TextureWrapCoordinates.Zero; break;
  370.                     case RSVar.Wrap11: _currentRenderState.Wrap11 = TextureWrapCoordinates.Zero; break;
  371.                     case RSVar.Wrap12: _currentRenderState.Wrap12 = TextureWrapCoordinates.Zero; break;
  372.                     case RSVar.Wrap13: _currentRenderState.Wrap13 = TextureWrapCoordinates.Zero; break;
  373.                     case RSVar.Wrap14: _currentRenderState.Wrap14 = TextureWrapCoordinates.Zero; break;
  374.                     case RSVar.Wrap15: _currentRenderState.Wrap15 = TextureWrapCoordinates.Zero; break;
  375.  
  376.                     default:
  377.                         break;
  378.                 }
  379.                 //
  380.                 //////////////////////////////////////////////////////////////////////////
  381.  
  382.                 //////////////////////////////////////////////////////////////////////////
  383.                 // Remove from the list of changes based on the index.
  384.                 m_bChangeList.RemoveAt(m_bChangeList.IndexOf(new RSData((int)variable, variable.GetType())));
  385.                 //
  386.                 //////////////////////////////////////////////////////////////////////////
  387.             }
  388.             //
  389.             //////////////////////////////////////////////////////////////////////////
  390.  
  391.             //////////////////////////////////////////////////////////////////////////
  392.             // Trim excess.
  393.             m_bChangeList.TrimExcess();
  394.             //
  395.             //////////////////////////////////////////////////////////////////////////
  396.         }
  397.         //
  398.         //////////////////////////////////////////////////////////////////////////
  399.     }
  400.  
  401.     //////////////////////////////////////////////////////////////////////////
  402.     /// <summary>
  403.     /// Reset the current renderstate based on changes made.
  404.     /// </summary>
  405.     /// <param name="_currentRenderState">The current render state.</param>
  406.     //////////////////////////////////////////////////////////////////////////
  407.     public static void Reset(RenderState _currentRenderState)
  408.     {
  409.         //////////////////////////////////////////////////////////////////////////
  410.         // Check if there were any changes.
  411.         if (m_bChangeList.Count > 0)
  412.         {
  413.             //////////////////////////////////////////////////////////////////////////
  414.             // Run through the list of changes.
  415.             foreach (RSData data in m_bChangeList)
  416.             {
  417.                 //////////////////////////////////////////////////////////////////////////
  418.                 // Determine the index reference.
  419.                 switch ((RSVar)data.Index)
  420.                 {
  421.                     case RSVar.AlphaBlendEnable: _currentRenderState.AlphaBlendEnable = false; break;
  422.                     case RSVar.AlphaBlendOperation: _currentRenderState.AlphaBlendOperation = BlendFunction.Add; break;
  423.                     case RSVar.AlphaDestinationBlend: _currentRenderState.AlphaDestinationBlend = Blend.One; break;
  424.                     case RSVar.AlphaFunction: _currentRenderState.AlphaFunction = CompareFunction.Always; break;
  425.                     case RSVar.AlphaSourceBlend: _currentRenderState.AlphaSourceBlend = Blend.One; break;
  426.                     case RSVar.AlphaTestEnable: _currentRenderState.AlphaTestEnable = false; break;
  427.                     case RSVar.BlendFactor: _currentRenderState.BlendFactor = Color.White; break;
  428.                     case RSVar.BlendFunction: _currentRenderState.BlendFunction = BlendFunction.Add; break;
  429.                     case RSVar.ColorWriteChannels: _currentRenderState.ColorWriteChannels = ColorWriteChannels.None; break;
  430.                     case RSVar.ColorWriteChannels1: _currentRenderState.ColorWriteChannels1 = ColorWriteChannels.None; break;
  431.                     case RSVar.ColorWriteChannels2: _currentRenderState.ColorWriteChannels2 = ColorWriteChannels.None; break;
  432.                     case RSVar.ColorWriteChannels3: _currentRenderState.ColorWriteChannels3 = ColorWriteChannels.None; break;
  433.                     case RSVar.CounterClockwiseStencilDepthBufferFail: _currentRenderState.CounterClockwiseStencilDepthBufferFail = StencilOperation.Keep; break;
  434.                     case RSVar.CounterClockwiseStencilFail: _currentRenderState.CounterClockwiseStencilFail = StencilOperation.Keep; break;
  435.                     case RSVar.CounterClockwiseStencilFunction: _currentRenderState.CounterClockwiseStencilFunction = CompareFunction.Always; break;
  436.                     case RSVar.CounterClockwiseStencilPass: _currentRenderState.CounterClockwiseStencilPass = StencilOperation.Keep; break;
  437.                     case RSVar.CullMode: _currentRenderState.CullMode = CullMode.CullCounterClockwiseFace; break;
  438.                     case RSVar.DepthBias: _currentRenderState.DepthBias = 0f; break;
  439.                     case RSVar.DepthBufferEnable: _currentRenderState.DepthBufferEnable = false; break;
  440.                     case RSVar.DepthBufferFunction: _currentRenderState.DepthBufferFunction = CompareFunction.LessEqual; break;
  441.                     case RSVar.DepthBufferWriteEnable: _currentRenderState.DepthBufferWriteEnable = true; break;
  442.                     case RSVar.DestinationBlend: _currentRenderState.DestinationBlend = Blend.Zero; break;
  443.                     case RSVar.FillMode: _currentRenderState.FillMode = FillMode.Solid; break;
  444.                     case RSVar.FogColor: _currentRenderState.FogColor = Color.TransparentBlack; break;
  445.                     case RSVar.FogDensity: _currentRenderState.FogDensity = 1f; break;
  446.                     case RSVar.FogEnable: _currentRenderState.FogEnable = false; break;
  447.                     case RSVar.FogEnd: _currentRenderState.FogEnd = 1f; break;
  448.                     case RSVar.FogStart: _currentRenderState.FogStart = 0f; break;
  449.                     case RSVar.FogTableMode: _currentRenderState.FogTableMode = FogMode.None; break;
  450.                     case RSVar.FogVertexMode: _currentRenderState.FogVertexMode = FogMode.None; break;
  451.                     case RSVar.MultiSampleAntiAlias: _currentRenderState.MultiSampleAntiAlias = true; break;
  452.                     case RSVar.MultiSampleMask: unchecked { _currentRenderState.MultiSampleMask = (int)0xffffffff; } break;
  453.                     case RSVar.PointSize: _currentRenderState.PointSize = 64f; break;
  454.                     case RSVar.PointSizeMax: _currentRenderState.PointSizeMax = 64f; break;
  455.                     case RSVar.PointSizeMin: _currentRenderState.PointSizeMin = 1f; break;
  456.                     case RSVar.PointSpriteEnable: _currentRenderState.PointSpriteEnable = false; break;
  457.                     case RSVar.RangeFogEnable: _currentRenderState.RangeFogEnable = false; break;
  458.                     case RSVar.ReferenceAlpha: _currentRenderState.ReferenceAlpha = 0; break;
  459.                     case RSVar.ReferenceStencil: _currentRenderState.ReferenceStencil = 0; break;
  460.                     case RSVar.ScissorTestEnable: _currentRenderState.ScissorTestEnable = false; break;
  461.                     case RSVar.SeparateAlphaBlendEnabled: _currentRenderState.SeparateAlphaBlendEnabled = false; break;
  462.                     case RSVar.SlopeScaleDepthBias: _currentRenderState.SlopeScaleDepthBias = 0; break;
  463.                     case RSVar.SourceBlend: _currentRenderState.SourceBlend = Blend.One; break;
  464.                     case RSVar.StencilDepthBufferFail: _currentRenderState.StencilDepthBufferFail = StencilOperation.Keep; break;
  465.                     case RSVar.StencilEnable: _currentRenderState.StencilEnable = false; break;
  466.                     case RSVar.StencilFail: _currentRenderState.StencilFail = StencilOperation.Keep; break;
  467.                     case RSVar.StencilFunction: _currentRenderState.StencilFunction = CompareFunction.Always; break;
  468.                     case RSVar.StencilMask: _currentRenderState.StencilMask = Int32.MaxValue; break;
  469.                     case RSVar.StencilPass: _currentRenderState.StencilPass = StencilOperation.Keep; break;
  470.                     case RSVar.StencilWriteMask: _currentRenderState.StencilWriteMask = Int32.MaxValue; break;
  471.                     case RSVar.TwoSidedStencilMode: _currentRenderState.TwoSidedStencilMode = false; break;
  472.                     case RSVar.Wrap0: _currentRenderState.Wrap0 = TextureWrapCoordinates.Zero; break;
  473.                     case RSVar.Wrap1: _currentRenderState.Wrap1 = TextureWrapCoordinates.Zero; break;
  474.                     case RSVar.Wrap2: _currentRenderState.Wrap2 = TextureWrapCoordinates.Zero; break;
  475.                     case RSVar.Wrap3: _currentRenderState.Wrap3 = TextureWrapCoordinates.Zero; break;
  476.                     case RSVar.Wrap4: _currentRenderState.Wrap4 = TextureWrapCoordinates.Zero; break;
  477.                     case RSVar.Wrap5: _currentRenderState.Wrap5 = TextureWrapCoordinates.Zero; break;
  478.                     case RSVar.Wrap6: _currentRenderState.Wrap6 = TextureWrapCoordinates.Zero; break;
  479.                     case RSVar.Wrap7: _currentRenderState.Wrap7 = TextureWrapCoordinates.Zero; break;
  480.                     case RSVar.Wrap8: _currentRenderState.Wrap8 = TextureWrapCoordinates.Zero; break;
  481.                     case RSVar.Wrap9: _currentRenderState.Wrap9 = TextureWrapCoordinates.Zero; break;
  482.                     case RSVar.Wrap10: _currentRenderState.Wrap10 = TextureWrapCoordinates.Zero; break;
  483.                     case RSVar.Wrap11: _currentRenderState.Wrap11 = TextureWrapCoordinates.Zero; break;
  484.                     case RSVar.Wrap12: _currentRenderState.Wrap12 = TextureWrapCoordinates.Zero; break;
  485.                     case RSVar.Wrap13: _currentRenderState.Wrap13 = TextureWrapCoordinates.Zero; break;
  486.                     case RSVar.Wrap14: _currentRenderState.Wrap14 = TextureWrapCoordinates.Zero; break;
  487.                     case RSVar.Wrap15: _currentRenderState.Wrap15 = TextureWrapCoordinates.Zero; break;
  488.  
  489.                     default:
  490.                         break;
  491.                 }
  492.                 //
  493.                 //////////////////////////////////////////////////////////////////////////
  494.             }
  495.             //
  496.             //////////////////////////////////////////////////////////////////////////
  497.  
  498.             //////////////////////////////////////////////////////////////////////////
  499.             // Clear the list and trim excess.
  500.             m_bChangeList.Clear();
  501.             m_bChangeList.TrimExcess();
  502.             //
  503.             //////////////////////////////////////////////////////////////////////////
  504.         }
  505.         //
  506.         //////////////////////////////////////////////////////////////////////////
  507.     }
  508.  
  509.     #endregion // Public Methods
  510. }