summaryrefslogtreecommitdiff
path: root/materialsystem/stdshaders/morphaccumulate_vs30.fxc
diff options
context:
space:
mode:
Diffstat (limited to 'materialsystem/stdshaders/morphaccumulate_vs30.fxc')
-rw-r--r--materialsystem/stdshaders/morphaccumulate_vs30.fxc54
1 files changed, 54 insertions, 0 deletions
diff --git a/materialsystem/stdshaders/morphaccumulate_vs30.fxc b/materialsystem/stdshaders/morphaccumulate_vs30.fxc
new file mode 100644
index 0000000..9fdac4b
--- /dev/null
+++ b/materialsystem/stdshaders/morphaccumulate_vs30.fxc
@@ -0,0 +1,54 @@
+//======= Copyright � 1996-2006, Valve Corporation, All rights reserved. ======
+
+// STATIC: "CONSTANTBASEDMORPH" "0..1"
+
+#include "common_vs_fxc.h"
+
+struct VS_INPUT
+{
+ float4 vSrcCoord : TEXCOORD0;
+ float vMorphWeightId : TEXCOORD1;
+};
+
+struct VS_OUTPUT
+{
+ float4 vDestCoord : POSITION;
+ float2 vSrcCoord : TEXCOORD0;
+ float2 vSideSpeedCoord : TEXCOORD1;
+
+#if CONSTANTBASEDMORPH
+ float4 vMorphWeights : TEXCOORD2;
+#else
+ float2 vMorphWeightCoord : TEXCOORD2;
+#endif
+};
+
+#if !CONSTANTBASEDMORPH
+const float4 vMorphWeightSubrect : register( SHADER_SPECIFIC_CONST_0 );
+const float4 vMorphWeightDimensions : register( SHADER_SPECIFIC_CONST_1 );
+#endif
+
+VS_OUTPUT main( const VS_INPUT v )
+{
+ VS_OUTPUT o = ( VS_OUTPUT )0;
+
+ // FIXME: Want these to be in pixel centers!
+ float2 projSpace = v.vSrcCoord.zw;
+ projSpace *= 2.0f;
+ projSpace -= 1.0f;
+ projSpace.y *= -1.0f;
+
+ o.vDestCoord = float4( projSpace.x, projSpace.y, 0.0f, 1.0f );
+ o.vSrcCoord = v.vSrcCoord.xy;
+ o.vSideSpeedCoord = v.vSrcCoord.xy;
+
+#if CONSTANTBASEDMORPH
+ o.vMorphWeights = cFlexWeights[ v.vMorphWeightId ];
+#else
+ float flColumn = floor( v.vMorphWeightId / vMorphWeightSubrect.w );
+ o.vMorphWeightCoord.x = vMorphWeightSubrect.x + flColumn + 0.5f;
+ o.vMorphWeightCoord.y = vMorphWeightSubrect.y + v.vMorphWeightId - flColumn * vMorphWeightSubrect.w + 0.5f;
+ o.vMorphWeightCoord.xy /= vMorphWeightDimensions.xy;
+#endif
+ return o;
+} \ No newline at end of file