71 lines
2.8 KiB
Plaintext
71 lines
2.8 KiB
Plaintext
|
|
#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;
|
|
}
|