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