5b0843e0c7
tweak rtlights a bit, to not bug out on The Waste's decals. use compatibility glsl in order to get ftransform working for consistent vertex coords (still uses core if there's no fixed function stuff). this fixes z-fighting issues with rtlights. Rework punchangles for greater compatibility. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5059 fc73d0e0-1445-4013-8a0c-d673dee63da5
65 lines
No EOL
1.3 KiB
HLSL
65 lines
No EOL
1.3 KiB
HLSL
!!permu BUMP
|
|
!!permu SPECULAR
|
|
!!permu OFFSETMAPPING
|
|
!!permu SKELETAL
|
|
!!permu FOG
|
|
|
|
|
|
// texture units:
|
|
// s0=diffuse, s1=normal, s2=specular, s3=shadowmap
|
|
// custom modifiers:
|
|
// PCF(shadowmap)
|
|
// CUBE(projected cubemap)
|
|
|
|
|
|
|
|
struct a2v
|
|
{
|
|
float4 pos: POSITION;
|
|
float3 tc: TEXCOORD0;
|
|
float3 n: NORMAL0;
|
|
float3 s: TANGENT0;
|
|
float3 t: BINORMAL0;
|
|
};
|
|
struct v2f
|
|
{
|
|
#ifndef FRAGMENT_SHADER
|
|
float4 pos: POSITION;
|
|
#endif
|
|
float3 tc: TEXCOORD0;
|
|
float3 lpos: TEXCOORD1;
|
|
};
|
|
|
|
#ifdef VERTEX_SHADER
|
|
float4x4 m_modelviewprojection;
|
|
float3 l_lightposition;
|
|
v2f main (a2v inp)
|
|
{
|
|
v2f outp;
|
|
outp.pos = mul(m_modelviewprojection, inp.pos);
|
|
outp.tc = inp.tc;
|
|
|
|
float3 lightminusvertex = l_lightposition - inp.pos.xyz;
|
|
outp.lpos.x = dot(lightminusvertex, inp.s.xyz);
|
|
outp.lpos.y = dot(lightminusvertex, inp.t.xyz);
|
|
outp.lpos.z = dot(lightminusvertex, inp.n.xyz);
|
|
return outp;
|
|
}
|
|
#endif
|
|
|
|
#ifdef FRAGMENT_SHADER
|
|
sampler s_diffuse;
|
|
float l_lightradius;
|
|
float3 l_lightcolour;
|
|
float4 main (v2f inp) : COLOR0
|
|
{
|
|
float3 col = l_lightcolour;
|
|
col *= max(1.0 - dot(inp.lpos, inp.lpos)/(l_lightradius*l_lightradius), 0.0);
|
|
#ifdef FLAT
|
|
float3 diff = FLAT;
|
|
#else
|
|
float3 diff = tex2D(s_diffuse, inp.tc);
|
|
#endif
|
|
return float4(diff * col, 1);
|
|
}
|
|
#endif |