1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include "../../shaders/common/core.h"
/*uniforms*/
#define _frag_tex UTEX(0)
#define _bright_tex UTEX(1)
/*varyings*/
#define _texcoord reg_v2_00
static float weight[5] = { 0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162 };
static void vert( Vertex* in, Vec4* clipcoord) {
clipcoord->xyz = in->position;
clipcoord->w = 1;
*_texcoord = in->texcoord;
}
static bool frag( Color32* color) {
float off = 1 / 600.f;
//blur
*color = tex2d(_frag_tex, _texcoord);
internal_vec4_scale(color, weight[0], color);
Vec2 p = {0, _texcoord->y};
Color32 c;
for (int i = 1; i < 5; ++i) {
p.x = _texcoord->x + off * i;
c = tex2d(_frag_tex, &p);
internal_vec4_scale(&c, weight[i], &c);
internal_vec4_add(color, &c, color);
p.x = _texcoord->x - off * i;
c = tex2d(_frag_tex, &p);
internal_vec4_scale(&c, weight[i], &c);
internal_vec4_add(color, &c, color);
}
return 1;
}
Program _04_bloom_postprocess = {
vert, frag,
VARYING_V2_00
};
|