| 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 |
| 10 | uniform vs_params_i { |
| 11 | mat4 mvp; |
| 12 | }; |
| 13 | |
| 14 | in vec4 pos; |
| 15 | in vec4 color0; |
| 16 | in vec2 texcoord0; |
| 17 | |
| 18 | in vec4 inst_pos; |
| 19 | |
| 20 | out vec4 color; |
| 21 | out vec4 color_inst; |
| 22 | out vec2 uv; |
| 23 | |
| 24 | const 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 | |
| 37 | void 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 |
| 48 | uniform texture2D tex; |
| 49 | uniform sampler smp; |
| 50 | |
| 51 | in vec4 color; |
| 52 | in vec4 color_inst; |
| 53 | in vec2 uv; |
| 54 | out vec4 frag_color; |
| 55 | |
| 56 | void 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 | |