//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// Copyright (C)2007 DarkWynter Studios. All rights reserved.
//
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {License Information: Creative Commons}
//---------------------------------------------------------------------------------------------------------------------------------------------------
namespace DarkWynter.Stream
{
#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using System.ComponentModel;
#endregion
///
/// Provides global handles to shader api.
/// Provides global access bridge to shader Uniform and Texture variables.
///
public class ShaderParameters
{
///
/// Update Effect struct
///
public struct UpdateFX
{
///
/// Update effects file (HLSL)
///
public static Effect effect;
#region Global access bridge to shader Uniform and Texture variables
///
/// Time elapsed between frames
///
public static EffectParameter dt;
///
/// ViewProjection Matrix
///
public static EffectParameter ViewProj;
///
/// World Matrix
///
public static EffectParameter World;
///
/// Inverse Transpose of the World matrix
///
public static EffectParameter WorldInverseTranspose;
///
/// Scale used on GPU objects
///
public static EffectParameter gpuObjectScale;
///
/// Amount of Gravity on current level
///
public static EffectParameter gravity;
///
/// Minimum Y value for terrain
///
public static EffectParameter scaleMinY;
///
/// Y range for terrain
///
public static EffectParameter scaleRangeY;
///
/// Minimum Y value in current position
///
public static EffectParameter cpScaleMinY;
///
/// Y range in current position
///
public static EffectParameter cpScaleRangeY;
///
/// Current player's position
///
public static EffectParameter playerPosition;
///
/// Inverse of the Spatial Map height
///
public static EffectParameter invSpatMapHeight;
///
/// Inverse of the Spatial Map Width
///
public static EffectParameter invSpatMapWidth;
///
/// Index value of the current Indexed Pass
///
public static EffectParameter IndexedPass;
///
/// Normal component for collision calculations
///
public static EffectParameter normalComponent;
///
/// Normal force after collision
///
public static EffectParameter normalForce;
///
/// Object 1's velocity
///
public static EffectParameter mass1Velocity;
///
/// Object 1's current positiong
///
public static EffectParameter mass1CurrentPosition;
///
/// Object 1's mass value
///
public static EffectParameter mass;
///
/// - LocationMap -
///
public static EffectParameter LocationMap;
///
/// - TerrainHeightMap -
///
public static EffectParameter TerrainHeightMap;
///
/// - TerrainNormalMap -
///
public static EffectParameter TerrainNormalMap;
///
/// - Position -
///
public static EffectParameter CurrentPosition;
///
/// - Rotation -
///
public static EffectParameter Rotation;
///
/// - Scale -
///
public static EffectParameter Scale;
///
/// - Mass -
///
public static EffectParameter Mass;
///
/// - Velocity -
///
public static EffectParameter Velocity;
///
/// - Acceleration -
///
public static EffectParameter Acceleration;
///
/// - LastPosition -
///
public static EffectParameter LastPosition;
///
/// - TotalForce -
///
public static EffectParameter TotalForce;
///
/// - WindMap -
///
public static EffectParameter WindMap;
///
/// - Radius -
///
public static EffectParameter Radius;
///
/// - Dummy -
///
public static EffectParameter Dummy;
#endregion
}
public UpdateFX _updateFX { get { return updateFX; } set { updateFX = value; } }
private UpdateFX updateFX;
///
/// Shader Parameters constructor.
/// Loads Draw shader file from disk.
/// Associates all cpu effectparameters with gpu counterpart variables.
///
///
/// Constructor
///
public ShaderParameters(ContentManager content)
{
// Set up Uniform shader connections
ShaderParameters.UpdateFX.effect = content.Load("Content/_shaders/GpuCollisionPhysics");
updateFX = new UpdateFX();
LoadUpdateParameters();
}
///
/// Associates all Update-based cpu effectparameters with gpu counterpart variables.
///
private void LoadUpdateParameters()
{
try
{
ShaderParameters.UpdateFX.dt = ShaderParameters.UpdateFX.effect.Parameters["dt"];
ShaderParameters.UpdateFX.ViewProj = ShaderParameters.UpdateFX.effect.Parameters["ViewProj"];
ShaderParameters.UpdateFX.World = ShaderParameters.UpdateFX.effect.Parameters["World"];
ShaderParameters.UpdateFX.WorldInverseTranspose = ShaderParameters.UpdateFX.effect.Parameters["WorldInverseTranspose"];
ShaderParameters.UpdateFX.gpuObjectScale = ShaderParameters.UpdateFX.effect.Parameters["gpuObjectScale"];
ShaderParameters.UpdateFX.gravity = ShaderParameters.UpdateFX.effect.Parameters["gravity"];
ShaderParameters.UpdateFX.scaleMinY = ShaderParameters.UpdateFX.effect.Parameters["scaleMinY"];
ShaderParameters.UpdateFX.scaleRangeY = ShaderParameters.UpdateFX.effect.Parameters["scaleRangeY"];
ShaderParameters.UpdateFX.cpScaleMinY = ShaderParameters.UpdateFX.effect.Parameters["cpScaleMinY"];
ShaderParameters.UpdateFX.cpScaleRangeY = ShaderParameters.UpdateFX.effect.Parameters["cpScaleRangeY"];
ShaderParameters.UpdateFX.playerPosition = ShaderParameters.UpdateFX.effect.Parameters["playerPosition"];
ShaderParameters.UpdateFX.invSpatMapHeight = ShaderParameters.UpdateFX.effect.Parameters["invSpatMapHeight"];
ShaderParameters.UpdateFX.invSpatMapWidth = ShaderParameters.UpdateFX.effect.Parameters["invSpatMapWidth"];
ShaderParameters.UpdateFX.IndexedPass = ShaderParameters.UpdateFX.effect.Parameters["IndexedPass"];
ShaderParameters.UpdateFX.normalComponent = ShaderParameters.UpdateFX.effect.Parameters["normalComponent"];
ShaderParameters.UpdateFX.normalForce = ShaderParameters.UpdateFX.effect.Parameters["normalForce"];
ShaderParameters.UpdateFX.mass1Velocity = ShaderParameters.UpdateFX.effect.Parameters["mass1Velocity"];
ShaderParameters.UpdateFX.mass1CurrentPosition = ShaderParameters.UpdateFX.effect.Parameters["mass1CurrentPosition"];
ShaderParameters.UpdateFX.mass = ShaderParameters.UpdateFX.effect.Parameters["mass"];
ShaderParameters.UpdateFX.LocationMap = ShaderParameters.UpdateFX.effect.Parameters["LocationMap"];
ShaderParameters.UpdateFX.TerrainHeightMap = ShaderParameters.UpdateFX.effect.Parameters["TerrainHeightMap"];
ShaderParameters.UpdateFX.TerrainNormalMap = ShaderParameters.UpdateFX.effect.Parameters["TerrainNormalMap"];
ShaderParameters.UpdateFX.CurrentPosition = ShaderParameters.UpdateFX.effect.Parameters["CurrentPosition"];
ShaderParameters.UpdateFX.Rotation = ShaderParameters.UpdateFX.effect.Parameters["Rotation"];
ShaderParameters.UpdateFX.Scale = ShaderParameters.UpdateFX.effect.Parameters["Scale"];
ShaderParameters.UpdateFX.Mass = ShaderParameters.UpdateFX.effect.Parameters["Mass"];
ShaderParameters.UpdateFX.Velocity = ShaderParameters.UpdateFX.effect.Parameters["Velocity"];
ShaderParameters.UpdateFX.Acceleration = ShaderParameters.UpdateFX.effect.Parameters["Acceleration"];
ShaderParameters.UpdateFX.LastPosition = ShaderParameters.UpdateFX.effect.Parameters["LastPosition"];
ShaderParameters.UpdateFX.TotalForce = ShaderParameters.UpdateFX.effect.Parameters["TotalForce"];
ShaderParameters.UpdateFX.WindMap = ShaderParameters.UpdateFX.effect.Parameters["WindMap"];
ShaderParameters.UpdateFX.Radius = ShaderParameters.UpdateFX.effect.Parameters["Radius"];
ShaderParameters.UpdateFX.Dummy = ShaderParameters.UpdateFX.effect.Parameters["Dummy"];
}
catch
{
throw new Exception("missing param");
}
}
}
}