v / examples / sokol / 05_instancing_glsl / rt_glsl_instancing.glsl
65 lines · 54 sloc · 1.24 KB · 3c68e78f32d95e0552f6fa496ed245c1304731d5
Raw
1//------------------------------------------------------------------------------
2// Shader code for texcube-sapp sample.
3//
4// NOTE: This source file also uses the '#pragma sokol' form of the
5// custom tags.
6//------------------------------------------------------------------------------
7//#pragma sokol @ctype mat4 hmm_mat4
8
9#pragma sokol @vs vs_i
10uniform vs_params_i {
11 mat4 mvp;
12};
13
14in vec4 pos;
15in vec4 color0;
16in vec2 texcoord0;
17
18in vec4 inst_pos;
19
20out vec4 color;
21out vec4 color_inst;
22out vec2 uv;
23
24const vec4 palette[10] = vec4[10](
25 vec4(1,0,0,1),
26 vec4(0,1,0,1),
27 vec4(0,0,1,1),
28 vec4(1,1,0,1),
29 vec4(0,1,1,1),
30 vec4(1,1,1,1),
31 vec4(0,0,0,1),
32 vec4(0.2,0.2,0.2,1),
33 vec4(0.3,0.3,0.3,1),
34 vec4(0.9,0.9,0.9,1)
35);
36
37void main() {
38 vec4 delta_pos = vec4(inst_pos.xyz,0);
39 float w = inst_pos.w;
40 color_inst = palette[int(w)];
41 gl_Position = mvp * (pos + delta_pos);
42 color = color0;
43 uv = texcoord0/4;
44}
45#pragma sokol @end
46
47#pragma sokol @fs fs_i
48uniform texture2D tex;
49uniform sampler smp;
50
51in vec4 color;
52in vec4 color_inst;
53in vec2 uv;
54out vec4 frag_color;
55
56void main() {
57 vec4 c = color;
58 vec4 txt = texture(sampler2D(tex, smp), uv);
59 c = txt * c * color_inst;
60 frag_color = c ;
61}
62
63#pragma sokol @end
64
65#pragma sokol @program instancing vs_i fs_i
66