1 |
- {"ast":null,"code":"/**\n * @author alteredq / http://alteredqualia.com/\n * @author davidedc / http://www.sketchpatch.net/\n *\n * NVIDIA FXAA by Timothy Lottes\n * http://timothylottes.blogspot.com/2011/06/fxaa3-source-released.html\n * - WebGL port by @supereggbert\n * http://www.glge.org/demos/fxaa/\n */\n\nvar FXAAShader = {\n uniforms: {\n \"tDiffuse\": {\n value: null\n },\n \"resolution\": {\n value: new THREE.Vector2(1 / 1024, 1 / 512)\n }\n },\n vertexShader: [\"varying vec2 vUv;\", \"void main() {\", \"\tvUv = uv;\", \"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\", \"}\"].join(\"\\n\"),\n fragmentShader: [\"precision highp float;\", \"\", \"uniform sampler2D tDiffuse;\", \"\", \"uniform vec2 resolution;\", \"\", \"varying vec2 vUv;\", \"\", \"// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\", \"\", \"//----------------------------------------------------------------------------------\", \"// File: es3-kepler\\FXAA\\assets\\shaders/FXAA_DefaultES.frag\", \"// SDK Version: v3.00\", \"// Email: gameworks@nvidia.com\", \"// Site: http://developer.nvidia.com/\", \"//\", \"// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\", \"//\", \"// Redistribution and use in source and binary forms, with or without\", \"// modification, are permitted provided that the following conditions\", \"// are met:\", \"// * Redistributions of source code must retain the above copyright\", \"// notice, this list of conditions and the following disclaimer.\", \"// * Redistributions in binary form must reproduce the above copyright\", \"// notice, this list of conditions and the following disclaimer in the\", \"// documentation and/or other materials provided with the distribution.\", \"// * Neither the name of NVIDIA CORPORATION nor the names of its\", \"// contributors may be used to endorse or promote products derived\", \"// from this software without specific prior written permission.\", \"//\", \"// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\", \"// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\", \"// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\", \"// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\", \"// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\", \"// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\", \"// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\", \"// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\", \"// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\", \"// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\", \"// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\", \"//\", \"//----------------------------------------------------------------------------------\", \"\", \"#define FXAA_PC 1\", \"#define FXAA_GLSL_100 1\", \"#define FXAA_QUALITY_PRESET 12\", \"\", \"#define FXAA_GREEN_AS_LUMA 1\", \"\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_PC_CONSOLE\", \" //\", \" // The console algorithm for PC is included\", \" // for developers targeting really low spec machines.\", \" // Likely better to just run FXAA_PC, and use a really low preset.\", \" //\", \" #define FXAA_PC_CONSOLE 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_GLSL_120\", \" #define FXAA_GLSL_120 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_GLSL_130\", \" #define FXAA_GLSL_130 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_HLSL_3\", \" #define FXAA_HLSL_3 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_HLSL_4\", \" #define FXAA_HLSL_4 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_HLSL_5\", \" #define FXAA_HLSL_5 0\", \"#endif\", \"/*==========================================================================*/\", \"#ifndef FXAA_GREEN_AS_LUMA\", \" //\", \" // For those using non-linear color,\", \" // and either not able to get luma in alpha, or not wanting to,\", \" // this enables FXAA to run using green as a proxy for luma.\", \" // So with this enabled, no need to pack luma in alpha.\", \" //\", \" // This will turn off AA on anything which lacks some amount of green.\", \" // Pure red and blue or combination of only R and B, will get no AA.\", \" //\", \" // Might want to lower the settings for both,\", \" // fxaaConsoleEdgeThresholdMin\", \" // fxaaQualityEdgeThresholdMin\", \" // In order to insure AA does not get turned off on colors\", \" // which contain a minor amount of green.\", \" //\", \" // 1 = On.\", \" // 0 = Off.\", \" //\", \" #define FXAA_GREEN_AS_LUMA 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_EARLY_EXIT\", \" //\", \" // Controls algorithm's early exit path.\", \" // On PS3 turning this ON adds 2 cycles to the shader.\", \" // On 360 turning this OFF adds 10ths of a millisecond to the shader.\", \" // Turning this off on console will result in a more blurry image.\", \" // So this defaults to on.\", \" //\", \" // 1 = On.\", \" // 0 = Off.\", \" //\", \" #define FXAA_EARLY_EXIT 1\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_DISCARD\", \" //\", \" // Only valid for PC OpenGL currently.\", \" // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\", \" //\", \" // 1 = Use discard on pixels which don't need AA.\", \" // For APIs which enable concurrent TEX+ROP from same surface.\", \" // 0 = Return unchanged color on pixels which don't need AA.\", \" //\", \" #define FXAA_DISCARD 0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_FAST_PIXEL_OFFSET\", \" //\", \" // Used for GLSL 120 only.\", \" //\", \" // 1 = GL API supports fast pixel offsets\", \" // 0 = do not use fast pixel offsets\", \" //\", \" #ifdef GL_EXT_gpu_shader4\", \" #define FXAA_FAST_PIXEL_OFFSET 1\", \" #endif\", \" #ifdef GL_NV_gpu_shader5\", \" #define FXAA_FAST_PIXEL_OFFSET 1\", \" #endif\", \" #ifdef GL_ARB_gpu_shader5\", \" #define FXAA_FAST_PIXEL_OFFSET 1\", \" #endif\", \" #ifndef FXAA_FAST_PIXEL_OFFSET\", \" #define FXAA_FAST_PIXEL_OFFSET 0\", \" #endif\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#ifndef FXAA_GATHER4_ALPHA\", \" //\", \" // 1 = API supports gather4 on alpha channel.\", \" // 0 = API does not support gather4 on alpha channel.\", \" //\", \" #if (FXAA_HLSL_5 == 1)\", \" #define FXAA_GATHER4_ALPHA 1\", \" #endif\", \" #ifdef GL_ARB_gpu_shader5\", \" #define FXAA_GATHER4_ALPHA 1\", \" #endif\", \" #ifdef GL_NV_gpu_shader5\", \" #define FXAA_GATHER4_ALPHA 1\", \" #endif\", \" #ifndef FXAA_GATHER4_ALPHA\", \" #define FXAA_GATHER4_ALPHA 0\", \" #endif\", \"#endif\", \"\", \"\", \"/*============================================================================\", \" FXAA QUALITY - TUNING KNOBS\", \"------------------------------------------------------------------------------\", \"NOTE the other tuning knobs are now in the shader function inputs!\", \"============================================================================*/\", \"#ifndef FXAA_QUALITY_PRESET\", \" //\", \" // Choose the quality preset.\", \" // This needs to be compiled into the shader as it effects code.\", \" // Best option to include multiple presets is to\", \" // in each shader define the preset, then include this file.\", \" //\", \" // OPTIONS\", \" // -----------------------------------------------------------------------\", \" // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\", \" // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\", \" // 39 - no dither, very expensive\", \" //\", \" // NOTES\", \" // -----------------------------------------------------------------------\", \" // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\", \" // 13 = about same speed as FXAA 3.9 and better than 12\", \" // 23 = closest to FXAA 3.9 visually and performance wise\", \" // _ = the lowest digit is directly related to performance\", \" // _ = the highest digit is directly related to style\", \" //\", \" #define FXAA_QUALITY_PRESET 12\", \"#endif\", \"\", \"\", \"/*============================================================================\", \"\", \" FXAA QUALITY - PRESETS\", \"\", \"============================================================================*/\", \"\", \"/*============================================================================\", \" FXAA QUALITY - MEDIUM DITHER PRESETS\", \"============================================================================*/\", \"#if (FXAA_QUALITY_PRESET == 10)\", \" #define FXAA_QUALITY_PS 3\", \" #define FXAA_QUALITY_P0 1.5\", \" #define FXAA_QUALITY_P1 3.0\", \" #define FXAA_QUALITY_P2 12.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 11)\", \" #define FXAA_QUALITY_PS 4\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 3.0\", \" #define FXAA_QUALITY_P3 12.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 12)\", \" #define FXAA_QUALITY_PS 5\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 4.0\", \" #define FXAA_QUALITY_P4 12.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 13)\", \" #define FXAA_QUALITY_PS 6\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 4.0\", \" #define FXAA_QUALITY_P5 12.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 14)\", \" #define FXAA_QUALITY_PS 7\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 4.0\", \" #define FXAA_QUALITY_P6 12.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 15)\", \" #define FXAA_QUALITY_PS 8\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 2.0\", \" #define FXAA_QUALITY_P6 4.0\", \" #define FXAA_QUALITY_P7 12.0\", \"#endif\", \"\", \"/*============================================================================\", \" FXAA QUALITY - LOW DITHER PRESETS\", \"============================================================================*/\", \"#if (FXAA_QUALITY_PRESET == 20)\", \" #define FXAA_QUALITY_PS 3\", \" #define FXAA_QUALITY_P0 1.5\", \" #define FXAA_QUALITY_P1 2.0\", \" #define FXAA_QUALITY_P2 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 21)\", \" #define FXAA_QUALITY_PS 4\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 22)\", \" #define FXAA_QUALITY_PS 5\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 23)\", \" #define FXAA_QUALITY_PS 6\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 24)\", \" #define FXAA_QUALITY_PS 7\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 3.0\", \" #define FXAA_QUALITY_P6 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 25)\", \" #define FXAA_QUALITY_PS 8\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 2.0\", \" #define FXAA_QUALITY_P6 4.0\", \" #define FXAA_QUALITY_P7 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 26)\", \" #define FXAA_QUALITY_PS 9\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 2.0\", \" #define FXAA_QUALITY_P6 2.0\", \" #define FXAA_QUALITY_P7 4.0\", \" #define FXAA_QUALITY_P8 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 27)\", \" #define FXAA_QUALITY_PS 10\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 2.0\", \" #define FXAA_QUALITY_P6 2.0\", \" #define FXAA_QUALITY_P7 2.0\", \" #define FXAA_QUALITY_P8 4.0\", \" #define FXAA_QUALITY_P9 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 28)\", \" #define FXAA_QUALITY_PS 11\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 2.0\", \" #define FXAA_QUALITY_P6 2.0\", \" #define FXAA_QUALITY_P7 2.0\", \" #define FXAA_QUALITY_P8 2.0\", \" #define FXAA_QUALITY_P9 4.0\", \" #define FXAA_QUALITY_P10 8.0\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_QUALITY_PRESET == 29)\", \" #define FXAA_QUALITY_PS 12\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.5\", \" #define FXAA_QUALITY_P2 2.0\", \" #define FXAA_QUALITY_P3 2.0\", \" #define FXAA_QUALITY_P4 2.0\", \" #define FXAA_QUALITY_P5 2.0\", \" #define FXAA_QUALITY_P6 2.0\", \" #define FXAA_QUALITY_P7 2.0\", \" #define FXAA_QUALITY_P8 2.0\", \" #define FXAA_QUALITY_P9 2.0\", \" #define FXAA_QUALITY_P10 4.0\", \" #define FXAA_QUALITY_P11 8.0\", \"#endif\", \"\", \"/*============================================================================\", \" FXAA QUALITY - EXTREME QUALITY\", \"============================================================================*/\", \"#if (FXAA_QUALITY_PRESET == 39)\", \" #define FXAA_QUALITY_PS 12\", \" #define FXAA_QUALITY_P0 1.0\", \" #define FXAA_QUALITY_P1 1.0\", \" #define FXAA_QUALITY_P2 1.0\", \" #define FXAA_QUALITY_P3 1.0\", \" #define FXAA_QUALITY_P4 1.0\", \" #define FXAA_QUALITY_P5 1.5\", \" #define FXAA_QUALITY_P6 2.0\", \" #define FXAA_QUALITY_P7 2.0\", \" #define FXAA_QUALITY_P8 2.0\", \" #define FXAA_QUALITY_P9 2.0\", \" #define FXAA_QUALITY_P10 4.0\", \" #define FXAA_QUALITY_P11 8.0\", \"#endif\", \"\", \"\", \"\", \"/*============================================================================\", \"\", \" API PORTING\", \"\", \"============================================================================*/\", \"#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\", \" #define FxaaBool bool\", \" #define FxaaDiscard discard\", \" #define FxaaFloat float\", \" #define FxaaFloat2 vec2\", \" #define FxaaFloat3 vec3\", \" #define FxaaFloat4 vec4\", \" #define FxaaHalf float\", \" #define FxaaHalf2 vec2\", \" #define FxaaHalf3 vec3\", \" #define FxaaHalf4 vec4\", \" #define FxaaInt2 ivec2\", \" #define FxaaSat(x) clamp(x, 0.0, 1.0)\", \" #define FxaaTex sampler2D\", \"#else\", \" #define FxaaBool bool\", \" #define FxaaDiscard clip(-1)\", \" #define FxaaFloat float\", \" #define FxaaFloat2 float2\", \" #define FxaaFloat3 float3\", \" #define FxaaFloat4 float4\", \" #define FxaaHalf half\", \" #define FxaaHalf2 half2\", \" #define FxaaHalf3 half3\", \" #define FxaaHalf4 half4\", \" #define FxaaSat(x) saturate(x)\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_GLSL_100 == 1)\", \" #define FxaaTexTop(t, p) texture2D(t, p, 0.0)\", \" #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_GLSL_120 == 1)\", \" // Requires,\", \" // #version 120\", \" // And at least,\", \" // #extension GL_EXT_gpu_shader4 : enable\", \" // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\", \" #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\", \" #if (FXAA_FAST_PIXEL_OFFSET == 1)\", \" #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\", \" #else\", \" #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\", \" #endif\", \" #if (FXAA_GATHER4_ALPHA == 1)\", \" // use #extension GL_ARB_gpu_shader5 : enable\", \" #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\", \" #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\", \" #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\", \" #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\", \" #endif\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_GLSL_130 == 1)\", \" // Requires \\\"#version 130\\\" or better\", \" #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\", \" #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\", \" #if (FXAA_GATHER4_ALPHA == 1)\", \" // use #extension GL_ARB_gpu_shader5 : enable\", \" #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\", \" #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\", \" #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\", \" #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\", \" #endif\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_HLSL_3 == 1)\", \" #define FxaaInt2 float2\", \" #define FxaaTex sampler2D\", \" #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\", \" #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_HLSL_4 == 1)\", \" #define FxaaInt2 int2\", \" struct FxaaTex { SamplerState smpl; Texture2D tex; };\", \" #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\", \" #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\", \"#endif\", \"/*--------------------------------------------------------------------------*/\", \"#if (FXAA_HLSL_5 == 1)\", \" #define FxaaInt2 int2\", \" struct FxaaTex { SamplerState smpl; Texture2D tex; };\", \" #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\", \" #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\", \" #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\", \" #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\", \" #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\", \" #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\", \"#endif\", \"\", \"\", \"/*============================================================================\", \" GREEN AS LUMA OPTION SUPPORT FUNCTION\", \"============================================================================*/\", \"#if (FXAA_GREEN_AS_LUMA == 0)\", \" FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\", \"#else\", \" FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\", \"#endif\", \"\", \"\", \"\", \"\", \"/*============================================================================\", \"\", \" FXAA3 QUALITY - PC\", \"\", \"============================================================================*/\", \"#if (FXAA_PC == 1)\", \"/*--------------------------------------------------------------------------*/\", \"FxaaFloat4 FxaaPixelShader(\", \" //\", \" // Use noperspective interpolation here (turn off perspective interpolation).\", \" // {xy} = center of pixel\", \" FxaaFloat2 pos,\", \" //\", \" // Used only for FXAA Console, and not used on the 360 version.\", \" // Use noperspective interpolation here (turn off perspective interpolation).\", \" // {xy_} = upper left of pixel\", \" // {_zw} = lower right of pixel\", \" FxaaFloat4 fxaaConsolePosPos,\", \" //\", \" // Input color texture.\", \" // {rgb_} = color in linear or perceptual color space\", \" // if (FXAA_GREEN_AS_LUMA == 0)\", \" // {__a} = luma in perceptual color space (not linear)\", \" FxaaTex tex,\", \" //\", \" // Only used on the optimized 360 version of FXAA Console.\", \" // For everything but 360, just use the same input here as for \\\"tex\\\".\", \" // For 360, same texture, just alias with a 2nd sampler.\", \" // This sampler needs to have an exponent bias of -1.\", \" FxaaTex fxaaConsole360TexExpBiasNegOne,\", \" //\", \" // Only used on the optimized 360 version of FXAA Console.\", \" // For everything but 360, just use the same input here as for \\\"tex\\\".\", \" // For 360, same texture, just alias with a 3nd sampler.\", \" // This sampler needs to have an exponent bias of -2.\", \" FxaaTex fxaaConsole360TexExpBiasNegTwo,\", \" //\", \" // Only used on FXAA Quality.\", \" // This must be from a constant/uniform.\", \" // {x_} = 1.0/screenWidthInPixels\", \" // {_y} = 1.0/screenHeightInPixels\", \" FxaaFloat2 fxaaQualityRcpFrame,\", \" //\", \" // Only used on FXAA Console.\", \" // This must be from a constant/uniform.\", \" // This effects sub-pixel AA quality and inversely sharpness.\", \" // Where N ranges between,\", \" // N = 0.50 (default)\", \" // N = 0.33 (sharper)\", \" // {x__} = -N/screenWidthInPixels\", \" // {_y_} = -N/screenHeightInPixels\", \" // {_z_} = N/screenWidthInPixels\", \" // {__w} = N/screenHeightInPixels\", \" FxaaFloat4 fxaaConsoleRcpFrameOpt,\", \" //\", \" // Only used on FXAA Console.\", \" // Not used on 360, but used on PS3 and PC.\", \" // This must be from a constant/uniform.\", \" // {x__} = -2.0/screenWidthInPixels\", \" // {_y_} = -2.0/screenHeightInPixels\", \" // {_z_} = 2.0/screenWidthInPixels\", \" // {__w} = 2.0/screenHeightInPixels\", \" FxaaFloat4 fxaaConsoleRcpFrameOpt2,\", \" //\", \" // Only used on FXAA Console.\", \" // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\", \" // This must be from a constant/uniform.\", \" // {x__} = 8.0/screenWidthInPixels\", \" // {_y_} = 8.0/screenHeightInPixels\", \" // {_z_} = -4.0/screenWidthInPixels\", \" // {__w} = -4.0/screenHeightInPixels\", \" FxaaFloat4 fxaaConsole360RcpFrameOpt2,\", \" //\", \" // Only used on FXAA Quality.\", \" // This used to be the FXAA_QUALITY_SUBPIX define.\", \" // It is here now to allow easier tuning.\", \" // Choose the amount of sub-pixel aliasing removal.\", \" // This can effect sharpness.\", \" // 1.00 - upper limit (softer)\", \" // 0.75 - default amount of filtering\", \" // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\", \" // 0.25 - almost off\", \" // 0.00 - completely off\", \" FxaaFloat fxaaQualitySubpix,\", \" //\", \" // Only used on FXAA Quality.\", \" // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\", \" // It is here now to allow easier tuning.\", \" // The minimum amount of local contrast required to apply algorithm.\", \" // 0.333 - too little (faster)\", \" // 0.250 - low quality\", \" // 0.166 - default\", \" // 0.125 - high quality\", \" // 0.063 - overkill (slower)\", \" FxaaFloat fxaaQualityEdgeThreshold,\", \" //\", \" // Only used on FXAA Quality.\", \" // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\", \" // It is here now to allow easier tuning.\", \" // Trims the algorithm from processing darks.\", \" // 0.0833 - upper limit (default, the start of visible unfiltered edges)\", \" // 0.0625 - high quality (faster)\", \" // 0.0312 - visible limit (slower)\", \" // Special notes when using FXAA_GREEN_AS_LUMA,\", \" // Likely want to set this to zero.\", \" // As colors that are mostly not-green\", \" // will appear very dark in the green channel!\", \" // Tune by looking at mostly non-green content,\", \" // then start at zero and increase until aliasing is a problem.\", \" FxaaFloat fxaaQualityEdgeThresholdMin,\", \" //\", \" // Only used on FXAA Console.\", \" // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\", \" // It is here now to allow easier tuning.\", \" // This does not effect PS3, as this needs to be compiled in.\", \" // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\", \" // Due to the PS3 being ALU bound,\", \" // there are only three safe values here: 2 and 4 and 8.\", \" // These options use the shaders ability to a free *|/ by 2|4|8.\", \" // For all other platforms can be a non-power of two.\", \" // 8.0 is sharper (default!!!)\", \" // 4.0 is softer\", \" // 2.0 is really soft (good only for vector graphics inputs)\", \" FxaaFloat fxaaConsoleEdgeSharpness,\", \" //\", \" // Only used on FXAA Console.\", \" // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\", \" // It is here now to allow easier tuning.\", \" // This does not effect PS3, as this needs to be compiled in.\", \" // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\", \" // Due to the PS3 being ALU bound,\", \" // there are only two safe values here: 1/4 and 1/8.\", \" // These options use the shaders ability to a free *|/ by 2|4|8.\", \" // The console setting has a different mapping than the quality setting.\", \" // Other platforms can use other values.\", \" // 0.125 leaves less aliasing, but is softer (default!!!)\", \" // 0.25 leaves more aliasing, and is sharper\", \" FxaaFloat fxaaConsoleEdgeThreshold,\", \" //\", \" // Only used on FXAA Console.\", \" // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\", \" // It is here now to allow easier tuning.\", \" // Trims the algorithm from processing darks.\", \" // The console setting has a different mapping than the quality setting.\", \" // This only applies when FXAA_EARLY_EXIT is 1.\", \" // This does not apply to PS3,\", \" // PS3 was simplified to avoid more shader instructions.\", \" // 0.06 - faster but more aliasing in darks\", \" // 0.05 - default\", \" // 0.04 - slower and less aliasing in darks\", \" // Special notes when using FXAA_GREEN_AS_LUMA,\", \" // Likely want to set this to zero.\", \" // As colors that are mostly not-green\", \" // will appear very dark in the green channel!\", \" // Tune by looking at mostly non-green content,\", \" // then start at zero and increase until aliasing is a problem.\", \" FxaaFloat fxaaConsoleEdgeThresholdMin,\", \" //\", \" // Extra constants for 360 FXAA Console only.\", \" // Use zeros or anything else for other platforms.\", \" // These must be in physical constant registers and NOT immediates.\", \" // Immediates will result in compiler un-optimizing.\", \" // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\", \" FxaaFloat4 fxaaConsole360ConstDir\", \") {\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat2 posM;\", \" posM.x = pos.x;\", \" posM.y = pos.y;\", \" #if (FXAA_GATHER4_ALPHA == 1)\", \" #if (FXAA_DISCARD == 0)\", \" FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\", \" #if (FXAA_GREEN_AS_LUMA == 0)\", \" #define lumaM rgbyM.w\", \" #else\", \" #define lumaM rgbyM.y\", \" #endif\", \" #endif\", \" #if (FXAA_GREEN_AS_LUMA == 0)\", \" FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\", \" FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\", \" #else\", \" FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\", \" FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\", \" #endif\", \" #if (FXAA_DISCARD == 1)\", \" #define lumaM luma4A.w\", \" #endif\", \" #define lumaE luma4A.z\", \" #define lumaS luma4A.x\", \" #define lumaSE luma4A.y\", \" #define lumaNW luma4B.w\", \" #define lumaN luma4B.z\", \" #define lumaW luma4B.x\", \" #else\", \" FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\", \" #if (FXAA_GREEN_AS_LUMA == 0)\", \" #define lumaM rgbyM.w\", \" #else\", \" #define lumaM rgbyM.y\", \" #endif\", \" #if (FXAA_GLSL_100 == 1)\", \" FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\", \" #else\", \" FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\", \" #endif\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat maxSM = max(lumaS, lumaM);\", \" FxaaFloat minSM = min(lumaS, lumaM);\", \" FxaaFloat maxESM = max(lumaE, maxSM);\", \" FxaaFloat minESM = min(lumaE, minSM);\", \" FxaaFloat maxWN = max(lumaN, lumaW);\", \" FxaaFloat minWN = min(lumaN, lumaW);\", \" FxaaFloat rangeMax = max(maxWN, maxESM);\", \" FxaaFloat rangeMin = min(minWN, minESM);\", \" FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\", \" FxaaFloat range = rangeMax - rangeMin;\", \" FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\", \" FxaaBool earlyExit = range < rangeMaxClamped;\", \"/*--------------------------------------------------------------------------*/\", \" if(earlyExit)\", \" #if (FXAA_DISCARD == 1)\", \" FxaaDiscard;\", \" #else\", \" return rgbyM;\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_GATHER4_ALPHA == 0)\", \" #if (FXAA_GLSL_100 == 1)\", \" FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\", \" #else\", \" FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\", \" #endif\", \" #else\", \" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\", \" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat lumaNS = lumaN + lumaS;\", \" FxaaFloat lumaWE = lumaW + lumaE;\", \" FxaaFloat subpixRcpRange = 1.0/range;\", \" FxaaFloat subpixNSWE = lumaNS + lumaWE;\", \" FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\", \" FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat lumaNESE = lumaNE + lumaSE;\", \" FxaaFloat lumaNWNE = lumaNW + lumaNE;\", \" FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\", \" FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat lumaNWSW = lumaNW + lumaSW;\", \" FxaaFloat lumaSWSE = lumaSW + lumaSE;\", \" FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\", \" FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\", \" FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\", \" FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\", \" FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\", \" FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\", \" FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\", \" FxaaBool horzSpan = edgeHorz >= edgeVert;\", \" FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\", \"/*--------------------------------------------------------------------------*/\", \" if(!horzSpan) lumaN = lumaW;\", \" if(!horzSpan) lumaS = lumaE;\", \" if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\", \" FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat gradientN = lumaN - lumaM;\", \" FxaaFloat gradientS = lumaS - lumaM;\", \" FxaaFloat lumaNN = lumaN + lumaM;\", \" FxaaFloat lumaSS = lumaS + lumaM;\", \" FxaaBool pairN = abs(gradientN) >= abs(gradientS);\", \" FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\", \" if(pairN) lengthSign = -lengthSign;\", \" FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat2 posB;\", \" posB.x = posM.x;\", \" posB.y = posM.y;\", \" FxaaFloat2 offNP;\", \" offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\", \" offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\", \" if(!horzSpan) posB.x += lengthSign * 0.5;\", \" if( horzSpan) posB.y += lengthSign * 0.5;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat2 posN;\", \" posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\", \" posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\", \" FxaaFloat2 posP;\", \" posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\", \" posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\", \" FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\", \" FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\", \" FxaaFloat subpixE = subpixC * subpixC;\", \" FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\", \"/*--------------------------------------------------------------------------*/\", \" if(!pairN) lumaNN = lumaSS;\", \" FxaaFloat gradientScaled = gradient * 1.0/4.0;\", \" FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\", \" FxaaFloat subpixF = subpixD * subpixE;\", \" FxaaBool lumaMLTZero = lumaMM < 0.0;\", \"/*--------------------------------------------------------------------------*/\", \" lumaEndN -= lumaNN * 0.5;\", \" lumaEndP -= lumaNN * 0.5;\", \" FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\", \" FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\", \" FxaaBool doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\", \"/*--------------------------------------------------------------------------*/\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 3)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 4)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 5)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 6)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 7)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 8)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 9)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 10)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 11)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\", \"/*--------------------------------------------------------------------------*/\", \" #if (FXAA_QUALITY_PS > 12)\", \" if(doneNP) {\", \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\", \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\", \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\", \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\", \" doneN = abs(lumaEndN) >= gradientScaled;\", \" doneP = abs(lumaEndP) >= gradientScaled;\", \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\", \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\", \" doneNP = (!doneN) || (!doneP);\", \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\", \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \" #endif\", \"/*--------------------------------------------------------------------------*/\", \" }\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat dstN = posM.x - posN.x;\", \" FxaaFloat dstP = posP.x - posM.x;\", \" if(!horzSpan) dstN = posM.y - posN.y;\", \" if(!horzSpan) dstP = posP.y - posM.y;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\", \" FxaaFloat spanLength = (dstP + dstN);\", \" FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\", \" FxaaFloat spanLengthRcp = 1.0/spanLength;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaBool directionN = dstN < dstP;\", \" FxaaFloat dst = min(dstN, dstP);\", \" FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\", \" FxaaFloat subpixG = subpixF * subpixF;\", \" FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\", \" FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\", \"/*--------------------------------------------------------------------------*/\", \" FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\", \" FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\", \" if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\", \" if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\", \" #if (FXAA_DISCARD == 1)\", \" return FxaaTexTop(tex, posM);\", \" #else\", \" return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\", \" #endif\", \"}\", \"/*==========================================================================*/\", \"#endif\", \"\", \"void main() {\", \" gl_FragColor = FxaaPixelShader(\", \" vUv,\", \" vec4(0.0),\", \" tDiffuse,\", \" tDiffuse,\", \" tDiffuse,\", \" resolution,\", \" vec4(0.0),\", \" vec4(0.0),\", \" vec4(0.0),\", \" 0.75,\", \" 0.166,\", \" 0.0833,\", \" 0.0,\", \" 0.0,\", \" 0.0,\", \" vec4(0.0)\", \" );\", \"\", \" // TODO avoid querying texture twice for same texel\", \" gl_FragColor.a = texture2D(tDiffuse, vUv).a;\", \"}\"].join(\"\\n\")\n};\nexport { FXAAShader };","map":{"version":3,"names":["FXAAShader","uniforms","value","THREE","Vector2","vertexShader","join","fragmentShader"],"sources":["/Users/mac/projects/mime/mine/public/shader/FAAXShader.js"],"sourcesContent":["/**\n * @author alteredq / http://alteredqualia.com/\n * @author davidedc / http://www.sketchpatch.net/\n *\n * NVIDIA FXAA by Timothy Lottes\n * http://timothylottes.blogspot.com/2011/06/fxaa3-source-released.html\n * - WebGL port by @supereggbert\n * http://www.glge.org/demos/fxaa/\n */\n\nvar FXAAShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { value: null },\n\t\t\"resolution\": { value: new THREE.Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\"\tvUv = uv;\",\n\t\t\"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" ),\n\n\tfragmentShader: [\n\t\t\"precision highp float;\",\n\t\t\"\",\n\t\t\"uniform sampler2D tDiffuse;\",\n\t\t\"\",\n\t\t\"uniform vec2 resolution;\",\n\t\t\"\",\n\t\t\"varying vec2 vUv;\",\n\t\t\"\",\n\t\t\"// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\",\n\t\t\"\",\n\t\t\"//----------------------------------------------------------------------------------\",\n\t\t\"// File: es3-kepler\\FXAA\\assets\\shaders/FXAA_DefaultES.frag\",\n\t\t\"// SDK Version: v3.00\",\n\t\t\"// Email: gameworks@nvidia.com\",\n\t\t\"// Site: http://developer.nvidia.com/\",\n\t\t\"//\",\n\t\t\"// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\",\n\t\t\"//\",\n\t\t\"// Redistribution and use in source and binary forms, with or without\",\n\t\t\"// modification, are permitted provided that the following conditions\",\n\t\t\"// are met:\",\n\t\t\"// * Redistributions of source code must retain the above copyright\",\n\t\t\"// notice, this list of conditions and the following disclaimer.\",\n\t\t\"// * Redistributions in binary form must reproduce the above copyright\",\n\t\t\"// notice, this list of conditions and the following disclaimer in the\",\n\t\t\"// documentation and/or other materials provided with the distribution.\",\n\t\t\"// * Neither the name of NVIDIA CORPORATION nor the names of its\",\n\t\t\"// contributors may be used to endorse or promote products derived\",\n\t\t\"// from this software without specific prior written permission.\",\n\t\t\"//\",\n\t\t\"// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\",\n\t\t\"// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\",\n\t\t\"// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\",\n\t\t\"// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\",\n\t\t\"// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\",\n\t\t\"// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\",\n\t\t\"// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\",\n\t\t\"// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\",\n\t\t\"// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\",\n\t\t\"// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\",\n\t\t\"// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\",\n\t\t\"//\",\n\t\t\"//----------------------------------------------------------------------------------\",\n\t\t\"\",\n\t\t\"#define FXAA_PC 1\",\n\t\t\"#define FXAA_GLSL_100 1\",\n\t\t\"#define FXAA_QUALITY_PRESET 12\",\n\t\t\"\",\n\t\t\"#define FXAA_GREEN_AS_LUMA 1\",\n\t\t\"\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_PC_CONSOLE\",\n\t\t\" //\",\n\t\t\" // The console algorithm for PC is included\",\n\t\t\" // for developers targeting really low spec machines.\",\n\t\t\" // Likely better to just run FXAA_PC, and use a really low preset.\",\n\t\t\" //\",\n\t\t\" #define FXAA_PC_CONSOLE 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_GLSL_120\",\n\t\t\" #define FXAA_GLSL_120 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_GLSL_130\",\n\t\t\" #define FXAA_GLSL_130 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_HLSL_3\",\n\t\t\" #define FXAA_HLSL_3 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_HLSL_4\",\n\t\t\" #define FXAA_HLSL_4 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_HLSL_5\",\n\t\t\" #define FXAA_HLSL_5 0\",\n\t\t\"#endif\",\n\t\t\"/*==========================================================================*/\",\n\t\t\"#ifndef FXAA_GREEN_AS_LUMA\",\n\t\t\" //\",\n\t\t\" // For those using non-linear color,\",\n\t\t\" // and either not able to get luma in alpha, or not wanting to,\",\n\t\t\" // this enables FXAA to run using green as a proxy for luma.\",\n\t\t\" // So with this enabled, no need to pack luma in alpha.\",\n\t\t\" //\",\n\t\t\" // This will turn off AA on anything which lacks some amount of green.\",\n\t\t\" // Pure red and blue or combination of only R and B, will get no AA.\",\n\t\t\" //\",\n\t\t\" // Might want to lower the settings for both,\",\n\t\t\" // fxaaConsoleEdgeThresholdMin\",\n\t\t\" // fxaaQualityEdgeThresholdMin\",\n\t\t\" // In order to insure AA does not get turned off on colors\",\n\t\t\" // which contain a minor amount of green.\",\n\t\t\" //\",\n\t\t\" // 1 = On.\",\n\t\t\" // 0 = Off.\",\n\t\t\" //\",\n\t\t\" #define FXAA_GREEN_AS_LUMA 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_EARLY_EXIT\",\n\t\t\" //\",\n\t\t\" // Controls algorithm's early exit path.\",\n\t\t\" // On PS3 turning this ON adds 2 cycles to the shader.\",\n\t\t\" // On 360 turning this OFF adds 10ths of a millisecond to the shader.\",\n\t\t\" // Turning this off on console will result in a more blurry image.\",\n\t\t\" // So this defaults to on.\",\n\t\t\" //\",\n\t\t\" // 1 = On.\",\n\t\t\" // 0 = Off.\",\n\t\t\" //\",\n\t\t\" #define FXAA_EARLY_EXIT 1\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_DISCARD\",\n\t\t\" //\",\n\t\t\" // Only valid for PC OpenGL currently.\",\n\t\t\" // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\",\n\t\t\" //\",\n\t\t\" // 1 = Use discard on pixels which don't need AA.\",\n\t\t\" // For APIs which enable concurrent TEX+ROP from same surface.\",\n\t\t\" // 0 = Return unchanged color on pixels which don't need AA.\",\n\t\t\" //\",\n\t\t\" #define FXAA_DISCARD 0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_FAST_PIXEL_OFFSET\",\n\t\t\" //\",\n\t\t\" // Used for GLSL 120 only.\",\n\t\t\" //\",\n\t\t\" // 1 = GL API supports fast pixel offsets\",\n\t\t\" // 0 = do not use fast pixel offsets\",\n\t\t\" //\",\n\t\t\" #ifdef GL_EXT_gpu_shader4\",\n\t\t\" #define FXAA_FAST_PIXEL_OFFSET 1\",\n\t\t\" #endif\",\n\t\t\" #ifdef GL_NV_gpu_shader5\",\n\t\t\" #define FXAA_FAST_PIXEL_OFFSET 1\",\n\t\t\" #endif\",\n\t\t\" #ifdef GL_ARB_gpu_shader5\",\n\t\t\" #define FXAA_FAST_PIXEL_OFFSET 1\",\n\t\t\" #endif\",\n\t\t\" #ifndef FXAA_FAST_PIXEL_OFFSET\",\n\t\t\" #define FXAA_FAST_PIXEL_OFFSET 0\",\n\t\t\" #endif\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#ifndef FXAA_GATHER4_ALPHA\",\n\t\t\" //\",\n\t\t\" // 1 = API supports gather4 on alpha channel.\",\n\t\t\" // 0 = API does not support gather4 on alpha channel.\",\n\t\t\" //\",\n\t\t\" #if (FXAA_HLSL_5 == 1)\",\n\t\t\" #define FXAA_GATHER4_ALPHA 1\",\n\t\t\" #endif\",\n\t\t\" #ifdef GL_ARB_gpu_shader5\",\n\t\t\" #define FXAA_GATHER4_ALPHA 1\",\n\t\t\" #endif\",\n\t\t\" #ifdef GL_NV_gpu_shader5\",\n\t\t\" #define FXAA_GATHER4_ALPHA 1\",\n\t\t\" #endif\",\n\t\t\" #ifndef FXAA_GATHER4_ALPHA\",\n\t\t\" #define FXAA_GATHER4_ALPHA 0\",\n\t\t\" #endif\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\" FXAA QUALITY - TUNING KNOBS\",\n\t\t\"------------------------------------------------------------------------------\",\n\t\t\"NOTE the other tuning knobs are now in the shader function inputs!\",\n\t\t\"============================================================================*/\",\n\t\t\"#ifndef FXAA_QUALITY_PRESET\",\n\t\t\" //\",\n\t\t\" // Choose the quality preset.\",\n\t\t\" // This needs to be compiled into the shader as it effects code.\",\n\t\t\" // Best option to include multiple presets is to\",\n\t\t\" // in each shader define the preset, then include this file.\",\n\t\t\" //\",\n\t\t\" // OPTIONS\",\n\t\t\" // -----------------------------------------------------------------------\",\n\t\t\" // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\",\n\t\t\" // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\",\n\t\t\" // 39 - no dither, very expensive\",\n\t\t\" //\",\n\t\t\" // NOTES\",\n\t\t\" // -----------------------------------------------------------------------\",\n\t\t\" // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\",\n\t\t\" // 13 = about same speed as FXAA 3.9 and better than 12\",\n\t\t\" // 23 = closest to FXAA 3.9 visually and performance wise\",\n\t\t\" // _ = the lowest digit is directly related to performance\",\n\t\t\" // _ = the highest digit is directly related to style\",\n\t\t\" //\",\n\t\t\" #define FXAA_QUALITY_PRESET 12\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\"\",\n\t\t\" FXAA QUALITY - PRESETS\",\n\t\t\"\",\n\t\t\"============================================================================*/\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\" FXAA QUALITY - MEDIUM DITHER PRESETS\",\n\t\t\"============================================================================*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 10)\",\n\t\t\" #define FXAA_QUALITY_PS 3\",\n\t\t\" #define FXAA_QUALITY_P0 1.5\",\n\t\t\" #define FXAA_QUALITY_P1 3.0\",\n\t\t\" #define FXAA_QUALITY_P2 12.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 11)\",\n\t\t\" #define FXAA_QUALITY_PS 4\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 3.0\",\n\t\t\" #define FXAA_QUALITY_P3 12.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 12)\",\n\t\t\" #define FXAA_QUALITY_PS 5\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 4.0\",\n\t\t\" #define FXAA_QUALITY_P4 12.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 13)\",\n\t\t\" #define FXAA_QUALITY_PS 6\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 4.0\",\n\t\t\" #define FXAA_QUALITY_P5 12.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 14)\",\n\t\t\" #define FXAA_QUALITY_PS 7\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 4.0\",\n\t\t\" #define FXAA_QUALITY_P6 12.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 15)\",\n\t\t\" #define FXAA_QUALITY_PS 8\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 2.0\",\n\t\t\" #define FXAA_QUALITY_P6 4.0\",\n\t\t\" #define FXAA_QUALITY_P7 12.0\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\" FXAA QUALITY - LOW DITHER PRESETS\",\n\t\t\"============================================================================*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 20)\",\n\t\t\" #define FXAA_QUALITY_PS 3\",\n\t\t\" #define FXAA_QUALITY_P0 1.5\",\n\t\t\" #define FXAA_QUALITY_P1 2.0\",\n\t\t\" #define FXAA_QUALITY_P2 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 21)\",\n\t\t\" #define FXAA_QUALITY_PS 4\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 22)\",\n\t\t\" #define FXAA_QUALITY_PS 5\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 23)\",\n\t\t\" #define FXAA_QUALITY_PS 6\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 24)\",\n\t\t\" #define FXAA_QUALITY_PS 7\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 3.0\",\n\t\t\" #define FXAA_QUALITY_P6 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 25)\",\n\t\t\" #define FXAA_QUALITY_PS 8\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 2.0\",\n\t\t\" #define FXAA_QUALITY_P6 4.0\",\n\t\t\" #define FXAA_QUALITY_P7 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 26)\",\n\t\t\" #define FXAA_QUALITY_PS 9\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 2.0\",\n\t\t\" #define FXAA_QUALITY_P6 2.0\",\n\t\t\" #define FXAA_QUALITY_P7 4.0\",\n\t\t\" #define FXAA_QUALITY_P8 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 27)\",\n\t\t\" #define FXAA_QUALITY_PS 10\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 2.0\",\n\t\t\" #define FXAA_QUALITY_P6 2.0\",\n\t\t\" #define FXAA_QUALITY_P7 2.0\",\n\t\t\" #define FXAA_QUALITY_P8 4.0\",\n\t\t\" #define FXAA_QUALITY_P9 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 28)\",\n\t\t\" #define FXAA_QUALITY_PS 11\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 2.0\",\n\t\t\" #define FXAA_QUALITY_P6 2.0\",\n\t\t\" #define FXAA_QUALITY_P7 2.0\",\n\t\t\" #define FXAA_QUALITY_P8 2.0\",\n\t\t\" #define FXAA_QUALITY_P9 4.0\",\n\t\t\" #define FXAA_QUALITY_P10 8.0\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 29)\",\n\t\t\" #define FXAA_QUALITY_PS 12\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.5\",\n\t\t\" #define FXAA_QUALITY_P2 2.0\",\n\t\t\" #define FXAA_QUALITY_P3 2.0\",\n\t\t\" #define FXAA_QUALITY_P4 2.0\",\n\t\t\" #define FXAA_QUALITY_P5 2.0\",\n\t\t\" #define FXAA_QUALITY_P6 2.0\",\n\t\t\" #define FXAA_QUALITY_P7 2.0\",\n\t\t\" #define FXAA_QUALITY_P8 2.0\",\n\t\t\" #define FXAA_QUALITY_P9 2.0\",\n\t\t\" #define FXAA_QUALITY_P10 4.0\",\n\t\t\" #define FXAA_QUALITY_P11 8.0\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\" FXAA QUALITY - EXTREME QUALITY\",\n\t\t\"============================================================================*/\",\n\t\t\"#if (FXAA_QUALITY_PRESET == 39)\",\n\t\t\" #define FXAA_QUALITY_PS 12\",\n\t\t\" #define FXAA_QUALITY_P0 1.0\",\n\t\t\" #define FXAA_QUALITY_P1 1.0\",\n\t\t\" #define FXAA_QUALITY_P2 1.0\",\n\t\t\" #define FXAA_QUALITY_P3 1.0\",\n\t\t\" #define FXAA_QUALITY_P4 1.0\",\n\t\t\" #define FXAA_QUALITY_P5 1.5\",\n\t\t\" #define FXAA_QUALITY_P6 2.0\",\n\t\t\" #define FXAA_QUALITY_P7 2.0\",\n\t\t\" #define FXAA_QUALITY_P8 2.0\",\n\t\t\" #define FXAA_QUALITY_P9 2.0\",\n\t\t\" #define FXAA_QUALITY_P10 4.0\",\n\t\t\" #define FXAA_QUALITY_P11 8.0\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\"\",\n\t\t\" API PORTING\",\n\t\t\"\",\n\t\t\"============================================================================*/\",\n\t\t\"#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\",\n\t\t\" #define FxaaBool bool\",\n\t\t\" #define FxaaDiscard discard\",\n\t\t\" #define FxaaFloat float\",\n\t\t\" #define FxaaFloat2 vec2\",\n\t\t\" #define FxaaFloat3 vec3\",\n\t\t\" #define FxaaFloat4 vec4\",\n\t\t\" #define FxaaHalf float\",\n\t\t\" #define FxaaHalf2 vec2\",\n\t\t\" #define FxaaHalf3 vec3\",\n\t\t\" #define FxaaHalf4 vec4\",\n\t\t\" #define FxaaInt2 ivec2\",\n\t\t\" #define FxaaSat(x) clamp(x, 0.0, 1.0)\",\n\t\t\" #define FxaaTex sampler2D\",\n\t\t\"#else\",\n\t\t\" #define FxaaBool bool\",\n\t\t\" #define FxaaDiscard clip(-1)\",\n\t\t\" #define FxaaFloat float\",\n\t\t\" #define FxaaFloat2 float2\",\n\t\t\" #define FxaaFloat3 float3\",\n\t\t\" #define FxaaFloat4 float4\",\n\t\t\" #define FxaaHalf half\",\n\t\t\" #define FxaaHalf2 half2\",\n\t\t\" #define FxaaHalf3 half3\",\n\t\t\" #define FxaaHalf4 half4\",\n\t\t\" #define FxaaSat(x) saturate(x)\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_GLSL_100 == 1)\",\n\t\t\" #define FxaaTexTop(t, p) texture2D(t, p, 0.0)\",\n\t\t\" #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_GLSL_120 == 1)\",\n\t\t\" // Requires,\",\n\t\t\" // #version 120\",\n\t\t\" // And at least,\",\n\t\t\" // #extension GL_EXT_gpu_shader4 : enable\",\n\t\t\" // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\",\n\t\t\" #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\",\n\t\t\" #if (FXAA_FAST_PIXEL_OFFSET == 1)\",\n\t\t\" #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\",\n\t\t\" #else\",\n\t\t\" #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\",\n\t\t\" #endif\",\n\t\t\" #if (FXAA_GATHER4_ALPHA == 1)\",\n\t\t\" // use #extension GL_ARB_gpu_shader5 : enable\",\n\t\t\" #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\",\n\t\t\" #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\",\n\t\t\" #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\",\n\t\t\" #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\",\n\t\t\" #endif\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_GLSL_130 == 1)\",\n\t\t\" // Requires \\\"#version 130\\\" or better\",\n\t\t\" #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\",\n\t\t\" #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\",\n\t\t\" #if (FXAA_GATHER4_ALPHA == 1)\",\n\t\t\" // use #extension GL_ARB_gpu_shader5 : enable\",\n\t\t\" #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\",\n\t\t\" #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\",\n\t\t\" #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\",\n\t\t\" #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\",\n\t\t\" #endif\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_HLSL_3 == 1)\",\n\t\t\" #define FxaaInt2 float2\",\n\t\t\" #define FxaaTex sampler2D\",\n\t\t\" #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\",\n\t\t\" #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_HLSL_4 == 1)\",\n\t\t\" #define FxaaInt2 int2\",\n\t\t\" struct FxaaTex { SamplerState smpl; Texture2D tex; };\",\n\t\t\" #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\",\n\t\t\" #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\",\n\t\t\"#endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"#if (FXAA_HLSL_5 == 1)\",\n\t\t\" #define FxaaInt2 int2\",\n\t\t\" struct FxaaTex { SamplerState smpl; Texture2D tex; };\",\n\t\t\" #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\",\n\t\t\" #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\",\n\t\t\" #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\",\n\t\t\" #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\",\n\t\t\" #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\",\n\t\t\" #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\" GREEN AS LUMA OPTION SUPPORT FUNCTION\",\n\t\t\"============================================================================*/\",\n\t\t\"#if (FXAA_GREEN_AS_LUMA == 0)\",\n\t\t\" FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\",\n\t\t\"#else\",\n\t\t\" FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"/*============================================================================\",\n\t\t\"\",\n\t\t\" FXAA3 QUALITY - PC\",\n\t\t\"\",\n\t\t\"============================================================================*/\",\n\t\t\"#if (FXAA_PC == 1)\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\"FxaaFloat4 FxaaPixelShader(\",\n\t\t\" //\",\n\t\t\" // Use noperspective interpolation here (turn off perspective interpolation).\",\n\t\t\" // {xy} = center of pixel\",\n\t\t\" FxaaFloat2 pos,\",\n\t\t\" //\",\n\t\t\" // Used only for FXAA Console, and not used on the 360 version.\",\n\t\t\" // Use noperspective interpolation here (turn off perspective interpolation).\",\n\t\t\" // {xy_} = upper left of pixel\",\n\t\t\" // {_zw} = lower right of pixel\",\n\t\t\" FxaaFloat4 fxaaConsolePosPos,\",\n\t\t\" //\",\n\t\t\" // Input color texture.\",\n\t\t\" // {rgb_} = color in linear or perceptual color space\",\n\t\t\" // if (FXAA_GREEN_AS_LUMA == 0)\",\n\t\t\" // {__a} = luma in perceptual color space (not linear)\",\n\t\t\" FxaaTex tex,\",\n\t\t\" //\",\n\t\t\" // Only used on the optimized 360 version of FXAA Console.\",\n\t\t\" // For everything but 360, just use the same input here as for \\\"tex\\\".\",\n\t\t\" // For 360, same texture, just alias with a 2nd sampler.\",\n\t\t\" // This sampler needs to have an exponent bias of -1.\",\n\t\t\" FxaaTex fxaaConsole360TexExpBiasNegOne,\",\n\t\t\" //\",\n\t\t\" // Only used on the optimized 360 version of FXAA Console.\",\n\t\t\" // For everything but 360, just use the same input here as for \\\"tex\\\".\",\n\t\t\" // For 360, same texture, just alias with a 3nd sampler.\",\n\t\t\" // This sampler needs to have an exponent bias of -2.\",\n\t\t\" FxaaTex fxaaConsole360TexExpBiasNegTwo,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Quality.\",\n\t\t\" // This must be from a constant/uniform.\",\n\t\t\" // {x_} = 1.0/screenWidthInPixels\",\n\t\t\" // {_y} = 1.0/screenHeightInPixels\",\n\t\t\" FxaaFloat2 fxaaQualityRcpFrame,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Console.\",\n\t\t\" // This must be from a constant/uniform.\",\n\t\t\" // This effects sub-pixel AA quality and inversely sharpness.\",\n\t\t\" // Where N ranges between,\",\n\t\t\" // N = 0.50 (default)\",\n\t\t\" // N = 0.33 (sharper)\",\n\t\t\" // {x__} = -N/screenWidthInPixels\",\n\t\t\" // {_y_} = -N/screenHeightInPixels\",\n\t\t\" // {_z_} = N/screenWidthInPixels\",\n\t\t\" // {__w} = N/screenHeightInPixels\",\n\t\t\" FxaaFloat4 fxaaConsoleRcpFrameOpt,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Console.\",\n\t\t\" // Not used on 360, but used on PS3 and PC.\",\n\t\t\" // This must be from a constant/uniform.\",\n\t\t\" // {x__} = -2.0/screenWidthInPixels\",\n\t\t\" // {_y_} = -2.0/screenHeightInPixels\",\n\t\t\" // {_z_} = 2.0/screenWidthInPixels\",\n\t\t\" // {__w} = 2.0/screenHeightInPixels\",\n\t\t\" FxaaFloat4 fxaaConsoleRcpFrameOpt2,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Console.\",\n\t\t\" // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\",\n\t\t\" // This must be from a constant/uniform.\",\n\t\t\" // {x__} = 8.0/screenWidthInPixels\",\n\t\t\" // {_y_} = 8.0/screenHeightInPixels\",\n\t\t\" // {_z_} = -4.0/screenWidthInPixels\",\n\t\t\" // {__w} = -4.0/screenHeightInPixels\",\n\t\t\" FxaaFloat4 fxaaConsole360RcpFrameOpt2,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Quality.\",\n\t\t\" // This used to be the FXAA_QUALITY_SUBPIX define.\",\n\t\t\" // It is here now to allow easier tuning.\",\n\t\t\" // Choose the amount of sub-pixel aliasing removal.\",\n\t\t\" // This can effect sharpness.\",\n\t\t\" // 1.00 - upper limit (softer)\",\n\t\t\" // 0.75 - default amount of filtering\",\n\t\t\" // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\",\n\t\t\" // 0.25 - almost off\",\n\t\t\" // 0.00 - completely off\",\n\t\t\" FxaaFloat fxaaQualitySubpix,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Quality.\",\n\t\t\" // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\",\n\t\t\" // It is here now to allow easier tuning.\",\n\t\t\" // The minimum amount of local contrast required to apply algorithm.\",\n\t\t\" // 0.333 - too little (faster)\",\n\t\t\" // 0.250 - low quality\",\n\t\t\" // 0.166 - default\",\n\t\t\" // 0.125 - high quality\",\n\t\t\" // 0.063 - overkill (slower)\",\n\t\t\" FxaaFloat fxaaQualityEdgeThreshold,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Quality.\",\n\t\t\" // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\",\n\t\t\" // It is here now to allow easier tuning.\",\n\t\t\" // Trims the algorithm from processing darks.\",\n\t\t\" // 0.0833 - upper limit (default, the start of visible unfiltered edges)\",\n\t\t\" // 0.0625 - high quality (faster)\",\n\t\t\" // 0.0312 - visible limit (slower)\",\n\t\t\" // Special notes when using FXAA_GREEN_AS_LUMA,\",\n\t\t\" // Likely want to set this to zero.\",\n\t\t\" // As colors that are mostly not-green\",\n\t\t\" // will appear very dark in the green channel!\",\n\t\t\" // Tune by looking at mostly non-green content,\",\n\t\t\" // then start at zero and increase until aliasing is a problem.\",\n\t\t\" FxaaFloat fxaaQualityEdgeThresholdMin,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Console.\",\n\t\t\" // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\",\n\t\t\" // It is here now to allow easier tuning.\",\n\t\t\" // This does not effect PS3, as this needs to be compiled in.\",\n\t\t\" // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\",\n\t\t\" // Due to the PS3 being ALU bound,\",\n\t\t\" // there are only three safe values here: 2 and 4 and 8.\",\n\t\t\" // These options use the shaders ability to a free *|/ by 2|4|8.\",\n\t\t\" // For all other platforms can be a non-power of two.\",\n\t\t\" // 8.0 is sharper (default!!!)\",\n\t\t\" // 4.0 is softer\",\n\t\t\" // 2.0 is really soft (good only for vector graphics inputs)\",\n\t\t\" FxaaFloat fxaaConsoleEdgeSharpness,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Console.\",\n\t\t\" // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\",\n\t\t\" // It is here now to allow easier tuning.\",\n\t\t\" // This does not effect PS3, as this needs to be compiled in.\",\n\t\t\" // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\",\n\t\t\" // Due to the PS3 being ALU bound,\",\n\t\t\" // there are only two safe values here: 1/4 and 1/8.\",\n\t\t\" // These options use the shaders ability to a free *|/ by 2|4|8.\",\n\t\t\" // The console setting has a different mapping than the quality setting.\",\n\t\t\" // Other platforms can use other values.\",\n\t\t\" // 0.125 leaves less aliasing, but is softer (default!!!)\",\n\t\t\" // 0.25 leaves more aliasing, and is sharper\",\n\t\t\" FxaaFloat fxaaConsoleEdgeThreshold,\",\n\t\t\" //\",\n\t\t\" // Only used on FXAA Console.\",\n\t\t\" // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\",\n\t\t\" // It is here now to allow easier tuning.\",\n\t\t\" // Trims the algorithm from processing darks.\",\n\t\t\" // The console setting has a different mapping than the quality setting.\",\n\t\t\" // This only applies when FXAA_EARLY_EXIT is 1.\",\n\t\t\" // This does not apply to PS3,\",\n\t\t\" // PS3 was simplified to avoid more shader instructions.\",\n\t\t\" // 0.06 - faster but more aliasing in darks\",\n\t\t\" // 0.05 - default\",\n\t\t\" // 0.04 - slower and less aliasing in darks\",\n\t\t\" // Special notes when using FXAA_GREEN_AS_LUMA,\",\n\t\t\" // Likely want to set this to zero.\",\n\t\t\" // As colors that are mostly not-green\",\n\t\t\" // will appear very dark in the green channel!\",\n\t\t\" // Tune by looking at mostly non-green content,\",\n\t\t\" // then start at zero and increase until aliasing is a problem.\",\n\t\t\" FxaaFloat fxaaConsoleEdgeThresholdMin,\",\n\t\t\" //\",\n\t\t\" // Extra constants for 360 FXAA Console only.\",\n\t\t\" // Use zeros or anything else for other platforms.\",\n\t\t\" // These must be in physical constant registers and NOT immediates.\",\n\t\t\" // Immediates will result in compiler un-optimizing.\",\n\t\t\" // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\",\n\t\t\" FxaaFloat4 fxaaConsole360ConstDir\",\n\t\t\") {\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat2 posM;\",\n\t\t\" posM.x = pos.x;\",\n\t\t\" posM.y = pos.y;\",\n\t\t\" #if (FXAA_GATHER4_ALPHA == 1)\",\n\t\t\" #if (FXAA_DISCARD == 0)\",\n\t\t\" FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\",\n\t\t\" #if (FXAA_GREEN_AS_LUMA == 0)\",\n\t\t\" #define lumaM rgbyM.w\",\n\t\t\" #else\",\n\t\t\" #define lumaM rgbyM.y\",\n\t\t\" #endif\",\n\t\t\" #endif\",\n\t\t\" #if (FXAA_GREEN_AS_LUMA == 0)\",\n\t\t\" FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\",\n\t\t\" FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\",\n\t\t\" #else\",\n\t\t\" FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\",\n\t\t\" FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\",\n\t\t\" #endif\",\n\t\t\" #if (FXAA_DISCARD == 1)\",\n\t\t\" #define lumaM luma4A.w\",\n\t\t\" #endif\",\n\t\t\" #define lumaE luma4A.z\",\n\t\t\" #define lumaS luma4A.x\",\n\t\t\" #define lumaSE luma4A.y\",\n\t\t\" #define lumaNW luma4B.w\",\n\t\t\" #define lumaN luma4B.z\",\n\t\t\" #define lumaW luma4B.x\",\n\t\t\" #else\",\n\t\t\" FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\",\n\t\t\" #if (FXAA_GREEN_AS_LUMA == 0)\",\n\t\t\" #define lumaM rgbyM.w\",\n\t\t\" #else\",\n\t\t\" #define lumaM rgbyM.y\",\n\t\t\" #endif\",\n\t\t\" #if (FXAA_GLSL_100 == 1)\",\n\t\t\" FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" #else\",\n\t\t\" FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\",\n\t\t\" #endif\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat maxSM = max(lumaS, lumaM);\",\n\t\t\" FxaaFloat minSM = min(lumaS, lumaM);\",\n\t\t\" FxaaFloat maxESM = max(lumaE, maxSM);\",\n\t\t\" FxaaFloat minESM = min(lumaE, minSM);\",\n\t\t\" FxaaFloat maxWN = max(lumaN, lumaW);\",\n\t\t\" FxaaFloat minWN = min(lumaN, lumaW);\",\n\t\t\" FxaaFloat rangeMax = max(maxWN, maxESM);\",\n\t\t\" FxaaFloat rangeMin = min(minWN, minESM);\",\n\t\t\" FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\",\n\t\t\" FxaaFloat range = rangeMax - rangeMin;\",\n\t\t\" FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\",\n\t\t\" FxaaBool earlyExit = range < rangeMaxClamped;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" if(earlyExit)\",\n\t\t\" #if (FXAA_DISCARD == 1)\",\n\t\t\" FxaaDiscard;\",\n\t\t\" #else\",\n\t\t\" return rgbyM;\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_GATHER4_ALPHA == 0)\",\n\t\t\" #if (FXAA_GLSL_100 == 1)\",\n\t\t\" FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\",\n\t\t\" #else\",\n\t\t\" FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\",\n\t\t\" #endif\",\n\t\t\" #else\",\n\t\t\" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\",\n\t\t\" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat lumaNS = lumaN + lumaS;\",\n\t\t\" FxaaFloat lumaWE = lumaW + lumaE;\",\n\t\t\" FxaaFloat subpixRcpRange = 1.0/range;\",\n\t\t\" FxaaFloat subpixNSWE = lumaNS + lumaWE;\",\n\t\t\" FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\",\n\t\t\" FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat lumaNESE = lumaNE + lumaSE;\",\n\t\t\" FxaaFloat lumaNWNE = lumaNW + lumaNE;\",\n\t\t\" FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\",\n\t\t\" FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat lumaNWSW = lumaNW + lumaSW;\",\n\t\t\" FxaaFloat lumaSWSE = lumaSW + lumaSE;\",\n\t\t\" FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\",\n\t\t\" FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\",\n\t\t\" FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\",\n\t\t\" FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\",\n\t\t\" FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\",\n\t\t\" FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\",\n\t\t\" FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\",\n\t\t\" FxaaBool horzSpan = edgeHorz >= edgeVert;\",\n\t\t\" FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" if(!horzSpan) lumaN = lumaW;\",\n\t\t\" if(!horzSpan) lumaS = lumaE;\",\n\t\t\" if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\",\n\t\t\" FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat gradientN = lumaN - lumaM;\",\n\t\t\" FxaaFloat gradientS = lumaS - lumaM;\",\n\t\t\" FxaaFloat lumaNN = lumaN + lumaM;\",\n\t\t\" FxaaFloat lumaSS = lumaS + lumaM;\",\n\t\t\" FxaaBool pairN = abs(gradientN) >= abs(gradientS);\",\n\t\t\" FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\",\n\t\t\" if(pairN) lengthSign = -lengthSign;\",\n\t\t\" FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat2 posB;\",\n\t\t\" posB.x = posM.x;\",\n\t\t\" posB.y = posM.y;\",\n\t\t\" FxaaFloat2 offNP;\",\n\t\t\" offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\",\n\t\t\" offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\",\n\t\t\" if(!horzSpan) posB.x += lengthSign * 0.5;\",\n\t\t\" if( horzSpan) posB.y += lengthSign * 0.5;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat2 posN;\",\n\t\t\" posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\",\n\t\t\" posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\",\n\t\t\" FxaaFloat2 posP;\",\n\t\t\" posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\",\n\t\t\" posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\",\n\t\t\" FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\",\n\t\t\" FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\",\n\t\t\" FxaaFloat subpixE = subpixC * subpixC;\",\n\t\t\" FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" if(!pairN) lumaNN = lumaSS;\",\n\t\t\" FxaaFloat gradientScaled = gradient * 1.0/4.0;\",\n\t\t\" FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\",\n\t\t\" FxaaFloat subpixF = subpixD * subpixE;\",\n\t\t\" FxaaBool lumaMLTZero = lumaMM < 0.0;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" lumaEndN -= lumaNN * 0.5;\",\n\t\t\" lumaEndP -= lumaNN * 0.5;\",\n\t\t\" FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\",\n\t\t\" FxaaBool doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 3)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 4)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 5)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 6)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 7)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 8)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 9)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 10)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 11)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" #if (FXAA_QUALITY_PS > 12)\",\n\t\t\" if(doneNP) {\",\n\t\t\" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n\t\t\" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n\t\t\" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n\t\t\" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n\t\t\" doneN = abs(lumaEndN) >= gradientScaled;\",\n\t\t\" doneP = abs(lumaEndP) >= gradientScaled;\",\n\t\t\" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\",\n\t\t\" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\",\n\t\t\" doneNP = (!doneN) || (!doneP);\",\n\t\t\" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\",\n\t\t\" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\" #endif\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" }\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat dstN = posM.x - posN.x;\",\n\t\t\" FxaaFloat dstP = posP.x - posM.x;\",\n\t\t\" if(!horzSpan) dstN = posM.y - posN.y;\",\n\t\t\" if(!horzSpan) dstP = posP.y - posM.y;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\",\n\t\t\" FxaaFloat spanLength = (dstP + dstN);\",\n\t\t\" FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\",\n\t\t\" FxaaFloat spanLengthRcp = 1.0/spanLength;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaBool directionN = dstN < dstP;\",\n\t\t\" FxaaFloat dst = min(dstN, dstP);\",\n\t\t\" FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\",\n\t\t\" FxaaFloat subpixG = subpixF * subpixF;\",\n\t\t\" FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\",\n\t\t\" FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\",\n\t\t\"/*--------------------------------------------------------------------------*/\",\n\t\t\" FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\",\n\t\t\" FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\",\n\t\t\" if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\",\n\t\t\" if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\",\n\t\t\" #if (FXAA_DISCARD == 1)\",\n\t\t\" return FxaaTexTop(tex, posM);\",\n\t\t\" #else\",\n\t\t\" return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\",\n\t\t\" #endif\",\n\t\t\"}\",\n\t\t\"/*==========================================================================*/\",\n\t\t\"#endif\",\n\t\t\"\",\n\t\t\"void main() {\",\n\t\t\" gl_FragColor = FxaaPixelShader(\",\n\t\t\" vUv,\",\n\t\t\" vec4(0.0),\",\n\t\t\" tDiffuse,\",\n\t\t\" tDiffuse,\",\n\t\t\" tDiffuse,\",\n\t\t\" resolution,\",\n\t\t\" vec4(0.0),\",\n\t\t\" vec4(0.0),\",\n\t\t\" vec4(0.0),\",\n\t\t\" 0.75,\",\n\t\t\" 0.166,\",\n\t\t\" 0.0833,\",\n\t\t\" 0.0,\",\n\t\t\" 0.0,\",\n\t\t\" 0.0,\",\n\t\t\" vec4(0.0)\",\n\t\t\" );\",\n\t\t\"\",\n\t\t\" // TODO avoid querying texture twice for same texel\",\n\t\t\" gl_FragColor.a = texture2D(tDiffuse, vUv).a;\",\n\t\t\"}\"\n\t].join( \"\\n\" )\n\n};\n\nexport { FXAAShader };"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}
|