#define IN_HLSL #include "shdrConsts.h" struct a2v { float4 pos : POSITION; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; float4 lmcoord : TEXCOORD1; float3 tangent : TEXCOORD2; float3 binormal : TEXCOORD3; }; struct v2f { float4 hpos : POSITION; float3 eye : TEXCOORD0; float3 light : TEXCOORD1; float2 texcoord : TEXCOORD2; float3 cubespace0 : TEXCOORD3; float3 cubespace1 : TEXCOORD4; float3 cubespace2 : TEXCOORD5; }; v2f main(a2v IN, uniform float4x4 modelview : register(VC_WORLD_PROJ), uniform float4x4 texMat : register(VC_TEX_TRANS1), uniform float3 lightdir : register(VC_LIGHT_DIR1), uniform float3 eyePos : register(VC_EYE_POS), uniform float3x3 cubeTrans : register(VC_CUBE_TRANS)) { v2f OUT; OUT.hpos=mul(modelview, IN.pos); OUT.texcoord = mul(texMat, IN.texcoord).xy; float3x3 tangentspace = float3x3(normalize(IN.tangent), normalize(IN.binormal), normalize(IN.normal)); OUT.eye = mul(tangentspace, eyePos - IN.pos.xyz); OUT.light = mul(tangentspace, -lightdir); OUT.cubespace0 = mul(tangentspace, cubeTrans[0]); OUT.cubespace1 = mul(tangentspace, cubeTrans[1]); OUT.cubespace2 = mul(tangentspace, cubeTrans[2]); return OUT; }