|
|
@ -1,5 +1,4 @@ |
|
|
|
///#extension GL_EXT_gpu_shader4 : disable |
|
|
|
#extension GL_EXT_gpu_shader4 : enable |
|
|
|
#extension all : disable |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uniform sampler2D m_Texture; |
|
|
|
uniform sampler2D m_Texture; |
|
|
|
uniform vec2 g_Resolution; |
|
|
|
uniform vec2 g_Resolution; |
|
|
@ -11,8 +10,18 @@ uniform float m_ReduceMul; |
|
|
|
varying vec2 texCoord; |
|
|
|
varying vec2 texCoord; |
|
|
|
varying vec4 posPos; |
|
|
|
varying vec4 posPos; |
|
|
|
|
|
|
|
|
|
|
|
#define FxaaTexLod0(t, p) textureLod(t, p, 0.0) |
|
|
|
#define FxaaTex(t, p) texture2D(t, p) |
|
|
|
#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) |
|
|
|
|
|
|
|
|
|
|
|
#if __VERSION_ >= 130 |
|
|
|
|
|
|
|
#define OffsetVec(a, b) ivec2(a, b) |
|
|
|
|
|
|
|
#define FxaaTexOff(t, p, o, r) textureOffset(t, p, o) |
|
|
|
|
|
|
|
#elif defined(GL_EXT_gpu_shader4) |
|
|
|
|
|
|
|
#define OffsetVec(a, b) ivec2(a, b) |
|
|
|
|
|
|
|
#define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o) |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
#define OffsetVec(a, b) vec2(a, b) |
|
|
|
|
|
|
|
#define FxaaTexOff(t, p, o, r) texture2D(t, p + o * r) |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
vec3 FxaaPixelShader( |
|
|
|
vec3 FxaaPixelShader( |
|
|
|
vec4 posPos, // Output of FxaaVertexShader interpolated across screen. |
|
|
|
vec4 posPos, // Output of FxaaVertexShader interpolated across screen. |
|
|
@ -24,12 +33,12 @@ vec3 FxaaPixelShader( |
|
|
|
//#define FXAA_REDUCE_MUL (1.0/8.0) |
|
|
|
//#define FXAA_REDUCE_MUL (1.0/8.0) |
|
|
|
//#define FXAA_SPAN_MAX 8.0 |
|
|
|
//#define FXAA_SPAN_MAX 8.0 |
|
|
|
|
|
|
|
|
|
|
|
vec3 rgbNW = FxaaTexLod0(tex, posPos.zw).xyz; |
|
|
|
vec3 rgbNW = FxaaTex(tex, posPos.zw).xyz; |
|
|
|
vec3 rgbNE = FxaaTexOff(tex, posPos.zw, ivec2(1,0), rcpFrame.xy).xyz; |
|
|
|
vec3 rgbNE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,0), rcpFrame.xy).xyz; |
|
|
|
vec3 rgbSW = FxaaTexOff(tex, posPos.zw, ivec2(0,1), rcpFrame.xy).xyz; |
|
|
|
vec3 rgbSW = FxaaTexOff(tex, posPos.zw, OffsetVec(0,1), rcpFrame.xy).xyz; |
|
|
|
vec3 rgbSE = FxaaTexOff(tex, posPos.zw, ivec2(1,1), rcpFrame.xy).xyz; |
|
|
|
vec3 rgbSE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,1), rcpFrame.xy).xyz; |
|
|
|
|
|
|
|
|
|
|
|
vec3 rgbM = FxaaTexLod0(tex, posPos.xy).xyz; |
|
|
|
vec3 rgbM = FxaaTex(tex, posPos.xy).xyz; |
|
|
|
|
|
|
|
|
|
|
|
vec3 luma = vec3(0.299, 0.587, 0.114); |
|
|
|
vec3 luma = vec3(0.299, 0.587, 0.114); |
|
|
|
float lumaNW = dot(rgbNW, luma); |
|
|
|
float lumaNW = dot(rgbNW, luma); |
|
|
@ -54,11 +63,11 @@ vec3 FxaaPixelShader( |
|
|
|
dir * rcpDirMin)) * rcpFrame.xy; |
|
|
|
dir * rcpDirMin)) * rcpFrame.xy; |
|
|
|
|
|
|
|
|
|
|
|
vec3 rgbA = (1.0/2.0) * ( |
|
|
|
vec3 rgbA = (1.0/2.0) * ( |
|
|
|
FxaaTexLod0(tex, posPos.xy + dir * vec2(1.0/3.0 - 0.5)).xyz + |
|
|
|
FxaaTex(tex, posPos.xy + dir * vec2(1.0/3.0 - 0.5)).xyz + |
|
|
|
FxaaTexLod0(tex, posPos.xy + dir * vec2(2.0/3.0 - 0.5)).xyz); |
|
|
|
FxaaTex(tex, posPos.xy + dir * vec2(2.0/3.0 - 0.5)).xyz); |
|
|
|
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * ( |
|
|
|
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * ( |
|
|
|
FxaaTexLod0(tex, posPos.xy + dir * vec2(0.0/3.0 - 0.5)).xyz + |
|
|
|
FxaaTex(tex, posPos.xy + dir * vec2(0.0/3.0 - 0.5)).xyz + |
|
|
|
FxaaTexLod0(tex, posPos.xy + dir * vec2(3.0/3.0 - 0.5)).xyz); |
|
|
|
FxaaTex(tex, posPos.xy + dir * vec2(3.0/3.0 - 0.5)).xyz); |
|
|
|
|
|
|
|
|
|
|
|
float lumaB = dot(rgbB, luma); |
|
|
|
float lumaB = dot(rgbB, luma); |
|
|
|
|
|
|
|
|
|
|
|