//--------------------------------------------------------------------------------------------------------------------------------------------------- // // 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"); } } } }