Kav/Effects/SimpleDepthEffect.cs

80 lines
2.0 KiB
C#
Raw Normal View History

2020-08-07 00:58:50 +00:00
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Kav
{
public class SimpleDepthEffect : Effect
{
EffectParameter modelViewProjectionParam;
2020-08-27 21:46:20 +00:00
EffectParameter nearParam;
EffectParameter farParam;
2020-08-07 00:58:50 +00:00
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;
}
}
2020-08-27 21:46:20 +00:00
public float Near { get; set; }
public float Far { get; set; }
2020-08-07 00:58:50 +00:00
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;
}
2020-08-27 21:46:20 +00:00
nearParam.SetValue(Near);
farParam.SetValue(Far);
2020-08-07 00:58:50 +00:00
}
private void CacheEffectParameters()
{
modelViewProjectionParam = Parameters["ModelViewProjection"];
2020-08-27 21:46:20 +00:00
nearParam = Parameters["near"];
farParam = Parameters["far"];
2020-08-07 00:58:50 +00:00
}
}
}