package com.gebauz.pingK.common.framework.renderstates;
import javax.microedition.khronos.opengles.GL10;
import com.gebauz.pingK.common.framework.GLUtil;
public class BlendingStates
extends RenderStatesObject
{
public enum BlendingMode
{
ADD,
ALPHABLEND,
SUBTRACT,
// MIN, // supported on OpenGL ES
// MAX, // unsupported on OpenGL ES
MULTIPLY
};
private boolean mEnabled =
false;
private BlendingMode mBlendingMode = BlendingMode.
ALPHABLEND;
private boolean mCurrentlyEnabled =
false;
private BlendingMode mCurrentBlendingMode = BlendingMode.
ALPHABLEND;
private boolean mDefaultEnabled =
false;
private BlendingMode mDefaultBlendingMode = BlendingMode.
ALPHABLEND;
public BlendingStates
(RenderStates renderStates
)
{
super(renderStates
);
}
@
Override
public void activate
(boolean force
)
{
GL10 gl = GLUtil.
getGL();
if ((force
) ||
(mBlendingMode
!= mCurrentBlendingMode
))
{
mCurrentBlendingMode = mBlendingMode
;
switch (mBlendingMode
)
{
case ADD:
{
gl.
glBlendFunc(GL10.
GL_SRC_ALPHA, GL10.
GL_ONE);
break;
}
case ALPHABLEND:
{
gl.
glBlendFunc(GL10.
GL_SRC_ALPHA, GL10.
GL_ONE_MINUS_SRC_ALPHA);
break;
}
case SUBTRACT:
{
gl.
glBlendFunc(GL10.
GL_ZERO, GL10.
GL_SRC_ALPHA);
break;
}
case MULTIPLY:
{
gl.
glBlendFunc(GL10.
GL_ZERO, GL10.
GL_SRC_COLOR);
break;
}
}
}
if ((force
) ||
(mEnabled
!= mCurrentlyEnabled
))
{
mCurrentlyEnabled = mEnabled
;
if (mEnabled
)
{
gl.
glEnable(GL10.
GL_BLEND);
}
else
{
gl.
glDisable(GL10.
GL_BLEND);
}
}
}
@
Override
public void reset
()
{
mEnabled = mDefaultEnabled
;
mBlendingMode = mDefaultBlendingMode
;
}
public final boolean isEnabled
() { return mEnabled
; }
public final boolean isDefaultEnabled
() { return mEnabled
; }
public final BlendingMode getBlendingMode
() { return mBlendingMode
; }
public final BlendingMode getDefaultBlendingMode
() { return mDefaultBlendingMode
; }
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 setBlendingMode
(BlendingMode value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mBlendingMode = value
;
}
public final void setDefaultBlendingMode
(BlendingMode value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mDefaultBlendingMode = value
;
}
}