diff --git a/engine/src/core-data/Common/MatDefs/Post/FXAA.frag b/engine/src/core-data/Common/MatDefs/Post/FXAA.frag index b54e1b442..00f11f90b 100644 --- a/engine/src/core-data/Common/MatDefs/Post/FXAA.frag +++ b/engine/src/core-data/Common/MatDefs/Post/FXAA.frag @@ -1,5 +1,4 @@ -///#extension GL_EXT_gpu_shader4 : disable -#extension all : disable +#extension GL_EXT_gpu_shader4 : enable uniform sampler2D m_Texture; uniform vec2 g_Resolution; @@ -11,8 +10,18 @@ uniform float m_ReduceMul; varying vec2 texCoord; varying vec4 posPos; -#define FxaaTexLod0(t, p) textureLod(t, p, 0.0) -#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) +#define FxaaTex(t, p) texture2D(t, p) + +#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( vec4 posPos, // Output of FxaaVertexShader interpolated across screen. @@ -24,12 +33,12 @@ vec3 FxaaPixelShader( //#define FXAA_REDUCE_MUL (1.0/8.0) //#define FXAA_SPAN_MAX 8.0 - vec3 rgbNW = FxaaTexLod0(tex, posPos.zw).xyz; - vec3 rgbNE = FxaaTexOff(tex, posPos.zw, ivec2(1,0), rcpFrame.xy).xyz; - vec3 rgbSW = FxaaTexOff(tex, posPos.zw, ivec2(0,1), rcpFrame.xy).xyz; - vec3 rgbSE = FxaaTexOff(tex, posPos.zw, ivec2(1,1), rcpFrame.xy).xyz; + vec3 rgbNW = FxaaTex(tex, posPos.zw).xyz; + vec3 rgbNE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,0), rcpFrame.xy).xyz; + vec3 rgbSW = FxaaTexOff(tex, posPos.zw, OffsetVec(0,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); float lumaNW = dot(rgbNW, luma); @@ -54,11 +63,11 @@ vec3 FxaaPixelShader( dir * rcpDirMin)) * rcpFrame.xy; vec3 rgbA = (1.0/2.0) * ( - FxaaTexLod0(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(1.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) * ( - FxaaTexLod0(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(0.0/3.0 - 0.5)).xyz + + FxaaTex(tex, posPos.xy + dir * vec2(3.0/3.0 - 0.5)).xyz); float lumaB = dot(rgbB, luma); diff --git a/engine/src/core-data/Common/MatDefs/Post/FXAA.j3md b/engine/src/core-data/Common/MatDefs/Post/FXAA.j3md index cfe239e7c..66855850c 100644 --- a/engine/src/core-data/Common/MatDefs/Post/FXAA.j3md +++ b/engine/src/core-data/Common/MatDefs/Post/FXAA.j3md @@ -9,7 +9,7 @@ MaterialDef FXAA { } Technique { VertexShader GLSL100: Common/MatDefs/Post/FXAA.vert - FragmentShader GLSL130: Common/MatDefs/Post/FXAA.frag + FragmentShader GLSL100: Common/MatDefs/Post/FXAA.frag WorldParameters { WorldViewProjectionMatrix Resolution