diff options
| author | Sheikh Dawood Abdul Ajees <[email protected]> | 2017-09-15 15:41:57 -0500 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <[email protected]> | 2017-09-15 15:41:57 -0500 |
| commit | d1c812f1162e5fdb13c215792725b2591d7428f5 (patch) | |
| tree | 407056c45c7e9320c48fca6a3697d81a061c4ea0 /APEX_1.4/media/SampleRenderer/4/shaders/vertex | |
| parent | PhysX 3.4, APEX 1.4 patch release @22121272 (diff) | |
| download | physx-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')
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; +} |