69 lines
1.7 KiB
C#
69 lines
1.7 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace Kav
|
|
{
|
|
public class SimpleDepthEffect : Effect
|
|
{
|
|
EffectParameter modelViewProjectionParam;
|
|
|
|
Matrix model;
|
|
Matrix view;
|
|
Matrix projection;
|
|
|
|
EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All;
|
|
|
|
public Matrix Model
|
|
{
|
|
get { return model; }
|
|
set
|
|
{
|
|
model = value;
|
|
dirtyFlags |= EffectDirtyFlags.WorldViewProj;
|
|
}
|
|
}
|
|
|
|
public Matrix View
|
|
{
|
|
get { return view; }
|
|
set
|
|
{
|
|
view = value;
|
|
dirtyFlags |= EffectDirtyFlags.WorldViewProj;
|
|
}
|
|
}
|
|
|
|
public Matrix Projection
|
|
{
|
|
get { return projection; }
|
|
set
|
|
{
|
|
projection = value;
|
|
dirtyFlags |= EffectDirtyFlags.WorldViewProj;
|
|
}
|
|
}
|
|
public SimpleDepthEffect(GraphicsDevice graphicsDevice) : base(graphicsDevice, Resources.SimpleDepthEffect)
|
|
{
|
|
CacheEffectParameters();
|
|
}
|
|
|
|
protected override void OnApply()
|
|
{
|
|
if ((dirtyFlags & EffectDirtyFlags.WorldViewProj) != 0)
|
|
{
|
|
Matrix.Multiply(ref model, ref view, out Matrix modelView);
|
|
Matrix.Multiply(ref modelView, ref projection, out Matrix worldViewProj);
|
|
|
|
modelViewProjectionParam.SetValue(worldViewProj);
|
|
|
|
dirtyFlags &= ~EffectDirtyFlags.WorldViewProj;
|
|
}
|
|
}
|
|
|
|
private void CacheEffectParameters()
|
|
{
|
|
modelViewProjectionParam = Parameters["ModelViewProjection"];
|
|
}
|
|
}
|
|
}
|