fteqw/engine/shaders/hlsl9/defaultskin.hlsl
Spoike 5b4756f3d9 Lazy GLSL loading, for faster load times.
Fixed some xim issues, for proper keyboard input under x11.
Cmake project can now work for cross compiling win32 targets.
Some other fun-but-pointless stuff.



git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5344 fc73d0e0-1445-4013-8a0c-d673dee63da5
2018-11-27 16:48:19 +00:00

82 lines
1.7 KiB
HLSL

!!permu FRAMEBLEND
!!permu UPPERLOWER
//!!permu FULLBRIGHT
!!samps diffuse upper lower
// fullbright
struct a2v
{
float3 pos: POSITION0;
#ifdef FRAMEBLEND
float3 pos2: POSITION1;
#endif
float2 tc: TEXCOORD0;
float3 normal: NORMAL;
};
struct v2f
{
#ifndef FRAGMENT_SHADER
float4 pos: POSITION;
#endif
float2 tc: TEXCOORD0;
float3 light: TEXCOORD1;
};
//#include <ftedefs.h>
#ifdef VERTEX_SHADER
float3 e_light_dir;
float3 e_light_mul;
float3 e_light_ambient;
float2 e_vblend;
float4x4 m_model;
float4x4 m_view;
float4x4 m_projection;
v2f main (a2v inp)
{
v2f outp;
float4 pos;
#ifdef FRAMEBLEND
pos = float4(e_vblend.x*inp.pos + e_vblend.y*inp.pos2, 1);
#else
pos = float4(inp.pos, 1);
#endif
outp.pos = mul(m_model, pos);
outp.pos = mul(m_view, outp.pos);
outp.pos = mul(m_projection, outp.pos);
float d = dot(inp.normal, e_light_dir);
outp.light = e_light_ambient + (d * e_light_mul);
outp.tc = inp.tc.xy;
return outp;
}
#endif
#ifdef FRAGMENT_SHADER
float4 e_colourident;
float3 e_uppercolour;
float3 e_lowercolour;
sampler s_diffuse; /*diffuse*/
sampler s_upper; /*upper*/
sampler s_lower; /*lower*/
sampler s_fullbright; /*fullbright*/
float4 main (v2f inp) : SV_TARGET
{
float4 col;
col = tex2D(s_diffuse, inp.tc);
#ifdef UPPER
float4 uc = tex2D(s_upper, inp.tc);
col.rgb += uc.rgb*e_uppercolour * uc.a;
#endif
#ifdef LOWER
float4 lc = tex2D(s_lower, inp.tc);
col.rgb += lc.rgb*e_lowercolour * lc.a;
#endif
col.rgb *= inp.light;
#ifdef FULLBRIGHT
float4 fb = tex2D(s_fullbright, inp.tc);
col.rgb = lerp(col.rgb, fb.rgb, fb.a);
#endif
return col * e_colourident;
// return fog4(col * e_colourident);
}
#endif