package com.gebauz.pingK.common.framework.renderstates;
import javax.microedition.khronos.opengles.GL10;
import com.gebauz.pingK.common.framework.GLUtil;
public class CullingStates
extends RenderStatesObject
{
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;
public CullingStates
(RenderStates renderStates
)
{
super(renderStates
);
}
@
Override
public void activate
(boolean force
)
{
GL10 gl = GLUtil.
getGL();
if ((force
) ||
(mEnabled
!= mCurrentlyEnabled
))
{
mCurrentlyEnabled = mEnabled
;
if (mEnabled
)
gl.
glEnable(GL10.
GL_CULL_FACE);
else
gl.
glDisable(GL10.
GL_CULL_FACE);
}
if ((force
) ||
(mVisibleFaces
!= mCurrentVisibleFaces
))
{
mCurrentVisibleFaces = mVisibleFaces
;
switch (mVisibleFaces
)
{
case CLOCKWISE:
gl.
glFrontFace(GL10.
GL_CW);
break;
case COUNTERCLOCKWISE:
gl.
glFrontFace(GL10.
GL_CCW);
break;
}
}
}
@
Override
public void reset
()
{
mEnabled = mDefaultEnabled
;
mVisibleFaces = mDefaultVisibleFaces
;
}
public final boolean isEnabled
() { return mEnabled
; }
public final boolean isDefaultEnabled
() { return mDefaultEnabled
; }
public final VertexWinding getVisibleFaces
() { return mVisibleFaces
; }
public final VertexWinding getDefaultVisibleFaces
() { return mDefaultVisibleFaces
; }
public final void setEnabled
(boolean value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mEnabled = value
;
}
public final void setDefaultEnabled
(boolean value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mDefaultEnabled = value
;
}
public final void setVisibleFaces
(VertexWinding value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mVisibleFaces = value
;
}
public final void setDefaultVisibleFaces
(VertexWinding value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mDefaultVisibleFaces = value
;
}
}