summaryrefslogtreecommitdiff
path: root/src/example/04_bloom/postprocess.c
blob: 1d476d0159ee97cd7bce26a2f8076fe56c4277a8 (plain)
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
};