//////////////////////////////////////////////////////////////////////////
/// <summary>
/// A helper class for setting render states of the graphics device.
/// </summary>
//////////////////////////////////////////////////////////////////////////
public static class RSHelper
{
/*********************************************************************/
// Members.
/*********************************************************************/
#region Enumerations
/// <summary>Render state variables.</summary>
public enum RSVar
{
AlphaBlendEnable,
AlphaBlendOperation,
AlphaDestinationBlend,
AlphaFunction,
AlphaSourceBlend,
AlphaTestEnable,
BlendFactor,
BlendFunction,
ColorWriteChannels,
ColorWriteChannels1,
ColorWriteChannels2,
ColorWriteChannels3,
CounterClockwiseStencilDepthBufferFail,
CounterClockwiseStencilFail,
CounterClockwiseStencilFunction,
CounterClockwiseStencilPass,
CullMode,
DepthBias,
DepthBufferEnable,
DepthBufferFunction,
DepthBufferWriteEnable,
DestinationBlend,
FillMode,
FogColor,
FogDensity,
FogEnable,
FogEnd,
FogStart,
FogTableMode,
FogVertexMode,
MultiSampleAntiAlias,
MultiSampleMask,
PointSize,
PointSizeMax,
PointSizeMin,
PointSpriteEnable,
RangeFogEnable,
ReferenceAlpha,
ReferenceStencil,
ScissorTestEnable,
SeparateAlphaBlendEnabled,
SlopeScaleDepthBias,
SourceBlend,
StencilDepthBufferFail,
StencilEnable,
StencilFail,
StencilFunction,
StencilMask,
StencilPass,
StencilWriteMask,
TwoSidedStencilMode,
Wrap0,
Wrap1,
Wrap2,
Wrap3,
Wrap4,
Wrap5,
Wrap6,
Wrap7,
Wrap8,
Wrap9,
Wrap10,
Wrap11,
Wrap12,
Wrap13,
Wrap14,
Wrap15,
}
#endregion // Enumerations
#region Internal Data Structures
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// Render state data structure.
/// </summary>
//////////////////////////////////////////////////////////////////////////
private struct RSData
{
/*********************************************************************/
// Members.
/*********************************************************************/
#region Fields
/// <summary>Index reference.</summary>
public int Index;
/// <summary>Object type.</summary>
public Object Type;
#endregion // Fields
/*********************************************************************/
// Functions.
/*********************************************************************/
#region Intialization
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// Alternate constructor.
/// </summary>
/// <param name="_nIndex">Index reference.</param>
/// <param name="_Type">Object type.</param>
//////////////////////////////////////////////////////////////////////////
public RSData(int _nIndex, Object _Type)
{
Index = _nIndex;
Type = _Type;
}
#endregion // Initialization
}
#endregion // Internal Data Structures
#region Fields
/// <summary>A list of changes.</summary>
private static List
<RSData
> m_bChangeList
= new List
<RSData
>();
#endregion // Fields
/*********************************************************************/
// Functions.
/*********************************************************************/
#region Public Methods
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// Set the current render state based on variables and values passed in.
/// <para>NOTE: When setting the values, they must be in the same order as
/// the variables list. Since no exception is thrown.</para>
/// </summary>
/// <param name="_currentRenderState">The current render state.</param>
/// <param name="_Variables">Key variables to set.</param>
/// <param name="_Values">Use in sequence with key variables. (Same order as _Variables)</param>
//////////////////////////////////////////////////////////////////////////
public static void Set(RenderState _currentRenderState, RSVar[] _Variables, params Object[] _Values)
{
//////////////////////////////////////////////////////////////////////////
// Local variable.
int nIndex = 0;
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Run through the list of variables.
foreach (RSVar variable in _Variables)
{
//////////////////////////////////////////////////////////////////////////
// Check if the render state has already been activated.
if ((m_bChangeList.Count > 0 && nIndex < m_bChangeList.Count) &&
(m_bChangeList[nIndex].Index == (int)variable && m_bChangeList[nIndex].Type.ToString() == _Values[nIndex].ToString()))
{
++nIndex;
continue;
}
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Determine which renderstate to modify.
switch (variable)
{
case RSVar.AlphaBlendEnable: _currentRenderState.AlphaBlendEnable = (bool)_Values[nIndex]; break;
case RSVar.AlphaBlendOperation: _currentRenderState.AlphaBlendOperation = (BlendFunction)_Values[nIndex]; break;
case RSVar.AlphaDestinationBlend: _currentRenderState.AlphaDestinationBlend = (Blend)_Values[nIndex]; break;
case RSVar.AlphaFunction: _currentRenderState.AlphaFunction = (CompareFunction)_Values[nIndex]; break;
case RSVar.AlphaSourceBlend: _currentRenderState.AlphaSourceBlend = (Blend)_Values[nIndex]; break;
case RSVar.AlphaTestEnable: _currentRenderState.AlphaTestEnable = (bool)_Values[nIndex]; break;
case RSVar.BlendFactor: _currentRenderState.BlendFactor = (Color)_Values[nIndex]; break;
case RSVar.BlendFunction: _currentRenderState.BlendFunction = (BlendFunction)_Values[nIndex]; break;
case RSVar.ColorWriteChannels: _currentRenderState.ColorWriteChannels = (ColorWriteChannels)_Values[nIndex]; break;
case RSVar.ColorWriteChannels1: _currentRenderState.ColorWriteChannels1 = (ColorWriteChannels)_Values[nIndex]; break;
case RSVar.ColorWriteChannels2: _currentRenderState.ColorWriteChannels2 = (ColorWriteChannels)_Values[nIndex]; break;
case RSVar.ColorWriteChannels3: _currentRenderState.ColorWriteChannels3 = (ColorWriteChannels)_Values[nIndex]; break;
case RSVar.CounterClockwiseStencilDepthBufferFail: _currentRenderState.CounterClockwiseStencilDepthBufferFail = (StencilOperation)_Values[nIndex]; break;
case RSVar.CounterClockwiseStencilFail: _currentRenderState.CounterClockwiseStencilFail = (StencilOperation)_Values[nIndex]; break;
case RSVar.CounterClockwiseStencilFunction: _currentRenderState.CounterClockwiseStencilFunction = (CompareFunction)_Values[nIndex]; break;
case RSVar.CounterClockwiseStencilPass: _currentRenderState.CounterClockwiseStencilPass = (StencilOperation)_Values[nIndex]; break;
case RSVar.CullMode: _currentRenderState.CullMode = (CullMode)_Values[nIndex]; break;
case RSVar.DepthBias: _currentRenderState.DepthBias = (float)_Values[nIndex]; break;
case RSVar.DepthBufferEnable: _currentRenderState.AlphaBlendEnable = (bool)_Values[nIndex]; break;
case RSVar.DepthBufferFunction: _currentRenderState.DepthBufferFunction = (CompareFunction)_Values[nIndex]; break;
case RSVar.DepthBufferWriteEnable: _currentRenderState.DepthBufferWriteEnable = (bool)_Values[nIndex]; break;
case RSVar.DestinationBlend: _currentRenderState.DestinationBlend = (Blend)_Values[nIndex]; break;
case RSVar.FillMode: _currentRenderState.FillMode = (FillMode)_Values[nIndex]; break;
case RSVar.FogColor: _currentRenderState.FogColor = (Color)_Values[nIndex]; break;
case RSVar.FogDensity: _currentRenderState.FogDensity = (float)_Values[nIndex]; break;
case RSVar.FogEnable: _currentRenderState.FogEnable = (bool)_Values[nIndex]; break;
case RSVar.FogEnd: _currentRenderState.FogEnd = (float)_Values[nIndex]; break;
case RSVar.FogStart: _currentRenderState.FogStart = (float)_Values[nIndex]; break;
case RSVar.FogTableMode: _currentRenderState.FogTableMode = (FogMode)_Values[nIndex]; break;
case RSVar.FogVertexMode: _currentRenderState.FogVertexMode = (FogMode)_Values[nIndex]; break;
case RSVar.MultiSampleAntiAlias: _currentRenderState.MultiSampleAntiAlias = (bool)_Values[nIndex]; break;
case RSVar.MultiSampleMask: _currentRenderState.MultiSampleMask = (int)_Values[nIndex]; break;
case RSVar.PointSize: _currentRenderState.PointSize = (float)_Values[nIndex]; break;
case RSVar.PointSizeMax: _currentRenderState.PointSizeMax = (float)_Values[nIndex]; break;
case RSVar.PointSizeMin: _currentRenderState.PointSizeMin = (float)_Values[nIndex]; break;
case RSVar.PointSpriteEnable: _currentRenderState.PointSpriteEnable = (bool)_Values[nIndex]; break;
case RSVar.RangeFogEnable: _currentRenderState.RangeFogEnable = (bool)_Values[nIndex]; break;
case RSVar.ReferenceAlpha: _currentRenderState.ReferenceAlpha = (int)_Values[nIndex]; break;
case RSVar.ReferenceStencil: _currentRenderState.ReferenceStencil = (int)_Values[nIndex]; break;
case RSVar.ScissorTestEnable: _currentRenderState.ScissorTestEnable = (bool)_Values[nIndex]; break;
case RSVar.SeparateAlphaBlendEnabled: _currentRenderState.SeparateAlphaBlendEnabled = (bool)_Values[nIndex]; break;
case RSVar.SlopeScaleDepthBias: _currentRenderState.SlopeScaleDepthBias = (float)_Values[nIndex]; break;
case RSVar.SourceBlend: _currentRenderState.SourceBlend = (Blend)_Values[nIndex]; break;
case RSVar.StencilDepthBufferFail: _currentRenderState.StencilDepthBufferFail = (StencilOperation)_Values[nIndex]; break;
case RSVar.StencilEnable: _currentRenderState.StencilEnable = (bool)_Values[nIndex]; break;
case RSVar.StencilFail: _currentRenderState.StencilFail = (StencilOperation)_Values[nIndex]; break;
case RSVar.StencilFunction: _currentRenderState.StencilFunction = (CompareFunction)_Values[nIndex]; break;
case RSVar.StencilMask: _currentRenderState.StencilMask = (int)_Values[nIndex]; break;
case RSVar.StencilPass: _currentRenderState.StencilPass = (StencilOperation)_Values[nIndex]; break;
case RSVar.StencilWriteMask: _currentRenderState.StencilWriteMask = (int)_Values[nIndex]; break;
case RSVar.TwoSidedStencilMode: _currentRenderState.TwoSidedStencilMode = (bool)_Values[nIndex]; break;
case RSVar.Wrap0: _currentRenderState.Wrap0 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap1: _currentRenderState.Wrap1 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap2: _currentRenderState.Wrap2 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap3: _currentRenderState.Wrap3 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap4: _currentRenderState.Wrap4 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap5: _currentRenderState.Wrap5 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap6: _currentRenderState.Wrap6 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap7: _currentRenderState.Wrap7 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap8: _currentRenderState.Wrap8 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap9: _currentRenderState.Wrap9 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap10: _currentRenderState.Wrap10 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap11: _currentRenderState.Wrap11 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap12: _currentRenderState.Wrap12 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap13: _currentRenderState.Wrap13 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap14: _currentRenderState.Wrap14 = (TextureWrapCoordinates)_Values[nIndex]; break;
case RSVar.Wrap15: _currentRenderState.Wrap15 = (TextureWrapCoordinates)_Values[nIndex]; break;
default:
break;
}
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Add to the list of changes.
m_bChangeList.
Add(new RSData
((int)variable, _Values
[nIndex
]));
// Run through the list, in reverse, to determine if this render state has
// been added and modified.
for (int i = m_bChangeList.Count - 2; i >= 0; --i)
{
// This means we found the same render state but it has been modified.
// So we will need to copy it and remove the last added one.
if (m_bChangeList[i].Index == (int)variable)
{
// Remove at current location, insert new data and remove the last added data.
m_bChangeList.RemoveAt(i);
m_bChangeList.
Insert(i,
new RSData
((int)variable, _Values
[nIndex
]));
m_bChangeList.RemoveAt(m_bChangeList.Count - 1);
}
}
// Increment index.
++nIndex;
//
//////////////////////////////////////////////////////////////////////////
}
//
//////////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// Reset the current render state based on variables passed in.
/// </summary>
/// <param name="_currentRenderState">The current render state.</param>
/// <param name="_Variables">Key variables to reset.</param>
//////////////////////////////////////////////////////////////////////////
public static void Reset(RenderState _currentRenderState, RSVar[] _Variables)
{
//////////////////////////////////////////////////////////////////////////
// Check if there were any changes made.
if (m_bChangeList.Count > 0)
{
//////////////////////////////////////////////////////////////////////////
// Run through the list of variables.
foreach (RSVar variable in _Variables)
{
//////////////////////////////////////////////////////////////////////////
// Determine which renderstate to modify.
switch (variable)
{
case RSVar.AlphaBlendEnable: _currentRenderState.AlphaBlendEnable = false; break;
case RSVar.AlphaBlendOperation: _currentRenderState.AlphaBlendOperation = BlendFunction.Add; break;
case RSVar.AlphaDestinationBlend: _currentRenderState.AlphaDestinationBlend = Blend.One; break;
case RSVar.AlphaFunction: _currentRenderState.AlphaFunction = CompareFunction.Always; break;
case RSVar.AlphaSourceBlend: _currentRenderState.AlphaSourceBlend = Blend.One; break;
case RSVar.AlphaTestEnable: _currentRenderState.AlphaTestEnable = false; break;
case RSVar.BlendFactor: _currentRenderState.BlendFactor = Color.White; break;
case RSVar.BlendFunction: _currentRenderState.BlendFunction = BlendFunction.Add; break;
case RSVar.ColorWriteChannels: _currentRenderState.ColorWriteChannels = ColorWriteChannels.None; break;
case RSVar.ColorWriteChannels1: _currentRenderState.ColorWriteChannels1 = ColorWriteChannels.None; break;
case RSVar.ColorWriteChannels2: _currentRenderState.ColorWriteChannels2 = ColorWriteChannels.None; break;
case RSVar.ColorWriteChannels3: _currentRenderState.ColorWriteChannels3 = ColorWriteChannels.None; break;
case RSVar.CounterClockwiseStencilDepthBufferFail: _currentRenderState.CounterClockwiseStencilDepthBufferFail = StencilOperation.Keep; break;
case RSVar.CounterClockwiseStencilFail: _currentRenderState.CounterClockwiseStencilFail = StencilOperation.Keep; break;
case RSVar.CounterClockwiseStencilFunction: _currentRenderState.CounterClockwiseStencilFunction = CompareFunction.Always; break;
case RSVar.CounterClockwiseStencilPass: _currentRenderState.CounterClockwiseStencilPass = StencilOperation.Keep; break;
case RSVar.CullMode: _currentRenderState.CullMode = CullMode.CullCounterClockwiseFace; break;
case RSVar.DepthBias: _currentRenderState.DepthBias = 0f; break;
case RSVar.DepthBufferEnable: _currentRenderState.DepthBufferEnable = false; break;
case RSVar.DepthBufferFunction: _currentRenderState.DepthBufferFunction = CompareFunction.LessEqual; break;
case RSVar.DepthBufferWriteEnable: _currentRenderState.DepthBufferWriteEnable = true; break;
case RSVar.DestinationBlend: _currentRenderState.DestinationBlend = Blend.Zero; break;
case RSVar.FillMode: _currentRenderState.FillMode = FillMode.Solid; break;
case RSVar.FogColor: _currentRenderState.FogColor = Color.TransparentBlack; break;
case RSVar.FogDensity: _currentRenderState.FogDensity = 1f; break;
case RSVar.FogEnable: _currentRenderState.FogEnable = false; break;
case RSVar.FogEnd: _currentRenderState.FogEnd = 1f; break;
case RSVar.FogStart: _currentRenderState.FogStart = 0f; break;
case RSVar.FogTableMode: _currentRenderState.FogTableMode = FogMode.None; break;
case RSVar.FogVertexMode: _currentRenderState.FogVertexMode = FogMode.None; break;
case RSVar.MultiSampleAntiAlias: _currentRenderState.MultiSampleAntiAlias = true; break;
case RSVar.
MultiSampleMask: unchecked { _currentRenderState.
MultiSampleMask = (int)0xffffffff
; } break
;
case RSVar.PointSize: _currentRenderState.PointSize = 64f; break;
case RSVar.PointSizeMax: _currentRenderState.PointSizeMax = 64f; break;
case RSVar.PointSizeMin: _currentRenderState.PointSizeMin = 1f; break;
case RSVar.PointSpriteEnable: _currentRenderState.PointSpriteEnable = false; break;
case RSVar.RangeFogEnable: _currentRenderState.RangeFogEnable = false; break;
case RSVar.ReferenceAlpha: _currentRenderState.ReferenceAlpha = 0; break;
case RSVar.ReferenceStencil: _currentRenderState.ReferenceStencil = 0; break;
case RSVar.ScissorTestEnable: _currentRenderState.ScissorTestEnable = false; break;
case RSVar.SeparateAlphaBlendEnabled: _currentRenderState.SeparateAlphaBlendEnabled = false; break;
case RSVar.SlopeScaleDepthBias: _currentRenderState.SlopeScaleDepthBias = 0; break;
case RSVar.SourceBlend: _currentRenderState.SourceBlend = Blend.One; break;
case RSVar.StencilDepthBufferFail: _currentRenderState.StencilDepthBufferFail = StencilOperation.Keep; break;
case RSVar.StencilEnable: _currentRenderState.StencilEnable = false; break;
case RSVar.StencilFail: _currentRenderState.StencilFail = StencilOperation.Keep; break;
case RSVar.StencilFunction: _currentRenderState.StencilFunction = CompareFunction.Always; break;
case RSVar.StencilMask: _currentRenderState.StencilMask = Int32.MaxValue; break;
case RSVar.StencilPass: _currentRenderState.StencilPass = StencilOperation.Keep; break;
case RSVar.StencilWriteMask: _currentRenderState.StencilWriteMask = Int32.MaxValue; break;
case RSVar.TwoSidedStencilMode: _currentRenderState.TwoSidedStencilMode = false; break;
case RSVar.Wrap0: _currentRenderState.Wrap0 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap1: _currentRenderState.Wrap1 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap2: _currentRenderState.Wrap2 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap3: _currentRenderState.Wrap3 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap4: _currentRenderState.Wrap4 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap5: _currentRenderState.Wrap5 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap6: _currentRenderState.Wrap6 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap7: _currentRenderState.Wrap7 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap8: _currentRenderState.Wrap8 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap9: _currentRenderState.Wrap9 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap10: _currentRenderState.Wrap10 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap11: _currentRenderState.Wrap11 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap12: _currentRenderState.Wrap12 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap13: _currentRenderState.Wrap13 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap14: _currentRenderState.Wrap14 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap15: _currentRenderState.Wrap15 = TextureWrapCoordinates.Zero; break;
default:
break;
}
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Remove from the list of changes based on the index.
m_bChangeList.
RemoveAt(m_bChangeList.
IndexOf(new RSData
((int)variable, variable.
GetType())));
//
//////////////////////////////////////////////////////////////////////////
}
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Trim excess.
m_bChangeList.TrimExcess();
//
//////////////////////////////////////////////////////////////////////////
}
//
//////////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// Reset the current renderstate based on changes made.
/// </summary>
/// <param name="_currentRenderState">The current render state.</param>
//////////////////////////////////////////////////////////////////////////
public static void Reset(RenderState _currentRenderState)
{
//////////////////////////////////////////////////////////////////////////
// Check if there were any changes.
if (m_bChangeList.Count > 0)
{
//////////////////////////////////////////////////////////////////////////
// Run through the list of changes.
foreach (RSData data in m_bChangeList)
{
//////////////////////////////////////////////////////////////////////////
// Determine the index reference.
switch ((RSVar)data.Index)
{
case RSVar.AlphaBlendEnable: _currentRenderState.AlphaBlendEnable = false; break;
case RSVar.AlphaBlendOperation: _currentRenderState.AlphaBlendOperation = BlendFunction.Add; break;
case RSVar.AlphaDestinationBlend: _currentRenderState.AlphaDestinationBlend = Blend.One; break;
case RSVar.AlphaFunction: _currentRenderState.AlphaFunction = CompareFunction.Always; break;
case RSVar.AlphaSourceBlend: _currentRenderState.AlphaSourceBlend = Blend.One; break;
case RSVar.AlphaTestEnable: _currentRenderState.AlphaTestEnable = false; break;
case RSVar.BlendFactor: _currentRenderState.BlendFactor = Color.White; break;
case RSVar.BlendFunction: _currentRenderState.BlendFunction = BlendFunction.Add; break;
case RSVar.ColorWriteChannels: _currentRenderState.ColorWriteChannels = ColorWriteChannels.None; break;
case RSVar.ColorWriteChannels1: _currentRenderState.ColorWriteChannels1 = ColorWriteChannels.None; break;
case RSVar.ColorWriteChannels2: _currentRenderState.ColorWriteChannels2 = ColorWriteChannels.None; break;
case RSVar.ColorWriteChannels3: _currentRenderState.ColorWriteChannels3 = ColorWriteChannels.None; break;
case RSVar.CounterClockwiseStencilDepthBufferFail: _currentRenderState.CounterClockwiseStencilDepthBufferFail = StencilOperation.Keep; break;
case RSVar.CounterClockwiseStencilFail: _currentRenderState.CounterClockwiseStencilFail = StencilOperation.Keep; break;
case RSVar.CounterClockwiseStencilFunction: _currentRenderState.CounterClockwiseStencilFunction = CompareFunction.Always; break;
case RSVar.CounterClockwiseStencilPass: _currentRenderState.CounterClockwiseStencilPass = StencilOperation.Keep; break;
case RSVar.CullMode: _currentRenderState.CullMode = CullMode.CullCounterClockwiseFace; break;
case RSVar.DepthBias: _currentRenderState.DepthBias = 0f; break;
case RSVar.DepthBufferEnable: _currentRenderState.DepthBufferEnable = false; break;
case RSVar.DepthBufferFunction: _currentRenderState.DepthBufferFunction = CompareFunction.LessEqual; break;
case RSVar.DepthBufferWriteEnable: _currentRenderState.DepthBufferWriteEnable = true; break;
case RSVar.DestinationBlend: _currentRenderState.DestinationBlend = Blend.Zero; break;
case RSVar.FillMode: _currentRenderState.FillMode = FillMode.Solid; break;
case RSVar.FogColor: _currentRenderState.FogColor = Color.TransparentBlack; break;
case RSVar.FogDensity: _currentRenderState.FogDensity = 1f; break;
case RSVar.FogEnable: _currentRenderState.FogEnable = false; break;
case RSVar.FogEnd: _currentRenderState.FogEnd = 1f; break;
case RSVar.FogStart: _currentRenderState.FogStart = 0f; break;
case RSVar.FogTableMode: _currentRenderState.FogTableMode = FogMode.None; break;
case RSVar.FogVertexMode: _currentRenderState.FogVertexMode = FogMode.None; break;
case RSVar.MultiSampleAntiAlias: _currentRenderState.MultiSampleAntiAlias = true; break;
case RSVar.
MultiSampleMask: unchecked { _currentRenderState.
MultiSampleMask = (int)0xffffffff
; } break
;
case RSVar.PointSize: _currentRenderState.PointSize = 64f; break;
case RSVar.PointSizeMax: _currentRenderState.PointSizeMax = 64f; break;
case RSVar.PointSizeMin: _currentRenderState.PointSizeMin = 1f; break;
case RSVar.PointSpriteEnable: _currentRenderState.PointSpriteEnable = false; break;
case RSVar.RangeFogEnable: _currentRenderState.RangeFogEnable = false; break;
case RSVar.ReferenceAlpha: _currentRenderState.ReferenceAlpha = 0; break;
case RSVar.ReferenceStencil: _currentRenderState.ReferenceStencil = 0; break;
case RSVar.ScissorTestEnable: _currentRenderState.ScissorTestEnable = false; break;
case RSVar.SeparateAlphaBlendEnabled: _currentRenderState.SeparateAlphaBlendEnabled = false; break;
case RSVar.SlopeScaleDepthBias: _currentRenderState.SlopeScaleDepthBias = 0; break;
case RSVar.SourceBlend: _currentRenderState.SourceBlend = Blend.One; break;
case RSVar.StencilDepthBufferFail: _currentRenderState.StencilDepthBufferFail = StencilOperation.Keep; break;
case RSVar.StencilEnable: _currentRenderState.StencilEnable = false; break;
case RSVar.StencilFail: _currentRenderState.StencilFail = StencilOperation.Keep; break;
case RSVar.StencilFunction: _currentRenderState.StencilFunction = CompareFunction.Always; break;
case RSVar.StencilMask: _currentRenderState.StencilMask = Int32.MaxValue; break;
case RSVar.StencilPass: _currentRenderState.StencilPass = StencilOperation.Keep; break;
case RSVar.StencilWriteMask: _currentRenderState.StencilWriteMask = Int32.MaxValue; break;
case RSVar.TwoSidedStencilMode: _currentRenderState.TwoSidedStencilMode = false; break;
case RSVar.Wrap0: _currentRenderState.Wrap0 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap1: _currentRenderState.Wrap1 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap2: _currentRenderState.Wrap2 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap3: _currentRenderState.Wrap3 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap4: _currentRenderState.Wrap4 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap5: _currentRenderState.Wrap5 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap6: _currentRenderState.Wrap6 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap7: _currentRenderState.Wrap7 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap8: _currentRenderState.Wrap8 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap9: _currentRenderState.Wrap9 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap10: _currentRenderState.Wrap10 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap11: _currentRenderState.Wrap11 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap12: _currentRenderState.Wrap12 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap13: _currentRenderState.Wrap13 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap14: _currentRenderState.Wrap14 = TextureWrapCoordinates.Zero; break;
case RSVar.Wrap15: _currentRenderState.Wrap15 = TextureWrapCoordinates.Zero; break;
default:
break;
}
//
//////////////////////////////////////////////////////////////////////////
}
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Clear the list and trim excess.
m_bChangeList.Clear();
m_bChangeList.TrimExcess();
//
//////////////////////////////////////////////////////////////////////////
}
//
//////////////////////////////////////////////////////////////////////////
}
#endregion // Public Methods
}