package com.gebauz.bauzoid.graphics.renderstates;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
/** Manages renderstates for blending. */
public class BlendingStates
extends RenderStatesObject
{
public enum BlendingMode
{
ADD,
ALPHABLEND,
SUBTRACT,
// MIN, // unsupported 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;
/** Constructor. */
public BlendingStates
(RenderStates renderStates
)
{
super(renderStates
);
}
/** Activate the render state. Manages multiple same-state changes. */
@
Override
public void activate
(boolean force
)
{
if ((force
) ||
(mBlendingMode
!= mCurrentBlendingMode
))
{
mCurrentBlendingMode = mBlendingMode
;
switch (mBlendingMode
)
{
case ADD:
{
Gdx.
gl.
glBlendFunc(GL20.
GL_SRC_ALPHA, GL20.
GL_ONE);
break;
}
case ALPHABLEND:
{
Gdx.
gl.
glBlendFunc(GL20.
GL_SRC_ALPHA, GL20.
GL_ONE_MINUS_SRC_ALPHA);
break;
}
case SUBTRACT:
{
Gdx.
gl.
glBlendFunc(GL20.
GL_ZERO, GL20.
GL_SRC_ALPHA);
break;
}
case MULTIPLY:
{
Gdx.
gl.
glBlendFunc(GL20.
GL_ZERO, GL20.
GL_SRC_COLOR);
break;
}
}
}
if ((force
) ||
(mEnabled
!= mCurrentlyEnabled
))
{
mCurrentlyEnabled = mEnabled
;
if (mEnabled
)
{
Gdx.
gl.
glEnable(GL20.
GL_BLEND);
}
else
{
Gdx.
gl.
glDisable(GL20.
GL_BLEND);
}
}
}
/** Reset to default values. */
@
Override
public void reset
()
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mEnabled = mDefaultEnabled
;
mBlendingMode = mDefaultBlendingMode
;
}
/** Check if blending is enabled. */
public final boolean isEnabled
()
{
return mEnabled
;
}
/** Check if blending is enabled by default. */
public final boolean isDefaultEnabled
()
{
return mEnabled
;
}
/** Check blending mode. */
public final BlendingMode getBlendingMode
()
{
return mBlendingMode
;
}
/** Check default blending mode. */
public final BlendingMode getDefaultBlendingMode
()
{
return mDefaultBlendingMode
;
}
/** 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 blending mode. */
public final void setBlendingMode
(BlendingMode value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mBlendingMode = value
;
}
/** Set default blending mode. */
public final void setDefaultBlendingMode
(BlendingMode value
)
{
if ((mLocked
) ||
(mRenderStates.
isLocked()))
return;
mDefaultBlendingMode = value
;
}
}