#region File Description
#endregion
namespace
Microsoft.Xna.Framework.Graphics
{
/// <summary>
/// The default effect used by SpriteBatch.
/// </summary>
internal
class
SpriteEffect : Effect
{
#region Effect Parameters
EffectParameter matrixParam;
#endregion
#region Methods
/// <summary>
/// Creates a new SpriteEffect.
/// </summary>
public
SpriteEffect(GraphicsDevice device)
:
base
(device, Resources.SpriteEffect)
{
CacheEffectParameters();
}
/// <summary>
/// Creates a new SpriteEffect by cloning parameter settings from an existing instance.
/// </summary>
protected
SpriteEffect(SpriteEffect cloneSource)
:
base
(cloneSource)
{
CacheEffectParameters();
}
/// <summary>
/// Creates a clone of the current SpriteEffect instance.
/// </summary>
public
override
Effect Clone()
{
return
new
SpriteEffect(
this
);
}
/// <summary>
/// Looks up shortcut references to our effect parameters.
/// </summary>
void
CacheEffectParameters()
{
matrixParam = Parameters[
"MatrixTransform"
];
}
/// <summary>
/// Lazily computes derived parameter values immediately before applying the effect.
/// </summary>
protected
internal
override
void
OnApply()
{
Viewport viewport = GraphicsDevice.Viewport;
Matrix projection = Matrix.CreateOrthographicOffCenter(0, viewport.Width, viewport.Height, 0, 0, 1);
Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);
matrixParam.SetValue(halfPixelOffset * projection);
}
#endregion
}
}