phoria2 1.0.0-rc.3 → 1.0.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +9 -7
  2. package/dist/bloom.js +123 -0
  3. package/dist/bloom.js.map +1 -0
  4. package/dist/charts.js +426 -420
  5. package/dist/charts.js.map +1 -1
  6. package/dist/core.js +3447 -2292
  7. package/dist/core.js.map +1 -1
  8. package/dist/edit.js +280 -0
  9. package/dist/edit.js.map +1 -0
  10. package/dist/explain.js +2 -2
  11. package/dist/explain.js.map +1 -1
  12. package/dist/gltf.js +113 -113
  13. package/dist/gltf.js.map +1 -1
  14. package/dist/motion.js +61 -59
  15. package/dist/motion.js.map +1 -1
  16. package/dist/particles.js +55 -51
  17. package/dist/particles.js.map +1 -1
  18. package/dist/passes.js +200 -46
  19. package/dist/passes.js.map +1 -1
  20. package/dist/phoria2.js +1 -1
  21. package/dist/picking.js +60 -53
  22. package/dist/picking.js.map +1 -1
  23. package/dist/snapshot.js +27 -14
  24. package/dist/snapshot.js.map +1 -1
  25. package/dist/tooltip.js +3 -3
  26. package/dist/tooltip.js.map +1 -1
  27. package/dist/types/OrbitControl.d.ts +17 -0
  28. package/dist/types/Raycaster.d.ts +4 -0
  29. package/dist/types/View.d.ts +74 -2
  30. package/dist/types/charts/spec.d.ts +32 -0
  31. package/dist/types/clip.d.ts +66 -0
  32. package/dist/types/edit/History.d.ts +78 -0
  33. package/dist/types/edit/TransformHandle.d.ts +113 -0
  34. package/dist/types/edit/index.d.ts +10 -0
  35. package/dist/types/fog.d.ts +57 -0
  36. package/dist/types/frame.d.ts +140 -3
  37. package/dist/types/geometry/Curve.d.ts +43 -0
  38. package/dist/types/geometry/Geometry.d.ts +8 -0
  39. package/dist/types/geometry/generators.d.ts +82 -2
  40. package/dist/types/geometry/outline.d.ts +192 -0
  41. package/dist/types/geometry/triangulate.d.ts +13 -0
  42. package/dist/types/gltf/Animation.d.ts +1 -1
  43. package/dist/types/index.d.ts +8 -1
  44. package/dist/types/labelLayout.d.ts +44 -1
  45. package/dist/types/labels.d.ts +11 -0
  46. package/dist/types/material/Material.d.ts +18 -0
  47. package/dist/types/material/Texture.d.ts +7 -0
  48. package/dist/types/motion/Timeline.d.ts +12 -20
  49. package/dist/types/motion/follow.d.ts +11 -0
  50. package/dist/types/particles/Body.d.ts +6 -14
  51. package/dist/types/particles/Emitter.d.ts +0 -1
  52. package/dist/types/registry.d.ts +8 -1
  53. package/dist/types/scene/Node.d.ts +132 -2
  54. package/dist/types/scene/Scene.d.ts +15 -1
  55. package/dist/types/scene/drawables.d.ts +27 -2
  56. package/dist/types/scene/lights.d.ts +4 -1
  57. package/dist/types/shadow.d.ts +15 -0
  58. package/dist/types/snapshot.d.ts +4 -1
  59. package/dist/types/validate.d.ts +9 -0
  60. package/dist/types/value/Ray.d.ts +8 -0
  61. package/dist/types/webgl/WebGLRenderer.d.ts +45 -0
  62. package/dist/types/webgl/bloom.d.ts +69 -0
  63. package/dist/types/webgl/context.d.ts +9 -0
  64. package/dist/types/webgl/passes.d.ts +39 -1
  65. package/dist/types/webgl/shaders.d.ts +7 -3
  66. package/package.json +5 -1
package/README.md CHANGED
@@ -27,7 +27,7 @@ Or straight from a CDN, with no build step:
27
27
  </script>
28
28
  ```
29
29
 
30
- To use more than the core - charts, particles, glTF or motion - map each import to the package's own
30
+ To use more than the core - charts, particles, glTF, motion or editing - map each import to the package's own
31
31
  files, so they share one copy of the core (the CDN's ready-made `+esm` builds each bundle their
32
32
  own). Pin the version so a new release can't change your page:
33
33
 
@@ -35,11 +35,12 @@ own). Pin the version so a new release can't change your page:
35
35
  <script type="importmap">
36
36
  {
37
37
  "imports": {
38
- "phoria2": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.3/dist/phoria2.js",
39
- "phoria2/charts": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.3/dist/charts.js",
40
- "phoria2/particles": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.3/dist/particles.js",
41
- "phoria2/gltf": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.3/dist/gltf.js",
42
- "phoria2/motion": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.3/dist/motion.js"
38
+ "phoria2": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.4/dist/phoria2.js",
39
+ "phoria2/charts": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.4/dist/charts.js",
40
+ "phoria2/particles": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.4/dist/particles.js",
41
+ "phoria2/gltf": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.4/dist/gltf.js",
42
+ "phoria2/motion": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.4/dist/motion.js",
43
+ "phoria2/edit": "https://cdn.jsdelivr.net/npm/phoria2@1.0.0-rc.4/dist/edit.js"
43
44
  }
44
45
  }
45
46
  </script>
@@ -134,11 +135,12 @@ A full example, with a chart that follows its data, is in
134
135
 
135
136
  | Import | |
136
137
  |---|---|
137
- | `phoria2` | the view, scene graph, cameras, lights, materials, geometry, curves, textures, picking, labels, `create()` from JSON |
138
+ | `phoria2` | the view, scene graph, cameras, lights, materials, geometry, curves, textures, picking, labels, bloom, `create()` from JSON |
138
139
  | `phoria2/charts` | `chart()` - charts from a spec of mark, data and channels, and the scales they use |
139
140
  | `phoria2/particles` | `Emitter` and `Body` |
140
141
  | `phoria2/gltf` | `loadGLTF()` - glTF 2.0 models with their materials and animations |
141
142
  | `phoria2/motion` | `Timeline` - named steps played in order, `follow()` along a curve, `reveal()` a path as it's travelled - for explainers and guided tours |
143
+ | `phoria2/edit` | `TransformHandle` - a move and turn handle with grid and angle snapping - and `History` for undo, for planners and layout editors |
142
144
 
143
145
  ## Browsers
144
146
 
package/dist/bloom.js ADDED
@@ -0,0 +1,123 @@
1
+ import { F as e, N as t } from "./core.js";
2
+ // src/webgl/bloom.js
3
+ var n = `precision highp float;
4
+ in vec2 vUv;
5
+ uniform sampler2D uSource;
6
+ uniform vec2 uTexel;
7
+ uniform float uThreshold;
8
+ out vec4 fragColor;
9
+ ${t}
10
+ vec3 tap(vec2 uv) {
11
+ vec3 c = texture(uSource, uv).rgb;
12
+ return uThreshold < 0.0 ? c : srgbToLinear(c);
13
+ }
14
+ void main() {
15
+ vec3 c = (tap(vUv + uTexel * vec2(-1.0, -1.0)) + tap(vUv + uTexel * vec2(1.0, -1.0)) +
16
+ tap(vUv + uTexel * vec2(-1.0, 1.0)) + tap(vUv + uTexel * vec2(1.0, 1.0))) * 0.25;
17
+ if (uThreshold >= 0.0) {
18
+ float bright = max(c.r, max(c.g, c.b));
19
+ float knee = uThreshold * 0.5 + 1e-4;
20
+ float soft = clamp(bright - uThreshold + knee, 0.0, 2.0 * knee);
21
+ soft = soft * soft / (4.0 * knee);
22
+ c *= max(soft, bright - uThreshold) / max(bright, 1e-4);
23
+ }
24
+ fragColor = vec4(c, 1.0);
25
+ }
26
+ `, r = "precision highp float;\nin vec2 vUv;\nuniform sampler2D uSource;\nuniform vec2 uTexel;\nuniform float uWeight;\nout vec4 fragColor;\nvoid main() {\nvec3 c = texture(uSource, vUv).rgb * 4.0;\nc += (texture(uSource, vUv + uTexel * vec2(-1.0, 0.0)).rgb + texture(uSource, vUv + uTexel * vec2(1.0, 0.0)).rgb +\ntexture(uSource, vUv + uTexel * vec2(0.0, -1.0)).rgb + texture(uSource, vUv + uTexel * vec2(0.0, 1.0)).rgb) * 2.0;\nc += texture(uSource, vUv + uTexel * vec2(-1.0, -1.0)).rgb + texture(uSource, vUv + uTexel * vec2(1.0, -1.0)).rgb +\ntexture(uSource, vUv + uTexel * vec2(-1.0, 1.0)).rgb + texture(uSource, vUv + uTexel * vec2(1.0, 1.0)).rgb;\nfragColor = vec4(c / 16.0 * uWeight, 1.0);\n}\n", i = `precision highp float;
27
+ in vec2 vUv;
28
+ uniform sampler2D uScene;
29
+ uniform sampler2D uBloom;
30
+ uniform float uStrength;
31
+ out vec4 fragColor;
32
+ ${t}
33
+ void main() {
34
+ vec4 scene = texture(uScene, vUv);
35
+ vec3 glow = texture(uBloom, vUv).rgb * uStrength;
36
+ vec3 c = srgbToLinear(scene.rgb) + glow;
37
+ float a = clamp(scene.a + max(glow.r, max(glow.g, glow.b)), 0.0, 1.0);
38
+ fragColor = vec4(linearToSrgb(c), a);
39
+ }
40
+ `, a = [e, n], o = [e, r], s = [e, i], c = 6, l = class {
41
+ #e = null;
42
+ #t = null;
43
+ #n = !1;
44
+ constructor(e, t) {
45
+ this.gl = e, this.programs = t, this.reset();
46
+ }
47
+ reset() {
48
+ this.#e = null, this.#t = null, this.#n = !!this.gl.getExtension("EXT_color_buffer_float");
49
+ }
50
+ dispose() {
51
+ this.#i(), this.#e = null;
52
+ }
53
+ begin(e, t) {
54
+ let n = this.gl, r = this.#r(e, t);
55
+ n.bindFramebuffer(n.FRAMEBUFFER, r.multisampled), n.viewport(0, 0, e, t);
56
+ }
57
+ end(e) {
58
+ let t = this.gl, n = this.#e, { width: r, height: i, levels: c } = n;
59
+ t.bindFramebuffer(t.READ_FRAMEBUFFER, n.multisampled), t.bindFramebuffer(t.DRAW_FRAMEBUFFER, n.resolved), t.blitFramebuffer(0, 0, r, i, 0, 0, r, i, t.COLOR_BUFFER_BIT, t.NEAREST), t.bindFramebuffer(t.READ_FRAMEBUFFER, null), t.bindFramebuffer(t.DRAW_FRAMEBUFFER, null), t.disable(t.DEPTH_TEST), t.disable(t.CULL_FACE), t.disable(t.BLEND), t.depthMask(!1), t.bindVertexArray(this.#a());
60
+ let l = this.programs.ready("bloom-down", [], a);
61
+ t.useProgram(l.program);
62
+ let u = n.picture, d = r, f = i;
63
+ c.forEach((n, r) => {
64
+ t.bindFramebuffer(t.FRAMEBUFFER, n.framebuffer), t.viewport(0, 0, n.width, n.height), l.set("uSource", u), l.set("uTexel", [1 / d, 1 / f]), l.set("uThreshold", r === 0 ? Math.max(0, e.threshold) : -1), t.drawArrays(t.TRIANGLES, 0, 3), u = n.texture, d = n.width, f = n.height;
65
+ });
66
+ let p = this.programs.ready("bloom-up", [], o);
67
+ t.useProgram(p.program), t.enable(t.BLEND), t.blendFunc(t.ONE, t.ONE);
68
+ let m = Math.min(1, Math.max(0, e.radius));
69
+ for (let e = c.length - 1; e > 0; e--) {
70
+ let n = c[e], r = c[e - 1];
71
+ t.bindFramebuffer(t.FRAMEBUFFER, r.framebuffer), t.viewport(0, 0, r.width, r.height), p.set("uSource", n.texture), p.set("uTexel", [1 / n.width, 1 / n.height]), p.set("uWeight", m), t.drawArrays(t.TRIANGLES, 0, 3);
72
+ }
73
+ t.disable(t.BLEND), t.bindFramebuffer(t.FRAMEBUFFER, null), t.viewport(0, 0, r, i);
74
+ let h = this.programs.ready("bloom-composite", [], s);
75
+ t.useProgram(h.program), h.set("uScene", n.picture), h.set("uBloom", c[0].texture), h.set("uStrength", Math.max(0, e.strength)), t.drawArrays(t.TRIANGLES, 0, 3), t.depthMask(!0), t.enable(t.DEPTH_TEST), t.bindVertexArray(null);
76
+ }
77
+ #r(e, t) {
78
+ if (this.#e && this.#e.width === e && this.#e.height === t) return this.#e;
79
+ this.#i();
80
+ let n = this.gl, r = Math.min(4, n.getParameter(n.MAX_SAMPLES)), i = n.createFramebuffer();
81
+ n.bindFramebuffer(n.FRAMEBUFFER, i);
82
+ let a = n.createRenderbuffer();
83
+ n.bindRenderbuffer(n.RENDERBUFFER, a), n.renderbufferStorageMultisample(n.RENDERBUFFER, r, n.RGBA8, e, t), n.framebufferRenderbuffer(n.FRAMEBUFFER, n.COLOR_ATTACHMENT0, n.RENDERBUFFER, a);
84
+ let o = n.createRenderbuffer();
85
+ n.bindRenderbuffer(n.RENDERBUFFER, o), n.renderbufferStorageMultisample(n.RENDERBUFFER, r, n.DEPTH24_STENCIL8, e, t), n.framebufferRenderbuffer(n.FRAMEBUFFER, n.DEPTH_STENCIL_ATTACHMENT, n.RENDERBUFFER, o);
86
+ let s = (e, t, r) => {
87
+ let i = n.createTexture();
88
+ n.activeTexture(n.TEXTURE15), n.bindTexture(n.TEXTURE_2D, i), n.texStorage2D(n.TEXTURE_2D, 1, r, e, t), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_MIN_FILTER, n.LINEAR), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_MAG_FILTER, n.LINEAR), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_WRAP_S, n.CLAMP_TO_EDGE), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_WRAP_T, n.CLAMP_TO_EDGE);
89
+ let a = n.createFramebuffer();
90
+ return n.bindFramebuffer(n.FRAMEBUFFER, a), n.framebufferTexture2D(n.FRAMEBUFFER, n.COLOR_ATTACHMENT0, n.TEXTURE_2D, i, 0), {
91
+ texture: i,
92
+ framebuffer: a,
93
+ width: e,
94
+ height: t
95
+ };
96
+ }, l = s(e, t, n.RGBA8), u = [], d = e, f = t;
97
+ for (let e = 0; e < c && (d = Math.max(1, d >> 1), f = Math.max(1, f >> 1), !(e > 1 && Math.min(d, f) < 8)); e++) u.push(s(d, f, this.#n ? n.RGBA16F : n.RGBA8));
98
+ return n.bindFramebuffer(n.FRAMEBUFFER, null), n.bindRenderbuffer(n.RENDERBUFFER, null), this.#e = {
99
+ width: e,
100
+ height: t,
101
+ multisampled: i,
102
+ buffers: [a, o],
103
+ resolved: l.framebuffer,
104
+ picture: l.texture,
105
+ levels: u
106
+ }, this.#e;
107
+ }
108
+ #i() {
109
+ let e = this.#e;
110
+ if (!e) return;
111
+ let t = this.gl;
112
+ t.deleteFramebuffer(e.multisampled);
113
+ for (let n of e.buffers) t.deleteRenderbuffer(n);
114
+ t.deleteFramebuffer(e.resolved), t.deleteTexture(e.picture);
115
+ for (let n of e.levels) t.deleteFramebuffer(n.framebuffer), t.deleteTexture(n.texture);
116
+ }
117
+ #a() {
118
+ return this.#t ||= this.gl.createVertexArray(), this.#t;
119
+ }
120
+ };
121
+ export { l as Bloom };
122
+
123
+ //# sourceMappingURL=bloom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bloom.js","names":["FULLSCREEN_VERTEX","COMMON","DOWN_FRAGMENT","UP_FRAGMENT","COMPOSITE_FRAGMENT","DOWN","UP","COMPOSITE","LEVELS","Bloom","gl","programs","#target","#empty","#float","#free","target","#targetFor","width","height","#emptyArray","down","source","sw","sh","level","i","settings","up","weight","levels","from","to","composite","samples","multisampled","color","depth","texture","t","format","w","h","framebuffer","picture","b"],"sources":[],"mappings":""}