869e544ad4
fix vbos not being used for skeletal animations (50->770 fps jump, yes, really. OOPS!) so yeah, 7700% speedup there. lol... *sigh* fixed update notification prompt not appearing by splitting menu key dest into emenu+gmenu. thus the prompt is no longer killed by menu.dat starting up. fog command now displays a the extra params. rewrote console char handling to support 32bit unicode chars. font code does not support more than 16bit codepoints still, however. rewrote beam code in order to restore models on vid_restart. this solves a crash where they were invalid pointers afterwards. revived old menu_media, because jogi wanted shuffle. music now fades out for a sec when changing fake-cd-tracks. music no longer abruptly stops when changing maps. added fxaa support. reworked bloom a bit. can now bloom further. added r_renderscale cvar, for people that want supersampling (max 2), or subsampling for more speed or whatever. $timer now favours cvars with that name, rather than the $time macro. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4942 fc73d0e0-1445-4013-8a0c-d673dee63da5
73 lines
2.5 KiB
GLSL
73 lines
2.5 KiB
GLSL
/*
|
|
This shader implements super-sampled anti-aliasing.
|
|
*/
|
|
|
|
varying vec2 texcoord;
|
|
|
|
#ifdef VERTEX_SHADER
|
|
attribute vec2 v_texcoord;
|
|
void main()
|
|
{
|
|
texcoord = v_texcoord.xy;
|
|
texcoord.y = 1.0 - texcoord.y;
|
|
gl_Position = ftetransform();
|
|
}
|
|
#endif
|
|
#ifdef FRAGMENT_SHADER
|
|
uniform sampler2D s_t0;
|
|
uniform vec2 e_sourcesize;
|
|
|
|
void main( void )
|
|
{
|
|
//gl_FragColor.xyz = texture2D(buf0,texcoord).xyz;
|
|
//return;
|
|
|
|
float FXAA_SPAN_MAX = 8.0;
|
|
float FXAA_REDUCE_MUL = 1.0/8.0;
|
|
float FXAA_REDUCE_MIN = 1.0/128.0;
|
|
|
|
vec3 rgbNW=texture2D(s_t0,texcoord+(vec2(-1.0,-1.0)/e_sourcesize)).xyz;
|
|
vec3 rgbNE=texture2D(s_t0,texcoord+(vec2(1.0,-1.0)/e_sourcesize)).xyz;
|
|
vec3 rgbSW=texture2D(s_t0,texcoord+(vec2(-1.0,1.0)/e_sourcesize)).xyz;
|
|
vec3 rgbSE=texture2D(s_t0,texcoord+(vec2(1.0,1.0)/e_sourcesize)).xyz;
|
|
vec3 rgbM=texture2D(s_t0,texcoord).xyz;
|
|
|
|
vec3 luma=vec3(0.299, 0.587, 0.114);
|
|
float lumaNW = dot(rgbNW, luma);
|
|
float lumaNE = dot(rgbNE, luma);
|
|
float lumaSW = dot(rgbSW, luma);
|
|
float lumaSE = dot(rgbSE, luma);
|
|
float lumaM = dot(rgbM, luma);
|
|
|
|
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
|
|
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
|
|
|
|
vec2 dir;
|
|
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
|
|
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
|
|
|
|
float dirReduce = max(
|
|
(lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL),
|
|
FXAA_REDUCE_MIN);
|
|
|
|
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
|
|
|
|
dir = min(vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),
|
|
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),
|
|
dir * rcpDirMin)) / e_sourcesize;
|
|
|
|
vec3 rgbA = (1.0/2.0) * (
|
|
texture2D(s_t0, texcoord.xy + dir * (1.0/3.0 - 0.5)).xyz +
|
|
texture2D(s_t0, texcoord.xy + dir * (2.0/3.0 - 0.5)).xyz);
|
|
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
|
|
texture2D(s_t0, texcoord.xy + dir * (0.0/3.0 - 0.5)).xyz +
|
|
texture2D(s_t0, texcoord.xy + dir * (3.0/3.0 - 0.5)).xyz);
|
|
float lumaB = dot(rgbB, luma);
|
|
|
|
if((lumaB < lumaMin) || (lumaB > lumaMax)){
|
|
gl_FragColor.xyz=rgbA;
|
|
}else{
|
|
gl_FragColor.xyz=rgbB;
|
|
}
|
|
}
|
|
#endif
|