package com.gebauz.bauzoid.graphics.renderstates;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
/** Manages culling render state. */
public class CullingStates
extends RenderStatesObject
{
/** Vertex winding. */
public enum VertexWinding
{
CLOCKWISE,
COUNTERCLOCKWISE
}
private boolean mEnabled =
true;
private VertexWinding mVisibleFaces = VertexWinding.
CLOCKWISE;
private boolean mCurrentlyEnabled =
true;
private VertexWinding mCurrentVisibleFaces = VertexWinding.
CLOCKWISE;
private boolean mDefaultEnabled =
true;
private VertexWinding mDefaultVisibleFaces = VertexWinding.
CLOCKWISE;
/** Constructor. */
public CullingStates
(RenderStates renderStates
)
{
super(renderStates
);
}
/** Activate the render state. */
@
Override
public void activate
(boolean force
)
{
if ((force
) ||
(mEnabled
!= mCurrentlyEnabled
))
{
mCurrentlyEnabled = mEnabled
;
if (mEnabled
)
Gdx.
gl.
glEnable(GL20.
GL_CULL_FACE);
else
Gdx.
gl.
glDisable(GL20.
GL_CULL_FACE);
}
if ((force
) ||
(mVisibleFaces
!= mCurrentVisibleFaces
))
{
mCurrentVisibleFaces = mVisibleFaces
;
switch (mVisibleFaces
)
{
case CLOCKWISE:
Gdx.
gl.
glFrontFace(GL20.
GL_CW);
break;
case COUNTERCLOCKWISE:
Gdx.
gl.
glFrontFace(GL20.
GL_CCW);
break;
}
}
}
/** Reset to default values. */
@
Override
public void reset
()
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mEnabled = mDefaultEnabled
;
mVisibleFaces = mDefaultVisibleFaces
;
}
/** Check enabled state. */
public final boolean isEnabled
()
{
return mEnabled
;
}
/** Check default enabled state. */
public final boolean isDefaultEnabled
()
{
return mDefaultEnabled
;
}
/** Get vertex winding. */
public final VertexWinding getVisibleFaces
()
{
return mVisibleFaces
;
}
/** Get default vertex winding. */
public final VertexWinding getDefaultVisibleFaces
()
{
return mDefaultVisibleFaces
;
}
/** Set enabled state. */
public final void setEnabled
(boolean value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mEnabled = value
;
}
/** Set default enabled state. */
public final void setDefaultEnabled
(boolean value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mDefaultEnabled = value
;
}
/** Set vertex winding. */
public final void setVisibleFaces
(VertexWinding value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mVisibleFaces = value
;
}
/** Set default vertex winding. */
public final void setDefaultVisibleFaces
(VertexWinding value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mDefaultVisibleFaces = value
;
}
}