aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/media/SampleRenderer/4/shaders/vertex/mouse.cg
blob: d56e1c977e4599b7881a5674a7bc77c65956dfc5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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;
}