mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 00:54:54 +00:00
Full Template for ticket #1
This commit is contained in:
parent
74f265b3b3
commit
f439dc8dcd
2150 changed files with 286240 additions and 0 deletions
|
|
@ -0,0 +1,78 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// An implementation of "Practical Morphological Anti-Aliasing" from
|
||||
// GPU Pro 2 by Jorge Jimenez, Belen Masia, Jose I. Echevarria,
|
||||
// Fernando Navarro, and Diego Gutierrez.
|
||||
//
|
||||
// http://www.iryoku.com/mlaa/
|
||||
|
||||
|
||||
uniform sampler2D edgesMap : register(S0);
|
||||
uniform sampler2D edgesMapL : register(S1);
|
||||
uniform sampler2D areaMap : register(S2);
|
||||
|
||||
#include "./functions.hlsl"
|
||||
|
||||
|
||||
float4 main(float2 texcoord : TEXCOORD0) : COLOR0
|
||||
{
|
||||
float4 areas = 0.0;
|
||||
|
||||
float2 e = tex2D(edgesMap, texcoord).rg;
|
||||
|
||||
[branch]
|
||||
if (e.g) // Edge at north
|
||||
{
|
||||
// Search distances to the left and to the right:
|
||||
float2 d = float2(SearchXLeft(texcoord), SearchXRight(texcoord));
|
||||
|
||||
// Now fetch the crossing edges. Instead of sampling between edgels, we
|
||||
// sample at -0.25, to be able to discern what value has each edgel:
|
||||
float4 coords = mad(float4(d.x, -0.25, d.y + 1.0, -0.25),
|
||||
PIXEL_SIZE.xyxy, texcoord.xyxy);
|
||||
float e1 = tex2Dlevel0(edgesMapL, coords.xy).r;
|
||||
float e2 = tex2Dlevel0(edgesMapL, coords.zw).r;
|
||||
|
||||
// Ok, we know how this pattern looks like, now it is time for getting
|
||||
// the actual area:
|
||||
areas.rg = Area(abs(d), e1, e2);
|
||||
}
|
||||
|
||||
[branch]
|
||||
if (e.r) // Edge at west
|
||||
{
|
||||
// Search distances to the top and to the bottom:
|
||||
float2 d = float2(SearchYUp(texcoord), SearchYDown(texcoord));
|
||||
|
||||
// Now fetch the crossing edges (yet again):
|
||||
float4 coords = mad(float4(-0.25, d.x, -0.25, d.y + 1.0),
|
||||
PIXEL_SIZE.xyxy, texcoord.xyxy);
|
||||
float e1 = tex2Dlevel0(edgesMapL, coords.xy).g;
|
||||
float e2 = tex2Dlevel0(edgesMapL, coords.zw).g;
|
||||
|
||||
// Get the area for this direction:
|
||||
areas.ba = Area(abs(d), e1, e2);
|
||||
}
|
||||
|
||||
return areas;
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// An implementation of "Practical Morphological Anti-Aliasing" from
|
||||
// GPU Pro 2 by Jorge Jimenez, Belen Masia, Jose I. Echevarria,
|
||||
// Fernando Navarro, and Diego Gutierrez.
|
||||
//
|
||||
// http://www.iryoku.com/mlaa/
|
||||
|
||||
#include "shadergen:/autogenConditioners.h"
|
||||
|
||||
uniform sampler2D colorMapG : register(S0);
|
||||
uniform sampler2D prepassMap : register(S1);
|
||||
|
||||
uniform float3 lumaCoefficients;
|
||||
uniform float threshold;
|
||||
uniform float depthThreshold;
|
||||
|
||||
|
||||
float4 main( float2 texcoord : TEXCOORD0,
|
||||
float4 offset[2]: TEXCOORD1) : COLOR0
|
||||
{
|
||||
// Luma calculation requires gamma-corrected colors (texture 'colorMapG').
|
||||
//
|
||||
// Note that there is a lot of overlapped luma calculations; performance
|
||||
// can be improved if this luma calculation is performed in the main pass,
|
||||
// which may give you an edge if used in conjunction with a z prepass.
|
||||
|
||||
float L = dot(tex2D(colorMapG, texcoord).rgb, lumaCoefficients);
|
||||
|
||||
float Lleft = dot(tex2D(colorMapG, offset[0].xy).rgb, lumaCoefficients);
|
||||
float Ltop = dot(tex2D(colorMapG, offset[0].zw).rgb, lumaCoefficients);
|
||||
float Lright = dot(tex2D(colorMapG, offset[1].xy).rgb, lumaCoefficients);
|
||||
float Lbottom = dot(tex2D(colorMapG, offset[1].zw).rgb, lumaCoefficients);
|
||||
|
||||
float4 delta = abs(L.xxxx - float4(Lleft, Ltop, Lright, Lbottom));
|
||||
float4 edges = step(threshold, delta);
|
||||
|
||||
// Add depth edges to color edges
|
||||
float D = prepassUncondition(prepassMap, texcoord).w;
|
||||
float Dleft = prepassUncondition(prepassMap, offset[0].xy).w;
|
||||
float Dtop = prepassUncondition(prepassMap, offset[0].zw).w;
|
||||
float Dright = prepassUncondition(prepassMap, offset[1].xy).w;
|
||||
float Dbottom = prepassUncondition(prepassMap, offset[1].zw).w;
|
||||
|
||||
delta = abs(D.xxxx - float4(Dleft, Dtop, Dright, Dbottom));
|
||||
edges += step(depthThreshold, delta);
|
||||
|
||||
if (dot(edges, 1.0) == 0.0)
|
||||
discard;
|
||||
|
||||
return edges;
|
||||
}
|
||||
145
Templates/Full/game/shaders/common/postFx/mlaa/functions.hlsl
Normal file
145
Templates/Full/game/shaders/common/postFx/mlaa/functions.hlsl
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// An implementation of "Practical Morphological Anti-Aliasing" from
|
||||
// GPU Pro 2 by Jorge Jimenez, Belen Masia, Jose I. Echevarria,
|
||||
// Fernando Navarro, and Diego Gutierrez.
|
||||
//
|
||||
// http://www.iryoku.com/mlaa/
|
||||
|
||||
|
||||
uniform float2 texSize0;
|
||||
|
||||
#if !defined(PIXEL_SIZE)
|
||||
#define PIXEL_SIZE (1.0 / texSize0)
|
||||
#define MAX_SEARCH_STEPS 8
|
||||
#define MAX_DISTANCE 33
|
||||
#endif
|
||||
|
||||
// Typical Multiply-Add operation to ease translation to assembly code.
|
||||
|
||||
float4 mad(float4 m, float4 a, float4 b)
|
||||
{
|
||||
#if defined(XBOX)
|
||||
float4 result;
|
||||
asm {
|
||||
mad result, m, a, b
|
||||
};
|
||||
return result;
|
||||
#else
|
||||
return m * a + b;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// This one just returns the first level of a mip map chain, which allow us to
|
||||
// avoid the nasty ddx/ddy warnings, even improving the performance a little
|
||||
// bit.
|
||||
float4 tex2Dlevel0(sampler2D map, float2 texcoord)
|
||||
{
|
||||
return tex2Dlod(map, float4(texcoord, 0.0, 0.0));
|
||||
}
|
||||
|
||||
|
||||
// Same as above, this eases translation to assembly code;
|
||||
float4 tex2Doffset(sampler2D map, float2 texcoord, float2 offset)
|
||||
{
|
||||
#if defined(XBOX) && MAX_SEARCH_STEPS < 6
|
||||
float4 result;
|
||||
float x = offset.x;
|
||||
float y = offset.y;
|
||||
asm {
|
||||
tfetch2D result, texcoord, map, OffsetX = x, OffsetY = y
|
||||
};
|
||||
return result;
|
||||
#else
|
||||
return tex2Dlevel0(map, texcoord + PIXEL_SIZE * offset);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Ok, we have the distance and both crossing edges, can you please return
|
||||
// the float2 blending weights?
|
||||
float2 Area(float2 distance, float e1, float e2)
|
||||
{
|
||||
// * By dividing by areaSize - 1.0 below we are implicitely offsetting to
|
||||
// always fall inside of a pixel
|
||||
// * Rounding prevents bilinear access precision problems
|
||||
float areaSize = MAX_DISTANCE * 5.0;
|
||||
float2 pixcoord = MAX_DISTANCE * round(4.0 * float2(e1, e2)) + distance;
|
||||
float2 texcoord = pixcoord / (areaSize - 1.0);
|
||||
return tex2Dlevel0(areaMap, texcoord).rg;
|
||||
}
|
||||
|
||||
|
||||
// Search functions for the 2nd pass.
|
||||
float SearchXLeft(float2 texcoord)
|
||||
{
|
||||
// We compare with 0.9 to prevent bilinear access precision problems.
|
||||
float i;
|
||||
float e = 0.0;
|
||||
for (i = -1.5; i > -2.0 * MAX_SEARCH_STEPS; i -= 2.0)
|
||||
{
|
||||
e = tex2Doffset(edgesMapL, texcoord, float2(i, 0.0)).g;
|
||||
[flatten] if (e < 0.9) break;
|
||||
}
|
||||
return max(i + 1.5 - 2.0 * e, -2.0 * MAX_SEARCH_STEPS);
|
||||
}
|
||||
|
||||
// Search functions for the 2nd pass.
|
||||
float SearchXRight(float2 texcoord)
|
||||
{
|
||||
float i;
|
||||
float e = 0.0;
|
||||
for (i = 1.5; i < 2.0 * MAX_SEARCH_STEPS; i += 2.0)
|
||||
{
|
||||
e = tex2Doffset(edgesMapL, texcoord, float2(i, 0.0)).g;
|
||||
[flatten] if (e < 0.9) break;
|
||||
}
|
||||
return min(i - 1.5 + 2.0 * e, 2.0 * MAX_SEARCH_STEPS);
|
||||
}
|
||||
|
||||
// Search functions for the 2nd pass.
|
||||
float SearchYUp(float2 texcoord)
|
||||
{
|
||||
float i;
|
||||
float e = 0.0;
|
||||
for (i = -1.5; i > -2.0 * MAX_SEARCH_STEPS; i -= 2.0)
|
||||
{
|
||||
e = tex2Doffset(edgesMapL, texcoord, float2(i, 0.0).yx).r;
|
||||
[flatten] if (e < 0.9) break;
|
||||
}
|
||||
return max(i + 1.5 - 2.0 * e, -2.0 * MAX_SEARCH_STEPS);
|
||||
}
|
||||
|
||||
// Search functions for the 2nd pass.
|
||||
float SearchYDown(float2 texcoord)
|
||||
{
|
||||
float i;
|
||||
float e = 0.0;
|
||||
for (i = 1.5; i < 2.0 * MAX_SEARCH_STEPS; i += 2.0)
|
||||
{
|
||||
e = tex2Doffset(edgesMapL, texcoord, float2(i, 0.0).yx).r;
|
||||
[flatten] if (e < 0.9) break;
|
||||
}
|
||||
return min(i - 1.5 + 2.0 * e, 2.0 * MAX_SEARCH_STEPS);
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// An implementation of "Practical Morphological Anti-Aliasing" from
|
||||
// GPU Pro 2 by Jorge Jimenez, Belen Masia, Jose I. Echevarria,
|
||||
// Fernando Navarro, and Diego Gutierrez.
|
||||
//
|
||||
// http://www.iryoku.com/mlaa/
|
||||
|
||||
|
||||
uniform sampler2D blendMap : register(S0);
|
||||
uniform sampler2D colorMapL : register(S1);
|
||||
uniform sampler2D colorMap : register(S2);
|
||||
|
||||
// Dummy sampers to please include.
|
||||
sampler2D areaMap;
|
||||
sampler2D edgesMapL;
|
||||
#include "./functions.hlsl"
|
||||
|
||||
|
||||
float4 main( float2 texcoord : TEXCOORD0,
|
||||
float4 offset[2]: TEXCOORD1 ) : COLOR0
|
||||
{
|
||||
// Fetch the blending weights for current pixel:
|
||||
float4 topLeft = tex2D(blendMap, texcoord);
|
||||
float bottom = tex2D(blendMap, offset[1].zw).g;
|
||||
float right = tex2D(blendMap, offset[1].xy).a;
|
||||
float4 a = float4(topLeft.r, bottom, topLeft.b, right);
|
||||
|
||||
// Up to 4 lines can be crossing a pixel (one in each edge). So, we perform
|
||||
// a weighted average, where the weight of each line is 'a' cubed, which
|
||||
// favors blending and works well in practice.
|
||||
float4 w = a * a * a;
|
||||
|
||||
// There is some blending weight with a value greater than 0.0?
|
||||
float sum = dot(w, 1.0);
|
||||
if (sum < 1e-5)
|
||||
discard;
|
||||
|
||||
float4 color = 0.0;
|
||||
|
||||
// Add the contributions of the possible 4 lines that can cross this pixel:
|
||||
#ifdef BILINEAR_FILTER_TRICK
|
||||
float4 coords = mad(float4( 0.0, -a.r, 0.0, a.g), PIXEL_SIZE.yyyy, texcoord.xyxy);
|
||||
color = mad(tex2D(colorMapL, coords.xy), w.r, color);
|
||||
color = mad(tex2D(colorMapL, coords.zw), w.g, color);
|
||||
|
||||
coords = mad(float4(-a.b, 0.0, a.a, 0.0), PIXEL_SIZE.xxxx, texcoord.xyxy);
|
||||
color = mad(tex2D(colorMapL, coords.xy), w.b, color);
|
||||
color = mad(tex2D(colorMapL, coords.zw), w.a, color);
|
||||
#else
|
||||
float4 C = tex2D(colorMap, texcoord);
|
||||
float4 Cleft = tex2D(colorMap, offset[0].xy);
|
||||
float4 Ctop = tex2D(colorMap, offset[0].zw);
|
||||
float4 Cright = tex2D(colorMap, offset[1].xy);
|
||||
float4 Cbottom = tex2D(colorMap, offset[1].zw);
|
||||
color = mad(lerp(C, Ctop, a.r), w.r, color);
|
||||
color = mad(lerp(C, Cbottom, a.g), w.g, color);
|
||||
color = mad(lerp(C, Cleft, a.b), w.b, color);
|
||||
color = mad(lerp(C, Cright, a.a), w.a, color);
|
||||
#endif
|
||||
|
||||
// Normalize the resulting color and we are finished!
|
||||
return color / sum;
|
||||
}
|
||||
42
Templates/Full/game/shaders/common/postFx/mlaa/offsetV.hlsl
Normal file
42
Templates/Full/game/shaders/common/postFx/mlaa/offsetV.hlsl
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// An implementation of "Practical Morphological Anti-Aliasing" from
|
||||
// GPU Pro 2 by Jorge Jimenez, Belen Masia, Jose I. Echevarria,
|
||||
// Fernando Navarro, and Diego Gutierrez.
|
||||
//
|
||||
// http://www.iryoku.com/mlaa/
|
||||
|
||||
|
||||
uniform float2 texSize0;
|
||||
|
||||
void main( inout float4 position : POSITION0,
|
||||
inout float2 texcoord : TEXCOORD0,
|
||||
out float4 offset[2] : TEXCOORD1 )
|
||||
{
|
||||
float2 PIXEL_SIZE = 1.0 / texSize0;
|
||||
|
||||
texcoord.xy += PIXEL_SIZE * 0.5;
|
||||
|
||||
offset[0] = texcoord.xyxy + PIXEL_SIZE.xyxy * float4(-1.0, 0.0, 0.0, -1.0);
|
||||
offset[1] = texcoord.xyxy + PIXEL_SIZE.xyxy * float4( 1.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// An implementation of "Practical Morphological Anti-Aliasing" from
|
||||
// GPU Pro 2 by Jorge Jimenez, Belen Masia, Jose I. Echevarria,
|
||||
// Fernando Navarro, and Diego Gutierrez.
|
||||
//
|
||||
// http://www.iryoku.com/mlaa/
|
||||
|
||||
|
||||
uniform float2 texSize0;
|
||||
|
||||
void main( inout float4 position : POSITION0,
|
||||
inout float2 texcoord : TEXCOORD0)
|
||||
{
|
||||
float2 PIXEL_SIZE = 1.0 / texSize0;
|
||||
texcoord.xy += PIXEL_SIZE * 0.5;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue