2020-09-30 17:17:25 +02:00

89 lines
1.6 KiB
GLSL

xvs.1.1
#define FINAL_MAT_COL0 c0
#define FINAL_MAT_COL1 c1
#define FINAL_MAT_COL2 c2
#define FINAL_MAT_COL3 c3
#define LIGHT_POS c4
#define EYE_POS c5
#define OBJECT_SCALE c6
#define LIGHT_ATTEN c7
#define OBJ_SHADOW_MAT c8
#define VERT_POS v0
#define VERT_UV v1
#define VERT_S v2
#define VERT_T v3
#define VERT_N v4
; Transform and project vertex.
dp4 oPos.x, VERT_POS, FINAL_MAT_COL0
dp4 oPos.y, VERT_POS, FINAL_MAT_COL1
dp4 oPos.z, VERT_POS, FINAL_MAT_COL2
dp4 oPos.w, VERT_POS, FINAL_MAT_COL3
; Transform and project vertex to shadow map space
dp4 oT3.x,VERT_POS,c8
dp4 oT3.y,VERT_POS,c9
dp4 oT3.z,VERT_POS,c10
dp4 r0.w,VERT_POS,c11
;clamp w (q) to 0
slt r1, c0, c0
max r0.w, r0.w, r1.w
mov oT3.w, r0.w
; Compute light vector.
mul r8.xyz, VERT_POS.xyz,OBJECT_SCALE
sub r0.xyz, LIGHT_POS.xyz,r8.xyz
dp3 r1.x, r0.xyz,r0.xyz
rsq r0.w, r1.x
; Compute per-vertex light attenuation.
dst r6, r1.xxxx, r0.wwww
dp3 r7.x, r6,LIGHT_ATTEN ; this gives us c0 + c1*d + c2*d*d
rcc oD0.xyz, r7.x
; Normalize light vector.
mul r1.xyz, r0.w,r0.xyz
; Transform light vector to tangent space.
dp3 oT1.x,r1.xyz,VERT_S
dp3 oT1.y,r1.xyz,VERT_T
dp3 oT1.z,r1.xyz,VERT_N
; Normalize eye vector
sub r3.xyz, EYE_POS.xyz,r8.xyz
dp3 r4.x, r3.xyz,r3.xyz
rsq r5.x, r4.x
mul r2.xyz, r5.x,r3.xyz
; Compute halfway vector and transform to tangent space
add r0.xyz,r2.xyz,r1.xyz
dp3 oT2.x,r0.xyz,VERT_S
dp3 oT2.y,r0.xyz,VERT_T
dp3 oT2.z,r0.xyz,VERT_N
; Texture coordinates for normal map.
mov oT0,VERT_UV