1/* 2---------------------------------------------------------------- 3MMJ's Cel Shader v2.01 - Multi-Pass 4---------------------------------------------------------------- 5Based on the original blur-gauss-h shader code. 6 7Used to blur the outlines, which is helpful at higher internal 8resolution settings to increase the line thickness. 9 10Parameters: 11----------- 12Blur Weight - Horizontal = Adjusts horizontal blur factor. 13---------------------------------------------------------------- 14*/ 15 16#pragma parameter BlurWeightH "Blur Weight - Horizontal" 0.0 0.0 16.0 1.0 17 18 19#if defined(VERTEX) 20 21#if __VERSION__ >= 130 22#define COMPAT_VARYING out 23#define COMPAT_ATTRIBUTE in 24#define COMPAT_TEXTURE texture 25#else 26#define COMPAT_VARYING varying 27#define COMPAT_ATTRIBUTE attribute 28#define COMPAT_TEXTURE texture2D 29#endif 30 31#ifdef GL_ES 32#define COMPAT_PRECISION mediump 33#else 34#define COMPAT_PRECISION 35#endif 36 37COMPAT_ATTRIBUTE vec4 VertexCoord; 38COMPAT_ATTRIBUTE vec4 TexCoord; 39COMPAT_VARYING vec4 TEX0; 40 41uniform mat4 MVPMatrix; 42uniform COMPAT_PRECISION vec2 OutputSize; 43uniform COMPAT_PRECISION vec2 TextureSize; 44 45// compatibility #defines 46#define vTexCoord TEX0.xy 47#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 48#define OutSize vec4(OutputSize, 1.0 / OutputSize) 49 50void main() 51{ 52 gl_Position = MVPMatrix * VertexCoord; 53 TEX0 = TexCoord; 54} 55 56 57#elif defined(FRAGMENT) 58 59#if __VERSION__ >= 130 60#define COMPAT_VARYING in 61#define COMPAT_TEXTURE texture 62out vec4 FragColor; 63#else 64#define COMPAT_VARYING varying 65#define FragColor gl_FragColor 66#define COMPAT_TEXTURE texture2D 67#endif 68 69#ifdef GL_ES 70#ifdef GL_FRAGMENT_PRECISION_HIGH 71precision highp float; 72#else 73precision mediump float; 74#endif 75#define COMPAT_PRECISION mediump 76#else 77#define COMPAT_PRECISION 78#endif 79 80uniform COMPAT_PRECISION vec2 OutputSize; 81uniform COMPAT_PRECISION vec2 TextureSize; 82uniform sampler2D Texture; 83COMPAT_VARYING vec4 TEX0; 84 85// compatibility #defines 86#define Source Texture 87#define vTexCoord TEX0.xy 88 89#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 90#define OutSize vec4(OutputSize, 1.0 / OutputSize) 91 92#ifdef PARAMETER_UNIFORM 93uniform COMPAT_PRECISION float BlurWeightH; 94#else 95#define BlurWeightH 0.0 96#endif 97 98void main() 99{ 100 vec2 PIXEL_SIZE = SourceSize.zw; 101 vec4 C = COMPAT_TEXTURE(Source, vTexCoord); 102 float L = 0.0, J = 0.0; 103 for(int i = 1; i <= int(BlurWeightH); ++i) { 104 L = 1.0 / i; 105 J = 0.5 * i * PIXEL_SIZE.x; 106 C = mix(C, mix(COMPAT_TEXTURE(Source, vTexCoord + vec2(J, 0.0)), COMPAT_TEXTURE(Source, vTexCoord - vec2(J, 0.0)), 0.5), L); 107 } 108 FragColor = C; 109} 110#endif