87 lines
1.7 KiB
GLSL
87 lines
1.7 KiB
GLSL
//======= Copyright (c) 2015-2020 Vera Visions LLC. All rights reserved. =======
|
|
//
|
|
// Purpose:
|
|
//
|
|
// Basic lightgrid-lit surface. Also supports a fullbrightmap.
|
|
//==============================================================================
|
|
|
|
!!ver 110
|
|
!!permu FRAMEBLEND
|
|
!!permu BUMP
|
|
!!permu FOG
|
|
!!permu SKELETAL
|
|
!!samps diffuse fullbright normalmap
|
|
|
|
!!permu FAKESHADOWS
|
|
!!cvardf r_glsl_pcf
|
|
!!samps =FAKESHADOWS shadowmap
|
|
|
|
!!cvardf dev_skipdiffuse
|
|
|
|
#include "sys/defs.h"
|
|
|
|
varying vec2 tex_c;
|
|
varying vec3 norm;
|
|
|
|
#ifdef FAKESHADOWS
|
|
varying vec4 vtexprojcoord;
|
|
#endif
|
|
|
|
#ifdef VERTEX_SHADER
|
|
#include "sys/skeletal.h"
|
|
|
|
void main (void)
|
|
{
|
|
vec3 n, s, t, w;
|
|
tex_c = v_texcoord;
|
|
gl_Position = skeletaltransform_wnst(w,n,s,t);
|
|
norm = n;
|
|
|
|
#ifdef FAKESHADOWS
|
|
vtexprojcoord = (l_cubematrix*vec4(v_position.xyz, 1.0));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
|
|
#ifdef FRAGMENT_SHADER
|
|
#include "sys/fog.h"
|
|
#include "sys/pcf.h"
|
|
|
|
float lambert(vec3 normal, vec3 dir)
|
|
{
|
|
return max(dot(normal, dir), 0.0);
|
|
}
|
|
|
|
float halflambert(vec3 normal, vec3 dir)
|
|
{
|
|
return (lambert(normal, dir) * 0.5) + 0.5;
|
|
}
|
|
|
|
void main (void)
|
|
{
|
|
vec4 diff_f = texture2D(s_diffuse, tex_c);
|
|
vec4 fb_f = texture2D(s_fullbright, tex_c);
|
|
vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0;
|
|
vec3 light;
|
|
|
|
if (diff_f.a < 0.5) {
|
|
discard;
|
|
}
|
|
|
|
#ifdef HALFLAMBERT
|
|
light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir));
|
|
#else
|
|
light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir));
|
|
#endif
|
|
|
|
diff_f.rgb *= light;
|
|
diff_f.rgb += fb_f.rgb;
|
|
|
|
#ifdef FAKESHADOWS
|
|
diff_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord);
|
|
#endif
|
|
|
|
gl_FragColor = fog4(diff_f * e_colourident) * e_lmscale;
|
|
}
|
|
#endif
|