Rev 800 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tao.OpenGl;
#pragma warning disable 0618
namespace BauzoidNET.graphics.renderstates
{
public class CullingStates : RenderStatesObject
{
/** Vertex winding. */
public enum VertexWinding
{
CLOCKWISE,
COUNTERCLOCKWISE
}
private bool mEnabled = false;
private VertexWinding mVisibleFaces = VertexWinding.CLOCKWISE;
private bool mCurrentlyEnabled = false;
private VertexWinding mCurrentVisibleFaces = VertexWinding.CLOCKWISE;
private bool mDefaultEnabled = false;
private VertexWinding mDefaultVisibleFaces = VertexWinding.CLOCKWISE;
/** Constructor. */
public CullingStates(RenderStates renderStates) : base(renderStates)
{
}
/** Activate the render state. */
public override void activate(bool force)
{
if ((force) || (mEnabled != mCurrentlyEnabled))
{
mCurrentlyEnabled = mEnabled;
if (mEnabled)
Gl.glEnable(Gl.GL_CULL_FACE);
else
Gl.glDisable(Gl.GL_CULL_FACE);
}
if ((force) || (mVisibleFaces != mCurrentVisibleFaces))
{
mCurrentVisibleFaces = mVisibleFaces;
switch (mVisibleFaces)
{
case VertexWinding.CLOCKWISE:
Gl.glFrontFace(Gl.GL_CW);
break;
case VertexWinding.COUNTERCLOCKWISE:
Gl.glFrontFace(Gl.GL_CCW);
break;
}
}
}
/** Reset to default values. */
public override void reset()
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mEnabled = mDefaultEnabled;
mVisibleFaces = mDefaultVisibleFaces;
}
/** Check enabled state. */
public bool isEnabled()
{
return mEnabled;
}
/** Check default enabled state. */
public bool isDefaultEnabled()
{
return mDefaultEnabled;
}
/** Get vertex winding. */
public VertexWinding getVisibleFaces()
{
return mVisibleFaces;
}
/** Get default vertex winding. */
public VertexWinding getDefaultVisibleFaces()
{
return mDefaultVisibleFaces;
}
/** Set enabled state. */
public void setEnabled(bool value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mEnabled = value;
}
/** Set default enabled state. */
public void setDefaultEnabled(bool value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mDefaultEnabled = value;
}
/** Set vertex winding. */
public void setVisibleFaces(VertexWinding value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mVisibleFaces = value;
}
/** Set default vertex winding. */
public void setDefaultVisibleFaces(VertexWinding value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mDefaultVisibleFaces = value;
}
}
}