aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/media/SampleRenderer/4/shaders/vertex
diff options
context:
space:
mode:
authorSheikh Dawood Abdul Ajees <[email protected]>2017-09-15 15:41:57 -0500
committerSheikh Dawood Abdul Ajees <[email protected]>2017-09-15 15:41:57 -0500
commitd1c812f1162e5fdb13c215792725b2591d7428f5 (patch)
tree407056c45c7e9320c48fca6a3697d81a061c4ea0 /APEX_1.4/media/SampleRenderer/4/shaders/vertex
parentPhysX 3.4, APEX 1.4 patch release @22121272 (diff)
downloadphysx-3.4-d1c812f1162e5fdb13c215792725b2591d7428f5.tar.xz
physx-3.4-d1c812f1162e5fdb13c215792725b2591d7428f5.zip
PhysX 3.4.1, APEX 1.4.1 Release @22845541v3.4.1
Diffstat (limited to 'APEX_1.4/media/SampleRenderer/4/shaders/vertex')
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/lines.cg19
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/mouse.cg58
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/particle_fog.cg66
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite.cg165
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite2.cg76
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives.cg20
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives_lighting.cg25
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/screenquad.cg36
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_1bone.cg75
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_4bone.cg70
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/skydome.cg82
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh.cg82
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_lightmap.cg83
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_simple.cg70
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_spheremap.cg99
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_buttons.cg11
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_sticks.cg28
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/text.cg35
-rw-r--r--APEX_1.4/media/SampleRenderer/4/shaders/vertex/turbulencesprites.cg72
19 files changed, 1172 insertions, 0 deletions
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/lines.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/lines.cg
new file mode 100644
index 00000000..7fd688eb
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/lines.cg
@@ -0,0 +1,19 @@
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ float4 screenSpacePosition : POSITION;
+ half4 color : COLOR;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR))
+{
+ VertexOut vout;
+ float4x4 vpm = mul(g_projMatrix, g_viewMatrix);
+ vout.screenSpacePosition = mul(vpm, localSpacePosition);
+ vout.color = vertexColor;
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/mouse.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/mouse.cg
new file mode 100644
index 00000000..d56e1c97
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/mouse.cg
@@ -0,0 +1,58 @@
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ #endif
+ )
+{
+ VertexOut vout;
+
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1))));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4 epos = mul( mvm, localSpacePosition );
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+ vout.params.color = vertexColor;
+
+ vout.screenSpacePosition.w = epos.z;
+ vout.screenSpacePosition.xy *= epos.z;
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/particle_fog.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/particle_fog.cg
new file mode 100644
index 00000000..e7663be5
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/particle_fog.cg
@@ -0,0 +1,66 @@
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+ float pointSize : PSIZE;
+};
+
+BEGIN_CBUFFER(cbParticlesFog)
+CONST_TYPE float windowWidth;
+END_CBUFFER(cbParticlesFog)
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ #endif
+ )
+{
+ VertexOut vout;
+
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1)));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+
+ vout.params.worldSpacePosition = mul(g_modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(g_modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+ vout.params.color = vertexTexcoord1;
+
+ // saturate density range...
+ const float minDensity = 900;
+ const float maxDensity = 2500;
+ vout.params.color.r = sqrt(saturate((vout.params.color.r - minDensity) / (maxDensity-minDensity)));
+
+ vout.pointSize = (g_projMatrix[0][0] / vout.screenSpacePosition.w) * (windowWidth / 2.0) * 1.0;// * (1-0.5*vout.params.color.r);
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite.cg
new file mode 100644
index 00000000..49257f50
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite.cg
@@ -0,0 +1,165 @@
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+#if defined(RENDERER_D3D11) && !defined(RENDERER_WIN8ARM)
+ float4 screenSpacePosition : SV_POSITION;
+ float4 rotScaleXScaleY : SEMANTIC_SPRITE_ROT_SCALEX_SCALEY;
+#else
+ float4 screenSpacePosition : POSITION;
+#endif
+ float pointSize : PSIZE;
+};
+
+BEGIN_CBUFFER(cbPointSprite)
+CONST_TYPE float windowWidth;
+CONST_TYPE float particleSize;
+CONST_TYPE int hasRotation;
+CONST_TYPE int hasScale;
+#if USE_VTF
+CONST_TYPE sampler2D positionTexture;
+CONST_TYPE sampler2D colorTexture;
+CONST_TYPE sampler2D transformTexture;
+CONST_TYPE float vertexTextureWidth;
+CONST_TYPE float vertexTextureHeight;
+#endif
+END_CBUFFER(cbPointSprite)
+
+VertexOut vmain(
+ #if USE_VTF
+ __in(float, particleIndex, POSITION)
+ #else
+ __in(float4, localSpacePosition, POSITION)
+ #endif
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ #endif
+ )
+{
+ VertexOut vout;
+
+#if defined(USE_VTF)
+ float f = floor(particleIndex/vertexTextureWidth);
+ float4 tcx = float4((particleIndex - f * vertexTextureWidth) / vertexTextureWidth, f / vertexTextureHeight, 0, 0);
+ float4 pos = tex2Dlod(positionTexture, tcx);
+#else
+ float4 pos = localSpacePosition;
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1))));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, pos);
+ vout.params.worldSpacePosition = mul(modelMatrix, pos).xyz;
+#else
+ vout.screenSpacePosition = mul(g_MVP, pos);
+ vout.params.worldSpacePosition = mul(g_modelMatrix, pos).xyz;
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float3 tbz = normalize(vout.params.worldSpacePosition - g_eyePosition);
+ float3 tbx = cross(float3(0,1,0), tbz);
+
+ vout.params.worldSpaceNormal = tbz;//normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = tbx;//normalize(mul(g_modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+#else
+#if !defined(PASS_UNLIT)
+ float3 tbz = normalize(vout.params.worldSpacePosition - g_eyePosition);
+ vout.params.worldSpaceNormal = tbz;//normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+#endif
+#endif
+
+ vout.params.texcoord0 = vertexTexcoord0;
+#if !defined(GLSL_COMPILER)
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+#endif
+
+#if defined(USE_VTF)
+ vout.params.color = swizzle((half4)tex2Dlod(colorTexture, tcx));
+#else
+ vout.params.color = swizzle(vertexColor);
+#endif
+
+#if defined(RENDERER_D3D11) && !defined(RENDERER_WIN8ARM)
+ vout.pointSize = particleSize * .75;
+ vout.rotScaleXScaleY = float4(hasRotation ? vertexTexcoord3.x : 0,
+ hasScale ? localSpaceTangent.xy : float2(1,1),
+ 0);
+#else
+ vout.pointSize = (g_projMatrix[0][0] / vout.screenSpacePosition.w) * windowWidth * particleSize * .5;
+#endif
+ return vout;
+}
+
+#if defined(RENDERER_D3D11) && !defined(RENDERER_WIN8ARM)
+
+struct GeomOut
+{
+ FragmentParameters params;
+ float4 screenSpacePosition : SV_POSITION;
+ float pointSize : PSIZE;
+};
+
+[maxvertexcount(4)]
+void gmain( point VertexOut sprite[1], inout TriangleStream<GeomOut> triStream )
+{
+ GeomOut v;
+ v.params = sprite[0].params;
+ v.pointSize = sprite[0].pointSize;
+
+ const float4 pos = sprite[0].screenSpacePosition;
+ const float rad = sprite[0].pointSize;
+ const float theta = sprite[0].rotScaleXScaleY[0];
+ const float radX = sprite[0].rotScaleXScaleY[1] * rad;
+ const float radY = sprite[0].rotScaleXScaleY[2] * rad;
+
+ float sinTheta, cosTheta;
+ sincos(theta, sinTheta, cosTheta);
+ const float2x2 rot = {cosTheta, -sinTheta,
+ sinTheta, cosTheta};
+
+ v.screenSpacePosition = pos + float4(mul(rot, float2(-radX, -radY)), 0, 0);
+ v.params.texcoord0 = float4(0,1,0,0);
+ triStream.Append(v);
+
+ v.screenSpacePosition = pos + float4(mul(rot, float2(-radX, radY)), 0, 0);
+ v.params.texcoord0 = float4(0,0,0,0);
+ triStream.Append(v);
+
+ v.screenSpacePosition = pos + float4(mul(rot, float2( radX, -radY)), 0, 0);
+ v.params.texcoord0 = float4(1,1,0,0);
+ triStream.Append(v);
+
+ v.screenSpacePosition = pos + float4(mul(rot, float2( radX, radY)), 0, 0);
+ v.params.texcoord0 = float4(1,0,0,0);
+ triStream.Append(v);
+
+ triStream.RestartStrip();
+}
+#endif
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite2.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite2.cg
new file mode 100644
index 00000000..b0a1c4ed
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/pointsprite2.cg
@@ -0,0 +1,76 @@
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+#if defined(RENDERER_D3D11) && !defined(RENDERER_WIN8ARM)
+ // D3D11 Required input for geometry shader
+ float4 screenSpacePosition : SV_POSITION;
+#else
+ float4 screenSpacePosition : POSITION;
+#endif
+ float pointSize : PSIZE;
+};
+
+BEGIN_CBUFFER(cbPointSprite)
+CONST_TYPE float windowWidth;
+CONST_TYPE float particleSize;
+END_CBUFFER(cbPointSprite)
+
+float clampedGraph(float value, float vmin, float vmax)
+{
+ return saturate((value - vmin) / (vmax-vmin));
+}
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ #endif
+ )
+{
+ VertexOut vout;
+
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1)));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+
+ float3 tbz = normalize(vout.params.worldSpacePosition - g_eyePosition);
+ float3 tbx = cross(float3(0,1,0), tbz);
+
+ vout.params.worldSpaceNormal = tbz;//normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = tbx;//normalize(mul(g_modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+ vout.params.color = vertexColor;
+
+ vout.pointSize = (particleSize * particleSize) / (vout.screenSpacePosition.w * vout.screenSpacePosition.w);
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives.cg
new file mode 100644
index 00000000..c9f442db
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives.cg
@@ -0,0 +1,20 @@
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ float4 screenSpacePosition : POSITION;
+ half4 color : COLOR;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float3, localSpaceNormal, NORMAL))
+{
+ VertexOut vout;
+ float4x4 vpm = mul(g_projMatrix, g_viewMatrix);
+ vout.screenSpacePosition = mul(vpm, localSpacePosition);
+ vout.screenSpacePosition.z -= 0.005; // hack to avoid z-fighting
+ vout.color = vertexColor;
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives_lighting.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives_lighting.cg
new file mode 100644
index 00000000..210cf646
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/primitives_lighting.cg
@@ -0,0 +1,25 @@
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ float4 screenSpacePosition : POSITION;
+ float3 worldSpacePosition : TEXCOORD1;
+ float3 worldSpaceNormal : TEXCOORD2;
+ half4 color : COLOR;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(half4, vertexColor, COLOR))
+{
+ VertexOut vout;
+ float4x4 vpm = mul(g_projMatrix, g_viewMatrix);
+ vout.screenSpacePosition = mul(vpm, localSpacePosition);
+ vout.screenSpacePosition.z -= 0.005; // hack to avoid z-fighting
+ vout.worldSpaceNormal = localSpaceNormal;
+ vout.worldSpacePosition = localSpacePosition.xyz;
+ vout.color = vertexColor;
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/screenquad.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/screenquad.cg
new file mode 100644
index 00000000..30703740
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/screenquad.cg
@@ -0,0 +1,36 @@
+
+// Parameters passed from the vertex shader to the fragment shader.
+struct QuadFragmentParameters
+{
+ float4 worldSpacePosition : TEXCOORD4;
+ float2 texcoord0 : TEXCOORD0;
+ half4 color : COLOR;
+};
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ QuadFragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3))
+{
+ VertexOut vout;
+
+ vout.screenSpacePosition = float4(mul(g_viewMatrix2D, float4(localSpacePosition.xyz,1)).xyz, localSpacePosition.w);
+ vout.params.worldSpacePosition = vout.screenSpacePosition;
+ vout.params.texcoord0 = vertexTexcoord0.xy;
+ vout.params.color = vertexColor;
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_1bone.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_1bone.cg
new file mode 100644
index 00000000..9fea0b2e
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_1bone.cg
@@ -0,0 +1,75 @@
+
+#include <config.cg>
+#include <globals.cg>
+#include <tessellation.cg>
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ , __in(int, boneIndex, SEMANTIC_BONEINDEX)
+ #if RENDERER_DISPLACED
+ __in_opt(uint, vertexFlagsDisp, SEMANTIC_DISPLACEMENT_FLAGS)
+ #endif
+ )
+{
+ VertexOut vout;
+
+#if defined USE_VTF
+ float4x4 boneMatrix;
+ const float boneTextureIdx = ((float)boneIndex + 0.5f) / g_boneTextureHeight;
+ boneMatrix[0] = tex2Dlod(g_boneTexture, float4(0.5f / 4.f, boneTextureIdx, 0, 0));
+ boneMatrix[1] = tex2Dlod(g_boneTexture, float4(1.5f / 4.f, boneTextureIdx, 0, 0));
+ boneMatrix[2] = tex2Dlod(g_boneTexture, float4(2.5f / 4.f, boneTextureIdx, 0, 0));
+ boneMatrix[3] = tex2Dlod(g_boneTexture, float4(3.5f / 4.f, boneTextureIdx, 0, 0));
+#else
+ float4x4 boneMatrix = g_boneMatrices[boneIndex];
+#endif
+
+ float4 skinnedPosition = mul(boneMatrix, localSpacePosition);
+ float3 skinnedNormal = mul(boneMatrix, float4(localSpaceNormal, 0)).xyz;
+#if !defined(GLSL_COMPILER)
+ float3 skinnedTangent = mul(boneMatrix, float4(localSpaceTangent.xyz, 0)).xyz;
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 mvpm = mul(g_projMatrix, g_modelViewMatrix); // TODO: should use g_modelViewProjMatrix....
+ vout.screenSpacePosition = mul(mvpm, skinnedPosition);
+#else
+ vout.screenSpacePosition = mul(g_MVP, skinnedPosition);
+#endif
+
+#if !defined(GLSL_COMPILER)
+ vout.params.worldSpacePosition = mul(g_modelMatrix, skinnedPosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(g_modelMatrix, float4(skinnedNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(g_modelMatrix, float4(skinnedTangent, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceTangent, vout.params.worldSpaceNormal) * localSpaceTangent.w;
+#else
+ vout.params.worldSpacePosition = mul(g_modelMatrix, skinnedPosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(g_modelMatrix, float4(skinnedNormal, 0)).xyz);
+#endif
+
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+ vout.params.color = swizzle(vertexColor);
+
+#if RENDERER_DISPLACED
+ vout.localPosition = localSpacePosition;
+ vout.flagsDisp = vertexFlagsDisp;
+ float4x4 modelBoneMatrix = mul(g_modelMatrix, boneMatrix);
+ vout.modelMatrix[0] = modelBoneMatrix[0];
+ vout.modelMatrix[1] = modelBoneMatrix[1];
+ vout.modelMatrix[2] = modelBoneMatrix[2];
+ vout.modelMatrix[3] = modelBoneMatrix[3];
+#endif
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_4bone.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_4bone.cg
new file mode 100644
index 00000000..63f2af66
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skeletalmesh_4bone.cg
@@ -0,0 +1,70 @@
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+};
+
+float4x4 accumulate_skin(float4 boneIndices0,
+ float4 boneWeights0)
+{
+ float4x4 result = boneWeights0.x * g_boneMatrices[boneIndices0.x];
+ result = result + boneWeights0.y * g_boneMatrices[boneIndices0.y];
+ result = result + boneWeights0.z * g_boneMatrices[boneIndices0.z];
+ result = result + boneWeights0.w * g_boneMatrices[boneIndices0.w];
+ return result;
+}
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ , __in(int4, boneIndices, TEXCOORD6)
+ , __in(float4, boneWeights, TEXCOORD7))
+{
+ VertexOut vout;
+
+ float4x4 boneMatrix = accumulate_skin(boneIndices, boneWeights);
+ float4 skinnedPosition = mul(boneMatrix, localSpacePosition);
+ float3 skinnedNormal = (mul(boneMatrix, float4(localSpaceNormal, 0))).xyz;
+#if !defined(GLSL_COMPILER)
+ float3 skinnedTangent = (mul(boneMatrix, float4(localSpaceTangent.xyz, 0))).xyz;
+#endif
+
+ skinnedPosition.w = 1;
+ skinnedNormal = normalize(skinnedNormal);
+#if !defined(GLSL_COMPILER)
+ skinnedTangent = normalize(skinnedTangent);
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 mvpm = mul(g_projMatrix, g_modelViewMatrix); // TODO: should use g_modelViewProjMatrix....
+ vout.screenSpacePosition = mul(mvpm, skinnedPosition);
+#else
+ vout.screenSpacePosition = mul(g_MVP, skinnedPosition);
+#endif
+
+ vout.params.worldSpacePosition = mul(g_modelMatrix, skinnedPosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(g_modelMatrix, float4(skinnedNormal, 0)).xyz);
+#if !defined(GLSL_COMPILER)
+ vout.params.worldSpaceTangent = normalize(mul(g_modelMatrix, float4(skinnedTangent, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+#endif
+
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+ vout.params.color = swizzle(vertexColor);
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skydome.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skydome.cg
new file mode 100644
index 00000000..d4acd053
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/skydome.cg
@@ -0,0 +1,82 @@
+
+#include <config.cg>
+#include <globals.cg>
+#include <tessellation.cg>
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ __in_opt(float2, instanceUVOffset, SEMANTIC_INSTANCE_UV)
+ __in_opt(float3, instanceLocalOffset, SEMANTIC_INSTANCE_LOCAL)
+ #endif
+ #if RENDERER_DISPLACED
+ __in_opt(uint, vertexFlagsDisp, SEMANTIC_DISPLACEMENT_FLAGS)
+ #endif
+ )
+{
+ VertexOut vout;
+
+#if !defined(GLSL_COMPILER)
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1))));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+#else
+ vout.screenSpacePosition = mul(g_MVP, localSpacePosition);
+#endif
+
+#if !defined(GLSL_COMPILER)
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+#else
+ vout.params.worldSpacePosition = mul(g_modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = float4(0,1,0,0);
+#endif
+#if RENDERER_INSTANCED
+ vout.params.texcoord0 = vertexTexcoord0 + float4(instanceUVOffset, 0, 0);
+#else
+ vout.params.texcoord0 = vertexTexcoord0;
+#endif
+#if !defined(GLSL_COMPILER)
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+#endif
+ vout.params.color = vertexColor;
+
+#if RENDERER_DISPLACED
+ vout.localPosition = localSpacePosition;
+#if RENDERER_INSTANCED
+ vout.localPosition += instanceLocalOffset;
+#endif
+ vout.flagsDisp = vertexFlagsDisp;
+ vout.modelMatrix[0] = modelMatrix[0];
+ vout.modelMatrix[1] = modelMatrix[1];
+ vout.modelMatrix[2] = modelMatrix[2];
+ vout.modelMatrix[3] = modelMatrix[3];
+#endif
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh.cg
new file mode 100644
index 00000000..f5760f2c
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh.cg
@@ -0,0 +1,82 @@
+
+#include <config.cg>
+#include <globals.cg>
+#include <tessellation.cg>
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ __in_opt(float2, instanceUVOffset, SEMANTIC_INSTANCE_UV)
+ __in_opt(float3, instanceLocalOffset, SEMANTIC_INSTANCE_LOCAL)
+ #endif
+ #if RENDERER_DISPLACED
+ __in_opt(uint, vertexFlagsDisp, SEMANTIC_DISPLACEMENT_FLAGS)
+ #endif
+ )
+{
+ VertexOut vout;
+
+#if !defined(GLSL_COMPILER)
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1))));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+#else
+ vout.screenSpacePosition = mul(g_MVP, localSpacePosition);
+#endif
+
+#if !defined(GLSL_COMPILER)
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+#else
+ vout.params.worldSpacePosition = mul(g_modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(g_modelMatrix, float4(localSpaceNormal, 0)).xyz);
+#endif
+#if RENDERER_INSTANCED
+ vout.params.texcoord0 = vertexTexcoord0 + float4(instanceUVOffset, 0, 0);
+#else
+ vout.params.texcoord0 = vertexTexcoord0;
+#endif
+#if !defined(GLSL_COMPILER)
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+#endif
+ vout.params.color = swizzle(vertexColor);
+
+#if RENDERER_DISPLACED
+ vout.localPosition = localSpacePosition;
+#if RENDERER_INSTANCED
+ vout.localPosition += instanceLocalOffset;
+#endif
+ vout.flagsDisp = vertexFlagsDisp;
+ vout.modelMatrix[0] = modelMatrix[0];
+ vout.modelMatrix[1] = modelMatrix[1];
+ vout.modelMatrix[2] = modelMatrix[2];
+ vout.modelMatrix[3] = modelMatrix[3];
+#endif
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_lightmap.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_lightmap.cg
new file mode 100644
index 00000000..f0069fbc
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_lightmap.cg
@@ -0,0 +1,83 @@
+
+#include <config.cg>
+#include <globals.cg>
+#include <tessellation.cg>
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ __in_opt(float2, instanceUVOffset, SEMANTIC_INSTANCE_UV)
+ __in_opt(float3, instanceLocalOffset, SEMANTIC_INSTANCE_LOCAL)
+ #endif
+ #if RENDERER_DISPLACED
+ __in_opt(uint, vertexFlagsDisp, SEMANTIC_DISPLACEMENT_FLAGS)
+ #endif
+ )
+{
+ VertexOut vout;
+
+#if !defined(GLSL_COMPILER)
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1))));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+#endif
+
+#if !defined(GLSL_COMPILER)
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+#else
+ vout.screenSpacePosition = mul(g_MVP, localSpacePosition);
+#endif
+
+#if !defined(GLSL_COMPILER)
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = float4(0,1,0,0); //normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+#else
+ vout.params.worldSpacePosition = mul(g_modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = float4(0,1,0,0); //normalize(mul(g_modelMatrix, float4(localSpaceNormal, 0)).xyz);
+#endif
+#if RENDERER_INSTANCED
+ vout.params.texcoord0 = vertexTexcoord0 + float4(instanceUVOffset, 0, 0);
+#else
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+#endif
+#if !defined(GLSL_COMPILER)
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+#endif
+ vout.params.color = vertexColor;
+
+#if RENDERER_DISPLACED
+ vout.localPosition = localSpacePosition;
+#if RENDERER_INSTANCED
+ vout.localPosition += instanceLocalOffset;
+#endif
+ vout.flagsDisp = vertexFlagsDisp;
+ vout.modelMatrix[0] = modelMatrix[0];
+ vout.modelMatrix[1] = modelMatrix[1];
+ vout.modelMatrix[2] = modelMatrix[2];
+ vout.modelMatrix[3] = modelMatrix[3];
+#endif
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_simple.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_simple.cg
new file mode 100644
index 00000000..e0ee8778
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_simple.cg
@@ -0,0 +1,70 @@
+
+#include <config.cg>
+#include <globals.cg>
+#include <tessellation.cg>
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float4, instanceTCol0, SEMANTIC_INSTANCE_T)
+ , __in(float4, instanceTCol1, SEMANTIC_INSTANCE_X)
+ , __in(float4, instanceTCol2, SEMANTIC_INSTANCE_Y)
+ , __in(float4, instanceTCol3, SEMANTIC_INSTANCE_Z)
+ __in_opt(float2, instanceUVOffset, SEMANTIC_INSTANCE_UV)
+ __in_opt(float3, instanceLocalOffset, SEMANTIC_INSTANCE_LOCAL)
+ #endif
+ #if RENDERER_DISPLACED
+ __in_opt(uint, vertexFlagsDisp, SEMANTIC_DISPLACEMENT_FLAGS)
+ #endif
+ )
+{
+ VertexOut vout;
+
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(instanceTCol0, instanceTCol1, instanceTCol2, instanceTCol3)));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+
+#if RENDERER_INSTANCED
+ vout.params.texcoord0 = vertexTexcoord0 + float4(instanceUVOffset, 0, 0);
+#else
+ vout.params.texcoord0 = vertexTexcoord0;
+#endif
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+ vout.params.color = vertexColor;
+
+#if RENDERER_DISPLACED
+ vout.localPosition = localSpacePosition;
+#if RENDERER_INSTANCED
+ vout.localPosition += instanceLocalOffset;
+#endif
+ vout.flagsDisp = vertexFlagsDisp;
+ vout.modelMatrix[0] = modelMatrix[0];
+ vout.modelMatrix[1] = modelMatrix[1];
+ vout.modelMatrix[2] = modelMatrix[2];
+ vout.modelMatrix[3] = modelMatrix[3];
+#endif
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_spheremap.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_spheremap.cg
new file mode 100644
index 00000000..da4d5ab8
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/staticmesh_spheremap.cg
@@ -0,0 +1,99 @@
+
+#include <config.cg>
+#include <globals.cg>
+#include <tessellation.cg>
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ __in_opt(half4, vertexColor, COLOR)
+ #if RENDERER_INSTANCED
+ , __in(float3, instanceOffset, SEMANTIC_INSTANCE_T)
+ , __in(float3, instanceNormalX, SEMANTIC_INSTANCE_X)
+ , __in(float3, instanceNormalY, SEMANTIC_INSTANCE_Y)
+ , __in(float3, instanceNormalZ, SEMANTIC_INSTANCE_Z)
+ __in_opt(float2, instanceUVOffset, SEMANTIC_INSTANCE_UV)
+ __in_opt(float3, instanceLocalOffset, SEMANTIC_INSTANCE_LOCAL)
+ #endif
+ #if RENDERER_DISPLACED
+ __in_opt(uint, vertexFlagsDisp, SEMANTIC_DISPLACEMENT_FLAGS)
+ #endif
+ )
+{
+ VertexOut vout;
+
+ vout.screenSpacePosition = 0;
+ vout.params.worldSpacePosition = 0;
+ vout.params.worldSpaceNormal = 0;
+ vout.params.worldSpaceTangent = 0;
+ vout.params.worldSpaceBinormal = 0;
+ vout.params.texcoord0 = 0;
+ vout.params.texcoord1 = 0;
+ vout.params.texcoord2 = 0;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = 0;
+#endif
+ vout.params.color = 0;
+
+//#if !defined(GLSL_COMPILER)
+ float4x4 modelMatrix;
+#if RENDERER_INSTANCED
+ modelMatrix = mul(g_modelMatrix, transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1))));
+#else
+ modelMatrix = g_modelMatrix;
+#endif
+//#endif
+
+ float4x4 mvm = mul(g_viewMatrix, modelMatrix);
+#if !defined(GLSL_COMPILER)
+ float4x4 mvpm = mul(g_projMatrix, mvm);
+ vout.screenSpacePosition = mul(mvpm, localSpacePosition);
+#else
+ vout.screenSpacePosition = mul(g_MVP, localSpacePosition);
+#endif
+
+#if !defined(GLSL_COMPILER)
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+#else
+ vout.params.worldSpacePosition = mul(g_modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(g_modelMatrix, float4(localSpaceNormal, 0)).xyz);
+#endif
+#if RENDERER_INSTANCED
+ vout.params.texcoord0 = vertexTexcoord0 + float4(instanceUVOffset, 0, 0);
+#else
+ vout.params.texcoord0 = vertexTexcoord0;
+ float4 v = normalize(mul(mvm, localSpacePosition));
+ float4 n = normalize(mul(mvm, float4(localSpaceNormal, 0)));
+ float3 r = reflect(v.xyz, n.xyz);
+ float m = sqrt(2 * (r.z + 1));
+ vout.params.texcoord1 = float4(r.x/m + 0.5, r.y/m + 0.5, 0.0, 0.0) * 0.5;
+#endif
+#if !defined(GLSL_COMPILER)
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+#endif
+ vout.params.color = swizzle(vertexColor);
+
+#if RENDERER_DISPLACED
+ vout.localPosition = localSpacePosition;
+#if RENDERER_INSTANCED
+ vout.localPosition += instanceLocalOffset;
+#endif
+ vout.flagsDisp = vertexFlagsDisp;
+ vout.modelMatrix[0] = modelMatrix[0];
+ vout.modelMatrix[1] = modelMatrix[1];
+ vout.modelMatrix[2] = modelMatrix[2];
+ vout.modelMatrix[3] = modelMatrix[3];
+#endif
+
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_buttons.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_buttons.cg
new file mode 100644
index 00000000..dc2a908c
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_buttons.cg
@@ -0,0 +1,11 @@
+struct VertexOut
+{
+ float4 screenSpacePosition : POSITION;
+};
+
+VertexOut vmain(float4 localSpacePosition : POSITION)
+{
+ VertexOut vout;
+ vout.screenSpacePosition = localSpacePosition;
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_sticks.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_sticks.cg
new file mode 100644
index 00000000..947af4c0
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/tablet_sticks.cg
@@ -0,0 +1,28 @@
+// Parameters passed from the vertex shader to the fragment shader.
+struct FragmentParameters
+{
+ float4 worldSpacePosition : TEXCOORD4;
+ float2 texcoord0 : TEXCOORD0;
+ half4 color : COLOR;
+};
+
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float4, texcoord0, TEXCOORD0))
+{
+ VertexOut vout;
+
+ vout.screenSpacePosition = localSpacePosition + g_modelMatrix[0];
+ vout.params.worldSpacePosition = localSpacePosition;
+ vout.params.texcoord0 = texcoord0.xy;
+ vout.params.color = vertexColor;
+ return vout;
+}
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/text.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/text.cg
new file mode 100644
index 00000000..2c6db76d
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/text.cg
@@ -0,0 +1,35 @@
+// Parameters passed from the vertex shader to the fragment shader.
+struct TextFragmentParameters
+{
+ float4 worldSpacePosition : TEXCOORD4;
+ float2 texcoord0 : TEXCOORD0;
+ half4 color : COLOR;
+};
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ TextFragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3))
+{
+ VertexOut vout;
+ vout.screenSpacePosition = float4(mul(g_viewMatrix2D, float4(localSpacePosition.xyz,1)).xyz, localSpacePosition.w);
+ vout.params.worldSpacePosition = vout.screenSpacePosition;
+ vout.params.texcoord0 = vertexTexcoord0.xy;
+ vout.params.color = vertexColor;
+
+ return vout;
+}
+
diff --git a/APEX_1.4/media/SampleRenderer/4/shaders/vertex/turbulencesprites.cg b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/turbulencesprites.cg
new file mode 100644
index 00000000..ac39e0ff
--- /dev/null
+++ b/APEX_1.4/media/SampleRenderer/4/shaders/vertex/turbulencesprites.cg
@@ -0,0 +1,72 @@
+
+#include <config.cg>
+#include <globals.cg>
+
+struct VertexOut
+{
+ FragmentParameters params;
+ float4 screenSpacePosition : POSITION;
+};
+
+VertexOut vmain(__in(float4, localSpacePosition, POSITION)
+ __in_opt(half4, vertexColor, COLOR)
+ __in_opt(float3, localSpaceNormal, NORMAL)
+ __in_opt(float4, localSpaceTangent, SEMANTIC_TANGENT)
+ __in_opt(float4, vertexTexcoord0, TEXCOORD0)
+ __in_opt(float4, vertexTexcoord1, TEXCOORD1)
+ __in_opt(float4, vertexTexcoord2, TEXCOORD2)
+ __in_opt(float4, vertexTexcoord3, TEXCOORD3)
+ , __in(float3, instancePosition, TEXCOORD8)
+ , __in(float4, instanceVelocity, TEXCOORD9)
+ )
+{
+ VertexOut vout;
+
+ float4x4 modelMatrix = g_modelMatrix;
+/*
+#if RENDERER_INSTANCED
+ modelMatrix = transpose(float4x4(float4(instanceNormalX, 0), float4(instanceNormalY, 0), float4(instanceNormalZ, 0), float4(instanceOffset, 1)));
+#else
+ modelMatrix = g_modelMatrix;
+#endif*/
+
+ float4 worldSpacePos = float4(0.05,0.05,0.05,1)*localSpacePosition.xyzw;//mul( modelMatrix, localSpacePosition);
+
+ worldSpacePos.xyz += instancePosition.xyz;
+
+
+ float4x4 vpm = mul(g_projMatrix, g_viewMatrix);
+ vout.screenSpacePosition = mul(vpm, worldSpacePos);
+
+ vout.params.worldSpacePosition = mul(modelMatrix, localSpacePosition).xyz;
+ vout.params.worldSpaceNormal = normalize(mul(modelMatrix, float4(localSpaceNormal, 0)).xyz);
+ vout.params.worldSpaceTangent = normalize(mul(modelMatrix, float4(localSpaceTangent.xyz, 0)).xyz);
+ vout.params.worldSpaceBinormal = cross(vout.params.worldSpaceNormal, vout.params.worldSpaceTangent) * localSpaceTangent.w;
+
+ vout.params.texcoord0 = vertexTexcoord0;
+ vout.params.texcoord1 = vertexTexcoord1;
+ vout.params.texcoord2 = vertexTexcoord2;
+#if !defined (RENDERER_WIN8ARM)
+ vout.params.texcoord3 = vertexTexcoord3;
+#endif
+
+/*
+ vout.params.color.xyz = saturate((instanceVelocity.xyz / float3(6,6,6)) + float3(1,1,1));
+ vout.params.color.w = 1;
+
+ if(instanceVelocity.w > 0.75)
+ vout.params.color *= float4(1,0,0,1);
+ else if(instanceVelocity.w > 0.5)
+ vout.params.color *= float4(1,0,1,1);
+ else if(instanceVelocity.w > 0.25)
+ vout.params.color *= float4(0,1,1,1);
+ else
+ vout.params.color *= float4(0,0,1,1);
+
+*/
+ //simpler colors for debugging
+ vout.params.color.xyz = float3(1*instanceVelocity.w,0,0);
+ vout.params.color.w = 1;
+
+ return vout;
+}