SND\AstrorEnales_cp ca0d730bbb - Working on Metro Platform and Rendering
- Further implementations in the PsVita RenderSystem
2012-08-12 20:00:19 +00:00

152 lines
3.1 KiB
C#

using System;
using ANX.Framework.Graphics;
using ANX.Framework.NonXNA;
using SceGraphics = Sce.PlayStation.Core.Graphics;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace ANX.RenderSystem.PsVita
{
public class PsVitaRasterizerState : INativeRasterizerState
{
#region Public
public bool IsBound
{
get;
private set;
}
public CullMode CullMode
{
set;
private get;
}
public bool ScissorTestEnable
{
set;
private get;
}
public FillMode FillMode
{
set;
private get;
}
public float SlopeScaleDepthBias
{
set;
private get;
}
public float DepthBias
{
set;
private get;
}
public bool MultiSampleAntiAlias
{
set;
private get;
}
#endregion
#region Constructor
internal PsVitaRasterizerState()
{
IsBound = false;
}
#endregion
#region Apply
public void Apply(GraphicsDevice graphicsDevice)
{
IsBound = true;
var context = PsVitaGraphicsDevice.Current.NativeContext;
#region Cull Mode
if (CullMode == CullMode.None)
{
context.Disable(SceGraphics.EnableMode.CullFace);
context.SetCullFace(SceGraphics.CullFaceMode.FrontAndBack,
SceGraphics.CullFaceDirection.Cw);
}
else
{
context.Enable(SceGraphics.EnableMode.CullFace);
var cullMode = CullMode == CullMode.None ?
SceGraphics.CullFaceMode.FrontAndBack :
CullMode == CullMode.CullClockwiseFace ?
SceGraphics.CullFaceMode.Front :
SceGraphics.CullFaceMode.Back;
context.SetCullFace(cullMode, SceGraphics.CullFaceDirection.Cw);
}
#endregion
// TODO
//GL.PolygonMode(MaterialFace.FrontAndBack,
// FillMode == FillMode.WireFrame ? PolygonMode.Line : PolygonMode.Fill);
#region ScissorTestEnable
if (ScissorTestEnable)
{
context.Enable(SceGraphics.EnableMode.ScissorTest);
}
else
{
context.Disable(SceGraphics.EnableMode.ScissorTest);
}
#endregion
#region DepthBias / SlopeScaleDepthBias (TODO: test!)
// NOTE: http://www.opengl.org/sdk/docs/man/xhtml/glPolygonOffset.xml
// Good article about difference between OpenGL and DirectX concerning
// Depth Bias: http://aras-p.info/blog/2008/06/12/depth-bias-and-the-power-of-deceiving-yourself/
if (DepthBias != 0f &&
SlopeScaleDepthBias != 0f)
{
context.Enable(SceGraphics.EnableMode.PolygonOffsetFill);
context.SetPolygonOffset(SlopeScaleDepthBias, DepthBias);
}
else
{
context.Disable(SceGraphics.EnableMode.PolygonOffsetFill);
}
#endregion
#region MultiSampleAntiAlias (TODO)
if (MultiSampleAntiAlias)
{
//GL.Enable(EnableCap.Multisample);
}
else
{
//GL.Disable(EnableCap.Multisample);
}
#endregion
}
#endregion
#region Release
public void Release()
{
IsBound = false;
}
#endregion
#region Dispose
public void Dispose()
{
}
#endregion
}
}