using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kav { public class Deferred_ToonEffect : Effect, ShadowCascadeEffect { EffectParameter gPositionParam; EffectParameter gAlbedoParam; EffectParameter gNormalParam; EffectParameter shadowMapOneParam; EffectParameter shadowMapTwoParam; EffectParameter shadowMapThreeParam; EffectParameter shadowMapFourParam; EffectParameter eyePositionParam; EffectParameter directionalLightDirectionParam; EffectParameter directionalLightColorParam; EffectParameter softnessParam; EffectParameter cascadeFarPlanesParam; EffectParameter shadowMapSizeParam; EffectParameter lightSpaceMatrixOneParam; EffectParameter lightSpaceMatrixTwoParam; EffectParameter lightSpaceMatrixThreeParam; EffectParameter lightSpaceMatrixFourParam; EffectParameter viewMatrixParam; public Texture2D GPosition { get; set; } public Texture2D GAlbedo { get; set; } public Texture2D GNormal { get; set; } public Texture2D ShadowMapOne { get; set; } public Texture2D ShadowMapTwo { get; set; } public Texture2D ShadowMapThree { get; set; } public Texture2D ShadowMapFour { get; set; } public Vector3 EyePosition { get; set; } public Vector3 DirectionalLightDirection { get; set; } public Vector3 DirectionalLightColor { get; set; } public float Softness { get; set; } public float[] CascadeFarPlanes { get; } public float ShadowMapSize { get; set; } public Matrix LightSpaceMatrixOne { get; set; } public Matrix LightSpaceMatrixTwo { get; set; } public Matrix LightSpaceMatrixThree { get; set; } public Matrix LightSpaceMatrixFour { get; set; } public Matrix ViewMatrix { get; set; } public Deferred_ToonEffect(GraphicsDevice graphicsDevice) : base(graphicsDevice, Resources.Deferred_ToonEffect) { CascadeFarPlanes = new float[4]; CacheEffectParameters(); } protected override void OnApply() { gPositionParam.SetValue(GPosition); gAlbedoParam.SetValue(GAlbedo); gNormalParam.SetValue(GNormal); shadowMapOneParam.SetValue(ShadowMapOne); shadowMapTwoParam.SetValue(ShadowMapTwo); shadowMapThreeParam.SetValue(ShadowMapThree); shadowMapFourParam.SetValue(ShadowMapFour); eyePositionParam.SetValue(EyePosition); directionalLightDirectionParam.SetValue(DirectionalLightDirection); directionalLightColorParam.SetValue(DirectionalLightColor); softnessParam.SetValue(Softness); cascadeFarPlanesParam.SetValue(CascadeFarPlanes); shadowMapSizeParam.SetValue(ShadowMapSize); lightSpaceMatrixOneParam.SetValue(LightSpaceMatrixOne); lightSpaceMatrixTwoParam.SetValue(LightSpaceMatrixTwo); lightSpaceMatrixThreeParam.SetValue(LightSpaceMatrixThree); lightSpaceMatrixFourParam.SetValue(LightSpaceMatrixFour); viewMatrixParam.SetValue(ViewMatrix); } void CacheEffectParameters() { gPositionParam = Parameters["gPosition"]; gAlbedoParam = Parameters["gAlbedo"]; gNormalParam = Parameters["gNormal"]; shadowMapOneParam = Parameters["shadowMapOne"]; shadowMapTwoParam = Parameters["shadowMapTwo"]; shadowMapThreeParam = Parameters["shadowMapThree"]; shadowMapFourParam = Parameters["shadowMapFour"]; eyePositionParam = Parameters["EyePosition"]; directionalLightDirectionParam = Parameters["DirectionalLightDirection"]; directionalLightColorParam = Parameters["DirectionalLightColor"]; softnessParam = Parameters["Softness"]; cascadeFarPlanesParam = Parameters["CascadeFarPlanes"]; shadowMapSizeParam = Parameters["ShadowMapSize"]; lightSpaceMatrixOneParam = Parameters["LightSpaceMatrixOne"]; lightSpaceMatrixTwoParam = Parameters["LightSpaceMatrixTwo"]; lightSpaceMatrixThreeParam = Parameters["LightSpaceMatrixThree"]; lightSpaceMatrixFourParam = Parameters["LightSpaceMatrixFour"]; viewMatrixParam = Parameters["ViewMatrix"]; } } }