minerva-design 1.4.0 → 1.6.0
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.
- package/CHANGELOG.md +15 -0
- package/README.md +21 -21
- package/custom-elements.json +3072 -611
- package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +595 -5
- package/dist/charts/canvas.d.cts +4 -3
- package/dist/charts/canvas.d.ts +4 -3
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +6 -4
- package/dist/charts/core.d.ts +6 -4
- package/dist/charts/core.js +24 -16
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +42 -19
- package/dist/charts/engine/axis.js.map +1 -1
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.js +155 -127
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -1
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.js +370 -255
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +18 -0
- package/dist/charts/engine/color.d.ts +18 -0
- package/dist/charts/engine/color.js +48 -2
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +34 -1
- package/dist/charts/engine/controller.d.ts +34 -1
- package/dist/charts/engine/controller.js +318 -273
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +3 -1
- package/dist/charts/engine/data.d.ts +3 -1
- package/dist/charts/engine/data.js +6 -4
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/defaults.cjs +2 -0
- package/dist/charts/engine/defaults.cjs.map +1 -0
- package/dist/charts/engine/defaults.d.cts +20 -0
- package/dist/charts/engine/defaults.d.ts +20 -0
- package/dist/charts/engine/defaults.js +35 -0
- package/dist/charts/engine/defaults.js.map +1 -0
- package/dist/charts/engine/format.cjs +1 -1
- package/dist/charts/engine/format.cjs.map +1 -1
- package/dist/charts/engine/format.d.cts +6 -0
- package/dist/charts/engine/format.d.ts +6 -0
- package/dist/charts/engine/format.js +15 -2
- package/dist/charts/engine/format.js.map +1 -1
- package/dist/charts/engine/graph/chart.cjs +2 -0
- package/dist/charts/engine/graph/chart.cjs.map +1 -0
- package/dist/charts/engine/graph/chart.d.cts +3 -0
- package/dist/charts/engine/graph/chart.d.ts +3 -0
- package/dist/charts/engine/graph/chart.js +1708 -0
- package/dist/charts/engine/graph/chart.js.map +1 -0
- package/dist/charts/engine/graph/circular.cjs +2 -0
- package/dist/charts/engine/graph/circular.cjs.map +1 -0
- package/dist/charts/engine/graph/circular.d.cts +16 -0
- package/dist/charts/engine/graph/circular.d.ts +16 -0
- package/dist/charts/engine/graph/circular.js +62 -0
- package/dist/charts/engine/graph/circular.js.map +1 -0
- package/dist/charts/engine/graph/dag.cjs +2 -0
- package/dist/charts/engine/graph/dag.cjs.map +1 -0
- package/dist/charts/engine/graph/dag.d.cts +34 -0
- package/dist/charts/engine/graph/dag.d.ts +34 -0
- package/dist/charts/engine/graph/dag.js +339 -0
- package/dist/charts/engine/graph/dag.js.map +1 -0
- package/dist/charts/engine/graph/dom.cjs +2 -0
- package/dist/charts/engine/graph/dom.cjs.map +1 -0
- package/dist/charts/engine/graph/dom.d.cts +23 -0
- package/dist/charts/engine/graph/dom.d.ts +23 -0
- package/dist/charts/engine/graph/dom.js +158 -0
- package/dist/charts/engine/graph/dom.js.map +1 -0
- package/dist/charts/engine/graph/force.cjs +2 -0
- package/dist/charts/engine/graph/force.cjs.map +1 -0
- package/dist/charts/engine/graph/force.d.cts +76 -0
- package/dist/charts/engine/graph/force.d.ts +76 -0
- package/dist/charts/engine/graph/force.js +423 -0
- package/dist/charts/engine/graph/force.js.map +1 -0
- package/dist/charts/engine/graph/geometry.cjs +2 -0
- package/dist/charts/engine/graph/geometry.cjs.map +1 -0
- package/dist/charts/engine/graph/geometry.d.cts +50 -0
- package/dist/charts/engine/graph/geometry.d.ts +50 -0
- package/dist/charts/engine/graph/geometry.js +197 -0
- package/dist/charts/engine/graph/geometry.js.map +1 -0
- package/dist/charts/engine/graph/index.cjs +1 -0
- package/dist/charts/engine/graph/index.d.cts +6 -0
- package/dist/charts/engine/graph/index.d.ts +6 -0
- package/dist/charts/engine/graph/index.js +6 -0
- package/dist/charts/engine/graph/labels.cjs +2 -0
- package/dist/charts/engine/graph/labels.cjs.map +1 -0
- package/dist/charts/engine/graph/labels.d.cts +12 -0
- package/dist/charts/engine/graph/labels.d.ts +12 -0
- package/dist/charts/engine/graph/labels.js +128 -0
- package/dist/charts/engine/graph/labels.js.map +1 -0
- package/dist/charts/engine/graph/model.cjs +2 -0
- package/dist/charts/engine/graph/model.cjs.map +1 -0
- package/dist/charts/engine/graph/model.d.cts +52 -0
- package/dist/charts/engine/graph/model.d.ts +52 -0
- package/dist/charts/engine/graph/model.js +108 -0
- package/dist/charts/engine/graph/model.js.map +1 -0
- package/dist/charts/engine/graph/sizing.cjs +2 -0
- package/dist/charts/engine/graph/sizing.cjs.map +1 -0
- package/dist/charts/engine/graph/sizing.d.cts +33 -0
- package/dist/charts/engine/graph/sizing.d.ts +33 -0
- package/dist/charts/engine/graph/sizing.js +60 -0
- package/dist/charts/engine/graph/sizing.js.map +1 -0
- package/dist/charts/engine/graph/tree.cjs +2 -0
- package/dist/charts/engine/graph/tree.cjs.map +1 -0
- package/dist/charts/engine/graph/tree.d.cts +30 -0
- package/dist/charts/engine/graph/tree.d.ts +30 -0
- package/dist/charts/engine/graph/tree.js +218 -0
- package/dist/charts/engine/graph/tree.js.map +1 -0
- package/dist/charts/engine/graph/types.d.cts +640 -0
- package/dist/charts/engine/graph/types.d.ts +640 -0
- package/dist/charts/engine/graph/worker.cjs +52 -0
- package/dist/charts/engine/graph/worker.cjs.map +1 -0
- package/dist/charts/engine/graph/worker.d.cts +36 -0
- package/dist/charts/engine/graph/worker.d.ts +36 -0
- package/dist/charts/engine/graph/worker.js +135 -0
- package/dist/charts/engine/graph/worker.js.map +1 -0
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.d.cts +15 -2
- package/dist/charts/engine/items.d.ts +15 -2
- package/dist/charts/engine/items.js +131 -112
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +1 -1
- package/dist/charts/engine/labels.cjs.map +1 -1
- package/dist/charts/engine/labels.d.cts +17 -0
- package/dist/charts/engine/labels.d.ts +17 -0
- package/dist/charts/engine/labels.js +28 -4
- package/dist/charts/engine/labels.js.map +1 -1
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +9 -0
- package/dist/charts/engine/layout.d.ts +9 -0
- package/dist/charts/engine/layout.js +11 -2
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +73 -3
- package/dist/charts/engine/model.d.ts +73 -3
- package/dist/charts/engine/model.js +258 -154
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/field.cjs +37 -0
- package/dist/charts/engine/orderbook/field.cjs.map +1 -0
- package/dist/charts/engine/orderbook/field.d.cts +92 -0
- package/dist/charts/engine/orderbook/field.d.ts +92 -0
- package/dist/charts/engine/orderbook/field.js +297 -0
- package/dist/charts/engine/orderbook/field.js.map +1 -0
- package/dist/charts/engine/orderbook/format.cjs +1 -1
- package/dist/charts/engine/orderbook/format.cjs.map +1 -1
- package/dist/charts/engine/orderbook/format.d.cts +3 -2
- package/dist/charts/engine/orderbook/format.d.ts +3 -2
- package/dist/charts/engine/orderbook/format.js +5 -5
- package/dist/charts/engine/orderbook/format.js.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.js +566 -475
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/host.cjs +1 -1
- package/dist/charts/engine/orderbook/host.cjs.map +1 -1
- package/dist/charts/engine/orderbook/host.d.cts +8 -1
- package/dist/charts/engine/orderbook/host.d.ts +8 -1
- package/dist/charts/engine/orderbook/host.js +27 -5
- package/dist/charts/engine/orderbook/host.js.map +1 -1
- package/dist/charts/engine/orderbook/ladder.cjs +1 -1
- package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
- package/dist/charts/engine/orderbook/ladder.js +1 -1
- package/dist/charts/engine/orderbook/ladder.js.map +1 -1
- package/dist/charts/engine/orderbook/layout.cjs +2 -0
- package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
- package/dist/charts/engine/orderbook/layout.d.cts +42 -0
- package/dist/charts/engine/orderbook/layout.d.ts +42 -0
- package/dist/charts/engine/orderbook/layout.js +76 -0
- package/dist/charts/engine/orderbook/layout.js.map +1 -0
- package/dist/charts/engine/orderbook/tape.cjs +1 -1
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
- package/dist/charts/engine/orderbook/tape.js +4 -4
- package/dist/charts/engine/orderbook/tape.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +27 -3
- package/dist/charts/engine/orderbook/types.d.ts +27 -3
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +27 -0
- package/dist/charts/engine/overlay.d.ts +27 -0
- package/dist/charts/engine/overlay.js +34 -12
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +35 -3
- package/dist/charts/engine/presets.d.ts +35 -3
- package/dist/charts/engine/presets.js +121 -101
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.js +13 -9
- package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
- package/dist/charts/engine/renderers/detect.cjs +1 -1
- package/dist/charts/engine/renderers/detect.cjs.map +1 -1
- package/dist/charts/engine/renderers/detect.d.cts +2 -1
- package/dist/charts/engine/renderers/detect.d.ts +2 -1
- package/dist/charts/engine/renderers/detect.js +23 -21
- package/dist/charts/engine/renderers/detect.js.map +1 -1
- package/dist/charts/engine/renderers/follow.cjs +2 -0
- package/dist/charts/engine/renderers/follow.cjs.map +1 -0
- package/dist/charts/engine/renderers/follow.d.cts +8 -0
- package/dist/charts/engine/renderers/follow.d.ts +8 -0
- package/dist/charts/engine/renderers/follow.js +10 -0
- package/dist/charts/engine/renderers/follow.js.map +1 -0
- package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
- package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
- package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
- package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
- package/dist/charts/engine/renderers/gl-budget.js +95 -0
- package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
- package/dist/charts/engine/renderers/gl.cjs +1 -1
- package/dist/charts/engine/renderers/gl.cjs.map +1 -1
- package/dist/charts/engine/renderers/gl.js +1 -1
- package/dist/charts/engine/renderers/gl.js.map +1 -1
- package/dist/charts/engine/renderers/shaders.cjs +9 -6
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +1 -1
- package/dist/charts/engine/renderers/shaders.d.ts +1 -1
- package/dist/charts/engine/renderers/shaders.js +9 -6
- package/dist/charts/engine/renderers/shaders.js.map +1 -1
- package/dist/charts/engine/renderers/types.cjs.map +1 -1
- package/dist/charts/engine/renderers/types.d.cts +2 -0
- package/dist/charts/engine/renderers/types.d.ts +2 -0
- package/dist/charts/engine/renderers/types.js.map +1 -1
- package/dist/charts/engine/renderers/webgl.cjs +1 -1
- package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl.js +85 -64
- package/dist/charts/engine/renderers/webgl.js.map +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl2.js +72 -58
- package/dist/charts/engine/renderers/webgl2.js.map +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgpu.js +1 -1
- package/dist/charts/engine/renderers/webgpu.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +104 -4
- package/dist/charts/engine/scene.d.ts +104 -4
- package/dist/charts/engine/scene.js +412 -193
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +1 -1
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
- package/dist/charts/engine/shapes/bullet.js +110 -110
- package/dist/charts/engine/shapes/bullet.js.map +1 -1
- package/dist/charts/engine/shapes/chart.cjs +1 -1
- package/dist/charts/engine/shapes/chart.cjs.map +1 -1
- package/dist/charts/engine/shapes/chart.js +4 -1
- package/dist/charts/engine/shapes/chart.js.map +1 -1
- package/dist/charts/engine/shapes/chord.cjs +2 -0
- package/dist/charts/engine/shapes/chord.cjs.map +1 -0
- package/dist/charts/engine/shapes/chord.d.cts +18 -0
- package/dist/charts/engine/shapes/chord.d.ts +18 -0
- package/dist/charts/engine/shapes/chord.js +419 -0
- package/dist/charts/engine/shapes/chord.js.map +1 -0
- package/dist/charts/engine/shapes/draw.cjs +1 -1
- package/dist/charts/engine/shapes/draw.cjs.map +1 -1
- package/dist/charts/engine/shapes/draw.d.cts +5 -1
- package/dist/charts/engine/shapes/draw.d.ts +5 -1
- package/dist/charts/engine/shapes/draw.js +47 -17
- package/dist/charts/engine/shapes/draw.js.map +1 -1
- package/dist/charts/engine/shapes/hit.cjs +1 -1
- package/dist/charts/engine/shapes/hit.cjs.map +1 -1
- package/dist/charts/engine/shapes/hit.d.cts +3 -1
- package/dist/charts/engine/shapes/hit.d.ts +3 -1
- package/dist/charts/engine/shapes/hit.js +75 -46
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +3 -2
- package/dist/charts/engine/shapes/index.d.ts +3 -2
- package/dist/charts/engine/shapes/labels.cjs +1 -1
- package/dist/charts/engine/shapes/labels.cjs.map +1 -1
- package/dist/charts/engine/shapes/labels.js +12 -4
- package/dist/charts/engine/shapes/labels.js.map +1 -1
- package/dist/charts/engine/shapes/layout.cjs +2 -2
- package/dist/charts/engine/shapes/layout.cjs.map +1 -1
- package/dist/charts/engine/shapes/layout.d.cts +3 -1
- package/dist/charts/engine/shapes/layout.d.ts +3 -1
- package/dist/charts/engine/shapes/layout.js +106 -78
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- package/dist/charts/engine/shapes/scene.cjs +1 -1
- package/dist/charts/engine/shapes/scene.cjs.map +1 -1
- package/dist/charts/engine/shapes/scene.d.cts +33 -3
- package/dist/charts/engine/shapes/scene.d.ts +33 -3
- package/dist/charts/engine/shapes/scene.js +62 -19
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +121 -8
- package/dist/charts/engine/shapes/types.d.ts +121 -8
- package/dist/charts/engine/signature.cjs +1 -1
- package/dist/charts/engine/signature.cjs.map +1 -1
- package/dist/charts/engine/signature.js +1 -1
- package/dist/charts/engine/signature.js.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.d.cts +41 -3
- package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
- package/dist/charts/engine/three-d/canvas2d.js +166 -67
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
- package/dist/charts/engine/three-d/chart.cjs +1 -1
- package/dist/charts/engine/three-d/chart.cjs.map +1 -1
- package/dist/charts/engine/three-d/chart.js +219 -215
- package/dist/charts/engine/three-d/chart.js.map +1 -1
- package/dist/charts/engine/three-d/detect.cjs +1 -1
- package/dist/charts/engine/three-d/detect.cjs.map +1 -1
- package/dist/charts/engine/three-d/detect.d.cts +3 -2
- package/dist/charts/engine/three-d/detect.d.ts +3 -2
- package/dist/charts/engine/three-d/detect.js +22 -20
- package/dist/charts/engine/three-d/detect.js.map +1 -1
- package/dist/charts/engine/three-d/geometry.cjs +1 -1
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
- package/dist/charts/engine/three-d/geometry.d.cts +6 -0
- package/dist/charts/engine/three-d/geometry.d.ts +6 -0
- package/dist/charts/engine/three-d/geometry.js +106 -90
- package/dist/charts/engine/three-d/geometry.js.map +1 -1
- package/dist/charts/engine/three-d/model.cjs +1 -1
- package/dist/charts/engine/three-d/model.cjs.map +1 -1
- package/dist/charts/engine/three-d/model.d.cts +2 -0
- package/dist/charts/engine/three-d/model.d.ts +2 -0
- package/dist/charts/engine/three-d/model.js +2 -0
- package/dist/charts/engine/three-d/model.js.map +1 -1
- package/dist/charts/engine/three-d/oit.cjs +109 -0
- package/dist/charts/engine/three-d/oit.cjs.map +1 -0
- package/dist/charts/engine/three-d/oit.d.cts +34 -0
- package/dist/charts/engine/three-d/oit.d.ts +34 -0
- package/dist/charts/engine/three-d/oit.js +111 -0
- package/dist/charts/engine/three-d/oit.js.map +1 -0
- package/dist/charts/engine/three-d/overlay.cjs +1 -1
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
- package/dist/charts/engine/three-d/overlay.js +43 -36
- package/dist/charts/engine/three-d/overlay.js.map +1 -1
- package/dist/charts/engine/three-d/render-types.cjs +1 -1
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
- package/dist/charts/engine/three-d/render-types.d.cts +37 -3
- package/dist/charts/engine/three-d/render-types.d.ts +37 -3
- package/dist/charts/engine/three-d/render-types.js +6 -10
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +109 -48
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +12 -5
- package/dist/charts/engine/three-d/shaders.d.ts +12 -5
- package/dist/charts/engine/three-d/shaders.js +118 -55
- package/dist/charts/engine/three-d/shaders.js.map +1 -1
- package/dist/charts/engine/three-d/sort.cjs +1 -1
- package/dist/charts/engine/three-d/sort.cjs.map +1 -1
- package/dist/charts/engine/three-d/sort.d.cts +18 -5
- package/dist/charts/engine/three-d/sort.d.ts +18 -5
- package/dist/charts/engine/three-d/sort.js +129 -43
- package/dist/charts/engine/three-d/sort.js.map +1 -1
- package/dist/charts/engine/three-d/types.d.cts +36 -0
- package/dist/charts/engine/three-d/types.d.ts +36 -0
- package/dist/charts/engine/three-d/webgl.cjs +1 -1
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgl.d.cts +9 -0
- package/dist/charts/engine/three-d/webgl.d.ts +9 -0
- package/dist/charts/engine/three-d/webgl.js +199 -74
- package/dist/charts/engine/three-d/webgl.js.map +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgpu.js +231 -94
- package/dist/charts/engine/three-d/webgpu.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +1 -1
- package/dist/charts/engine/trading/chart.cjs.map +1 -1
- package/dist/charts/engine/trading/chart.d.cts +10 -1
- package/dist/charts/engine/trading/chart.d.ts +10 -1
- package/dist/charts/engine/trading/chart.js +1677 -813
- package/dist/charts/engine/trading/chart.js.map +1 -1
- package/dist/charts/engine/trading/drawings.cjs +2 -1
- package/dist/charts/engine/trading/drawings.cjs.map +1 -1
- package/dist/charts/engine/trading/drawings.d.cts +53 -9
- package/dist/charts/engine/trading/drawings.d.ts +53 -9
- package/dist/charts/engine/trading/drawings.js +346 -71
- package/dist/charts/engine/trading/drawings.js.map +1 -1
- package/dist/charts/engine/trading/format.cjs +1 -1
- package/dist/charts/engine/trading/format.cjs.map +1 -1
- package/dist/charts/engine/trading/format.d.cts +19 -0
- package/dist/charts/engine/trading/format.d.ts +19 -0
- package/dist/charts/engine/trading/format.js +65 -21
- package/dist/charts/engine/trading/format.js.map +1 -1
- package/dist/charts/engine/trading/geometry.cjs +1 -1
- package/dist/charts/engine/trading/geometry.cjs.map +1 -1
- package/dist/charts/engine/trading/geometry.d.cts +16 -0
- package/dist/charts/engine/trading/geometry.d.ts +16 -0
- package/dist/charts/engine/trading/geometry.js +19 -4
- package/dist/charts/engine/trading/geometry.js.map +1 -1
- package/dist/charts/engine/trading/index.cjs +1 -1
- package/dist/charts/engine/trading/index.d.cts +2 -1
- package/dist/charts/engine/trading/index.d.ts +2 -1
- package/dist/charts/engine/trading/index.js +4 -3
- package/dist/charts/engine/trading/indicators.cjs +1 -1
- package/dist/charts/engine/trading/indicators.cjs.map +1 -1
- package/dist/charts/engine/trading/indicators.d.cts +180 -10
- package/dist/charts/engine/trading/indicators.d.ts +180 -10
- package/dist/charts/engine/trading/indicators.js +449 -173
- package/dist/charts/engine/trading/indicators.js.map +1 -1
- package/dist/charts/engine/trading/labels.cjs +1 -1
- package/dist/charts/engine/trading/labels.cjs.map +1 -1
- package/dist/charts/engine/trading/labels.js +104 -4
- package/dist/charts/engine/trading/labels.js.map +1 -1
- package/dist/charts/engine/trading/store.cjs +1 -1
- package/dist/charts/engine/trading/store.cjs.map +1 -1
- package/dist/charts/engine/trading/store.d.cts +21 -0
- package/dist/charts/engine/trading/store.d.ts +21 -0
- package/dist/charts/engine/trading/store.js +22 -1
- package/dist/charts/engine/trading/store.js.map +1 -1
- package/dist/charts/engine/trading/studies.cjs +1 -1
- package/dist/charts/engine/trading/studies.cjs.map +1 -1
- package/dist/charts/engine/trading/studies.d.cts +49 -8
- package/dist/charts/engine/trading/studies.d.ts +49 -8
- package/dist/charts/engine/trading/studies.js +352 -93
- package/dist/charts/engine/trading/studies.js.map +1 -1
- package/dist/charts/engine/trading/sync.cjs +2 -0
- package/dist/charts/engine/trading/sync.cjs.map +1 -0
- package/dist/charts/engine/trading/sync.d.cts +8 -0
- package/dist/charts/engine/trading/sync.d.ts +8 -0
- package/dist/charts/engine/trading/sync.js +25 -0
- package/dist/charts/engine/trading/sync.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +514 -16
- package/dist/charts/engine/trading/types.d.ts +514 -16
- package/dist/charts/engine/types.d.cts +106 -11
- package/dist/charts/engine/types.d.ts +106 -11
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +3 -2
- package/dist/charts/index.d.ts +3 -2
- package/dist/charts/index.js +30 -22
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.js +51 -34
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/graph.cjs +2 -0
- package/dist/charts/react/graph.cjs.map +1 -0
- package/dist/charts/react/graph.d.cts +219 -0
- package/dist/charts/react/graph.d.ts +219 -0
- package/dist/charts/react/graph.js +160 -0
- package/dist/charts/react/graph.js.map +1 -0
- package/dist/charts/react/orderbook.cjs +1 -1
- package/dist/charts/react/orderbook.cjs.map +1 -1
- package/dist/charts/react/orderbook.d.cts +3 -1
- package/dist/charts/react/orderbook.d.ts +3 -1
- package/dist/charts/react/orderbook.js +1 -0
- package/dist/charts/react/orderbook.js.map +1 -1
- package/dist/charts/react/shapes.cjs +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +88 -4
- package/dist/charts/react/shapes.d.ts +88 -4
- package/dist/charts/react/shapes.js +55 -12
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/three-d.cjs +1 -1
- package/dist/charts/react/three-d.cjs.map +1 -1
- package/dist/charts/react/three-d.d.cts +7 -0
- package/dist/charts/react/three-d.d.ts +7 -0
- package/dist/charts/react/three-d.js +14 -13
- package/dist/charts/react/three-d.js.map +1 -1
- package/dist/charts/react/trading.cjs +1 -1
- package/dist/charts/react/trading.cjs.map +1 -1
- package/dist/charts/react/trading.d.cts +54 -2
- package/dist/charts/react/trading.d.ts +54 -2
- package/dist/charts/react/trading.js +68 -37
- package/dist/charts/react/trading.js.map +1 -1
- package/dist/charts/react/types.d.cts +11 -0
- package/dist/charts/react/types.d.ts +11 -0
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/canvas.cjs +1 -1
- package/dist/native/charts/src/canvas.js +5 -4
- package/dist/native/charts/src/engine/axis.cjs +1 -1
- package/dist/native/charts/src/engine/axis.cjs.map +1 -1
- package/dist/native/charts/src/engine/axis.js +42 -19
- package/dist/native/charts/src/engine/axis.js.map +1 -1
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +47 -5
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +296 -251
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +6 -4
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/format.cjs +1 -1
- package/dist/native/charts/src/engine/format.cjs.map +1 -1
- package/dist/native/charts/src/engine/format.js +15 -2
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +1 -1
- package/dist/native/charts/src/engine/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/labels.js +42 -5
- package/dist/native/charts/src/engine/labels.js.map +1 -1
- package/dist/native/charts/src/engine/layout.cjs +1 -1
- package/dist/native/charts/src/engine/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/layout.js +11 -2
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +278 -174
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +2 -2
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +110 -90
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +421 -202
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/chord.js +419 -0
- package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/draw.js +47 -17
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.js +73 -44
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.js +12 -4
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.js +136 -94
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.js +62 -19
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
- package/dist/native/components/Chart/ChartBase.cjs +1 -1
- package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
- package/dist/native/components/Chart/ChartBase.js +127 -115
- package/dist/native/components/Chart/ChartBase.js.map +1 -1
- package/dist/native/components/Chart/charts.cjs +1 -1
- package/dist/native/components/Chart/charts.cjs.map +1 -1
- package/dist/native/components/Chart/charts.js +8 -5
- package/dist/native/components/Chart/charts.js.map +1 -1
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.d.cts +6 -1
- package/dist/native/components/Chart/scene.d.ts +6 -1
- package/dist/native/components/Chart/scene.js +226 -108
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Chart/types.d.cts +7 -1
- package/dist/native/components/Chart/types.d.ts +7 -1
- package/dist/native/components/Charts/charts.cjs +1 -1
- package/dist/native/components/Charts/charts.cjs.map +1 -1
- package/dist/native/components/Charts/charts.js +60 -43
- package/dist/native/components/Charts/charts.js.map +1 -1
- package/dist/native/components/Charts/types.d.cts +11 -0
- package/dist/native/components/Charts/types.d.ts +11 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
- package/dist/native/components/ShapeChart/charts.cjs +1 -1
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
- package/dist/native/components/ShapeChart/charts.d.cts +6 -1
- package/dist/native/components/ShapeChart/charts.d.ts +6 -1
- package/dist/native/components/ShapeChart/charts.js +138 -96
- package/dist/native/components/ShapeChart/charts.js.map +1 -1
- package/dist/native/components/ShapeChart/draw.cjs +1 -1
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
- package/dist/native/components/ShapeChart/draw.d.cts +1 -1
- package/dist/native/components/ShapeChart/draw.d.ts +1 -1
- package/dist/native/components/ShapeChart/draw.js +26 -17
- package/dist/native/components/ShapeChart/draw.js.map +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
- package/dist/native/components/ShapeChart/geometry.js +233 -70
- package/dist/native/components/ShapeChart/geometry.js.map +1 -1
- package/dist/native/components/ShapeChart/index.cjs +1 -1
- package/dist/native/components/ShapeChart/index.d.cts +1 -1
- package/dist/native/components/ShapeChart/index.d.ts +1 -1
- package/dist/native/components/ShapeChart/index.js +2 -2
- package/dist/native/components/ShapeChart/recorder.cjs +1 -1
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
- package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
- package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
- package/dist/native/components/ShapeChart/recorder.js +19 -10
- package/dist/native/components/ShapeChart/recorder.js.map +1 -1
- package/dist/native/components/ShapeChart/types.d.cts +95 -8
- package/dist/native/components/ShapeChart/types.d.ts +95 -8
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.js +2 -2
- package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
- package/dist/native/source/components/Chart/charts.tsx +10 -3
- package/dist/native/source/components/Chart/scene.tsx +243 -14
- package/dist/native/source/components/Chart/types.ts +7 -0
- package/dist/native/source/components/Charts/charts.tsx +37 -2
- package/dist/native/source/components/Charts/types.ts +11 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
- package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
- package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
- package/dist/native/source/components/ShapeChart/geometry.ts +376 -25
- package/dist/native/source/components/ShapeChart/index.ts +1 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
- package/dist/native/source/components/ShapeChart/types.ts +99 -6
- package/dist/native/source/manifest.ts +1 -0
- package/dist/taro/chart-a11y.d.ts +7 -0
- package/dist/taro/charts.d.ts +29 -6
- package/dist/taro/index.js +3129 -1902
- package/dist/taro/shape-charts.d.ts +99 -5
- package/dist/uni/AreaChart.vue +2 -1
- package/dist/uni/AreaChart.vue.d.ts +5 -1
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue +2 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue +2 -1
- package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
- package/dist/uni/BubbleChart.vue +2 -1
- package/dist/uni/BubbleChart.vue.d.ts +4 -0
- package/dist/uni/BulletChart.vue.d.ts +4 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
- package/dist/uni/CandlestickChart.vue +2 -1
- package/dist/uni/CandlestickChart.vue.d.ts +4 -0
- package/dist/uni/Chart.vue +2 -1
- package/dist/uni/Chart.vue.d.ts +4 -0
- package/dist/uni/ChordChart.vue +93 -0
- package/dist/uni/ChordChart.vue.d.ts +136 -0
- package/dist/uni/Divider.vue.d.ts +1 -1
- package/dist/uni/DonutChart.vue.d.ts +5 -1
- package/dist/uni/FunnelChart.vue.d.ts +4 -0
- package/dist/uni/GanttChart.vue +2 -1
- package/dist/uni/GanttChart.vue.d.ts +15 -0
- package/dist/uni/GaugeChart.vue.d.ts +5 -1
- package/dist/uni/HeatmapChart.vue +2 -1
- package/dist/uni/HeatmapChart.vue.d.ts +8 -2
- package/dist/uni/HistogramChart.vue +2 -1
- package/dist/uni/HistogramChart.vue.d.ts +4 -0
- package/dist/uni/HorizontalBarChart.vue +2 -1
- package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
- package/dist/uni/LineChart.vue +2 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue +2 -1
- package/dist/uni/MixedChart.vue.d.ts +4 -0
- package/dist/uni/PieChart.vue.d.ts +5 -1
- package/dist/uni/QuadrantChart.vue +2 -1
- package/dist/uni/QuadrantChart.vue.d.ts +4 -0
- package/dist/uni/RadarChart.vue.d.ts +4 -0
- package/dist/uni/RadialBarChart.vue.d.ts +4 -0
- package/dist/uni/RangeAreaChart.vue +2 -1
- package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
- package/dist/uni/SankeyChart.vue.d.ts +4 -0
- package/dist/uni/ScatterChart.vue +2 -1
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/Sparkline.vue +2 -1
- package/dist/uni/Sparkline.vue.d.ts +4 -0
- package/dist/uni/SunburstChart.vue.d.ts +4 -0
- package/dist/uni/ToastProvider.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue.d.ts +4 -0
- package/dist/uni/WaterfallChart.vue +2 -1
- package/dist/uni/WaterfallChart.vue.d.ts +9 -0
- package/dist/uni/chart-a11y.d.ts +7 -0
- package/dist/uni/chart-a11y.js +29 -0
- package/dist/uni/chart-canvas.d.ts +12 -0
- package/dist/uni/chart-canvas.js +15 -1
- package/dist/uni/chart-types.d.ts +36 -5
- package/dist/uni/chart-types.js +31 -3
- package/dist/uni/charts-canvas.js +3 -2
- package/dist/uni/index.d.ts +2 -1
- package/dist/uni/index.js +1 -0
- package/dist/uni/manifest.d.ts +7 -0
- package/dist/uni/manifest.js +10 -0
- package/dist/uni/named-chart-options.d.ts +11 -2
- package/dist/uni/named-chart-options.js +21 -1
- package/dist/uni/shape-chart-canvas.d.ts +3 -3
- package/dist/uni/shape-chart-canvas.js +17 -58
- package/dist/uni/shape-chart-types.d.ts +53 -3
- package/dist/uni/shape-chart-types.js +45 -1
- package/dist/vue/charts-global.d.ts +48 -0
- package/dist/vue/charts.d.ts +18 -0
- package/dist/vue/charts.js +56 -0
- package/dist/vue/charts.js.map +1 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
- package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
- package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +181 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +19 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +12 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/GraphChart.vue.d.ts +186 -0
- package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
- package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +58 -1
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/TreeChart.vue.d.ts +174 -0
- package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/graph.d.ts +156 -0
- package/dist/vue/components/Chart/graph.js +137 -0
- package/dist/vue/components/Chart/graph.js.map +1 -0
- package/dist/vue/components/Chart/index.d.ts +5 -1
- package/dist/vue/components/Chart/index.js +5 -1
- package/dist/vue/components/Chart/orderbook.d.ts +5 -1
- package/dist/vue/components/Chart/orderbook.js +2 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -1
- package/dist/vue/components/Chart/three-d.d.ts +3 -0
- package/dist/vue/components/Chart/three-d.js +2 -0
- package/dist/vue/components/Chart/three-d.js.map +1 -1
- package/dist/vue/components/Chart/trading.d.ts +30 -3
- package/dist/vue/components/Chart/trading.js +9 -0
- package/dist/vue/components/Chart/trading.js.map +1 -1
- package/dist/vue/components/Chart/types.d.ts +74 -2
- package/dist/vue/global.d.ts +2 -38
- package/dist/vue/groups/charts.js +10 -2
- package/dist/vue/groups/charts.js.map +1 -1
- package/dist/vue/index.js +6 -2
- package/dist/vue/internal/register.d.ts +7 -0
- package/dist/vue/internal/register.js +14 -0
- package/dist/vue/internal/register.js.map +1 -0
- package/dist/vue/plugin.d.ts +9 -4
- package/dist/vue/plugin.js +6 -11
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/area-chart/index.wxml +1 -1
- package/dist/weapp/bar-chart/index.wxml +1 -1
- package/dist/weapp/box-plot-chart/index.wxml +1 -1
- package/dist/weapp/bubble-chart/index.wxml +1 -1
- package/dist/weapp/candlestick-chart/index.wxml +1 -1
- package/dist/weapp/chart/index.wxml +1 -1
- package/dist/weapp/charts/canvas.js +1987 -175
- package/dist/weapp/charts/core.js +3 -0
- package/dist/weapp/chord-chart/index.js +1 -0
- package/dist/weapp/chord-chart/index.json +1 -0
- package/dist/weapp/chord-chart/index.wxml +1 -0
- package/dist/weapp/chord-chart/index.wxss +1 -0
- package/dist/weapp/controls.js +148 -57
- package/dist/weapp/gantt-chart/index.wxml +1 -1
- package/dist/weapp/heatmap-chart/index.wxml +1 -1
- package/dist/weapp/histogram-chart/index.wxml +1 -1
- package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
- package/dist/weapp/line-chart/index.wxml +1 -1
- package/dist/weapp/mixed-chart/index.wxml +1 -1
- package/dist/weapp/quadrant-chart/index.wxml +1 -1
- package/dist/weapp/range-area-chart/index.wxml +1 -1
- package/dist/weapp/scatter-chart/index.wxml +1 -1
- package/dist/weapp/sparkline/index.wxml +1 -1
- package/dist/weapp/types.d.ts +96 -4
- package/dist/weapp/waterfall-chart/index.wxml +1 -1
- package/dist/web-components/components/chart/charts.d.ts +4 -2
- package/dist/web-components/components/chart/charts.js +8 -1
- package/dist/web-components/components/chart/charts.js.map +1 -1
- package/dist/web-components/components/chart/extended.d.ts +21 -7
- package/dist/web-components/components/chart/extended.js +29 -9
- package/dist/web-components/components/chart/extended.js.map +1 -1
- package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
- package/dist/web-components/components/chart/shapes-extended.js +27 -1
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
- package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
- package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
- package/dist/web-components/components/graph/graph.d.ts +156 -0
- package/dist/web-components/components/graph/graph.js +150 -0
- package/dist/web-components/components/graph/graph.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
- package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
- package/dist/web-components/elements/chart.d.ts +1 -1
- package/dist/web-components/elements/chart.js +6 -5
- package/dist/web-components/elements/chart.js.map +1 -1
- package/dist/web-components/elements/graph.d.ts +2 -0
- package/dist/web-components/elements/graph.js +12 -0
- package/dist/web-components/elements/graph.js.map +1 -0
- package/dist/web-components/html-custom-data.json +318 -4
- package/dist/web-components/types/react.d.ts +63 -4
- package/dist/web-components/types/solid.d.ts +55 -8
- package/dist/web-components/types/svelte.d.ts +55 -8
- package/dist/web-components/types/vue.d.ts +55 -4
- package/package.json +16 -1
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { writesDepth as e } from "./render-types.js";
|
|
1
2
|
//#region src/engine/three-d/sort.ts
|
|
2
|
-
var
|
|
3
|
-
let c = Math.floor(e.length / 6), { keys: l, counts: u } = s, d = a ? 2 : 3, f =
|
|
4
|
-
for (let
|
|
5
|
-
let
|
|
6
|
-
for (let
|
|
7
|
-
let c = (e[
|
|
8
|
-
a +=
|
|
3
|
+
var t = 1 << 18, n = "transparent", r = 65536, i = 7, a = (e, t, n, a, o, s) => {
|
|
4
|
+
let c = Math.floor(e.length / 6), { keys: l, counts: u } = s, d = a ? 2 : 3, f = n[d] ?? 0, p = n[d + 4] ?? 0, m = n[d + 8] ?? 0, h = Infinity, g = -Infinity;
|
|
5
|
+
for (let n = 0; n < c; n++) {
|
|
6
|
+
let r = n * 6, a = 0, o = 0, s = 0;
|
|
7
|
+
for (let n = 0; n < 4; n++) {
|
|
8
|
+
let c = (e[r + (n === 3 ? 5 : n)] ?? 0) * i;
|
|
9
|
+
a += t[c] ?? 0, o += t[c + 1] ?? 0, s += t[c + 2] ?? 0;
|
|
9
10
|
}
|
|
10
11
|
let c = f * a + p * o + m * s;
|
|
11
|
-
l[
|
|
12
|
+
l[n] = c, c < h && (h = c), c > g && (g = c);
|
|
12
13
|
}
|
|
13
14
|
u.fill(0);
|
|
14
15
|
let _ = g > h ? 65535 / (g - h) : 0;
|
|
@@ -17,7 +18,7 @@ var e = 1 << 18, t = 65536, n = 7, r = (e, r, i, a, o, s) => {
|
|
|
17
18
|
l[e] = t, u[t] = (u[t] ?? 0) + 1;
|
|
18
19
|
}
|
|
19
20
|
let v = 0;
|
|
20
|
-
for (let e = 0; e <
|
|
21
|
+
for (let e = 0; e < r; e++) {
|
|
21
22
|
let t = u[e] ?? 0;
|
|
22
23
|
u[e] = v, v += t;
|
|
23
24
|
}
|
|
@@ -27,45 +28,130 @@ var e = 1 << 18, t = 65536, n = 7, r = (e, r, i, a, o, s) => {
|
|
|
27
28
|
let i = t * 6;
|
|
28
29
|
for (let t = 0; t < 6; t++) o[r + t] = e[i + t] ?? 0;
|
|
29
30
|
}
|
|
30
|
-
},
|
|
31
|
+
}, o = (e, t, n) => {
|
|
32
|
+
let r = 0, i = 0;
|
|
33
|
+
for (let t of e) r += t.vertexCount, i += t.indices.length;
|
|
34
|
+
let a = /* @__PURE__ */ new ArrayBuffer(r * 28), o = new Uint8Array(a), s = new Uint32Array(i), c = 0, l = 0;
|
|
35
|
+
for (let t of e) {
|
|
36
|
+
let e = Math.min(t.vertices.byteLength, t.vertexCount * 28);
|
|
37
|
+
o.set(new Uint8Array(t.vertices, 0, e), c * 28);
|
|
38
|
+
let n = Math.max(0, Math.min(1, t.opacity));
|
|
39
|
+
if (n < 1) for (let e = 0; e < t.vertexCount; e++) {
|
|
40
|
+
let t = (c + e) * 28 + 27;
|
|
41
|
+
o[t] = Math.round((o[t] ?? 0) * n);
|
|
42
|
+
}
|
|
43
|
+
let r = t.indices;
|
|
44
|
+
for (let e = 0; e < r.length; e++) s[l + e] = (r[e] ?? 0) + c;
|
|
45
|
+
c += t.vertexCount, l += r.length;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
kind: "mesh",
|
|
49
|
+
key: t,
|
|
50
|
+
version: n,
|
|
51
|
+
opacity: 1,
|
|
52
|
+
transparent: !0,
|
|
53
|
+
vertices: a,
|
|
54
|
+
vertexCount: r,
|
|
55
|
+
indices: s
|
|
56
|
+
};
|
|
57
|
+
}, s = (e, t) => {
|
|
31
58
|
if (!e) return !1;
|
|
32
59
|
for (let n = 0; n < 16; n++) if (e[n] !== t[n]) return !1;
|
|
33
60
|
return !0;
|
|
34
|
-
},
|
|
35
|
-
let
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
}, c = (t) => t.kind === "mesh" && !e(t), l = (t) => t.kind !== "lines" && !e(t), u = (e) => e.indices.length > 0 && e.indices.length % 6 == 0, d = (e) => {
|
|
62
|
+
let t = e.kind === "mesh", n = t ? e.vertices : e.data, r = (t ? 28 : 20) / 4, i = t ? e.vertexCount : e.count, a = new Float32Array(n, 0, Math.min(Math.floor(n.byteLength / 4), i * r)), o = [
|
|
63
|
+
Infinity,
|
|
64
|
+
Infinity,
|
|
65
|
+
Infinity
|
|
66
|
+
], s = [
|
|
67
|
+
-Infinity,
|
|
68
|
+
-Infinity,
|
|
69
|
+
-Infinity
|
|
70
|
+
];
|
|
71
|
+
for (let e = 0; e + 2 < a.length; e += r) for (let t = 0; t < 3; t++) {
|
|
72
|
+
let n = a[e + t] ?? 0;
|
|
73
|
+
n < (o[t] ?? 0) && (o[t] = n), n > (s[t] ?? 0) && (s[t] = n);
|
|
74
|
+
}
|
|
75
|
+
return [
|
|
76
|
+
0,
|
|
77
|
+
1,
|
|
78
|
+
2
|
|
79
|
+
].map((e) => o[e] <= s[e] ? (o[e] + s[e]) / 2 : 0);
|
|
80
|
+
}, f = () => {
|
|
81
|
+
let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), i = null, f = 0, p = null, m = !1, h = 0, g = null, _ = (t, n, i, o) => {
|
|
82
|
+
let s = t.indices.length / 6;
|
|
83
|
+
if (!u(t) || s < 2 || s > 262144) return t;
|
|
84
|
+
o.add(t.key);
|
|
85
|
+
let c = e.get(t.key), l = !c || c.version !== t.version || c.source !== t.indices;
|
|
86
|
+
if (l || i) {
|
|
87
|
+
(!g || g.keys.length < s) && (g = {
|
|
88
|
+
keys: new Float32Array(Math.max(s, 1024)),
|
|
89
|
+
counts: new Uint32Array(r)
|
|
90
|
+
});
|
|
91
|
+
let i = c && !l && c.indices.length === t.indices.length ? c.indices : new Uint32Array(t.indices.length);
|
|
92
|
+
a(t.indices, new Float32Array(t.vertices), n.viewProj, n.orthographic, i, g), c = {
|
|
93
|
+
version: t.version,
|
|
94
|
+
source: t.indices,
|
|
95
|
+
indices: i,
|
|
96
|
+
order: ++h
|
|
97
|
+
}, e.set(t.key, c);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
...t,
|
|
101
|
+
indices: c.indices,
|
|
102
|
+
order: c.order
|
|
103
|
+
};
|
|
104
|
+
}, v = (e, n) => {
|
|
105
|
+
let r = t.get(e.key);
|
|
106
|
+
(!r || r.version !== e.version) && (r = {
|
|
107
|
+
version: e.version,
|
|
108
|
+
center: d(e)
|
|
109
|
+
}, t.set(e.key, r));
|
|
110
|
+
let i = n.viewProj, a = n.orthographic ? 2 : 3, [o, s, c] = r.center;
|
|
111
|
+
return (i[a] ?? 0) * o + (i[a + 4] ?? 0) * s + (i[a + 8] ?? 0) * c + (i[a + 12] ?? 0);
|
|
112
|
+
}, y = (e, t) => {
|
|
113
|
+
let n = [];
|
|
114
|
+
if (e.forEach((e, t) => {
|
|
115
|
+
l(e) && n.push(t);
|
|
116
|
+
}), n.length < 2) return e;
|
|
117
|
+
let r = n.map((n, r) => ({
|
|
118
|
+
item: e[n],
|
|
119
|
+
k: r,
|
|
120
|
+
depth: v(e[n], t)
|
|
121
|
+
})).sort((e, t) => t.depth - e.depth || e.k - t.k);
|
|
122
|
+
return n.forEach((t, n) => {
|
|
123
|
+
e[t] = r[n].item;
|
|
124
|
+
}), e;
|
|
125
|
+
};
|
|
126
|
+
return (r, a) => {
|
|
127
|
+
let d = r.filter(c), h = r.filter(l);
|
|
128
|
+
if (d.length === 0 && h.length < 2) return e.clear(), t.clear(), i = null, r;
|
|
129
|
+
let g = !s(p, a.viewProj) || m !== a.orthographic;
|
|
130
|
+
g && (p = Float32Array.from(a.viewProj), m = a.orthographic);
|
|
131
|
+
let v = /* @__PURE__ */ new Set(), b = 0;
|
|
132
|
+
for (let e of d) b += e.indices.length / 6;
|
|
133
|
+
let x = [];
|
|
134
|
+
if (d.length === 0) i = null, x.push(...r);
|
|
135
|
+
else if (d.length >= 2 && b <= 262144 && d.every(u)) {
|
|
136
|
+
let e = d.map((e) => `${e.key}@${e.version}@${e.opacity}`).join("|");
|
|
137
|
+
(!i || i.signature !== e) && (i = {
|
|
138
|
+
signature: e,
|
|
139
|
+
item: o(d, n, ++f)
|
|
140
|
+
});
|
|
141
|
+
let t = _(i.item, a, g, v), s = !1;
|
|
142
|
+
for (let e of r) c(e) ? s || (x.push(t), s = !0) : x.push(e);
|
|
143
|
+
} else {
|
|
144
|
+
i = null;
|
|
145
|
+
let e = 0, t = d.map((e) => _(e, a, g, v));
|
|
146
|
+
for (let n of r) x.push(c(n) ? t[e++] : n);
|
|
147
|
+
}
|
|
148
|
+
for (let t of e.keys()) v.has(t) || e.delete(t);
|
|
149
|
+
y(x, a);
|
|
150
|
+
for (let e of t.keys()) x.some((t) => t.key === e) || t.delete(e);
|
|
151
|
+
return x;
|
|
66
152
|
};
|
|
67
153
|
};
|
|
68
154
|
//#endregion
|
|
69
|
-
export {
|
|
155
|
+
export { t as MAX_SORTED_QUADS, n as MERGED_KEY, f as createDepthSorter, d as itemCenter, o as mergeMeshes, a as sortQuads };
|
|
70
156
|
|
|
71
157
|
//# sourceMappingURL=sort.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","names":["MAX_SORTED_QUADS","BUCKETS","FLOATS","sortQuads","quads","indices","scratch","row","orthographic","mx","viewProj","my","mz","min","max","q","o","x","y","z","c","v","vertices","depth","scale","b","keys","counts","sum","at","j","sameMatrix","a","i","createDepthSorter","sorted","view","order","sortable","item","items","moved","frame","seen","result","entry","stale","out","key"],"sources":["../../../../../charts/src/engine/three-d/sort.ts"],"sourcesContent":["// Back-to-front order of the transparent meshes for the GPU backends:\n// transparent items are drawn without writing depth, so their triangles must\n// come farthest first to blend correctly where a surface folds over itself.\n// Meshes are made of quads (6 indices: two triangles sharing an edge, as\n// built for surface cells and bar faces); quads are sorted by the camera\n// depth of their center with a bucket sort (O(n)), and only again when the\n// camera moved. Canvas2D sorts every triangle itself (painter's algorithm).\n\nimport type { Frame3D, Item3D, MeshItem } from \"./render-types\";\nimport { VERTEX_STRIDE } from \"./render-types\";\n\n/** Largest transparent mesh sorted (quads): a 512 × 512 surface grid */\nexport const MAX_SORTED_QUADS = 1 << 18;\n\nconst BUCKETS = 1 << 16;\nconst FLOATS = VERTEX_STRIDE / 4;\n\n/**\n * Writes into `out` the quads of `indices` (6 indices each) ordered by\n * decreasing camera depth: view depth (clip w) in perspective, clip z in\n * orthographic projection. Equal depths keep their order.\n */\nexport const sortQuads = (\n indices: Uint32Array,\n vertices: Float32Array,\n viewProj: Float32Array,\n orthographic: boolean,\n out: Uint32Array,\n scratch: { keys: Float32Array; counts: Uint32Array },\n): void => {\n const quads = Math.floor(indices.length / 6);\n const { keys, counts } = scratch;\n // depth = row 4 (w) or row 3 (z) of the column-major matrix\n const row = orthographic ? 2 : 3;\n const mx = viewProj[row] ?? 0;\n const my = viewProj[row + 4] ?? 0;\n const mz = viewProj[row + 8] ?? 0;\n let min = Infinity;\n let max = -Infinity;\n for (let q = 0; q < quads; q++) {\n const o = q * 6;\n let x = 0;\n let y = 0;\n let z = 0;\n // the 4 corners: indices 0, 1, 2 and 5 of the quad\n for (let c = 0; c < 4; c++) {\n const v = (indices[o + (c === 3 ? 5 : c)] ?? 0) * FLOATS;\n x += vertices[v] ?? 0;\n y += vertices[v + 1] ?? 0;\n z += vertices[v + 2] ?? 0;\n }\n const depth = mx * x + my * y + mz * z;\n keys[q] = depth;\n if (depth < min) min = depth;\n if (depth > max) max = depth;\n }\n counts.fill(0);\n const scale = max > min ? (BUCKETS - 1) / (max - min) : 0;\n // bucket 0 = farthest (clamped: the keys are rounded to float32)\n for (let q = 0; q < quads; q++) {\n const b = Math.min(\n BUCKETS - 1,\n Math.max(0, Math.floor((max - (keys[q] ?? max)) * scale)),\n );\n keys[q] = b;\n counts[b] = (counts[b] ?? 0) + 1;\n }\n let sum = 0;\n for (let b = 0; b < BUCKETS; b++) {\n const c = counts[b] ?? 0;\n counts[b] = sum;\n sum += c;\n }\n for (let q = 0; q < quads; q++) {\n const b = keys[q] ?? 0;\n const at = (counts[b] ?? 0) * 6;\n counts[b] = (counts[b] ?? 0) + 1;\n const o = q * 6;\n for (let j = 0; j < 6; j++) out[at + j] = indices[o + j] ?? 0;\n }\n};\n\ninterface SortedMesh {\n version: number;\n source: Uint32Array;\n indices: Uint32Array;\n order: number;\n}\n\nconst sameMatrix = (a: Float32Array | null, b: Float32Array) => {\n if (!a) return false;\n for (let i = 0; i < 16; i++) if (a[i] !== b[i]) return false;\n return true;\n};\n\n/**\n * Sorter of the transparent meshes: returns the items with the transparent\n * meshes' indices in back-to-front order (`order` changes when only the\n * indices must be uploaded again)\n */\nexport const createDepthSorter = () => {\n const sorted = new Map<string, SortedMesh>();\n let view: Float32Array | null = null;\n let orthographic = false;\n let order = 0;\n let scratch: { keys: Float32Array; counts: Uint32Array } | null = null;\n\n const sortable = (item: Item3D): item is MeshItem =>\n item.kind === \"mesh\" &&\n item.opacity < 1 &&\n item.indices.length >= 12 &&\n item.indices.length % 6 === 0 &&\n item.indices.length / 6 <= MAX_SORTED_QUADS;\n\n return (items: readonly Item3D[], frame: Frame3D): readonly Item3D[] => {\n if (!items.some(sortable)) {\n sorted.clear();\n return items;\n }\n const moved =\n !sameMatrix(view, frame.viewProj) || orthographic !== frame.orthographic;\n if (moved) {\n view = Float32Array.from(frame.viewProj);\n orthographic = frame.orthographic;\n }\n const seen = new Set<string>();\n const result = items.map((item): Item3D => {\n if (!sortable(item)) return item;\n seen.add(item.key);\n let entry = sorted.get(item.key);\n const stale =\n !entry ||\n entry.version !== item.version ||\n entry.source !== item.indices;\n if (stale || moved) {\n const quads = item.indices.length / 6;\n if (!scratch || scratch.keys.length < quads)\n scratch = {\n keys: new Float32Array(Math.max(quads, 1024)),\n counts: new Uint32Array(BUCKETS),\n };\n const out =\n entry && !stale && entry.indices.length === item.indices.length\n ? entry.indices\n : new Uint32Array(item.indices.length);\n sortQuads(\n item.indices,\n new Float32Array(item.vertices),\n frame.viewProj,\n frame.orthographic,\n out,\n scratch,\n );\n entry = {\n version: item.version,\n source: item.indices,\n indices: out,\n order: ++order,\n };\n sorted.set(item.key, entry);\n }\n return { ...item, indices: entry!.indices, order: entry!.order };\n });\n for (const key of sorted.keys()) if (!seen.has(key)) sorted.delete(key);\n return result;\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sort.js","names":["MAX_SORTED_QUADS","MERGED_KEY","BUCKETS","FLOATS","sortQuads","quads","indices","scratch","row","orthographic","mx","viewProj","my","mz","min","max","q","o","x","y","z","c","v","vertices","depth","scale","b","keys","counts","sum","at","j","mergeMeshes","vertexCount","indexCount","m","meshes","bytes","base","length","opacity","a","source","sameMatrix","i","isTransparentMesh","item","writesDepth","isBlended","isQuadMesh","itemCenter","mesh","buffer","stride","count","f","k","createDepthSorter","sorted","centers","merged","mergedVersion","view","order","sortMesh","entry","stale","moved","out","frame","centerDepth","byDepth","slots","items","it","ordered","transparent","blended","seen","result","signature","placed","next","own","key"],"sources":["../../../../../charts/src/engine/three-d/sort.ts"],"sourcesContent":["// Back-to-front order of the transparent items for the GPU backends without\n// order-independent transparency (WebGL 1, no float render targets):\n// transparent items are drawn without writing depth, so their triangles must\n// come farthest first to blend correctly where a surface folds over itself\n// or where several transparent surfaces / bar series overlap. Meshes are\n// made of quads (6 indices: two triangles sharing an edge, as built for\n// surface cells and bar faces); quads are sorted by the camera depth of\n// their center with a bucket sort (O(n)), and only again when the camera\n// moved. Several transparent meshes are merged into one item (opacity baked\n// into the vertex colors) so that their quads are sorted together; above\n// the sort budget, the meshes are drawn by decreasing depth of their center\n// with their own quads sorted. Blended point clouds and the transparent\n// meshes are then drawn by decreasing depth of their center. Canvas2D sorts\n// every triangle and dot of every item itself (painter's algorithm).\n\nimport type { Frame3D, Item3D, MeshItem } from \"./render-types\";\nimport { POINT_STRIDE, VERTEX_STRIDE, writesDepth } from \"./render-types\";\n\n/** Largest number of transparent quads sorted: a 512 × 512 surface grid */\nexport const MAX_SORTED_QUADS = 1 << 18;\n\n/** Key of the merged transparent meshes */\nexport const MERGED_KEY = \"transparent\";\n\nconst BUCKETS = 1 << 16;\nconst FLOATS = VERTEX_STRIDE / 4;\n\n/**\n * Writes into `out` the quads of `indices` (6 indices each) ordered by\n * decreasing camera depth: view depth (clip w) in perspective, clip z in\n * orthographic projection. Equal depths keep their order.\n */\nexport const sortQuads = (\n indices: Uint32Array,\n vertices: Float32Array,\n viewProj: Float32Array,\n orthographic: boolean,\n out: Uint32Array,\n scratch: { keys: Float32Array; counts: Uint32Array },\n): void => {\n const quads = Math.floor(indices.length / 6);\n const { keys, counts } = scratch;\n // depth = row 4 (w) or row 3 (z) of the column-major matrix\n const row = orthographic ? 2 : 3;\n const mx = viewProj[row] ?? 0;\n const my = viewProj[row + 4] ?? 0;\n const mz = viewProj[row + 8] ?? 0;\n let min = Infinity;\n let max = -Infinity;\n for (let q = 0; q < quads; q++) {\n const o = q * 6;\n let x = 0;\n let y = 0;\n let z = 0;\n // the 4 corners: indices 0, 1, 2 and 5 of the quad\n for (let c = 0; c < 4; c++) {\n const v = (indices[o + (c === 3 ? 5 : c)] ?? 0) * FLOATS;\n x += vertices[v] ?? 0;\n y += vertices[v + 1] ?? 0;\n z += vertices[v + 2] ?? 0;\n }\n const depth = mx * x + my * y + mz * z;\n keys[q] = depth;\n if (depth < min) min = depth;\n if (depth > max) max = depth;\n }\n counts.fill(0);\n const scale = max > min ? (BUCKETS - 1) / (max - min) : 0;\n // bucket 0 = farthest (clamped: the keys are rounded to float32)\n for (let q = 0; q < quads; q++) {\n const b = Math.min(\n BUCKETS - 1,\n Math.max(0, Math.floor((max - (keys[q] ?? max)) * scale)),\n );\n keys[q] = b;\n counts[b] = (counts[b] ?? 0) + 1;\n }\n let sum = 0;\n for (let b = 0; b < BUCKETS; b++) {\n const c = counts[b] ?? 0;\n counts[b] = sum;\n sum += c;\n }\n for (let q = 0; q < quads; q++) {\n const b = keys[q] ?? 0;\n const at = (counts[b] ?? 0) * 6;\n counts[b] = (counts[b] ?? 0) + 1;\n const o = q * 6;\n for (let j = 0; j < 6; j++) out[at + j] = indices[o + j] ?? 0;\n }\n};\n\n/**\n * One transparent item made of several meshes: vertices concatenated (the\n * opacity of every mesh multiplies the alpha of its vertex colors), indices\n * shifted. Drawn with opacity 1, without writing depth.\n */\nexport const mergeMeshes = (\n meshes: readonly MeshItem[],\n key: string,\n version: number,\n): MeshItem => {\n let vertexCount = 0;\n let indexCount = 0;\n for (const m of meshes) {\n vertexCount += m.vertexCount;\n indexCount += m.indices.length;\n }\n const vertices = new ArrayBuffer(vertexCount * VERTEX_STRIDE);\n const bytes = new Uint8Array(vertices);\n const indices = new Uint32Array(indexCount);\n let base = 0;\n let at = 0;\n for (const m of meshes) {\n const length = Math.min(\n m.vertices.byteLength,\n m.vertexCount * VERTEX_STRIDE,\n );\n bytes.set(new Uint8Array(m.vertices, 0, length), base * VERTEX_STRIDE);\n const opacity = Math.max(0, Math.min(1, m.opacity));\n if (opacity < 1) {\n for (let v = 0; v < m.vertexCount; v++) {\n const a = (base + v) * VERTEX_STRIDE + 27;\n bytes[a] = Math.round((bytes[a] ?? 0) * opacity);\n }\n }\n const source = m.indices;\n for (let j = 0; j < source.length; j++)\n indices[at + j] = (source[j] ?? 0) + base;\n base += m.vertexCount;\n at += source.length;\n }\n return {\n kind: \"mesh\",\n key,\n version,\n opacity: 1,\n transparent: true,\n vertices,\n vertexCount,\n indices,\n };\n};\n\ninterface SortedMesh {\n version: number;\n source: Uint32Array;\n indices: Uint32Array;\n order: number;\n}\n\nconst sameMatrix = (a: Float32Array | null, b: Float32Array) => {\n if (!a) return false;\n for (let i = 0; i < 16; i++) if (a[i] !== b[i]) return false;\n return true;\n};\n\nconst isTransparentMesh = (item: Item3D): item is MeshItem =>\n item.kind === \"mesh\" && !writesDepth(item);\n\n/** Drawn without writing depth (transparent meshes, blended points) */\nconst isBlended = (item: Item3D) => item.kind !== \"lines\" && !writesDepth(item);\n\n/** Made of whole quads: its triangles can be sorted by pairs */\nconst isQuadMesh = (item: MeshItem) =>\n item.indices.length > 0 && item.indices.length % 6 === 0;\n\n/** Center of the bounding box of a mesh's vertices or a cloud's points */\nexport const itemCenter = (item: Item3D): [number, number, number] => {\n const mesh = item.kind === \"mesh\";\n const buffer = mesh ? item.vertices : item.data;\n const stride = (mesh ? VERTEX_STRIDE : POINT_STRIDE) / 4;\n const count = mesh ? item.vertexCount : item.count;\n const f = new Float32Array(\n buffer,\n 0,\n Math.min(Math.floor(buffer.byteLength / 4), count * stride),\n );\n const min = [Infinity, Infinity, Infinity];\n const max = [-Infinity, -Infinity, -Infinity];\n for (let o = 0; o + 2 < f.length; o += stride) {\n for (let k = 0; k < 3; k++) {\n const v = f[o + k] ?? 0;\n if (v < (min[k] ?? 0)) min[k] = v;\n if (v > (max[k] ?? 0)) max[k] = v;\n }\n }\n return [0, 1, 2].map((k) =>\n min[k]! <= max[k]! ? (min[k]! + max[k]!) / 2 : 0,\n ) as [number, number, number];\n};\n\n/**\n * Sorter of the transparent items: returns the items with the transparent\n * meshes merged into one item (`MERGED_KEY`) whose quads are in back-to-front\n * order, or — above `MAX_SORTED_QUADS` or for meshes that aren't made of\n * quads — the transparent meshes each with its own quads sorted; the blended\n * items (meshes and point clouds) come by decreasing depth of their center.\n * `order` changes when only the indices must be uploaded again.\n */\nexport const createDepthSorter = () => {\n const sorted = new Map<string, SortedMesh>();\n const centers = new Map<\n string,\n { version: number; center: [number, number, number] }\n >();\n let merged: { signature: string; item: MeshItem } | null = null;\n let mergedVersion = 0;\n let view: Float32Array | null = null;\n let orthographic = false;\n let order = 0;\n let scratch: { keys: Float32Array; counts: Uint32Array } | null = null;\n\n /** Sorts the quads of a mesh when stale or when the camera moved */\n const sortMesh = (\n item: MeshItem,\n frame: Frame3D,\n moved: boolean,\n seen: Set<string>,\n ): MeshItem => {\n const quads = item.indices.length / 6;\n if (!isQuadMesh(item) || quads < 2 || quads > MAX_SORTED_QUADS) return item;\n seen.add(item.key);\n let entry = sorted.get(item.key);\n const stale =\n !entry || entry.version !== item.version || entry.source !== item.indices;\n if (stale || moved) {\n if (!scratch || scratch.keys.length < quads)\n scratch = {\n keys: new Float32Array(Math.max(quads, 1024)),\n counts: new Uint32Array(BUCKETS),\n };\n const out =\n entry && !stale && entry.indices.length === item.indices.length\n ? entry.indices\n : new Uint32Array(item.indices.length);\n sortQuads(\n item.indices,\n new Float32Array(item.vertices),\n frame.viewProj,\n frame.orthographic,\n out,\n scratch,\n );\n entry = {\n version: item.version,\n source: item.indices,\n indices: out,\n order: ++order,\n };\n sorted.set(item.key, entry);\n }\n return { ...item, indices: entry!.indices, order: entry!.order };\n };\n\n /** Camera depth of the center of an item (larger: farther) */\n const centerDepth = (item: Item3D, frame: Frame3D) => {\n let entry = centers.get(item.key);\n if (!entry || entry.version !== item.version) {\n entry = { version: item.version, center: itemCenter(item) };\n centers.set(item.key, entry);\n }\n const m = frame.viewProj;\n const row = frame.orthographic ? 2 : 3;\n const [x, y, z] = entry.center;\n return (\n (m[row] ?? 0) * x +\n (m[row + 4] ?? 0) * y +\n (m[row + 8] ?? 0) * z +\n (m[row + 12] ?? 0)\n );\n };\n\n /** The blended items of `items` by decreasing depth (stable) */\n const byDepth = (items: Item3D[], frame: Frame3D): Item3D[] => {\n const slots: number[] = [];\n items.forEach((it, i) => {\n if (isBlended(it)) slots.push(i);\n });\n if (slots.length < 2) return items;\n const ordered = slots\n .map((i, k) => ({\n item: items[i]!,\n k,\n depth: centerDepth(items[i]!, frame),\n }))\n .sort((a, b) => b.depth - a.depth || a.k - b.k);\n slots.forEach((i, k) => {\n items[i] = ordered[k]!.item;\n });\n return items;\n };\n\n return (items: readonly Item3D[], frame: Frame3D): readonly Item3D[] => {\n const transparent = items.filter(isTransparentMesh);\n const blended = items.filter(isBlended);\n if (transparent.length === 0 && blended.length < 2) {\n sorted.clear();\n centers.clear();\n merged = null;\n return items;\n }\n const moved =\n !sameMatrix(view, frame.viewProj) || orthographic !== frame.orthographic;\n if (moved) {\n view = Float32Array.from(frame.viewProj);\n orthographic = frame.orthographic;\n }\n const seen = new Set<string>();\n let quads = 0;\n for (const m of transparent) quads += m.indices.length / 6;\n const result: Item3D[] = [];\n if (transparent.length === 0) {\n merged = null;\n result.push(...items);\n } else if (\n transparent.length >= 2 &&\n quads <= MAX_SORTED_QUADS &&\n transparent.every(isQuadMesh)\n ) {\n // one item: every transparent quad sorted together\n const signature = transparent\n .map((m) => `${m.key}@${m.version}@${m.opacity}`)\n .join(\"|\");\n if (!merged || merged.signature !== signature) {\n merged = {\n signature,\n item: mergeMeshes(transparent, MERGED_KEY, ++mergedVersion),\n };\n }\n const item = sortMesh(merged.item, frame, moved, seen);\n let placed = false;\n for (const it of items) {\n if (!isTransparentMesh(it)) result.push(it);\n else if (!placed) {\n result.push(item);\n placed = true;\n }\n }\n } else {\n merged = null;\n // each mesh with its own quads sorted (ordered with the clouds below)\n let next = 0;\n const own = transparent.map((m) => sortMesh(m, frame, moved, seen));\n for (const it of items)\n result.push(isTransparentMesh(it) ? own[next++]! : it);\n }\n for (const key of sorted.keys()) if (!seen.has(key)) sorted.delete(key);\n byDepth(result, frame);\n for (const key of centers.keys())\n if (!result.some((it) => it.key === key)) centers.delete(key);\n return result;\n };\n};\n"],"mappings":"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"}
|
|
@@ -44,9 +44,26 @@ export interface Chart3DColumnData {
|
|
|
44
44
|
size?: ArrayLike<number>;
|
|
45
45
|
/** Per-point values mapped to the color scale (`colorBy: "value"`) */
|
|
46
46
|
value?: ArrayLike<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Per-point colors as `0xRRGGBB` numbers (a `Uint32Array` for large
|
|
49
|
+
* clouds); win over the series color and the color scale
|
|
50
|
+
*/
|
|
51
|
+
color?: ArrayLike<number>;
|
|
47
52
|
/** Per-point texts shown in the tooltip */
|
|
48
53
|
label?: readonly string[];
|
|
49
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Look of the scatter dots: `"sphere"` shaded balls, `"disc"` flat
|
|
57
|
+
* anti-aliased discs, `"glow"` soft discs with a gaussian halo (stars,
|
|
58
|
+
* dense clouds; pairs well with `blend: "additive"`)
|
|
59
|
+
*/
|
|
60
|
+
export type Scatter3DPointStyle = "sphere" | "disc" | "glow";
|
|
61
|
+
/**
|
|
62
|
+
* How the dots mix with what is behind them: `"normal"` alpha blending, or
|
|
63
|
+
* `"additive"` light accumulation (dense regions get brighter; meant for
|
|
64
|
+
* dark backgrounds, the dots don't hide each other)
|
|
65
|
+
*/
|
|
66
|
+
export type Scatter3DBlend = "normal" | "additive";
|
|
50
67
|
/** Points of a scatter or line series: objects, `[x, y, z]` tuples or columns */
|
|
51
68
|
export type Chart3DPointData = readonly Chart3DPoint[] | readonly (readonly [number, number, number])[] | Chart3DColumnData;
|
|
52
69
|
/** Options shared by every 3D series */
|
|
@@ -95,6 +112,16 @@ export interface Scatter3DSeries extends Chart3DSeriesBase {
|
|
|
95
112
|
* @default true
|
|
96
113
|
*/
|
|
97
114
|
perspectiveSize?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Look of the dots: shaded spheres, flat discs or glowing discs
|
|
117
|
+
* @default "sphere"
|
|
118
|
+
*/
|
|
119
|
+
pointStyle?: Scatter3DPointStyle;
|
|
120
|
+
/**
|
|
121
|
+
* Blending of the dots: `"additive"` accumulates light (dark backgrounds)
|
|
122
|
+
* @default "normal"
|
|
123
|
+
*/
|
|
124
|
+
blend?: Scatter3DBlend;
|
|
98
125
|
}
|
|
99
126
|
/** A 3D polyline (trajectory); `NaN` coordinates break the line */
|
|
100
127
|
export interface Line3DSeries extends Chart3DSeriesBase {
|
|
@@ -452,6 +479,15 @@ export interface Chart3DOptions {
|
|
|
452
479
|
interaction?: boolean | Chart3DInteractionOptions;
|
|
453
480
|
/** Lighting of the surfaces and bars */
|
|
454
481
|
lighting?: Chart3DLightingOptions;
|
|
482
|
+
/**
|
|
483
|
+
* Brightness of the light added by `blend: "additive"` series. On WebGPU
|
|
484
|
+
* and WebGL2 the added light is tone mapped (a soft shoulder that keeps the
|
|
485
|
+
* colors): dense glowing regions saturate gracefully instead of turning
|
|
486
|
+
* white, so raise it to bring out faint clouds; other backends scale the
|
|
487
|
+
* added light linearly
|
|
488
|
+
* @default 1
|
|
489
|
+
*/
|
|
490
|
+
exposure?: number;
|
|
455
491
|
/**
|
|
456
492
|
* Backend of the data layer: `auto` tries WebGPU, then WebGL2, then WebGL,
|
|
457
493
|
* then Canvas2D (CPU projection, decimated) and skips GPUs running in software
|
|
@@ -44,9 +44,26 @@ export interface Chart3DColumnData {
|
|
|
44
44
|
size?: ArrayLike<number>;
|
|
45
45
|
/** Per-point values mapped to the color scale (`colorBy: "value"`) */
|
|
46
46
|
value?: ArrayLike<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Per-point colors as `0xRRGGBB` numbers (a `Uint32Array` for large
|
|
49
|
+
* clouds); win over the series color and the color scale
|
|
50
|
+
*/
|
|
51
|
+
color?: ArrayLike<number>;
|
|
47
52
|
/** Per-point texts shown in the tooltip */
|
|
48
53
|
label?: readonly string[];
|
|
49
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Look of the scatter dots: `"sphere"` shaded balls, `"disc"` flat
|
|
57
|
+
* anti-aliased discs, `"glow"` soft discs with a gaussian halo (stars,
|
|
58
|
+
* dense clouds; pairs well with `blend: "additive"`)
|
|
59
|
+
*/
|
|
60
|
+
export type Scatter3DPointStyle = "sphere" | "disc" | "glow";
|
|
61
|
+
/**
|
|
62
|
+
* How the dots mix with what is behind them: `"normal"` alpha blending, or
|
|
63
|
+
* `"additive"` light accumulation (dense regions get brighter; meant for
|
|
64
|
+
* dark backgrounds, the dots don't hide each other)
|
|
65
|
+
*/
|
|
66
|
+
export type Scatter3DBlend = "normal" | "additive";
|
|
50
67
|
/** Points of a scatter or line series: objects, `[x, y, z]` tuples or columns */
|
|
51
68
|
export type Chart3DPointData = readonly Chart3DPoint[] | readonly (readonly [number, number, number])[] | Chart3DColumnData;
|
|
52
69
|
/** Options shared by every 3D series */
|
|
@@ -95,6 +112,16 @@ export interface Scatter3DSeries extends Chart3DSeriesBase {
|
|
|
95
112
|
* @default true
|
|
96
113
|
*/
|
|
97
114
|
perspectiveSize?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Look of the dots: shaded spheres, flat discs or glowing discs
|
|
117
|
+
* @default "sphere"
|
|
118
|
+
*/
|
|
119
|
+
pointStyle?: Scatter3DPointStyle;
|
|
120
|
+
/**
|
|
121
|
+
* Blending of the dots: `"additive"` accumulates light (dark backgrounds)
|
|
122
|
+
* @default "normal"
|
|
123
|
+
*/
|
|
124
|
+
blend?: Scatter3DBlend;
|
|
98
125
|
}
|
|
99
126
|
/** A 3D polyline (trajectory); `NaN` coordinates break the line */
|
|
100
127
|
export interface Line3DSeries extends Chart3DSeriesBase {
|
|
@@ -452,6 +479,15 @@ export interface Chart3DOptions {
|
|
|
452
479
|
interaction?: boolean | Chart3DInteractionOptions;
|
|
453
480
|
/** Lighting of the surfaces and bars */
|
|
454
481
|
lighting?: Chart3DLightingOptions;
|
|
482
|
+
/**
|
|
483
|
+
* Brightness of the light added by `blend: "additive"` series. On WebGPU
|
|
484
|
+
* and WebGL2 the added light is tone mapped (a soft shoulder that keeps the
|
|
485
|
+
* colors): dense glowing regions saturate gracefully instead of turning
|
|
486
|
+
* white, so raise it to bring out faint clouds; other backends scale the
|
|
487
|
+
* added light linearly
|
|
488
|
+
* @default 1
|
|
489
|
+
*/
|
|
490
|
+
exposure?: number;
|
|
455
491
|
/**
|
|
456
492
|
* Backend of the data layer: `auto` tries WebGPU, then WebGL2, then WebGL,
|
|
457
493
|
* then Canvas2D (CPU projection, decimated) and skips GPUs running in software
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./render-types.cjs"),t=require("./shaders.cjs");var n=/swiftshader|llvmpipe|softpipe|software|basic render driver|microsoft basic/i,r=e=>{let t=e.getExtension(`WEBGL_debug_renderer_info`),r=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER);return n.test(String(r??``))},i=[`u_viewProj`,`u_viewport`,`u_eye`,`u_light`,`u_material`,`u_params`,`u_fog`],a=(e,t,n)=>{let r=(t,n)=>{let r=e.createShader(t);return r?(e.shaderSource(r,n),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS)?r:(e.deleteShader(r),null)):null},a=r(e.VERTEX_SHADER,t.vertex),o=r(e.FRAGMENT_SHADER,t.fragment),s=e.createProgram();if(!a||!o||!s)return null;if(e.attachShader(s,a),e.attachShader(s,o),n.forEach((t,n)=>e.bindAttribLocation(s,n,t)),e.linkProgram(s),e.deleteShader(a),e.deleteShader(o),!e.getProgramParameter(s,e.LINK_STATUS))return e.deleteProgram(s),null;let c={};for(let t of i)c[t]=e.getUniformLocation(s,t);return{program:s,uniforms:c}},o=new Float32Array([0,0,1,0,0,1,1,1]),s=4,c=(n,i,c,l=!1)=>{let u={alpha:!0,premultipliedAlpha:!0,antialias:!0,depth:!0,stencil:!1,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:l},d=n.getContext(i===2?`webgl2`:`webgl`,u);if(!d)return null;let f=()=>d.getExtension(`WEBGL_lose_context`)?.loseContext(),p=i===2?d:null,m=p?null:d.getExtension(`ANGLE_instanced_arrays`),h=p?!0:!!d.getExtension(`OES_element_index_uint`);if(!p&&(!m||!h)||l&&r(d))return f(),null;let g=(e,t)=>{p?p.vertexAttribDivisor(e,t):m?.vertexAttribDivisorANGLE(e,t)},_=e=>{p?p.drawArraysInstanced(d.TRIANGLE_STRIP,0,4,e):m?.drawArraysInstancedANGLE(d.TRIANGLE_STRIP,0,4,e)},v=t.glslPrograms(i),y=a(d,v.points,t.GLSL_ATTRIBUTES.points),b=a(d,v.mesh,t.GLSL_ATTRIBUTES.mesh),x=a(d,v.lines,t.GLSL_ATTRIBUTES.lines),S=d.createBuffer();if(!y||!b||!x||!S)return f(),null;let C={points:y,mesh:b,lines:x};d.bindBuffer(d.ARRAY_BUFFER,S),d.bufferData(d.ARRAY_BUFFER,o,d.STATIC_DRAW);let w=!1,T=e=>{e.preventDefault(),w=!0,c()};n.addEventListener(`webglcontextlost`,T);let E=new Map,D=new Float32Array(40),O=(e,t,n,r,i,a)=>{d.enableVertexAttribArray(e),d.vertexAttribPointer(e,t,n,n===d.UNSIGNED_BYTE,r,i),g(e,+!!a)},k=(e,t)=>{let n=d.FLOAT,r=d.UNSIGNED_BYTE,i;e.kind===`mesh`?(d.bindBuffer(d.ARRAY_BUFFER,t.vertex),O(0,3,n,28,0,!1),O(1,3,n,28,12,!1),O(2,4,r,28,24,!1),i=3):(d.bindBuffer(d.ARRAY_BUFFER,S),O(0,2,n,0,0,!1),d.bindBuffer(d.ARRAY_BUFFER,t.vertex),e.kind===`points`?(O(1,3,n,20,0,!0),O(2,1,n,20,12,!0),O(3,4,r,20,16,!0)):(O(1,3,n,28,0,!0),O(2,3,n,28,12,!0),O(3,4,r,28,24,!0)),i=4);for(let e=i;e<s;e++)d.disableVertexAttribArray(e),g(e,0)},A=e=>{let t=E.get(e.key);if(t&&t.version===e.version&&t.kind===e.kind)return e.kind===`mesh`&&t.index&&(e.order??0)!==t.order&&(d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,t.index),d.bufferSubData(d.ELEMENT_ARRAY_BUFFER,0,e.indices),t.order=e.order??0),t;t&&(d.deleteBuffer(t.vertex),t.index&&d.deleteBuffer(t.index),E.delete(e.key));let n=d.createBuffer();if(!n)return null;d.bindBuffer(d.ARRAY_BUFFER,n),d.bufferData(d.ARRAY_BUFFER,e.kind===`mesh`?e.vertices:e.data,d.STATIC_DRAW);let r=null;if(e.kind===`mesh`){if(r=d.createBuffer(),!r)return d.deleteBuffer(n),null;d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,r),d.bufferData(d.ELEMENT_ARRAY_BUFFER,e.indices,e.order===void 0?d.STATIC_DRAW:d.DYNAMIC_DRAW)}let i={version:e.version,kind:e.kind,vertex:n,index:r,order:e.kind===`mesh`?e.order??0:0};return E.set(e.key,i),i};return{kind:i===2?`webgl2`:`webgl`,canvas:n,resize(e,t){n.width=Math.max(1,e),n.height=Math.max(1,t)},render(r,i){if(w||d.isContextLost())return;d.viewport(0,0,n.width,n.height),d.clearColor(0,0,0,0),d.clearDepth(1),d.depthMask(!0),d.clear(d.COLOR_BUFFER_BIT|d.DEPTH_BUFFER_BIT),d.enable(d.BLEND),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.enable(d.DEPTH_TEST),d.depthFunc(d.LEQUAL),d.disable(d.CULL_FACE);let a=new Set;for(let n of e.drawOrder(r)){a.add(n.key);let e=n.kind===`mesh`?n.indices.length:n.count;if(e<=0)continue;let r=A(n);if(!r)continue;let o=C[n.kind];d.useProgram(o.program);let s=t.itemUniforms(n,i,D),c=o.uniforms;d.uniformMatrix4fv(c.u_viewProj,!1,s.subarray(0,16)),d.uniform4fv(c.u_viewport,s.subarray(16,20)),d.uniform4fv(c.u_eye,s.subarray(20,24)),d.uniform4fv(c.u_light,s.subarray(24,28)),d.uniform4fv(c.u_material,s.subarray(28,32)),d.uniform4fv(c.u_params,s.subarray(32,36)),d.uniform4fv(c.u_fog,s.subarray(36,40)),d.depthMask(t.writesDepth(n)),k(n,r),n.kind===`mesh`?(d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,r.index),d.drawElements(d.TRIANGLES,e,d.UNSIGNED_INT,0)):_(e)}d.depthMask(!0);for(let[e,t]of E)a.has(e)||(d.deleteBuffer(t.vertex),t.index&&d.deleteBuffer(t.index),E.delete(e))},destroy(){if(n.removeEventListener(`webglcontextlost`,T),!d.isContextLost()){for(let e of E.values())d.deleteBuffer(e.vertex),e.index&&d.deleteBuffer(e.index);for(let e of Object.values(C))d.deleteProgram(e.program);d.deleteBuffer(S)}E.clear(),f()}}};exports.SOFTWARE_RENDERER=n,exports.createWebGl3D=c,exports.isSoftwareRenderer=r;
|
|
1
|
+
const e=require("../renderers/gl-budget.cjs"),t=require("./render-types.cjs"),n=require("./oit.cjs"),r=require("./shaders.cjs");var i=/swiftshader|llvmpipe|softpipe|software|basic render driver|microsoft basic/i,a=e=>{let t=e.getExtension(`WEBGL_debug_renderer_info`),n=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER);return i.test(String(n??``))},o=[`u_viewProj`,`u_viewport`,`u_eye`,`u_light`,`u_material`,`u_params`,`u_fog`],s=(e,t,n)=>{let r=(t,n)=>{let r=e.createShader(t);return r?(e.shaderSource(r,n),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS)?r:(e.deleteShader(r),null)):null},i=r(e.VERTEX_SHADER,t.vertex),a=r(e.FRAGMENT_SHADER,t.fragment),s=e.createProgram();if(!i||!a||!s)return null;if(e.attachShader(s,i),e.attachShader(s,a),n.forEach((t,n)=>e.bindAttribLocation(s,n,t)),e.linkProgram(s),e.deleteShader(i),e.deleteShader(a),!e.getProgramParameter(s,e.LINK_STATUS))return e.deleteProgram(s),null;let c={};for(let t of o)c[t]=e.getUniformLocation(s,t);return{program:s,uniforms:c}},c=new Float32Array([0,0,1,0,0,1,1,1]),l=4,u=4,d=e=>{let t=Number(e.getParameter(e.MAX_SAMPLES))||0,n=Math.max(0,Math.min(u,t));if(!e.getExtension(`EXT_color_buffer_float`))return{samples:n,orderIndependent:!1};let r=e.getInternalformatParameter(e.RENDERBUFFER,e.RGBA16F,e.SAMPLES),i=0;for(let e=0;e<(r?.length??0);e++)i=Math.max(i,r?.[e]??0);return n>1&&i<2?{samples:n,orderIndependent:!1}:{samples:Math.min(n,i||n),orderIndependent:!0}},f=(i,o,u,f=!1)=>{let p={alpha:!0,premultipliedAlpha:!0,antialias:o===1,depth:!0,stencil:!1,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:f},m=i.getContext(o===2?`webgl2`:`webgl`,p);if(!m)return null;let h=()=>m.getExtension(`WEBGL_lose_context`)?.loseContext(),g=o===2?m:null;if(f&&a(m))return h(),null;let _=null,v=(e,t)=>{g?g.vertexAttribDivisor(e,t):_?.vertexAttribDivisorANGLE(e,t)},y=e=>{g?g.drawArraysInstanced(m.TRIANGLE_STRIP,0,4,e):_?.drawArraysInstancedANGLE(m.TRIANGLE_STRIP,0,4,e)},b=null,x=null,S={samples:0,orderIndependent:!1},C=null,w=null,T=()=>{b=null,x=null,C=null,w=null,_=g?null:m.getExtension(`ANGLE_instanced_arrays`);let e=g?!0:!!m.getExtension(`OES_element_index_uint`);if(!g&&(!_||!e))return!1;let t=r.glslPrograms(o),i=s(m,t.points,r.GLSL_ATTRIBUTES.points),a=s(m,t.mesh,r.GLSL_ATTRIBUTES.mesh),l=s(m,t.lines,r.GLSL_ATTRIBUTES.lines),u=m.createBuffer();if(!i||!a||!l||!u)return!1;if(b={points:i,mesh:a,lines:l},x=u,m.bindBuffer(m.ARRAY_BUFFER,x),m.bufferData(m.ARRAY_BUFFER,c,m.STATIC_DRAW),S=g?d(g):{samples:0,orderIndependent:!1},g&&S.orderIndependent){let e=r.glslOitPrograms(),t=s(m,e.points,r.GLSL_ATTRIBUTES.points),i=s(m,e.mesh,r.GLSL_ATTRIBUTES.mesh),a=s(m,n.GLSL_COMPOSITE,[]);if(t&&i&&a)C={points:t,mesh:i,composite:a.program},m.useProgram(a.program),m.uniform1i(m.getUniformLocation(a.program,`u_accum`),0),m.uniform1i(m.getUniformLocation(a.program,`u_extra`),1);else for(let e of[t,i,a])e&&m.deleteProgram(e.program)}return!0};if(!T())return h(),null;let E=e=>{if(e.oit){m.deleteFramebuffer(e.oit.fbo);for(let t of e.oit.buffers)m.deleteRenderbuffer(t);for(let t of e.oit.resolved)m.deleteFramebuffer(t);for(let t of e.oit.textures)m.deleteTexture(t);e.oit=null}},D=()=>{w&&(E(w),m.deleteFramebuffer(w.main),m.deleteRenderbuffer(w.color),m.deleteRenderbuffer(w.depth),w=null)},O=(e,t,n)=>{let r=m.createRenderbuffer();return!g||!r?r:(m.bindRenderbuffer(m.RENDERBUFFER,r),S.samples>1?g.renderbufferStorageMultisample(m.RENDERBUFFER,S.samples,e,t,n):m.renderbufferStorage(m.RENDERBUFFER,e,t,n),r)},k=()=>m.checkFramebufferStatus(m.FRAMEBUFFER)===m.FRAMEBUFFER_COMPLETE,A=()=>{if(!g)return null;let{width:e,height:t}=i;if(w?.width===e&&w.height===t)return w;D();let n=m.createFramebuffer(),r=O(g.RGBA8,e,t),a=O(g.DEPTH_COMPONENT24,e,t);return!n||!r||!a?null:(m.bindFramebuffer(m.FRAMEBUFFER,n),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,m.RENDERBUFFER,r),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a),w={width:e,height:t,main:n,color:r,depth:a,oit:null},k()?w:(D(),null))},j=e=>{if(e.oit||!g)return e.oit;let{width:t,height:n}=e,r=m.createFramebuffer(),i=O(g.RGBA16F,t,n),a=O(g.RGBA16F,t,n),o=[m.createFramebuffer(),m.createFramebuffer()],s=[m.createTexture(),m.createTexture()],[c,l]=o,[u,d]=s;if(!r||!i||!a||!c||!l||!u||!d)return null;e.oit={fbo:r,buffers:[i,a],resolved:[c,l],textures:[u,d]},m.bindFramebuffer(m.FRAMEBUFFER,r),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,m.RENDERBUFFER,i),m.framebufferRenderbuffer(m.FRAMEBUFFER,g.COLOR_ATTACHMENT1,m.RENDERBUFFER,a),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,e.depth),g.drawBuffers([m.COLOR_ATTACHMENT0,g.COLOR_ATTACHMENT1]);let f=k();return e.oit.textures.forEach((r,i)=>{m.bindTexture(m.TEXTURE_2D,r),g.texStorage2D(m.TEXTURE_2D,1,g.RGBA16F,t,n),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.NEAREST),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST),m.bindFramebuffer(m.FRAMEBUFFER,e.oit.resolved[i]),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,m.TEXTURE_2D,r,0),f&&(f=k())}),m.bindTexture(m.TEXTURE_2D,null),f||(E(e),C=null),e.oit},M=!1,N=null,P=new Map,F=e.claimGlSlot(i,m,{suspend:()=>{P.clear(),b=null,C=null,x=null,w=null},restore:()=>{M||(T()?N&&H(N.items,N.frame):(M=!0,u()))},lost:()=>{M=!0,u()}}),I=new Float32Array(40),L=(e,t,n,r,i,a)=>{m.enableVertexAttribArray(e),m.vertexAttribPointer(e,t,n,n===m.UNSIGNED_BYTE,r,i),v(e,+!!a)},R=(e,t)=>{let n=m.FLOAT,r=m.UNSIGNED_BYTE,i;e.kind===`mesh`?(m.bindBuffer(m.ARRAY_BUFFER,t.vertex),L(0,3,n,28,0,!1),L(1,3,n,28,12,!1),L(2,4,r,28,24,!1),i=3):(m.bindBuffer(m.ARRAY_BUFFER,x),L(0,2,n,0,0,!1),m.bindBuffer(m.ARRAY_BUFFER,t.vertex),e.kind===`points`?(L(1,3,n,20,0,!0),L(2,1,n,20,12,!0),L(3,4,r,20,16,!0)):(L(1,3,n,28,0,!0),L(2,3,n,28,12,!0),L(3,4,r,28,24,!0)),i=4);for(let e=i;e<l;e++)m.disableVertexAttribArray(e),v(e,0)},z=e=>{let t=P.get(e.key);if(t&&t.version===e.version&&t.kind===e.kind)return e.kind===`mesh`&&t.index&&(e.order??0)!==t.order&&(m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,t.index),m.bufferSubData(m.ELEMENT_ARRAY_BUFFER,0,e.indices),t.order=e.order??0),t;t&&(m.deleteBuffer(t.vertex),t.index&&m.deleteBuffer(t.index),P.delete(e.key));let n=m.createBuffer();if(!n)return null;m.bindBuffer(m.ARRAY_BUFFER,n),m.bufferData(m.ARRAY_BUFFER,e.kind===`mesh`?e.vertices:e.data,m.STATIC_DRAW);let r=null;if(e.kind===`mesh`){if(r=m.createBuffer(),!r)return m.deleteBuffer(n),null;m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,r),m.bufferData(m.ELEMENT_ARRAY_BUFFER,e.indices,e.order===void 0?m.STATIC_DRAW:m.DYNAMIC_DRAW)}let i={version:e.version,kind:e.kind,vertex:n,index:r,order:e.kind===`mesh`?e.order??0:0};return P.set(e.key,i),i},B=(e,t,n,i)=>{i.add(e.key);let a=e.kind===`mesh`?e.indices.length:e.count;if(a<=0)return;let o=z(e);if(!o)return;m.useProgram(t.program);let s=r.itemUniforms(e,n,I),c=t.uniforms;m.uniformMatrix4fv(c.u_viewProj,!1,s.subarray(0,16)),m.uniform4fv(c.u_viewport,s.subarray(16,20)),m.uniform4fv(c.u_eye,s.subarray(20,24)),m.uniform4fv(c.u_light,s.subarray(24,28)),m.uniform4fv(c.u_material,s.subarray(28,32)),m.uniform4fv(c.u_params,s.subarray(32,36)),m.uniform4fv(c.u_fog,s.subarray(36,40)),R(e,o),e.kind===`mesh`?(m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,o.index),m.drawElements(m.TRIANGLES,a,m.UNSIGNED_INT,0)):y(a)},V=(e,t,n,r,i)=>{if(!g||!C)return;let{width:a,height:o}=e;m.bindFramebuffer(m.FRAMEBUFFER,t.fbo),g.clearBufferfv(g.COLOR,0,[0,0,0,0]),g.clearBufferfv(g.COLOR,1,[0,0,0,0]),m.depthMask(!1),m.blendFunc(m.ONE,m.ONE);for(let e of n)e.kind!==`lines`&&B(e,C[e.kind],r,i);m.bindFramebuffer(g.READ_FRAMEBUFFER,t.fbo),t.resolved.forEach((e,t)=>{g.readBuffer(t===0?m.COLOR_ATTACHMENT0:g.COLOR_ATTACHMENT1),m.bindFramebuffer(g.DRAW_FRAMEBUFFER,e),g.blitFramebuffer(0,0,a,o,0,0,a,o,m.COLOR_BUFFER_BIT,m.NEAREST)}),m.bindFramebuffer(m.FRAMEBUFFER,e.main),m.blendFunc(m.ONE,m.ONE_MINUS_SRC_ALPHA),m.disable(m.DEPTH_TEST);for(let e=0;e<l;e++)m.disableVertexAttribArray(e),v(e,0);m.useProgram(C.composite),t.textures.forEach((e,t)=>{m.activeTexture(m.TEXTURE0+t),m.bindTexture(m.TEXTURE_2D,e)}),m.drawArrays(m.TRIANGLES,0,3),m.bindTexture(m.TEXTURE_2D,null),m.activeTexture(m.TEXTURE0),m.bindTexture(m.TEXTURE_2D,null),m.enable(m.DEPTH_TEST)},H=(e,n)=>{let r=b;if(!r)return;let a=A();m.bindFramebuffer(m.FRAMEBUFFER,a?a.main:null),m.viewport(0,0,i.width,i.height),m.clearColor(0,0,0,0),m.clearDepth(1),m.depthMask(!0),m.clear(m.COLOR_BUFFER_BIT|m.DEPTH_BUFFER_BIT),m.enable(m.BLEND),m.blendFunc(m.ONE,m.ONE_MINUS_SRC_ALPHA),m.enable(m.DEPTH_TEST),m.depthFunc(m.LEQUAL),m.disable(m.CULL_FACE);let o=new Set,s=t.drawOrder(e),c=s.filter(e=>t.drawRank(e)===2),l=a&&C&&c.length>0?j(a):null,u=!1,d=!l;for(let e of s){let i=t.drawRank(e);if(l&&i===2)continue;a&&l&&i===3&&!d&&(V(a,l,c,n,o),d=!0,u=!1),m.depthMask(t.writesDepth(e));let s=e.kind===`points`&&!!e.additive;s!==u&&(s?m.blendFuncSeparate(m.ONE,m.ONE,m.ONE,m.ONE_MINUS_SRC_ALPHA):m.blendFunc(m.ONE,m.ONE_MINUS_SRC_ALPHA),u=s),B(e,r[e.kind],n,o)}a&&l&&!d&&(V(a,l,c,n,o),u=!1),m.depthMask(!0),u&&m.blendFunc(m.ONE,m.ONE_MINUS_SRC_ALPHA),a&&g&&(m.bindFramebuffer(g.READ_FRAMEBUFFER,a.main),m.bindFramebuffer(g.DRAW_FRAMEBUFFER,null),g.blitFramebuffer(0,0,a.width,a.height,0,0,a.width,a.height,m.COLOR_BUFFER_BIT,m.NEAREST),m.bindFramebuffer(m.FRAMEBUFFER,null));for(let[e,t]of P)o.has(e)||(m.deleteBuffer(t.vertex),t.index&&m.deleteBuffer(t.index),P.delete(e))};return{kind:o===2?`webgl2`:`webgl`,canvas:i,get orderIndependent(){return!!C},resize(e,t){i.width=Math.max(1,e),i.height=Math.max(1,t)},render(e,t){N={items:e,frame:t},!(M||!F.use()||m.isContextLost())&&H(e,t)},destroy(){if(F.release(),N=null,!m.isContextLost()){for(let e of P.values())m.deleteBuffer(e.vertex),e.index&&m.deleteBuffer(e.index);for(let e of Object.values(b??{}))m.deleteProgram(e.program);C&&(m.deleteProgram(C.points.program),m.deleteProgram(C.mesh.program),m.deleteProgram(C.composite)),D(),m.deleteBuffer(x)}C=null,b=null,x=null,w=null,P.clear(),h()}}};exports.SOFTWARE_RENDERER=i,exports.createWebGl3D=f,exports.isSoftwareRenderer=a,exports.webGl2Capabilities=d;
|
|
2
2
|
//# sourceMappingURL=webgl.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl.cjs","names":["glslPrograms","GLSL_ATTRIBUTES","drawOrder","itemUniforms","writesDepth","require_render_types","require_shaders","SOFTWARE_RENDERER","isSoftwareRenderer","info","gl","name","UNIFORMS","compile","shader","s","type","code","vs","source","fs","program","attributes","i","uniforms","CORNERS","MAX_LOCATIONS","createWebGl3D","requireHardware","canvas","version","loseContext","gl2","angle","uint","divisor","location","value","drawInstanced","count","sources","points","mesh","lines","corners","programs","lost","handleLost","event","onLost","resources","uniformData","attribute","size","stride","offset","bind","F","U8","used","item","res","upload","existing","vertex","index","width","height","seen","items","u","frame","loc","key","p"],"sources":["../../../../../charts/src/engine/three-d/webgl.ts"],"sourcesContent":["// WebGL2 / WebGL (1) backend of the 3D charts: the same GLSL for both\n// (a macro prefix makes it GLSL ES 3.0), instancing through WebGL2 or\n// ANGLE_instanced_arrays, 32-bit indices through WebGL2 or\n// OES_element_index_uint. Attributes are bound for every draw (no vertex\n// array objects in WebGL 1): a few calls per item.\n\nimport type { RendererLostHandler } from \"../renderers/types\";\nimport {\n POINT_STRIDE,\n SEGMENT_STRIDE,\n VERTEX_STRIDE,\n drawOrder,\n type Item3D,\n type Renderer3D,\n} from \"./render-types\";\nimport {\n GLSL_ATTRIBUTES,\n glslPrograms,\n itemUniforms,\n writesDepth,\n type GlslSource,\n} from \"./shaders\";\n\ntype Gl = WebGLRenderingContext | WebGL2RenderingContext;\n\n/** Software rasterizers behind a WebGL context */\nexport const SOFTWARE_RENDERER =\n /swiftshader|llvmpipe|softpipe|software|basic render driver|microsoft basic/i;\n\nexport const isSoftwareRenderer = (gl: Gl): boolean => {\n const info = gl.getExtension(\"WEBGL_debug_renderer_info\");\n const name = info\n ? gl.getParameter(info.UNMASKED_RENDERER_WEBGL)\n : gl.getParameter(gl.RENDERER);\n return SOFTWARE_RENDERER.test(String(name ?? \"\"));\n};\n\nconst UNIFORMS = [\n \"u_viewProj\",\n \"u_viewport\",\n \"u_eye\",\n \"u_light\",\n \"u_material\",\n \"u_params\",\n \"u_fog\",\n] as const;\n\ninterface Program {\n program: WebGLProgram;\n uniforms: Record<(typeof UNIFORMS)[number], WebGLUniformLocation | null>;\n}\n\nconst compile = (\n gl: Gl,\n source: GlslSource,\n attributes: readonly string[],\n): Program | null => {\n const shader = (type: number, code: string) => {\n const s = gl.createShader(type);\n if (!s) return null;\n gl.shaderSource(s, code);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {\n gl.deleteShader(s);\n return null;\n }\n return s;\n };\n const vs = shader(gl.VERTEX_SHADER, source.vertex);\n const fs = shader(gl.FRAGMENT_SHADER, source.fragment);\n const program = gl.createProgram();\n if (!vs || !fs || !program) return null;\n gl.attachShader(program, vs);\n gl.attachShader(program, fs);\n attributes.forEach((name, i) => gl.bindAttribLocation(program, i, name));\n gl.linkProgram(program);\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program);\n return null;\n }\n const uniforms = {} as Program[\"uniforms\"];\n for (const name of UNIFORMS)\n uniforms[name] = gl.getUniformLocation(program, name);\n return { program, uniforms };\n};\n\ninterface ItemResources {\n version: number;\n kind: Item3D[\"kind\"];\n vertex: WebGLBuffer;\n index: WebGLBuffer | null;\n /** `order` of the uploaded indices (meshes) */\n order: number;\n}\n\n/** Corners of the triangle strip of a billboard / segment */\nconst CORNERS = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\nconst MAX_LOCATIONS = 4;\n\nexport const createWebGl3D = (\n canvas: HTMLCanvasElement,\n version: 1 | 2,\n onLost: RendererLostHandler,\n /** Refuses software rendering: the decimating Canvas2D backend is faster there */\n requireHardware = false,\n): Renderer3D | null => {\n const attributes: WebGLContextAttributes = {\n alpha: true,\n premultipliedAlpha: true,\n antialias: true,\n depth: true,\n stencil: false,\n preserveDrawingBuffer: false,\n failIfMajorPerformanceCaveat: requireHardware,\n };\n const gl = canvas.getContext(\n version === 2 ? \"webgl2\" : \"webgl\",\n attributes,\n ) as Gl | null;\n if (!gl) return null;\n const loseContext = () =>\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n const gl2 = version === 2 ? (gl as WebGL2RenderingContext) : null;\n const angle = gl2 ? null : gl.getExtension(\"ANGLE_instanced_arrays\");\n const uint = gl2 ? true : !!gl.getExtension(\"OES_element_index_uint\");\n if (\n (!gl2 && (!angle || !uint)) ||\n (requireHardware && isSoftwareRenderer(gl))\n ) {\n loseContext();\n return null;\n }\n const divisor = (location: number, value: number) => {\n if (gl2) gl2.vertexAttribDivisor(location, value);\n else angle?.vertexAttribDivisorANGLE(location, value);\n };\n const drawInstanced = (count: number) => {\n if (gl2) gl2.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, count);\n else angle?.drawArraysInstancedANGLE(gl.TRIANGLE_STRIP, 0, 4, count);\n };\n\n const sources = glslPrograms(version);\n const points = compile(gl, sources.points, GLSL_ATTRIBUTES.points);\n const mesh = compile(gl, sources.mesh, GLSL_ATTRIBUTES.mesh);\n const lines = compile(gl, sources.lines, GLSL_ATTRIBUTES.lines);\n const corners = gl.createBuffer();\n if (!points || !mesh || !lines || !corners) {\n loseContext();\n return null;\n }\n const programs = { points, mesh, lines };\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.bufferData(gl.ARRAY_BUFFER, CORNERS, gl.STATIC_DRAW);\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n const uniformData = new Float32Array(40);\n\n const attribute = (\n location: number,\n size: number,\n type: number,\n stride: number,\n offset: number,\n perInstance: boolean,\n ) => {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(\n location,\n size,\n type,\n type === gl.UNSIGNED_BYTE,\n stride,\n offset,\n );\n divisor(location, perInstance ? 1 : 0);\n };\n\n const bind = (item: Item3D, res: ItemResources) => {\n const F = gl.FLOAT;\n const U8 = gl.UNSIGNED_BYTE;\n let used: number;\n if (item.kind === \"mesh\") {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.vertex);\n attribute(0, 3, F, VERTEX_STRIDE, 0, false);\n attribute(1, 3, F, VERTEX_STRIDE, 12, false);\n attribute(2, 4, U8, VERTEX_STRIDE, 24, false);\n used = 3;\n } else {\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n attribute(0, 2, F, 0, 0, false);\n gl.bindBuffer(gl.ARRAY_BUFFER, res.vertex);\n if (item.kind === \"points\") {\n attribute(1, 3, F, POINT_STRIDE, 0, true);\n attribute(2, 1, F, POINT_STRIDE, 12, true);\n attribute(3, 4, U8, POINT_STRIDE, 16, true);\n } else {\n attribute(1, 3, F, SEGMENT_STRIDE, 0, true);\n attribute(2, 3, F, SEGMENT_STRIDE, 12, true);\n attribute(3, 4, U8, SEGMENT_STRIDE, 24, true);\n }\n used = 4;\n }\n for (let i = used; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n divisor(i, 0);\n }\n };\n\n const upload = (item: Item3D): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n // same mesh, triangles in a new order (transparent, sorted by depth)\n if (\n item.kind === \"mesh\" &&\n existing.index &&\n (item.order ?? 0) !== existing.order\n ) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, existing.index);\n gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, item.indices);\n existing.order = item.order ?? 0;\n }\n return existing;\n }\n if (existing) {\n gl.deleteBuffer(existing.vertex);\n if (existing.index) gl.deleteBuffer(existing.index);\n resources.delete(item.key);\n }\n const vertex = gl.createBuffer();\n if (!vertex) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, vertex);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.kind === \"mesh\" ? item.vertices : item.data,\n gl.STATIC_DRAW,\n );\n let index: WebGLBuffer | null = null;\n if (item.kind === \"mesh\") {\n index = gl.createBuffer();\n if (!index) {\n gl.deleteBuffer(vertex);\n return null;\n }\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index);\n gl.bufferData(\n gl.ELEMENT_ARRAY_BUFFER,\n item.indices,\n item.order === undefined ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW,\n );\n }\n const res = {\n version: item.version,\n kind: item.kind,\n vertex,\n index,\n order: item.kind === \"mesh\" ? (item.order ?? 0) : 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: version === 2 ? \"webgl2\" : \"webgl\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clearDepth(1);\n gl.depthMask(true);\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LEQUAL);\n gl.disable(gl.CULL_FACE);\n const seen = new Set<string>();\n for (const item of drawOrder(items)) {\n seen.add(item.key);\n const count = item.kind === \"mesh\" ? item.indices.length : item.count;\n if (count <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n const u = itemUniforms(item, frame, uniformData);\n const loc = program.uniforms;\n gl.uniformMatrix4fv(loc.u_viewProj, false, u.subarray(0, 16));\n gl.uniform4fv(loc.u_viewport, u.subarray(16, 20));\n gl.uniform4fv(loc.u_eye, u.subarray(20, 24));\n gl.uniform4fv(loc.u_light, u.subarray(24, 28));\n gl.uniform4fv(loc.u_material, u.subarray(28, 32));\n gl.uniform4fv(loc.u_params, u.subarray(32, 36));\n gl.uniform4fv(loc.u_fog, u.subarray(36, 40));\n gl.depthMask(writesDepth(item));\n bind(item, res);\n if (item.kind === \"mesh\") {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, res.index);\n gl.drawElements(gl.TRIANGLES, count, gl.UNSIGNED_INT, 0);\n } else {\n drawInstanced(count);\n }\n }\n gl.depthMask(true);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n gl.deleteBuffer(res.vertex);\n if (res.index) gl.deleteBuffer(res.index);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) {\n gl.deleteBuffer(res.vertex);\n if (res.index) gl.deleteBuffer(res.index);\n }\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n gl.deleteBuffer(corners);\n }\n resources.clear();\n loseContext();\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl.cjs","names":["glslPrograms","GLSL_ATTRIBUTES","glslOitPrograms","GLSL_COMPOSITE","claimGlSlot","itemUniforms","drawOrder","drawRank","writesDepth","require_gl_budget","require_render_types","require_oit","require_shaders","SOFTWARE_RENDERER","isSoftwareRenderer","info","gl","name","UNIFORMS","compile","shader","s","type","code","vs","source","fs","program","attributes","i","uniforms","CORNERS","MAX_LOCATIONS","MAX_SAMPLES","webGl2Capabilities","max","samples","counts","floatMax","createWebGl3D","version","requireHardware","canvas","loseContext","gl2","angle","divisor","location","value","drawInstanced","count","programs","corners","capabilities","oitPrograms","framebuffers","build","uint","sources","points","mesh","lines","buffer","oit","p","m","c","deleteOit","fb","b","f","deleteFramebuffers","renderbuffer","rb","format","width","height","complete","mainFramebuffer","main","color","depth","oitFramebuffers","fbo","accum","extra","resolved","textures","r0","r1","t0","t1","ok","texture","lost","last","resources","slot","renderFrame","onLost","uniformData","attribute","size","stride","offset","bind","F","U8","used","item","res","upload","existing","vertex","index","draw","seen","u","frame","loc","drawTransparent","blended","target","progs","ordered","items","additive","composited","rank","add","key"],"sources":["../../../../../charts/src/engine/three-d/webgl.ts"],"sourcesContent":["// WebGL2 / WebGL (1) backend of the 3D charts: the same GLSL for both\n// (a macro prefix makes it GLSL ES 3.0), instancing through WebGL2 or\n// ANGLE_instanced_arrays, 32-bit indices through WebGL2 or\n// OES_element_index_uint. Attributes are bound for every draw (no vertex\n// array objects in WebGL 1): a few calls per item.\n//\n// WebGL2 draws into its own multisampled framebuffer, blitted to the canvas.\n// With EXT_color_buffer_float (multisampled RGBA16F), the blended items go\n// through the weighted blended order-independent transparency (`oit.ts`):\n// opaque items, then the blended ones into two float targets sharing the\n// depth buffer (resolved into textures by blits), their composite, then the\n// lines. Otherwise (and on WebGL 1) the blended items are drawn sorted.\n//\n// The context is part of the page-wide budget (`gl-budget.ts`): when it is\n// suspended off-screen, its GPU objects go; the restore builds the programs\n// again (the framebuffers and buffers follow lazily) and redraws the last\n// frame. A suspension is not a loss: only real losses reach `onLost`.\n\nimport type { RendererLostHandler } from \"../renderers/types\";\nimport { claimGlSlot } from \"../renderers/gl-budget\";\nimport { GLSL_COMPOSITE } from \"./oit\";\nimport {\n POINT_STRIDE,\n SEGMENT_STRIDE,\n VERTEX_STRIDE,\n drawOrder,\n drawRank,\n type Frame3D,\n type Item3D,\n type Renderer3D,\n} from \"./render-types\";\nimport {\n GLSL_ATTRIBUTES,\n glslOitPrograms,\n glslPrograms,\n itemUniforms,\n writesDepth,\n type GlslSource,\n} from \"./shaders\";\n\ntype Gl = WebGLRenderingContext | WebGL2RenderingContext;\n\n/** Software rasterizers behind a WebGL context */\nexport const SOFTWARE_RENDERER =\n /swiftshader|llvmpipe|softpipe|software|basic render driver|microsoft basic/i;\n\nexport const isSoftwareRenderer = (gl: Gl): boolean => {\n const info = gl.getExtension(\"WEBGL_debug_renderer_info\");\n const name = info\n ? gl.getParameter(info.UNMASKED_RENDERER_WEBGL)\n : gl.getParameter(gl.RENDERER);\n return SOFTWARE_RENDERER.test(String(name ?? \"\"));\n};\n\nconst UNIFORMS = [\n \"u_viewProj\",\n \"u_viewport\",\n \"u_eye\",\n \"u_light\",\n \"u_material\",\n \"u_params\",\n \"u_fog\",\n] as const;\n\ninterface Program {\n program: WebGLProgram;\n uniforms: Record<(typeof UNIFORMS)[number], WebGLUniformLocation | null>;\n}\n\nconst compile = (\n gl: Gl,\n source: GlslSource,\n attributes: readonly string[],\n): Program | null => {\n const shader = (type: number, code: string) => {\n const s = gl.createShader(type);\n if (!s) return null;\n gl.shaderSource(s, code);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {\n gl.deleteShader(s);\n return null;\n }\n return s;\n };\n const vs = shader(gl.VERTEX_SHADER, source.vertex);\n const fs = shader(gl.FRAGMENT_SHADER, source.fragment);\n const program = gl.createProgram();\n if (!vs || !fs || !program) return null;\n gl.attachShader(program, vs);\n gl.attachShader(program, fs);\n attributes.forEach((name, i) => gl.bindAttribLocation(program, i, name));\n gl.linkProgram(program);\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program);\n return null;\n }\n const uniforms = {} as Program[\"uniforms\"];\n for (const name of UNIFORMS)\n uniforms[name] = gl.getUniformLocation(program, name);\n return { program, uniforms };\n};\n\ninterface ItemResources {\n version: number;\n kind: Item3D[\"kind\"];\n vertex: WebGLBuffer;\n index: WebGLBuffer | null;\n /** `order` of the uploaded indices (meshes) */\n order: number;\n}\n\n/** Corners of the triangle strip of a billboard / segment */\nconst CORNERS = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\nconst MAX_LOCATIONS = 4;\nconst MAX_SAMPLES = 4;\n\n/**\n * Samples of the WebGL2 framebuffers and whether the order-independent\n * transparency is possible: float color buffers (EXT_color_buffer_float)\n * that can be multisampled as much as the color\n */\nexport const webGl2Capabilities = (\n gl: WebGL2RenderingContext,\n): { samples: number; orderIndependent: boolean } => {\n const max = Number(gl.getParameter(gl.MAX_SAMPLES)) || 0;\n const samples = Math.max(0, Math.min(MAX_SAMPLES, max));\n if (!gl.getExtension(\"EXT_color_buffer_float\"))\n return { samples, orderIndependent: false };\n const counts = gl.getInternalformatParameter(\n gl.RENDERBUFFER,\n gl.RGBA16F,\n gl.SAMPLES,\n ) as ArrayLike<number> | null;\n let floatMax = 0;\n for (let i = 0; i < (counts?.length ?? 0); i++)\n floatMax = Math.max(floatMax, counts?.[i] ?? 0);\n // single-sampled framebuffers: any float support is enough\n if (samples > 1 && floatMax < 2) return { samples, orderIndependent: false };\n return {\n samples: Math.min(samples, floatMax || samples),\n orderIndependent: true,\n };\n};\n\ninterface Framebuffers {\n width: number;\n height: number;\n main: WebGLFramebuffer;\n color: WebGLRenderbuffer;\n depth: WebGLRenderbuffer;\n /** Transparency targets, created on first use */\n oit: {\n fbo: WebGLFramebuffer;\n buffers: [WebGLRenderbuffer, WebGLRenderbuffer];\n resolved: [WebGLFramebuffer, WebGLFramebuffer];\n textures: [WebGLTexture, WebGLTexture];\n } | null;\n}\n\nexport const createWebGl3D = (\n canvas: HTMLCanvasElement,\n version: 1 | 2,\n onLost: RendererLostHandler,\n /** Refuses software rendering: the decimating Canvas2D backend is faster there */\n requireHardware = false,\n): Renderer3D | null => {\n const attributes: WebGLContextAttributes = {\n alpha: true,\n premultipliedAlpha: true,\n // WebGL2 multisamples its own framebuffer\n antialias: version === 1,\n depth: true,\n stencil: false,\n preserveDrawingBuffer: false,\n failIfMajorPerformanceCaveat: requireHardware,\n };\n const gl = canvas.getContext(\n version === 2 ? \"webgl2\" : \"webgl\",\n attributes,\n ) as Gl | null;\n if (!gl) return null;\n const loseContext = () =>\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n const gl2 = version === 2 ? (gl as WebGL2RenderingContext) : null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n loseContext();\n return null;\n }\n let angle: ANGLE_instanced_arrays | null = null;\n const divisor = (location: number, value: number) => {\n if (gl2) gl2.vertexAttribDivisor(location, value);\n else angle?.vertexAttribDivisorANGLE(location, value);\n };\n const drawInstanced = (count: number) => {\n if (gl2) gl2.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, count);\n else angle?.drawArraysInstancedANGLE(gl.TRIANGLE_STRIP, 0, 4, count);\n };\n\n let programs: Record<Item3D[\"kind\"], Program> | null = null;\n let corners: WebGLBuffer | null = null;\n let capabilities = { samples: 0, orderIndependent: false };\n let oitPrograms: {\n points: Program;\n mesh: Program;\n composite: WebGLProgram;\n } | null = null;\n let framebuffers: Framebuffers | null = null;\n\n /**\n * Extensions, programs, the corner buffer and the transparency programs:\n * at creation and again after a restore (GL objects and extension objects\n * don't survive the context). False when the context can't draw.\n */\n const build = (): boolean => {\n programs = null;\n corners = null;\n oitPrograms = null;\n // recreated lazily at the next draw\n framebuffers = null;\n angle = gl2 ? null : gl.getExtension(\"ANGLE_instanced_arrays\");\n const uint = gl2 ? true : !!gl.getExtension(\"OES_element_index_uint\");\n if (!gl2 && (!angle || !uint)) return false;\n const sources = glslPrograms(version);\n const points = compile(gl, sources.points, GLSL_ATTRIBUTES.points);\n const mesh = compile(gl, sources.mesh, GLSL_ATTRIBUTES.mesh);\n const lines = compile(gl, sources.lines, GLSL_ATTRIBUTES.lines);\n const buffer = gl.createBuffer();\n if (!points || !mesh || !lines || !buffer) return false;\n programs = { points, mesh, lines };\n corners = buffer;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.bufferData(gl.ARRAY_BUFFER, CORNERS, gl.STATIC_DRAW);\n\n // order-independent transparency (WebGL2 with float color buffers)\n capabilities = gl2\n ? webGl2Capabilities(gl2)\n : { samples: 0, orderIndependent: false };\n if (gl2 && capabilities.orderIndependent) {\n const oit = glslOitPrograms();\n const p = compile(gl, oit.points, GLSL_ATTRIBUTES.points);\n const m = compile(gl, oit.mesh, GLSL_ATTRIBUTES.mesh);\n const c = compile(gl, GLSL_COMPOSITE, []);\n if (p && m && c) {\n oitPrograms = { points: p, mesh: m, composite: c.program };\n gl.useProgram(c.program);\n gl.uniform1i(gl.getUniformLocation(c.program, \"u_accum\"), 0);\n gl.uniform1i(gl.getUniformLocation(c.program, \"u_extra\"), 1);\n } else {\n for (const program of [p, m, c])\n if (program) gl.deleteProgram(program.program);\n }\n }\n return true;\n };\n if (!build()) {\n loseContext();\n return null;\n }\n const deleteOit = (fb: Framebuffers) => {\n if (!fb.oit) return;\n gl.deleteFramebuffer(fb.oit.fbo);\n for (const b of fb.oit.buffers) gl.deleteRenderbuffer(b);\n for (const f of fb.oit.resolved) gl.deleteFramebuffer(f);\n for (const t of fb.oit.textures) gl.deleteTexture(t);\n fb.oit = null;\n };\n const deleteFramebuffers = () => {\n if (!framebuffers) return;\n deleteOit(framebuffers);\n gl.deleteFramebuffer(framebuffers.main);\n gl.deleteRenderbuffer(framebuffers.color);\n gl.deleteRenderbuffer(framebuffers.depth);\n framebuffers = null;\n };\n const renderbuffer = (format: number, width: number, height: number) => {\n const rb = gl.createRenderbuffer();\n if (!gl2 || !rb) return rb;\n gl.bindRenderbuffer(gl.RENDERBUFFER, rb);\n if (capabilities.samples > 1)\n gl2.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n capabilities.samples,\n format,\n width,\n height,\n );\n else gl.renderbufferStorage(gl.RENDERBUFFER, format, width, height);\n return rb;\n };\n const complete = () =>\n gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n /** The multisampled framebuffer of WebGL2 (null: draw into the canvas) */\n const mainFramebuffer = (): Framebuffers | null => {\n if (!gl2) return null;\n const { width, height } = canvas;\n if (framebuffers?.width === width && framebuffers.height === height)\n return framebuffers;\n deleteFramebuffers();\n const main = gl.createFramebuffer();\n const color = renderbuffer(gl2.RGBA8, width, height);\n const depth = renderbuffer(gl2.DEPTH_COMPONENT24, width, height);\n if (!main || !color || !depth) return null;\n gl.bindFramebuffer(gl.FRAMEBUFFER, main);\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.RENDERBUFFER,\n color,\n );\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n depth,\n );\n framebuffers = { width, height, main, color, depth, oit: null };\n if (!complete()) {\n deleteFramebuffers();\n return null;\n }\n return framebuffers;\n };\n /** The transparency targets sharing the depth of `fb` */\n const oitFramebuffers = (fb: Framebuffers) => {\n if (fb.oit || !gl2) return fb.oit;\n const { width, height } = fb;\n const fbo = gl.createFramebuffer();\n const accum = renderbuffer(gl2.RGBA16F, width, height);\n const extra = renderbuffer(gl2.RGBA16F, width, height);\n const resolved = [gl.createFramebuffer(), gl.createFramebuffer()];\n const textures = [gl.createTexture(), gl.createTexture()];\n const [r0, r1] = resolved;\n const [t0, t1] = textures;\n if (!fbo || !accum || !extra || !r0 || !r1 || !t0 || !t1) return null;\n fb.oit = {\n fbo,\n buffers: [accum, extra],\n resolved: [r0, r1],\n textures: [t0, t1],\n };\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.RENDERBUFFER,\n accum,\n );\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl2.COLOR_ATTACHMENT1,\n gl.RENDERBUFFER,\n extra,\n );\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n fb.depth,\n );\n gl2.drawBuffers([gl.COLOR_ATTACHMENT0, gl2.COLOR_ATTACHMENT1]);\n let ok = complete();\n fb.oit.textures.forEach((texture, i) => {\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl2.texStorage2D(gl.TEXTURE_2D, 1, gl2.RGBA16F, width, height);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb.oit!.resolved[i]!);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n ok &&= complete();\n });\n gl.bindTexture(gl.TEXTURE_2D, null);\n if (!ok) {\n deleteOit(fb);\n oitPrograms = null;\n }\n return fb.oit;\n };\n\n let lost = false;\n let last: { items: readonly Item3D[]; frame: Frame3D } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen (not a failure): its GPU objects go, and come back with the\n // context, which then redraws its last frame\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => {\n resources.clear();\n programs = null;\n oitPrograms = null;\n corners = null;\n framebuffers = null;\n },\n restore: () => {\n if (lost) return;\n if (!build()) {\n lost = true;\n onLost();\n } else if (last) renderFrame(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n const uniformData = new Float32Array(40);\n\n const attribute = (\n location: number,\n size: number,\n type: number,\n stride: number,\n offset: number,\n perInstance: boolean,\n ) => {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(\n location,\n size,\n type,\n type === gl.UNSIGNED_BYTE,\n stride,\n offset,\n );\n divisor(location, perInstance ? 1 : 0);\n };\n\n const bind = (item: Item3D, res: ItemResources) => {\n const F = gl.FLOAT;\n const U8 = gl.UNSIGNED_BYTE;\n let used: number;\n if (item.kind === \"mesh\") {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.vertex);\n attribute(0, 3, F, VERTEX_STRIDE, 0, false);\n attribute(1, 3, F, VERTEX_STRIDE, 12, false);\n attribute(2, 4, U8, VERTEX_STRIDE, 24, false);\n used = 3;\n } else {\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n attribute(0, 2, F, 0, 0, false);\n gl.bindBuffer(gl.ARRAY_BUFFER, res.vertex);\n if (item.kind === \"points\") {\n attribute(1, 3, F, POINT_STRIDE, 0, true);\n attribute(2, 1, F, POINT_STRIDE, 12, true);\n attribute(3, 4, U8, POINT_STRIDE, 16, true);\n } else {\n attribute(1, 3, F, SEGMENT_STRIDE, 0, true);\n attribute(2, 3, F, SEGMENT_STRIDE, 12, true);\n attribute(3, 4, U8, SEGMENT_STRIDE, 24, true);\n }\n used = 4;\n }\n for (let i = used; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n divisor(i, 0);\n }\n };\n\n const upload = (item: Item3D): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n // same mesh, triangles in a new order (transparent, sorted by depth)\n if (\n item.kind === \"mesh\" &&\n existing.index &&\n (item.order ?? 0) !== existing.order\n ) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, existing.index);\n gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, item.indices);\n existing.order = item.order ?? 0;\n }\n return existing;\n }\n if (existing) {\n gl.deleteBuffer(existing.vertex);\n if (existing.index) gl.deleteBuffer(existing.index);\n resources.delete(item.key);\n }\n const vertex = gl.createBuffer();\n if (!vertex) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, vertex);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.kind === \"mesh\" ? item.vertices : item.data,\n gl.STATIC_DRAW,\n );\n let index: WebGLBuffer | null = null;\n if (item.kind === \"mesh\") {\n index = gl.createBuffer();\n if (!index) {\n gl.deleteBuffer(vertex);\n return null;\n }\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index);\n gl.bufferData(\n gl.ELEMENT_ARRAY_BUFFER,\n item.indices,\n item.order === undefined ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW,\n );\n }\n const res = {\n version: item.version,\n kind: item.kind,\n vertex,\n index,\n order: item.kind === \"mesh\" ? (item.order ?? 0) : 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n /** Sets the uniforms of an item and draws it */\n const draw = (\n item: Item3D,\n program: Program,\n frame: Frame3D,\n seen: Set<string>,\n ) => {\n seen.add(item.key);\n const count = item.kind === \"mesh\" ? item.indices.length : item.count;\n if (count <= 0) return;\n const res = upload(item);\n if (!res) return;\n gl.useProgram(program.program);\n const u = itemUniforms(item, frame, uniformData);\n const loc = program.uniforms;\n gl.uniformMatrix4fv(loc.u_viewProj, false, u.subarray(0, 16));\n gl.uniform4fv(loc.u_viewport, u.subarray(16, 20));\n gl.uniform4fv(loc.u_eye, u.subarray(20, 24));\n gl.uniform4fv(loc.u_light, u.subarray(24, 28));\n gl.uniform4fv(loc.u_material, u.subarray(28, 32));\n gl.uniform4fv(loc.u_params, u.subarray(32, 36));\n gl.uniform4fv(loc.u_fog, u.subarray(36, 40));\n bind(item, res);\n if (item.kind === \"mesh\") {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, res.index);\n gl.drawElements(gl.TRIANGLES, count, gl.UNSIGNED_INT, 0);\n } else {\n drawInstanced(count);\n }\n };\n\n /** Blended items into the transparency targets, then their composite */\n const drawTransparent = (\n fb: Framebuffers,\n oit: NonNullable<Framebuffers[\"oit\"]>,\n blended: readonly Item3D[],\n frame: Frame3D,\n seen: Set<string>,\n ) => {\n if (!gl2 || !oitPrograms) return;\n const { width, height } = fb;\n gl.bindFramebuffer(gl.FRAMEBUFFER, oit.fbo);\n gl2.clearBufferfv(gl2.COLOR, 0, [0, 0, 0, 0]);\n gl2.clearBufferfv(gl2.COLOR, 1, [0, 0, 0, 0]);\n gl.depthMask(false);\n gl.blendFunc(gl.ONE, gl.ONE);\n for (const item of blended) {\n if (item.kind !== \"lines\")\n draw(item, oitPrograms[item.kind], frame, seen);\n }\n // resolve the samples into the textures read by the composite\n gl.bindFramebuffer(gl2.READ_FRAMEBUFFER, oit.fbo);\n oit.resolved.forEach((target, i) => {\n gl2.readBuffer(i === 0 ? gl.COLOR_ATTACHMENT0 : gl2.COLOR_ATTACHMENT1);\n gl.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, target);\n gl2.blitFramebuffer(\n 0,\n 0,\n width,\n height,\n 0,\n 0,\n width,\n height,\n gl.COLOR_BUFFER_BIT,\n gl.NEAREST,\n );\n });\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb.main);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.disable(gl.DEPTH_TEST);\n for (let i = 0; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n divisor(i, 0);\n }\n gl.useProgram(oitPrograms.composite);\n oit.textures.forEach((texture, i) => {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n });\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.enable(gl.DEPTH_TEST);\n };\n\n /** Draws a frame (the context is live) */\n const renderFrame = (items: readonly Item3D[], frame: Frame3D) => {\n const progs = programs;\n if (!progs) return;\n const fb = mainFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb ? fb.main : null);\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clearDepth(1);\n gl.depthMask(true);\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LEQUAL);\n gl.disable(gl.CULL_FACE);\n const seen = new Set<string>();\n const ordered = drawOrder(items);\n const blended = ordered.filter((item) => drawRank(item) === 2);\n const oit =\n fb && oitPrograms && blended.length > 0 ? oitFramebuffers(fb) : null;\n let additive = false;\n let composited = !oit;\n for (const item of ordered) {\n const rank = drawRank(item);\n if (oit && rank === 2) continue;\n if (fb && oit && rank === 3 && !composited) {\n drawTransparent(fb, oit, blended, frame, seen);\n composited = true;\n additive = false;\n }\n gl.depthMask(writesDepth(item));\n const add = item.kind === \"points\" && !!item.additive;\n if (add !== additive) {\n // additive points: the colors add up, the coverage composites as usual\n if (add)\n gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n else gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n additive = add;\n }\n draw(item, progs[item.kind], frame, seen);\n }\n if (fb && oit && !composited) {\n drawTransparent(fb, oit, blended, frame, seen);\n additive = false;\n }\n gl.depthMask(true);\n if (additive) gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n if (fb && gl2) {\n // the samples resolved into the canvas\n gl.bindFramebuffer(gl2.READ_FRAMEBUFFER, fb.main);\n gl.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, null);\n gl2.blitFramebuffer(\n 0,\n 0,\n fb.width,\n fb.height,\n 0,\n 0,\n fb.width,\n fb.height,\n gl.COLOR_BUFFER_BIT,\n gl.NEAREST,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n gl.deleteBuffer(res.vertex);\n if (res.index) gl.deleteBuffer(res.index);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: version === 2 ? \"webgl2\" : \"webgl\",\n canvas,\n get orderIndependent() {\n return !!oitPrograms;\n },\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n // suspended by the context budget: redrawn by the restore\n if (lost || !slot.use() || gl.isContextLost()) return;\n renderFrame(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) {\n gl.deleteBuffer(res.vertex);\n if (res.index) gl.deleteBuffer(res.index);\n }\n for (const p of Object.values(programs ?? {})) {\n gl.deleteProgram(p.program);\n }\n if (oitPrograms) {\n gl.deleteProgram(oitPrograms.points.program);\n gl.deleteProgram(oitPrograms.mesh.program);\n gl.deleteProgram(oitPrograms.composite);\n }\n deleteFramebuffers();\n gl.deleteBuffer(corners);\n }\n oitPrograms = null;\n programs = null;\n corners = null;\n framebuffers = null;\n resources.clear();\n loseContext();\n },\n };\n};\n"],"mappings":"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"}
|
|
@@ -4,6 +4,15 @@ type Gl = WebGLRenderingContext | WebGL2RenderingContext;
|
|
|
4
4
|
/** Software rasterizers behind a WebGL context */
|
|
5
5
|
export declare const SOFTWARE_RENDERER: RegExp;
|
|
6
6
|
export declare const isSoftwareRenderer: (gl: Gl) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Samples of the WebGL2 framebuffers and whether the order-independent
|
|
9
|
+
* transparency is possible: float color buffers (EXT_color_buffer_float)
|
|
10
|
+
* that can be multisampled as much as the color
|
|
11
|
+
*/
|
|
12
|
+
export declare const webGl2Capabilities: (gl: WebGL2RenderingContext) => {
|
|
13
|
+
samples: number;
|
|
14
|
+
orderIndependent: boolean;
|
|
15
|
+
};
|
|
7
16
|
export declare const createWebGl3D: (canvas: HTMLCanvasElement, version: 1 | 2, onLost: RendererLostHandler,
|
|
8
17
|
/** Refuses software rendering: the decimating Canvas2D backend is faster there */
|
|
9
18
|
requireHardware?: boolean) => Renderer3D | null;
|
|
@@ -4,6 +4,15 @@ type Gl = WebGLRenderingContext | WebGL2RenderingContext;
|
|
|
4
4
|
/** Software rasterizers behind a WebGL context */
|
|
5
5
|
export declare const SOFTWARE_RENDERER: RegExp;
|
|
6
6
|
export declare const isSoftwareRenderer: (gl: Gl) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Samples of the WebGL2 framebuffers and whether the order-independent
|
|
9
|
+
* transparency is possible: float color buffers (EXT_color_buffer_float)
|
|
10
|
+
* that can be multisampled as much as the color
|
|
11
|
+
*/
|
|
12
|
+
export declare const webGl2Capabilities: (gl: WebGL2RenderingContext) => {
|
|
13
|
+
samples: number;
|
|
14
|
+
orderIndependent: boolean;
|
|
15
|
+
};
|
|
7
16
|
export declare const createWebGl3D: (canvas: HTMLCanvasElement, version: 1 | 2, onLost: RendererLostHandler,
|
|
8
17
|
/** Refuses software rendering: the decimating Canvas2D backend is faster there */
|
|
9
18
|
requireHardware?: boolean) => Renderer3D | null;
|