package com.gebauz.Bauzoid.graphics.renderstates;
import com.gebauz.Bauzoid.graphics.Graphics;
import com.gebauz.Bauzoid.graphics.GraphicsObject;
/** Set of renderstates. */
public class RenderStatesConfiguration
extends GraphicsObject
{
// unsupported in OpenGL ES 2.0
/* private boolean mAlphaTestEnabled;
private float mAlphaTestThreshold;
private int mAlphaTestComparisonFunc;*/
private boolean mBlendingEnabled
;
private BlendingStates.
BlendingMode mBlendingMode
;
private boolean mCullingEnabled
;
private CullingStates.
VertexWinding mCullingWinding
;
private boolean mDepthTestEnabled
;
private boolean mDepthBufferWriteEnabled
;
private DepthTestStates.
ComparisonMode mDepthTestComparisonFunc
;
/** Constructor. */
public RenderStatesConfiguration
(Graphics graphics
)
{
super(graphics
);
mBlendingEnabled = graphics.
renderStates.
blending.
isDefaultEnabled();
mBlendingMode = graphics.
renderStates.
blending.
getDefaultBlendingMode();
mCullingEnabled = graphics.
renderStates.
culling.
isDefaultEnabled();
mCullingWinding = graphics.
renderStates.
culling.
getDefaultVisibleFaces();
mDepthTestEnabled = graphics.
renderStates.
depthTest.
isDefaultEnabled();
mDepthBufferWriteEnabled = graphics.
renderStates.
depthTest.
isDefaultWriteEnabled();
mDepthTestComparisonFunc = graphics.
renderStates.
depthTest.
getDefaultDepthTestFunction();
}
/** Apply states. */
public void apply
()
{
RenderStates renderStates = getRenderStates
();
renderStates.
blending.
setEnabled(mBlendingEnabled
);
renderStates.
blending.
setBlendingMode(mBlendingMode
);
renderStates.
culling.
setEnabled(mCullingEnabled
);
renderStates.
culling.
setVisibleFaces(mCullingWinding
);
renderStates.
depthTest.
setEnabled(mDepthTestEnabled
);
renderStates.
depthTest.
setWriteEnabled(mDepthBufferWriteEnabled
);
renderStates.
depthTest.
setDepthTestFunction(mDepthTestComparisonFunc
);
}
/** Enable/disable blending. */
public final void setBlendingEnabled
(boolean blendingEnabled
)
{
mBlendingEnabled = blendingEnabled
;
}
/** Set blending mode. */
public final void setBlendingMode
(BlendingStates.
BlendingMode blendingMode
)
{
mBlendingMode = blendingMode
;
}
/** Set numeric blending mode according to SUX values. */
public final void setBlendingMode
(int blendingMode
)
{
switch(blendingMode
)
{
case 0:
mBlendingMode = BlendingStates.
BlendingMode.
ADD;
break;
case 1:
mBlendingMode = BlendingStates.
BlendingMode.
ALPHABLEND;
break;
case 2:
mBlendingMode = BlendingStates.
BlendingMode.
SUBTRACT;
break;
// Unsupported in OpenGL ES
/* case 3:
mBlendingMode = BlendingStates.BlendingMode.MIN;
break;
case 4:
mBlendingMode = BlendingStates.BlendingMode.MAX;
break;*/
case 5:
mBlendingMode = BlendingStates.
BlendingMode.
MULTIPLY;
break;
}
}
/** Enable/disable backface culling. */
public final void setCullingEnabled
(boolean cullingEnabled
)
{
mCullingEnabled = cullingEnabled
;
}
/** Set the culling mode. */
public final void setCullingWinding
(CullingStates.
VertexWinding cullingWinding
)
{
mCullingWinding = cullingWinding
;
}
/** Set culling mode according to SUX values. */
public final void setCullingWinding
(int cullingWinding
)
{
switch(cullingWinding
)
{
case 1:
mCullingWinding = CullingStates.
VertexWinding.
CLOCKWISE;
break;
case 0:
mCullingWinding = CullingStates.
VertexWinding.
COUNTERCLOCKWISE;
break;
}
}
/** Enable/disable depth test. */
public final void setDepthTestEnabled
(boolean depthTestEnabled
)
{
mDepthTestEnabled = depthTestEnabled
;
}
/** Enable/disable depth buffer writing. */
public final void setDepthBufferWriteEnabled
(boolean depthBufferWriteEnabled
)
{
mDepthBufferWriteEnabled = depthBufferWriteEnabled
;
}
/** Set depth test comparison function. */
public final void setDepthTestComparisonFunc
(DepthTestStates.
ComparisonMode depthTestComparisonFunc
)
{
mDepthTestComparisonFunc = depthTestComparisonFunc
;
}
/** Set depth test comparison function according to SUX values. */
public final void setDepthTestComparisonFunc
(int comparisonFunc
)
{
switch (comparisonFunc
)
{
case 0:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
NEVER;
break;
case 1:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
ALWAYS;
break;
case 2:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
LESS;
break;
case 3:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
LESSEQUAL;
break;
case 4:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
EQUAL;
break;
case 5:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
GREATER;
break;
case 6:
mDepthTestComparisonFunc = DepthTestStates.
ComparisonMode.
GREATEREQUAL;
break;
}
}
/** Check if blending is enabled. */
public final boolean isBlendingEnabled
()
{
return mBlendingEnabled
;
}
/** Get blending mode. */
public final BlendingStates.
BlendingMode getBlendingMode
()
{
return mBlendingMode
;
}
/** Check if culling is enabled. */
public final boolean isCullingEnabled
()
{
return mCullingEnabled
;
}
/** Get culling triangle winding mode. */
public final CullingStates.
VertexWinding getCullingWinding
()
{
return mCullingWinding
;
}
/** Check if depth test is enabled. */
public final boolean isDepthTestEnabled
()
{
return mDepthTestEnabled
;
}
/** Check if depth buffer writing is enabled. */
public final boolean isDepthBufferWriteEnabled
()
{
return mDepthBufferWriteEnabled
;
}
/** Get depth test comparison function. */
public final DepthTestStates.
ComparisonMode getDepthTestComparisonFunc
()
{
return mDepthTestComparisonFunc
;
}
}