1
0
Fork 0
forked from fte/fteqw
fteqw/engine/shaders/hlsl9/rtlight.hlsl
Spoike 5b0843e0c7 split up NOMEDIA into individual defines. The Wastes should now be able to do music now.
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
2017-02-21 20:22:07 +00:00

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