|  | @@ -162,6 +162,51 @@ void main(){\n\
 | 
	
		
			
				|  |  |      gl_Position=vVertex;\n\
 | 
	
		
			
				|  |  |      fViewDir = vUV;\n\
 | 
	
		
			
				|  |  |  }";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define LA_SHADER_LIB_FXAA \
 | 
	
		
			
				|  |  | +"#define DIFF_LUM_ABS_HOLD 0.0833 \n\
 | 
	
		
			
				|  |  | +#define DIFF_LUM_RES_HOLD 0.166\n\
 | 
	
		
			
				|  |  | +float luminance(vec3 col) {\n\
 | 
	
		
			
				|  |  | +    return dot(col, vec3(0.2126729f,  0.7151522f, 0.0721750f));\n\
 | 
	
		
			
				|  |  | +}\n\
 | 
	
		
			
				|  |  | +vec4 fxaa(in sampler2D tex, vec2 uv, vec2 texsize) {\n\
 | 
	
		
			
				|  |  | +    vec3 e = vec3(-1., 1., 0.);\n\
 | 
	
		
			
				|  |  | +    vec2 offuv = uv;\n\
 | 
	
		
			
				|  |  | +	vec3 colnw = texture(tex, uv + e.xy / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 coln  = texture(tex, uv + e.zy / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 colne = texture(tex, uv + e.yy / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 colw  = texture(tex, uv + e.xz / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec4 colm4  = texture(tex, uv + e.zz / texsize);\n\
 | 
	
		
			
				|  |  | +    vec3 colm  = colm4.rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 cole  = texture(tex, uv + e.yz / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 colsw = texture(tex, uv + e.xx / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 cols  = texture(tex, uv + e.zx / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    vec3 colse = texture(tex, uv + e.yx / texsize).rgb;\n\
 | 
	
		
			
				|  |  | +    float lnw = luminance(colnw), ln = luminance(coln), lne = luminance(colne),\n\
 | 
	
		
			
				|  |  | +          lw  = luminance(colw),  lm = luminance(colm), le  = luminance(cole),\n\
 | 
	
		
			
				|  |  | +          lsw = luminance(colsw), ls = luminance(cols), lse = luminance(colse);\n\
 | 
	
		
			
				|  |  | +    float maxl = max(ln, max(ls, max(lw, max(le, lm))));\n\
 | 
	
		
			
				|  |  | +    float minl = min(ln, min(ls, min(lw, min(le, lm))));\n\
 | 
	
		
			
				|  |  | +    float diff = maxl - minl;\n\
 | 
	
		
			
				|  |  | +    if (diff < max(DIFF_LUM_ABS_HOLD, DIFF_LUM_RES_HOLD * maxl)) return colm4;\n\
 | 
	
		
			
				|  |  | +    float filterfactor = 0.;\n\
 | 
	
		
			
				|  |  | +    filterfactor += 2. * (ln + lw + ls + le) + lnw + lne + lsw + lse;\n\
 | 
	
		
			
				|  |  | +    filterfactor /= 12.;\n\
 | 
	
		
			
				|  |  | +    filterfactor = abs(filterfactor - lm);\n\
 | 
	
		
			
				|  |  | +    filterfactor = clamp(filterfactor / diff, 0., 1.);\n\
 | 
	
		
			
				|  |  | +    float blend = smoothstep(0., 1., filterfactor);\n\
 | 
	
		
			
				|  |  | +    blend *= blend;\n\
 | 
	
		
			
				|  |  | +    float hedge = 2.*(ln + ls - 2.*lm) + (lne + lse - 2.*le) + (lnw + lsw - 2.*lw);\n\
 | 
	
		
			
				|  |  | +    float vedge = 2.*(le + lw - 2.*lm) + (lne + lnw - 2.*ln) + (lse + lsw - 2.*ls);\n\
 | 
	
		
			
				|  |  | +    float ish = step(vedge, hedge);\n\
 | 
	
		
			
				|  |  | +    float psoff = ish >= 1.0 ? 1./texsize.y : 1./texsize.x;\n\
 | 
	
		
			
				|  |  | +    float pleft = ish >= 1.0 ? ln : le;\n\
 | 
	
		
			
				|  |  | +    float pright = ish >= 1.0 ? ls : lw;\n\
 | 
	
		
			
				|  |  | +    if (abs(pleft - lm) < abs(pright - lm)) psoff = -psoff;\n\
 | 
	
		
			
				|  |  | +    if (ish >= 1.0) { offuv.y += psoff * blend; }else{ offuv.x += psoff * blend; }\n\
 | 
	
		
			
				|  |  | +    return vec4(texture(tex, offuv).rgb,colm4.a);  \n\
 | 
	
		
			
				|  |  | +}\n"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  const char LA_RAY_FRAGMENT_SHADER[] = "#version 330\n\
 | 
	
		
			
				|  |  |  uniform vec3 uViewDir;\n\
 | 
	
		
			
				|  |  |  uniform vec3 uViewPos;\n\
 | 
	
	
		
			
				|  | @@ -169,14 +214,16 @@ uniform float uFOV;\n\
 | 
	
		
			
				|  |  |  in vec3 fViewDir;\n\
 | 
	
		
			
				|  |  |  uniform sampler2D TexColor;\n\
 | 
	
		
			
				|  |  |  uniform sampler2D TexNormal;\n\
 | 
	
		
			
				|  |  | -uniform sampler2D TexGPos;\n\
 | 
	
		
			
				|  |  | -void main(){\n\
 | 
	
		
			
				|  |  | +uniform sampler2D TexGPos;\n"
 | 
	
		
			
				|  |  | +LA_SHADER_LIB_FXAA
 | 
	
		
			
				|  |  | +"void main(){\n\
 | 
	
		
			
				|  |  |      float d=dot(uViewDir,normalize(fViewDir));\n\
 | 
	
		
			
				|  |  |      float target=cos(uFOV/2.);\n\
 | 
	
		
			
				|  |  |      vec4 color=vec4(1.,1.,1.,1.); float mul=0.;\n\
 | 
	
		
			
				|  |  |      if(d<(target+0.005)&&d>target) mul=1.0;\n\
 | 
	
		
			
				|  |  |      vec2 uv=gl_FragCoord.xy/textureSize(TexColor,0);\n\
 | 
	
		
			
				|  |  | -    vec4 buffer_color=texture2D(TexColor,uv);\n\
 | 
	
		
			
				|  |  | +    vec4 buffer_color=fxaa(TexColor,uv,textureSize(TexColor,0));\n\
 | 
	
		
			
				|  |  | +    //vec4 buffer_color=texture2D(TexColor,uv);\n\
 | 
	
		
			
				|  |  |      gl_FragColor = mul*color+buffer_color;\n\
 | 
	
		
			
				|  |  |  }";
 | 
	
		
			
				|  |  |  const char LA_SCENE_VERTEX_SHADER[] = "#version 330\n\
 |