blob: 845814b01de2dd40545b6e838a6136b085bdb802 [file] [log] [blame]
Brian Osman7c979f52019-02-12 13:27:51 -05001{
2 "MaxCount": 4096,
Brian Osman8b6283f2019-02-14 16:55:21 -05003 "Duration": 1,
Brian Osman7c979f52019-02-12 13:27:51 -05004 "Rate": 90,
Brian Osman543d2e22019-02-15 14:29:38 -05005 "Drawable": {
6 "Type": "SkCircleDrawable",
7 "Radius": 2
Brian Osman7c979f52019-02-12 13:27:51 -05008 },
Brian Osmane59acb72019-07-25 16:58:46 -04009 "Code": [
Brian Osmand6108ad2019-07-25 16:27:35 -040010 "",
11 "// float rand; Every read returns a random float [0 .. 1)",
12 "layout(ctype=float) in uniform float dt;",
13 "layout(ctype=float) in uniform float effectAge;",
14 "",
15 "struct Particle {",
16 " float age;",
17 " float lifetime;",
18 " float2 pos;",
19 " float2 dir;",
20 " float scale;",
21 " float2 vel;",
22 " float spin;",
23 " float4 color;",
24 " float frame;",
25 "};",
26 "",
27 "float2 circle() {",
28 " float x;",
29 " float y;",
30 " do {",
31 " x = rand * 2 - 1;",
32 " y = rand * 2 - 1;",
33 " } while (x*x + y*y > 1);",
34 " return float2(x, y);",
35 "}",
36 "",
Brian Osmane59acb72019-07-25 16:58:46 -040037 "void spawn(inout Particle p) {",
Brian Osmand6108ad2019-07-25 16:27:35 -040038 " p.lifetime = 30;",
39 " p.pos = circle() * 40;",
40 "}",
Brian Osmand6108ad2019-07-25 16:27:35 -040041 "",
Brian Osmane59acb72019-07-25 16:58:46 -040042 "void update(inout Particle p) {",
Brian Osmand6108ad2019-07-25 16:27:35 -040043 " p.vel += normalize(p.pos) * dt * 10;",
44 " p.scale = mix(0.25, 3, p.age);",
45 "}",
46 ""
47 ],
Brian Osmanfe491632019-07-25 15:14:50 -040048 "Bindings": []
Brian Osman7c979f52019-02-12 13:27:51 -050049}