152 lines
3.1 KiB
C#
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
|
|
}
|
|
}
|