Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tao.OpenGl;
namespace BauzoidNET.graphics.renderstates
{
public class BlendingStates : RenderStatesObject
{
public enum BlendingMode
{
ADD,
ALPHABLEND,
SUBTRACT,
// MIN, // unsupported on OpenGL ES
// MAX, // unsupported on OpenGL ES
MULTIPLY
};
private bool mEnabled = false;
private BlendingMode mBlendingMode = BlendingMode.ALPHABLEND;
private bool mCurrentlyEnabled = false;
private BlendingMode mCurrentBlendingMode = BlendingMode.ALPHABLEND;
private bool mDefaultEnabled = false;
private BlendingMode mDefaultBlendingMode = BlendingMode.ALPHABLEND;
/** Constructor. */
public BlendingStates(RenderStates renderStates) : base(renderStates)
{
}
/** Activate the render state. Manages multiple same-state changes. */
public override void activate(bool force)
{
if ((force) || (mBlendingMode != mCurrentBlendingMode))
{
mCurrentBlendingMode = mBlendingMode;
switch (mBlendingMode)
{
case BlendingMode.ADD:
{
Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE);
break;
}
case BlendingMode.ALPHABLEND:
{
Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
break;
}
case BlendingMode.SUBTRACT:
{
Gl.glBlendFunc(Gl.GL_ZERO, Gl.GL_SRC_ALPHA);
break;
}
case BlendingMode.MULTIPLY:
{
Gl.glBlendFunc(Gl.GL_ZERO, Gl.GL_SRC_COLOR);
break;
}
}
}
if ((force) || (mEnabled != mCurrentlyEnabled))
{
mCurrentlyEnabled = mEnabled;
if (mEnabled)
{
Gl.glEnable(Gl.GL_BLEND);
}
else
{
Gl.glDisable(Gl.GL_BLEND);
}
}
}
/** Reset to default values. */
public override void reset()
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mEnabled = mDefaultEnabled;
mBlendingMode = mDefaultBlendingMode;
}
/** Check if blending is enabled. */
public bool isEnabled()
{
return mEnabled;
}
/** Check if blending is enabled by default. */
public bool isDefaultEnabled()
{
return mEnabled;
}
/** Check blending mode. */
public BlendingMode getBlendingMode()
{
return mBlendingMode;
}
/** Check default blending mode. */
public BlendingMode getDefaultBlendingMode()
{
return mDefaultBlendingMode;
}
/** Set enabled state. */
public void setEnabled(bool value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mEnabled = value;
}
/** Set default enabled state. */
public void setDefaultEnabled(bool value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mDefaultEnabled = value;
}
/** Set blending mode. */
public void setBlendingMode(BlendingMode value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mBlendingMode = value;
}
/** Set default blending mode. */
public void setDefaultBlendingMode(BlendingMode value)
{
if ((mLocked) || (mRenderStates.isLocked()))
return;
mDefaultBlendingMode = value;
}
}
}