From 9529a7eda7c8777301894d86e410f8a2f14802b5 Mon Sep 17 00:00:00 2001 From: xiaoiver Date: Wed, 26 Jul 2023 14:51:26 +0800 Subject: [PATCH] Release (#1432) * fix: split a path containing multiple segments into subpaths (#1430) * fix: split a path containing multiple segments into subpaths #1429 * chore: commit changeset * fix: enable FXAA postprocessing pass to apply anti-alias #884 * fix: retrieve runtime from context instead of global * chore: commit changeset * chore(release): bump version (#1431) Co-authored-by: github-actions[bot] --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] --- .../__node__tests__/webgl/circle.spec.js | 1 + .../__node__tests__/webgl/cube.spec.js | 1 + .../__node__tests__/webgl/d3-barchart.spec.js | 1 + .../webgl/d3-linechart.spec.js | 1 + .../webgl/d3-scatterchart.spec.js | 1 + .../__node__tests__/webgl/ellipse.spec.js | 1 + .../__node__tests__/webgl/image.spec.js | 1 + .../__node__tests__/webgl/line.spec.js | 1 + .../__node__tests__/webgl/marker.spec.js | 1 + .../__node__tests__/webgl/material.spec.js | 1 + .../__node__tests__/webgl/path.spec.js | 1 + .../__node__tests__/webgl/polygon.spec.js | 1 + .../__node__tests__/webgl/polyline.spec.js | 1 + .../__node__tests__/webgl/rect.spec.js | 1 + .../webgl/snapshots/d3-barchart.png | Bin 14598 -> 10498 bytes .../__node__tests__/webgl/snapshots/text.png | Bin 11924 -> 11465 bytes .../__node__tests__/webgl/sphere.spec.js | 1 + .../__node__tests__/webgl/text.spec.js | 1 + __tests__/unit/css/parser/path.spec.ts | 4 +- package.json | 2 +- packages/g-camera-api/CHANGELOG.md | 10 + packages/g-camera-api/package.json | 4 +- packages/g-canvas/CHANGELOG.md | 16 ++ packages/g-canvas/package.json | 4 +- packages/g-canvaskit/CHANGELOG.md | 16 ++ packages/g-canvaskit/package.json | 4 +- packages/g-components/CHANGELOG.md | 10 + packages/g-components/package.json | 4 +- .../g-dom-mutation-observer-api/CHANGELOG.md | 8 + .../g-dom-mutation-observer-api/package.json | 2 +- packages/g-gesture/CHANGELOG.md | 8 + packages/g-gesture/package.json | 2 +- packages/g-image-exporter/CHANGELOG.md | 8 + packages/g-image-exporter/package.json | 2 +- packages/g-lite/CHANGELOG.md | 10 + packages/g-lite/package.json | 4 +- packages/g-lite/src/components/Renderable.ts | 5 - packages/g-lite/src/dom/Element.ts | 1 - packages/g-lottie-player/CHANGELOG.md | 10 + packages/g-lottie-player/package.json | 4 +- packages/g-math/CHANGELOG.md | 7 + packages/g-math/package.json | 4 +- packages/g-mobile-canvas-element/CHANGELOG.md | 8 + packages/g-mobile-canvas-element/package.json | 2 +- packages/g-mobile-canvas/CHANGELOG.md | 16 ++ packages/g-mobile-canvas/package.json | 4 +- packages/g-mobile-svg/CHANGELOG.md | 14 ++ packages/g-mobile-svg/package.json | 4 +- packages/g-mobile-webgl/CHANGELOG.md | 16 ++ packages/g-mobile-webgl/package.json | 4 +- packages/g-pattern/CHANGELOG.md | 10 + packages/g-pattern/package.json | 4 +- packages/g-plugin-3d/CHANGELOG.md | 9 + packages/g-plugin-3d/package.json | 2 +- packages/g-plugin-a11y/CHANGELOG.md | 8 + packages/g-plugin-a11y/package.json | 2 +- packages/g-plugin-annotation/CHANGELOG.md | 8 + packages/g-plugin-annotation/package.json | 2 +- packages/g-plugin-box2d/CHANGELOG.md | 8 + packages/g-plugin-box2d/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 4 +- packages/g-plugin-canvas-picker/CHANGELOG.md | 13 + packages/g-plugin-canvas-picker/package.json | 4 +- .../g-plugin-canvas-renderer/CHANGELOG.md | 13 + .../g-plugin-canvas-renderer/package.json | 4 +- .../src/shapes/styles/Text.ts | 7 +- .../g-plugin-canvaskit-renderer/CHANGELOG.md | 12 + .../g-plugin-canvaskit-renderer/package.json | 4 +- packages/g-plugin-control/CHANGELOG.md | 9 + packages/g-plugin-control/package.json | 2 +- .../g-plugin-control/src/ControlPlugin.ts | 11 +- packages/g-plugin-css-select/CHANGELOG.md | 8 + packages/g-plugin-css-select/package.json | 2 +- .../g-plugin-device-renderer/CHANGELOG.md | 12 + .../g-plugin-device-renderer/package.json | 4 +- .../src/RenderGraphPlugin.ts | 20 +- .../src/TexturePool.ts | 18 +- .../src/components/Renderable3D.ts | 4 +- .../src/{meshes => drawcalls}/Image.ts | 4 +- .../src/{meshes => drawcalls}/Instanced.ts | 31 ++- .../{meshes => drawcalls}/InstancedFill.ts | 39 ++- .../{meshes => drawcalls}/InstancedLine.ts | 54 ++-- .../{meshes => drawcalls}/InstancedPath.ts | 189 ++++++++------ .../src/{meshes => drawcalls}/Mesh.ts | 2 +- .../src/{meshes => drawcalls}/SDF.ts | 2 +- .../src/{meshes => drawcalls}/Text.ts | 71 +++--- .../src/{meshes => drawcalls}/index.ts | 0 .../symbol/AlphaImage.ts | 0 .../symbol/GlyphAtlas.ts | 0 .../symbol/GlyphManager.ts | 27 +- .../symbol/SymbolQuad.ts | 0 .../g-plugin-device-renderer/src/index.ts | 15 +- .../src/interfaces.ts | 4 + .../src/passes/FXAA.ts | 3 +- .../src/renderer/Batch.ts | 11 +- .../src/renderer/BatchManager.ts | 231 ++++++++++-------- .../src/renderer/Circle.ts | 24 +- .../src/renderer/Group.ts | 7 +- .../src/renderer/Image.ts | 9 +- .../src/renderer/Line.ts | 9 +- .../src/renderer/Mesh.ts | 6 +- .../src/renderer/Path.ts | 56 ++--- .../src/renderer/Rect.ts | 36 +-- .../src/renderer/Text.ts | 25 +- .../src/utils/tiny-sdf.ts | 4 +- .../g-plugin-dom-interaction/CHANGELOG.md | 8 + .../g-plugin-dom-interaction/package.json | 2 +- packages/g-plugin-dragndrop/CHANGELOG.md | 10 + packages/g-plugin-dragndrop/package.json | 4 +- packages/g-plugin-gpgpu/CHANGELOG.md | 9 + packages/g-plugin-gpgpu/package.json | 2 +- packages/g-plugin-html-renderer/CHANGELOG.md | 10 + packages/g-plugin-html-renderer/package.json | 4 +- .../src/HTMLRenderingPlugin.ts | 15 +- packages/g-plugin-image-loader/CHANGELOG.md | 10 + packages/g-plugin-image-loader/package.json | 4 +- packages/g-plugin-matterjs/CHANGELOG.md | 8 + packages/g-plugin-matterjs/package.json | 2 +- .../g-plugin-mobile-interaction/CHANGELOG.md | 8 + .../g-plugin-mobile-interaction/package.json | 2 +- packages/g-plugin-physx/CHANGELOG.md | 8 + packages/g-plugin-physx/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 4 +- .../g-plugin-rough-svg-renderer/CHANGELOG.md | 11 + .../g-plugin-rough-svg-renderer/package.json | 4 +- .../src/RoughElementLifeCycleContribution.ts | 4 +- packages/g-plugin-svg-picker/CHANGELOG.md | 9 + packages/g-plugin-svg-picker/package.json | 2 +- packages/g-plugin-svg-renderer/CHANGELOG.md | 10 + packages/g-plugin-svg-renderer/package.json | 4 +- .../DefaultElementLifeCycleContribution.ts | 16 +- .../src/SVGRendererPlugin.ts | 8 +- packages/g-plugin-svg-renderer/src/index.ts | 29 ++- .../src/shapes/paths/Text.ts | 4 +- packages/g-plugin-webgl-device/CHANGELOG.md | 11 + packages/g-plugin-webgl-device/package.json | 4 +- packages/g-plugin-webgpu-device/CHANGELOG.md | 11 + packages/g-plugin-webgpu-device/package.json | 4 +- .../src/WebGPUDeviceContribution.ts | 12 +- packages/g-plugin-webgpu-device/src/index.ts | 15 +- packages/g-plugin-yoga/CHANGELOG.md | 8 + packages/g-plugin-yoga/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 4 +- .../g-plugin-zdog-svg-renderer/CHANGELOG.md | 12 + .../g-plugin-zdog-svg-renderer/package.json | 4 +- .../src/ZdogElementLifeCycleContribution.ts | 4 +- packages/g-svg/CHANGELOG.md | 13 + packages/g-svg/package.json | 4 +- packages/g-web-animations-api/CHANGELOG.md | 10 + packages/g-web-animations-api/package.json | 4 +- packages/g-web-components/CHANGELOG.md | 10 + packages/g-web-components/package.json | 2 +- packages/g-webgl/CHANGELOG.md | 15 ++ packages/g-webgl/package.json | 4 +- packages/g-webgl/src/index.ts | 3 +- packages/g-webgpu/CHANGELOG.md | 15 ++ packages/g-webgpu/package.json | 4 +- packages/g-webgpu/src/index.ts | 3 +- packages/g/CHANGELOG.md | 11 + packages/g/package.json | 2 +- packages/react-g/CHANGELOG.md | 8 + packages/react-g/package.json | 4 +- pnpm-lock.yaml | 185 +++++++------- site/examples/perf/webgl/demo/lines.js | 122 +++++++++ site/examples/perf/webgl/demo/meta.json | 8 + .../shape/path/demo/multi-segments.js | 13 +- site/package.json | 2 +- 170 files changed, 1458 insertions(+), 619 deletions(-) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/Image.ts (97%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/Instanced.ts (98%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/InstancedFill.ts (81%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/InstancedLine.ts (91%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/InstancedPath.ts (86%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/Mesh.ts (96%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/SDF.ts (99%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/Text.ts (90%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/index.ts (100%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/symbol/AlphaImage.ts (100%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/symbol/GlyphAtlas.ts (100%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/symbol/GlyphManager.ts (94%) rename packages/g-plugin-device-renderer/src/{meshes => drawcalls}/symbol/SymbolQuad.ts (100%) create mode 100644 site/examples/perf/webgl/demo/lines.js diff --git a/__tests__/integration/__node__tests__/webgl/circle.spec.js b/__tests__/integration/__node__tests__/webgl/circle.spec.js index abceed1c0..5c067671f 100644 --- a/__tests__/integration/__node__tests__/webgl/circle.spec.js +++ b/__tests__/integration/__node__tests__/webgl/circle.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/cube.spec.js b/__tests__/integration/__node__tests__/webgl/cube.spec.js index e8ec1cc27..2eae57557 100644 --- a/__tests__/integration/__node__tests__/webgl/cube.spec.js +++ b/__tests__/integration/__node__tests__/webgl/cube.spec.js @@ -13,6 +13,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/d3-barchart.spec.js b/__tests__/integration/__node__tests__/webgl/d3-barchart.spec.js index 11de64307..48dc02c65 100644 --- a/__tests__/integration/__node__tests__/webgl/d3-barchart.spec.js +++ b/__tests__/integration/__node__tests__/webgl/d3-barchart.spec.js @@ -9,6 +9,7 @@ const weatherDataset = require('../../data/weather.json'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/d3-linechart.spec.js b/__tests__/integration/__node__tests__/webgl/d3-linechart.spec.js index 1ae48d158..f57c2807f 100644 --- a/__tests__/integration/__node__tests__/webgl/d3-linechart.spec.js +++ b/__tests__/integration/__node__tests__/webgl/d3-linechart.spec.js @@ -9,6 +9,7 @@ const weatherDataset = require('../../data/weather.json'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/d3-scatterchart.spec.js b/__tests__/integration/__node__tests__/webgl/d3-scatterchart.spec.js index f919e1b82..b24761df4 100644 --- a/__tests__/integration/__node__tests__/webgl/d3-scatterchart.spec.js +++ b/__tests__/integration/__node__tests__/webgl/d3-scatterchart.spec.js @@ -9,6 +9,7 @@ const weatherDataset = require('../../data/weather.json'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/ellipse.spec.js b/__tests__/integration/__node__tests__/webgl/ellipse.spec.js index 35eb90c8b..dc883a164 100644 --- a/__tests__/integration/__node__tests__/webgl/ellipse.spec.js +++ b/__tests__/integration/__node__tests__/webgl/ellipse.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/image.spec.js b/__tests__/integration/__node__tests__/webgl/image.spec.js index 3fd0b7caa..134415866 100644 --- a/__tests__/integration/__node__tests__/webgl/image.spec.js +++ b/__tests__/integration/__node__tests__/webgl/image.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/line.spec.js b/__tests__/integration/__node__tests__/webgl/line.spec.js index 2994c50f9..38c260a2f 100644 --- a/__tests__/integration/__node__tests__/webgl/line.spec.js +++ b/__tests__/integration/__node__tests__/webgl/line.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/marker.spec.js b/__tests__/integration/__node__tests__/webgl/marker.spec.js index b4df73c36..6b89227b1 100644 --- a/__tests__/integration/__node__tests__/webgl/marker.spec.js +++ b/__tests__/integration/__node__tests__/webgl/marker.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/material.spec.js b/__tests__/integration/__node__tests__/webgl/material.spec.js index ea7a540f5..1ee79384e 100644 --- a/__tests__/integration/__node__tests__/webgl/material.spec.js +++ b/__tests__/integration/__node__tests__/webgl/material.spec.js @@ -17,6 +17,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/path.spec.js b/__tests__/integration/__node__tests__/webgl/path.spec.js index b7f3bc743..499f8a0f4 100644 --- a/__tests__/integration/__node__tests__/webgl/path.spec.js +++ b/__tests__/integration/__node__tests__/webgl/path.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/polygon.spec.js b/__tests__/integration/__node__tests__/webgl/polygon.spec.js index 165170640..eb8e5181f 100644 --- a/__tests__/integration/__node__tests__/webgl/polygon.spec.js +++ b/__tests__/integration/__node__tests__/webgl/polygon.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/polyline.spec.js b/__tests__/integration/__node__tests__/webgl/polyline.spec.js index 779378694..c837076f5 100644 --- a/__tests__/integration/__node__tests__/webgl/polyline.spec.js +++ b/__tests__/integration/__node__tests__/webgl/polyline.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/rect.spec.js b/__tests__/integration/__node__tests__/webgl/rect.spec.js index 49b53cc11..f3a5bda40 100644 --- a/__tests__/integration/__node__tests__/webgl/rect.spec.js +++ b/__tests__/integration/__node__tests__/webgl/rect.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/snapshots/d3-barchart.png b/__tests__/integration/__node__tests__/webgl/snapshots/d3-barchart.png index 01d881c009418c8d67d3d98a1d8e7b4221c3075d..cea7d2ef83e8f33a146f0dd06f7c30702a0e2bfc 100644 GIT binary patch literal 10498 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 literal 11924 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 diff --git a/__tests__/integration/__node__tests__/webgl/sphere.spec.js b/__tests__/integration/__node__tests__/webgl/sphere.spec.js index 25319ade1..c2623d4f1 100644 --- a/__tests__/integration/__node__tests__/webgl/sphere.spec.js +++ b/__tests__/integration/__node__tests__/webgl/sphere.spec.js @@ -15,6 +15,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/integration/__node__tests__/webgl/text.spec.js b/__tests__/integration/__node__tests__/webgl/text.spec.js index 69f739d39..bc60ebdc1 100644 --- a/__tests__/integration/__node__tests__/webgl/text.spec.js +++ b/__tests__/integration/__node__tests__/webgl/text.spec.js @@ -7,6 +7,7 @@ const { createPNGFromRawdata, sleep, diff } = require('../../util'); // create a renderer, unregister plugin relative to DOM const renderer = new Renderer({ targets: ['webgl1'], + enableFXAA: false, }); const domInteractionPlugin = renderer.getPlugin('dom-interaction'); renderer.unregisterPlugin(domInteractionPlugin); diff --git a/__tests__/unit/css/parser/path.spec.ts b/__tests__/unit/css/parser/path.spec.ts index aca9ae7b2..9d3262bb2 100644 --- a/__tests__/unit/css/parser/path.spec.ts +++ b/__tests__/unit/css/parser/path.spec.ts @@ -73,11 +73,11 @@ describe('Property Path', () => { expect(left).toStrictEqual([ ['M', 0, 0], - ['C', 50, 0, 68.75, 0, 100, 0], + ['C', 50, 0, 100, 0, 100, 0], ]); expect(right).toStrictEqual([ ['M', 0, 0], - ['C', 100, 0, 137.5, 0, 200, 0], + ['C', 100, 0, 200, 0, 200, 0], ]); mergePaths(path1, path2); diff --git a/package.json b/package.json index 9e96e0bca..3b2ffbbd8 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "jest-environment-jsdom": "^26.6.2" }, "devDependencies": { - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "@commitlint/cli": "^8.3.6", "@commitlint/config-angular": "^9.1.2", "@changesets/cli": "^2.26.2", diff --git a/packages/g-camera-api/CHANGELOG.md b/packages/g-camera-api/CHANGELOG.md index 82d4ba614..7f5432621 100644 --- a/packages/g-camera-api/CHANGELOG.md +++ b/packages/g-camera-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-camera-api +## 1.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-camera-api/package.json b/packages/g-camera-api/package.json index 2950be9e4..87775efac 100644 --- a/packages/g-camera-api/package.json +++ b/packages/g-camera-api/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-camera-api", - "version": "1.2.6", + "version": "1.2.7", "description": "A simple implementation of Camera API.", "keywords": [ "antv", @@ -42,7 +42,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-canvas/CHANGELOG.md b/packages/g-canvas/CHANGELOG.md index 5691a829b..ebd1acc69 100644 --- a/packages/g-canvas/CHANGELOG.md +++ b/packages/g-canvas/CHANGELOG.md @@ -1,5 +1,21 @@ # @antv/g-canvas +## 1.11.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-canvas-path-generator@1.3.7 + - @antv/g-plugin-canvas-renderer@1.9.7 + - @antv/g-plugin-canvas-picker@1.10.7 + - @antv/g-plugin-html-renderer@1.9.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-dom-interaction@1.9.7 + ## 1.11.6 ### Patch Changes diff --git a/packages/g-canvas/package.json b/packages/g-canvas/package.json index f7787e5b5..2066c1dfd 100644 --- a/packages/g-canvas/package.json +++ b/packages/g-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-canvas", - "version": "1.11.6", + "version": "1.11.7", "description": "A renderer implemented by Canvas 2D API", "keywords": [ "antv", @@ -48,7 +48,7 @@ "@antv/g-plugin-dom-interaction": "workspace:*", "@antv/g-plugin-html-renderer": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "devDependencies": { diff --git a/packages/g-canvaskit/CHANGELOG.md b/packages/g-canvaskit/CHANGELOG.md index d0409ba4d..a152175be 100644 --- a/packages/g-canvaskit/CHANGELOG.md +++ b/packages/g-canvaskit/CHANGELOG.md @@ -1,5 +1,21 @@ # @antv/g-canvaskit +## 0.10.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-canvas-path-generator@1.3.7 + - @antv/g-plugin-canvaskit-renderer@1.3.7 + - @antv/g-plugin-canvas-picker@1.10.7 + - @antv/g-plugin-html-renderer@1.9.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-dom-interaction@1.9.7 + ## 0.10.6 ### Patch Changes diff --git a/packages/g-canvaskit/package.json b/packages/g-canvaskit/package.json index 4ea1f414f..1c65abbf2 100644 --- a/packages/g-canvaskit/package.json +++ b/packages/g-canvaskit/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-canvaskit", - "version": "0.10.6", + "version": "0.10.7", "description": "A renderer implemented by CanvasKit", "keywords": [ "antv", @@ -48,7 +48,7 @@ "@antv/g-plugin-dom-interaction": "workspace:*", "@antv/g-plugin-html-renderer": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "canvaskit-wasm": "^0.34.0", "tslib": "^2.5.3" }, diff --git a/packages/g-components/CHANGELOG.md b/packages/g-components/CHANGELOG.md index e0b6d527b..e0057d580 100644 --- a/packages/g-components/CHANGELOG.md +++ b/packages/g-components/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-components +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-components/package.json b/packages/g-components/package.json index 16516880b..2e7798351 100644 --- a/packages/g-components/package.json +++ b/packages/g-components/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-components", - "version": "1.9.6", + "version": "1.9.7", "description": "Components for g", "keywords": [ "antv", @@ -40,7 +40,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-dom-mutation-observer-api/CHANGELOG.md b/packages/g-dom-mutation-observer-api/CHANGELOG.md index be4a38b48..87326ad5d 100644 --- a/packages/g-dom-mutation-observer-api/CHANGELOG.md +++ b/packages/g-dom-mutation-observer-api/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-dom-mutation-observer-api +## 1.2.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-dom-mutation-observer-api/package.json b/packages/g-dom-mutation-observer-api/package.json index 1d75affb4..7731470b2 100644 --- a/packages/g-dom-mutation-observer-api/package.json +++ b/packages/g-dom-mutation-observer-api/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-dom-mutation-observer-api", - "version": "1.2.6", + "version": "1.2.7", "description": "A simple implementation of DOM MutationObserver API.", "keywords": [ "antv", diff --git a/packages/g-gesture/CHANGELOG.md b/packages/g-gesture/CHANGELOG.md index e86e990c8..6e289879a 100644 --- a/packages/g-gesture/CHANGELOG.md +++ b/packages/g-gesture/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-gesture +## 2.2.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 2.2.6 ### Patch Changes diff --git a/packages/g-gesture/package.json b/packages/g-gesture/package.json index 33bb32f84..668f50a45 100644 --- a/packages/g-gesture/package.json +++ b/packages/g-gesture/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-gesture", - "version": "2.2.6", + "version": "2.2.7", "description": "G Gesture", "keywords": [ "antv", diff --git a/packages/g-image-exporter/CHANGELOG.md b/packages/g-image-exporter/CHANGELOG.md index 723fbf3d0..b889e49a1 100644 --- a/packages/g-image-exporter/CHANGELOG.md +++ b/packages/g-image-exporter/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-image-exporter +## 0.7.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 0.7.6 ### Patch Changes diff --git a/packages/g-image-exporter/package.json b/packages/g-image-exporter/package.json index 502a37c9e..bbf5e40b4 100644 --- a/packages/g-image-exporter/package.json +++ b/packages/g-image-exporter/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-image-exporter", - "version": "0.7.6", + "version": "0.7.7", "description": "A image exporter for G using DOM API", "keywords": [ "antv", diff --git a/packages/g-lite/CHANGELOG.md b/packages/g-lite/CHANGELOG.md index ef8111ffc..fd3178bd5 100644 --- a/packages/g-lite/CHANGELOG.md +++ b/packages/g-lite/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-lite +## 1.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-math@2.0.2 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-lite/package.json b/packages/g-lite/package.json index 7e9150644..999424398 100644 --- a/packages/g-lite/package.json +++ b/packages/g-lite/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-lite", - "version": "1.2.6", + "version": "1.2.7", "description": "A core module for rendering engine implements DOM API.", "keywords": [ "antv", @@ -42,7 +42,7 @@ }, "dependencies": { "@antv/g-math": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "d3-color": "^1.4.0", "eventemitter3": "^5.0.1", "gl-matrix": "^3.4.3", diff --git a/packages/g-lite/src/components/Renderable.ts b/packages/g-lite/src/components/Renderable.ts index 4dd8630eb..1bae6dcae 100644 --- a/packages/g-lite/src/components/Renderable.ts +++ b/packages/g-lite/src/components/Renderable.ts @@ -26,9 +26,4 @@ export interface Renderable { * dirty rectangle flag */ dirty: boolean; - - /** - * Rendering with other renderers, eg. simple Path/Polyline should be treated as instanced Line. - */ - proxyNodeName: string; } diff --git a/packages/g-lite/src/dom/Element.ts b/packages/g-lite/src/dom/Element.ts index 77f9804eb..2285cd0eb 100644 --- a/packages/g-lite/src/dom/Element.ts +++ b/packages/g-lite/src/dom/Element.ts @@ -80,7 +80,6 @@ export class Element< renderBoundsDirty: true, dirtyRenderBounds: undefined, dirty: false, - proxyNodeName: undefined, }; cullable: Cullable = { diff --git a/packages/g-lottie-player/CHANGELOG.md b/packages/g-lottie-player/CHANGELOG.md index 3b21d3d3d..b4e1c531c 100644 --- a/packages/g-lottie-player/CHANGELOG.md +++ b/packages/g-lottie-player/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-lottie-player +## 0.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 0.2.6 ### Patch Changes diff --git a/packages/g-lottie-player/package.json b/packages/g-lottie-player/package.json index c76100b55..baadaeb05 100644 --- a/packages/g-lottie-player/package.json +++ b/packages/g-lottie-player/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-lottie-player", - "version": "0.2.6", + "version": "0.2.7", "description": "A lottie player for G", "keywords": [ "antv", @@ -40,7 +40,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "publishConfig": { diff --git a/packages/g-math/CHANGELOG.md b/packages/g-math/CHANGELOG.md index 5d9922aed..151bf896e 100644 --- a/packages/g-math/CHANGELOG.md +++ b/packages/g-math/CHANGELOG.md @@ -1,5 +1,12 @@ # @antv/g-math +## 2.0.2 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. + ## 2.0.1 ### Patch Changes diff --git a/packages/g-math/package.json b/packages/g-math/package.json index be6ed7c4c..76bb919be 100644 --- a/packages/g-math/package.json +++ b/packages/g-math/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-math", - "version": "2.0.1", + "version": "2.0.2", "description": "Geometry util", "keywords": [ "antv", @@ -38,7 +38,7 @@ "watch": "rollup -c -w" }, "dependencies": { - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-mobile-canvas-element/CHANGELOG.md b/packages/g-mobile-canvas-element/CHANGELOG.md index 86f889bb4..f27c296c9 100644 --- a/packages/g-mobile-canvas-element/CHANGELOG.md +++ b/packages/g-mobile-canvas-element/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-mobile-canvas-element +## 0.8.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 0.8.6 ### Patch Changes diff --git a/packages/g-mobile-canvas-element/package.json b/packages/g-mobile-canvas-element/package.json index 6901dc1de..9ca3698f5 100644 --- a/packages/g-mobile-canvas-element/package.json +++ b/packages/g-mobile-canvas-element/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-mobile-canvas-element", - "version": "0.8.6", + "version": "0.8.7", "description": "Create a CanvasLike element from existed context in mobile environment", "keywords": [ "antv", diff --git a/packages/g-mobile-canvas/CHANGELOG.md b/packages/g-mobile-canvas/CHANGELOG.md index 4a73d139a..8a83ed311 100644 --- a/packages/g-mobile-canvas/CHANGELOG.md +++ b/packages/g-mobile-canvas/CHANGELOG.md @@ -1,5 +1,21 @@ # @antv/g-mobile-canvas +## 0.10.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-canvas-path-generator@1.3.7 + - @antv/g-plugin-canvas-renderer@1.9.7 + - @antv/g-plugin-canvas-picker@1.10.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-plugin-dragndrop@1.8.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-mobile-interaction@0.9.7 + ## 0.10.6 ### Patch Changes diff --git a/packages/g-mobile-canvas/package.json b/packages/g-mobile-canvas/package.json index 18a27331f..e43b00b52 100644 --- a/packages/g-mobile-canvas/package.json +++ b/packages/g-mobile-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-mobile-canvas", - "version": "0.10.6", + "version": "0.10.7", "description": "A renderer implemented with Canvas2D API in mobile environment", "keywords": [ "antv", @@ -45,7 +45,7 @@ "@antv/g-plugin-dragndrop": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", "@antv/g-plugin-mobile-interaction": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "devDependencies": { diff --git a/packages/g-mobile-svg/CHANGELOG.md b/packages/g-mobile-svg/CHANGELOG.md index 3fc00ebbd..0d8fd71e7 100644 --- a/packages/g-mobile-svg/CHANGELOG.md +++ b/packages/g-mobile-svg/CHANGELOG.md @@ -1,5 +1,19 @@ # @antv/g-mobile-svg +## 0.10.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-svg-renderer@1.10.7 + - @antv/g-plugin-dragndrop@1.8.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-svg-picker@1.9.7 + - @antv/g-plugin-mobile-interaction@0.9.7 + ## 0.10.6 ### Patch Changes diff --git a/packages/g-mobile-svg/package.json b/packages/g-mobile-svg/package.json index d100dcbbc..3b491fda5 100644 --- a/packages/g-mobile-svg/package.json +++ b/packages/g-mobile-svg/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-mobile-svg", - "version": "0.10.6", + "version": "0.10.7", "description": "A renderer implemented by SVG in mobile environment", "keywords": [ "antv", @@ -43,7 +43,7 @@ "@antv/g-plugin-mobile-interaction": "workspace:*", "@antv/g-plugin-svg-picker": "workspace:*", "@antv/g-plugin-svg-renderer": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "devDependencies": { diff --git a/packages/g-mobile-webgl/CHANGELOG.md b/packages/g-mobile-webgl/CHANGELOG.md index 7cc16c742..cdddf6265 100644 --- a/packages/g-mobile-webgl/CHANGELOG.md +++ b/packages/g-mobile-webgl/CHANGELOG.md @@ -1,5 +1,21 @@ # @antv/g-mobile-webgl +## 0.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-device-renderer@1.9.7 + - @antv/g-plugin-html-renderer@1.9.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-plugin-webgl-device@1.9.7 + - @antv/g-plugin-dragndrop@1.8.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-mobile-interaction@0.9.7 + ## 0.9.6 ### Patch Changes diff --git a/packages/g-mobile-webgl/package.json b/packages/g-mobile-webgl/package.json index a33db548b..319dd2781 100644 --- a/packages/g-mobile-webgl/package.json +++ b/packages/g-mobile-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-mobile-webgl", - "version": "0.9.6", + "version": "0.9.7", "description": "A renderer implemented by WebGL1/2 in mobile environment", "keywords": [ "antv", @@ -45,7 +45,7 @@ "@antv/g-plugin-image-loader": "workspace:*", "@antv/g-plugin-mobile-interaction": "workspace:*", "@antv/g-plugin-webgl-device": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "devDependencies": { diff --git a/packages/g-pattern/CHANGELOG.md b/packages/g-pattern/CHANGELOG.md index f2ffc82e1..fa49947d2 100644 --- a/packages/g-pattern/CHANGELOG.md +++ b/packages/g-pattern/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-pattern +## 1.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-pattern/package.json b/packages/g-pattern/package.json index 5ab00d405..2044f6c49 100644 --- a/packages/g-pattern/package.json +++ b/packages/g-pattern/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-pattern", - "version": "1.2.6", + "version": "1.2.7", "description": "A pattern libs for G", "keywords": [ "antv", @@ -39,7 +39,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "publishConfig": { diff --git a/packages/g-plugin-3d/CHANGELOG.md b/packages/g-plugin-3d/CHANGELOG.md index 93b95cedd..eb26ec38e 100644 --- a/packages/g-plugin-3d/CHANGELOG.md +++ b/packages/g-plugin-3d/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-plugin-3d +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-device-renderer@1.9.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-3d/package.json b/packages/g-plugin-3d/package.json index 51802eeda..a9007385c 100644 --- a/packages/g-plugin-3d/package.json +++ b/packages/g-plugin-3d/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-3d", - "version": "1.9.6", + "version": "1.9.7", "description": "Provide 3D extension for G", "keywords": [ "antv", diff --git a/packages/g-plugin-a11y/CHANGELOG.md b/packages/g-plugin-a11y/CHANGELOG.md index ff801f4f3..3c35669fe 100644 --- a/packages/g-plugin-a11y/CHANGELOG.md +++ b/packages/g-plugin-a11y/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-a11y +## 0.6.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 0.6.6 ### Patch Changes diff --git a/packages/g-plugin-a11y/package.json b/packages/g-plugin-a11y/package.json index 299d4de70..3d37542bf 100644 --- a/packages/g-plugin-a11y/package.json +++ b/packages/g-plugin-a11y/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-a11y", - "version": "0.6.6", + "version": "0.6.7", "description": "A G plugin for accessibility", "keywords": [ "antv", diff --git a/packages/g-plugin-annotation/CHANGELOG.md b/packages/g-plugin-annotation/CHANGELOG.md index 175429a62..628c2e3ad 100644 --- a/packages/g-plugin-annotation/CHANGELOG.md +++ b/packages/g-plugin-annotation/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-annotation +## 0.4.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 0.4.6 ### Patch Changes diff --git a/packages/g-plugin-annotation/package.json b/packages/g-plugin-annotation/package.json index 05773b16e..b845fd25a 100644 --- a/packages/g-plugin-annotation/package.json +++ b/packages/g-plugin-annotation/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-annotation", - "version": "0.4.6", + "version": "0.4.7", "description": "A G plugin for annotation", "keywords": [ "antv", diff --git a/packages/g-plugin-box2d/CHANGELOG.md b/packages/g-plugin-box2d/CHANGELOG.md index 7735db347..e12574fda 100644 --- a/packages/g-plugin-box2d/CHANGELOG.md +++ b/packages/g-plugin-box2d/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-box2d +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-box2d/package.json b/packages/g-plugin-box2d/package.json index 975543fae..324cfea6d 100644 --- a/packages/g-plugin-box2d/package.json +++ b/packages/g-plugin-box2d/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-box2d", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for Box2D", "keywords": [ "antv", diff --git a/packages/g-plugin-canvas-path-generator/CHANGELOG.md b/packages/g-plugin-canvas-path-generator/CHANGELOG.md index 397f4b606..62c7df6d9 100644 --- a/packages/g-plugin-canvas-path-generator/CHANGELOG.md +++ b/packages/g-plugin-canvas-path-generator/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g-plugin-canvas-path-generator +## 1.3.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + - @antv/g-math@2.0.2 + ## 1.3.6 ### Patch Changes diff --git a/packages/g-plugin-canvas-path-generator/package.json b/packages/g-plugin-canvas-path-generator/package.json index 015b925df..960524dcf 100644 --- a/packages/g-plugin-canvas-path-generator/package.json +++ b/packages/g-plugin-canvas-path-generator/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvas-path-generator", - "version": "1.3.6", + "version": "1.3.7", "description": "A G plugin of path generator with Canvas2D API", "keywords": [ "antv", @@ -40,7 +40,7 @@ "dependencies": { "@antv/g-lite": "workspace:*", "@antv/g-math": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "publishConfig": { diff --git a/packages/g-plugin-canvas-picker/CHANGELOG.md b/packages/g-plugin-canvas-picker/CHANGELOG.md index 785f3ed22..3cb8112d9 100644 --- a/packages/g-plugin-canvas-picker/CHANGELOG.md +++ b/packages/g-plugin-canvas-picker/CHANGELOG.md @@ -1,5 +1,18 @@ # @antv/g-plugin-canvas-picker +## 1.10.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-canvas-path-generator@1.3.7 + - @antv/g-plugin-canvas-renderer@1.9.7 + - @antv/g-lite@1.2.7 + - @antv/g-math@2.0.2 + ## 1.10.6 ### Patch Changes diff --git a/packages/g-plugin-canvas-picker/package.json b/packages/g-plugin-canvas-picker/package.json index c6bf9916d..16819f586 100644 --- a/packages/g-plugin-canvas-picker/package.json +++ b/packages/g-plugin-canvas-picker/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvas-picker", - "version": "1.10.6", + "version": "1.10.7", "description": "A G plugin for picking in canvas", "keywords": [ "antv", @@ -42,7 +42,7 @@ "@antv/g-math": "workspace:*", "@antv/g-plugin-canvas-path-generator": "workspace:*", "@antv/g-plugin-canvas-renderer": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-canvas-renderer/CHANGELOG.md b/packages/g-plugin-canvas-renderer/CHANGELOG.md index 15d7e604d..ef37c7bd1 100644 --- a/packages/g-plugin-canvas-renderer/CHANGELOG.md +++ b/packages/g-plugin-canvas-renderer/CHANGELOG.md @@ -1,5 +1,18 @@ # @antv/g-plugin-canvas-renderer +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-canvas-path-generator@1.3.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-lite@1.2.7 + - @antv/g-math@2.0.2 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-canvas-renderer/package.json b/packages/g-plugin-canvas-renderer/package.json index da90a1e3b..2dc97c6b3 100644 --- a/packages/g-plugin-canvas-renderer/package.json +++ b/packages/g-plugin-canvas-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvas-renderer", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin of renderer implementation with Canvas2D API", "keywords": [ "antv", @@ -42,7 +42,7 @@ "@antv/g-math": "workspace:*", "@antv/g-plugin-canvas-path-generator": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-canvas-renderer/src/shapes/styles/Text.ts b/packages/g-plugin-canvas-renderer/src/shapes/styles/Text.ts index a24ba9bb7..4d1493dca 100644 --- a/packages/g-plugin-canvas-renderer/src/shapes/styles/Text.ts +++ b/packages/g-plugin-canvas-renderer/src/shapes/styles/Text.ts @@ -1,19 +1,24 @@ import type { CSSRGB, + CanvasContext, DisplayObject, + GlobalRuntime, ParsedTextStyleProps, Rectangle, } from '@antv/g-lite'; -import { runtime } from '@antv/g-lite'; import { isNil } from '@antv/util'; import { setShadowAndFilter } from './Default'; import type { StyleRenderer } from './interfaces'; +import { CanvasRendererPlugin } from '../../CanvasRendererPlugin'; export class TextRenderer implements StyleRenderer { render( context: CanvasRenderingContext2D, parsedStyle: ParsedTextStyleProps, object: DisplayObject, + canvasContext: CanvasContext, + plugin: CanvasRendererPlugin, + runtime: GlobalRuntime, ) { const { lineWidth, diff --git a/packages/g-plugin-canvaskit-renderer/CHANGELOG.md b/packages/g-plugin-canvaskit-renderer/CHANGELOG.md index aa504bbaf..b75f3a049 100644 --- a/packages/g-plugin-canvaskit-renderer/CHANGELOG.md +++ b/packages/g-plugin-canvaskit-renderer/CHANGELOG.md @@ -1,5 +1,17 @@ # @antv/g-plugin-canvaskit-renderer +## 1.3.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-lite@1.2.7 + - @antv/g-math@2.0.2 + ## 1.3.6 ### Patch Changes diff --git a/packages/g-plugin-canvaskit-renderer/package.json b/packages/g-plugin-canvaskit-renderer/package.json index 6bfc1cc61..403f796e4 100644 --- a/packages/g-plugin-canvaskit-renderer/package.json +++ b/packages/g-plugin-canvaskit-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvaskit-renderer", - "version": "1.3.6", + "version": "1.3.7", "description": "A G plugin of renderer implementation with CanvasKit", "keywords": [ "antv", @@ -41,7 +41,7 @@ "@antv/g-lite": "workspace:*", "@antv/g-math": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "canvaskit-wasm": "^0.34.0", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" diff --git a/packages/g-plugin-control/CHANGELOG.md b/packages/g-plugin-control/CHANGELOG.md index 3c87ab950..90b79fc7e 100644 --- a/packages/g-plugin-control/CHANGELOG.md +++ b/packages/g-plugin-control/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-plugin-control +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-control/package.json b/packages/g-plugin-control/package.json index 277a8dbb0..ad86b567f 100644 --- a/packages/g-plugin-control/package.json +++ b/packages/g-plugin-control/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-control", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for orbit control", "keywords": [ "antv", diff --git a/packages/g-plugin-control/src/ControlPlugin.ts b/packages/g-plugin-control/src/ControlPlugin.ts index a8eb9b2c8..8999d57ff 100644 --- a/packages/g-plugin-control/src/ControlPlugin.ts +++ b/packages/g-plugin-control/src/ControlPlugin.ts @@ -5,13 +5,9 @@ import type { RenderingPlugin, RenderingPluginContext, } from '@antv/g-lite'; -import { runtime } from '@antv/g-lite'; import Hammer from 'hammerjs'; const MOTION_FACTOR = 10; -// https://gist.github.com/handleman/3c99e754065f647b082f -const isMac = - runtime.globalThis.navigator.platform.toUpperCase().indexOf('MAC') >= 0; export class ControlPlugin implements RenderingPlugin { static tag = 'Control'; @@ -27,11 +23,13 @@ export class ControlPlugin implements RenderingPlugin { private ctrlKey: boolean; private shiftKey: boolean; private altKey: boolean; + private context: RenderingPluginContext; apply(context: RenderingPluginContext) { const { config, camera, renderingService, renderingContext } = context; this.canvasConfig = config; this.camera = camera; + this.context = context; renderingService.hooks.init.tap(ControlPlugin.tag, () => { const root = renderingContext.root.ownerDocument.defaultView; @@ -66,6 +64,11 @@ export class ControlPlugin implements RenderingPlugin { }; private onPanmove = (e: HammerInput) => { + // https://gist.github.com/handleman/3c99e754065f647b082f + const isMac = + this.context.globalThis.navigator.platform.toUpperCase().indexOf('MAC') >= + 0; + this.ctrlKey = e.srcEvent.ctrlKey; if (isMac && e.srcEvent.metaKey) { this.ctrlKey = true; diff --git a/packages/g-plugin-css-select/CHANGELOG.md b/packages/g-plugin-css-select/CHANGELOG.md index 229a246d4..94d6b8e88 100644 --- a/packages/g-plugin-css-select/CHANGELOG.md +++ b/packages/g-plugin-css-select/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-css-select +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-css-select/package.json b/packages/g-plugin-css-select/package.json index 130dfd683..3ea3b5f2e 100644 --- a/packages/g-plugin-css-select/package.json +++ b/packages/g-plugin-css-select/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-css-select", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for using CSS select syntax in query selector", "keywords": [ "antv", diff --git a/packages/g-plugin-device-renderer/CHANGELOG.md b/packages/g-plugin-device-renderer/CHANGELOG.md index 5771a0b23..c34b621f7 100644 --- a/packages/g-plugin-device-renderer/CHANGELOG.md +++ b/packages/g-plugin-device-renderer/CHANGELOG.md @@ -1,5 +1,17 @@ # @antv/g-plugin-device-renderer +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-lite@1.2.7 + - @antv/g-math@2.0.2 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-device-renderer/package.json b/packages/g-plugin-device-renderer/package.json index c13eb6307..89a1841ee 100644 --- a/packages/g-plugin-device-renderer/package.json +++ b/packages/g-plugin-device-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-device-renderer", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin of renderer implementation with GPUDevice", "keywords": [ "antv", @@ -42,7 +42,7 @@ "@antv/g-math": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", "@antv/g-shader-components": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "@webgpu/types": "^0.1.6", "earcut": "^2.2.3", "eventemitter3": "^5.0.1", diff --git a/packages/g-plugin-device-renderer/src/RenderGraphPlugin.ts b/packages/g-plugin-device-renderer/src/RenderGraphPlugin.ts index 7c41ad3e5..effe0770d 100644 --- a/packages/g-plugin-device-renderer/src/RenderGraphPlugin.ts +++ b/packages/g-plugin-device-renderer/src/RenderGraphPlugin.ts @@ -11,7 +11,7 @@ import { CanvasEvent, ElementEvent, parseColor } from '@antv/g-lite'; import { Renderable3D } from './components/Renderable3D'; import type { LightPool } from './LightPool'; import { Fog, Light } from './lights'; -// import { pushFXAAPass } from './passes/FXAA'; +import { pushFXAAPass } from './passes/FXAA'; import { Device, SwapChain, @@ -37,6 +37,7 @@ import { } from './render'; import type { BatchManager } from './renderer'; import type { TexturePool } from './TexturePool'; +import { DeviceRendererPluginOptions } from './interfaces'; // scene uniform block index export const SceneUniformBufferIndex = 0; @@ -62,6 +63,7 @@ export class RenderGraphPlugin implements RenderingPlugin { private lightPool: LightPool, private texturePool: TexturePool, private batchManager: BatchManager, + private options: Partial, ) {} private device: Device; @@ -306,13 +308,15 @@ export class RenderGraphPlugin implements RenderingPlugin { }); // TODO: other post-processing passes - // FXAA - // pushFXAAPass( - // this.builder, - // this.renderHelper, - // renderInput, - // mainColorTargetID, - // ); + if (this.options?.enableFXAA) { + // FXAA + pushFXAAPass( + this.builder, + this.renderHelper, + renderInput, + mainColorTargetID, + ); + } // output to screen this.builder.resolveRenderTargetToExternalTexture( diff --git a/packages/g-plugin-device-renderer/src/TexturePool.ts b/packages/g-plugin-device-renderer/src/TexturePool.ts index ad86b6cfc..edc5d4d01 100644 --- a/packages/g-plugin-device-renderer/src/TexturePool.ts +++ b/packages/g-plugin-device-renderer/src/TexturePool.ts @@ -2,13 +2,13 @@ import { CanvasContext, CSSGradientValue, DisplayObject, + GlobalRuntime, isBrowser, LinearGradient, parsedTransformToMat4, parseTransform, Pattern, RadialGradient, - runtime, } from '@antv/g-lite'; import type { ImagePool } from '@antv/g-plugin-image-loader'; import { isString } from '@antv/util'; @@ -28,7 +28,7 @@ export interface GradientParams { } export class TexturePool { - constructor(public context: CanvasContext) {} + constructor(public context: CanvasContext, private runtime: GlobalRuntime) {} private textureCache: Record = {}; @@ -89,8 +89,8 @@ export class TexturePool { } }; - if (runtime.globalThis.createImageBitmap) { - runtime.globalThis + if (this.runtime.globalThis.createImageBitmap) { + this.runtime.globalThis .createImageBitmap(image) .then((bitmap: ImageBitmap) => onSuccess(bitmap)) .catch(() => { @@ -117,7 +117,7 @@ export class TexturePool { } getOrCreateCanvas() { - return runtime.offscreenCanvasCreator.getOrCreateCanvas( + return this.runtime.offscreenCanvasCreator.getOrCreateCanvas( this.context.config.offscreenCanvas, ); } @@ -130,8 +130,8 @@ export class TexturePool { const { offscreenCanvas } = this.context.config; const canvas = - runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas); - const context = runtime.offscreenCanvasCreator.getOrCreateContext( + this.runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas); + const context = this.runtime.offscreenCanvasCreator.getOrCreateContext( offscreenCanvas, ) as CanvasRenderingContext2D; @@ -173,9 +173,9 @@ export class TexturePool { const { offscreenCanvas } = this.context.config; const canvas = - runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas); + this.runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas); const context = - runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas); + this.runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas); canvas.width = width; canvas.height = height; diff --git a/packages/g-plugin-device-renderer/src/components/Renderable3D.ts b/packages/g-plugin-device-renderer/src/components/Renderable3D.ts index 8662b388c..8c84f47b3 100644 --- a/packages/g-plugin-device-renderer/src/components/Renderable3D.ts +++ b/packages/g-plugin-device-renderer/src/components/Renderable3D.ts @@ -1,4 +1,4 @@ -import type { Instanced } from '../meshes'; +import type { Instanced } from '../drawcalls'; export class Renderable3D { static tag = 'c-renderable-3d'; @@ -7,5 +7,5 @@ export class Renderable3D { encodedPickingColor: [number, number, number]; - meshes: Instanced[] = []; + drawcalls: Instanced[] = []; } diff --git a/packages/g-plugin-device-renderer/src/meshes/Image.ts b/packages/g-plugin-device-renderer/src/drawcalls/Image.ts similarity index 97% rename from packages/g-plugin-device-renderer/src/meshes/Image.ts rename to packages/g-plugin-device-renderer/src/drawcalls/Image.ts index 4c8a68b63..610c0963c 100644 --- a/packages/g-plugin-device-renderer/src/meshes/Image.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/Image.ts @@ -3,12 +3,12 @@ import { Instanced, VertexAttributeBufferIndex, VertexAttributeLocation, -} from '../meshes/Instanced'; +} from './Instanced'; import { Format, VertexBufferFrequency } from '../platform'; import frag from '../shader/image.frag'; import vert from '../shader/image.vert'; -export class ImageMesh extends Instanced { +export class ImageDrawcall extends Instanced { shouldMerge(object: DisplayObject, index: number) { const shouldMerge = super.shouldMerge(object, index); diff --git a/packages/g-plugin-device-renderer/src/meshes/Instanced.ts b/packages/g-plugin-device-renderer/src/drawcalls/Instanced.ts similarity index 98% rename from packages/g-plugin-device-renderer/src/meshes/Instanced.ts rename to packages/g-plugin-device-renderer/src/drawcalls/Instanced.ts index beec10c8a..e857ab1e3 100644 --- a/packages/g-plugin-device-renderer/src/meshes/Instanced.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/Instanced.ts @@ -95,20 +95,22 @@ export abstract class Instanced { */ key: string; - /** - * index in renderer.meshes - */ - index = -1; - constructor( protected renderHelper: RenderHelper, protected texturePool: TexturePool, protected lightPool: LightPool, object: DisplayObject, + /** + * All drawcall constructors. + */ + protected drawcallCtors: (new (..._: any) => Instanced)[], + /** + * index in renderer.meshes + */ + public index = -1, + public context: BatchContext, ) {} - context: BatchContext; - /** * instances */ @@ -151,6 +153,8 @@ export abstract class Instanced { */ protected mergeAnchorIntoModelMatrix = false; + protected checkNodeName = true; + /** * Create a new batch if the number of instances exceeds. */ @@ -163,13 +167,12 @@ export abstract class Instanced { } inited = false; - init(context: BatchContext) { + init() { if (this.inited) { return; } this.renderer.beforeInitMesh(this); - this.context = context; this.material = new ShaderMaterial(this.context.device); this.material.defines = { ...enumToObject(VertexAttributeLocation), @@ -247,12 +250,7 @@ export abstract class Instanced { } // Path / Polyline could be rendered as Line - if ( - this.instance.nodeName !== object.nodeName && - this.instance.nodeName !== object.renderable.proxyNodeName && - this.instance.renderable.proxyNodeName !== object.nodeName && - this.instance.renderable.proxyNodeName !== object.renderable.proxyNodeName - ) { + if (this.checkNodeName && this.instance.nodeName !== object.nodeName) { return false; } @@ -698,7 +696,7 @@ export abstract class Instanced { renderInst.setProgram(program); renderInst.setInputLayoutAndState(inputLayout, this.inputState); - this.renderer.beforeUploadUBO(renderInst, this, this.index); + this.renderer.beforeUploadUBO(renderInst, this); // upload uniform buffer object this.uploadUBO(renderInst); @@ -1028,7 +1026,6 @@ export abstract class Instanced { protected beforeUploadUBO( renderInst: RenderInst, objects: DisplayObject[], - i: number, ): void {} private uploadUBO(renderInst: RenderInst): void { const numUniformBuffers = 1; // Scene UBO diff --git a/packages/g-plugin-device-renderer/src/meshes/InstancedFill.ts b/packages/g-plugin-device-renderer/src/drawcalls/InstancedFill.ts similarity index 81% rename from packages/g-plugin-device-renderer/src/meshes/InstancedFill.ts rename to packages/g-plugin-device-renderer/src/drawcalls/InstancedFill.ts index 43c6660c7..38bbe8c93 100644 --- a/packages/g-plugin-device-renderer/src/meshes/InstancedFill.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/InstancedFill.ts @@ -1,9 +1,9 @@ -import type { DisplayObject } from '@antv/g-lite'; +import { DisplayObject, Shape } from '@antv/g-lite'; import { Instanced, VertexAttributeBufferIndex, VertexAttributeLocation, -} from '../meshes/Instanced'; +} from './Instanced'; import { Format, VertexBufferFrequency } from '../platform'; import meshFrag from '../shader/mesh.frag'; import meshVert from '../shader/mesh.vert'; @@ -11,26 +11,50 @@ import { updateBuffer } from './InstancedPath'; import { RenderHelper } from '../render'; import { TexturePool } from '../TexturePool'; import { LightPool } from '../LightPool'; +import { BatchContext } from '../renderer'; const SEGMENT_NUM = 12; -export class InstancedFillMesh extends Instanced { +export class InstancedFillDrawcall extends Instanced { constructor( protected renderHelper: RenderHelper, protected texturePool: TexturePool, protected lightPool: LightPool, object: DisplayObject, + drawcallCtors: (new (..._: any) => Instanced)[], + index: number, + context: BatchContext, ) { - super(renderHelper, texturePool, lightPool, object); + super( + renderHelper, + texturePool, + lightPool, + object, + drawcallCtors, + index, + context, + ); this.trianglesHash = this.calcSegmentNum(object); } private trianglesHash: [number[], number[]] = [[], []]; private calcSegmentNum(object: DisplayObject): [number[], number[]] { - const { triangles, pointsBuffer } = updateBuffer(object, true, SEGMENT_NUM); + const { triangles, pointsBuffer } = updateBuffer( + object, + true, + SEGMENT_NUM, + this.calcSubpathIndex(object), + ); return [triangles, pointsBuffer]; } + private calcSubpathIndex(object: DisplayObject) { + if (object.nodeName === Shape.PATH) { + return this.index; + } + return 0; + } + private compareTrianglesHash(hash: [number[], number[]]) { const [triangles, points] = this.trianglesHash; const [t, p] = hash; @@ -54,6 +78,10 @@ export class InstancedFillMesh extends Instanced { return false; } + if (this.index !== index) { + return false; + } + const trianglesHash = this.calcSegmentNum(object); return this.compareTrianglesHash(trianglesHash); } @@ -71,6 +99,7 @@ export class InstancedFillMesh extends Instanced { object, true, SEGMENT_NUM, + this.calcSubpathIndex(object), ); const { halfExtents } = object.getGeometryBounds(); diff --git a/packages/g-plugin-device-renderer/src/meshes/InstancedLine.ts b/packages/g-plugin-device-renderer/src/drawcalls/InstancedLine.ts similarity index 91% rename from packages/g-plugin-device-renderer/src/meshes/InstancedLine.ts rename to packages/g-plugin-device-renderer/src/drawcalls/InstancedLine.ts index 7b7b95197..02cce45d9 100644 --- a/packages/g-plugin-device-renderer/src/meshes/InstancedLine.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/InstancedLine.ts @@ -46,18 +46,32 @@ const LineCap_MAP = { square: 3, }; -export class InstancedLineMesh extends Instanced { - static isLine(object: DisplayObject) { +export class InstancedLineDrawcall extends Instanced { + static isLine(object: DisplayObject, subpathIndex: number) { if (object.nodeName === Shape.PATH) { const { path: { absolutePath }, } = object.parsedStyle as ParsedPathStyleProps; + let mSegmentCount = 0; + let mCommandIndex = 0; + for (let i = 0; i < absolutePath.length; i++) { + const segment = absolutePath[i]; + if (segment[0] === 'M') { + if (mSegmentCount === subpathIndex) { + mCommandIndex = i; + break; + } + mSegmentCount++; + } + } + // only contains M & L commands if ( - absolutePath.length === 2 && - absolutePath[0][0] === 'M' && - absolutePath[1][0] === 'L' + absolutePath[mCommandIndex][0] === 'M' && + absolutePath[mCommandIndex + 1][0] === 'L' && + (absolutePath[mCommandIndex + 2] === undefined || + absolutePath[mCommandIndex + 2][0] === 'M') ) { return true; } @@ -161,11 +175,23 @@ export class InstancedLineMesh extends Instanced { markerStartOffset, markerEndOffset, } = (object as Path).parsedStyle; + let mSegmentCount = 0; + let mCommandIndex = 0; + for (let i = 0; i < absolutePath.length; i++) { + const segment = absolutePath[i]; + if (segment[0] === 'M') { + if (mSegmentCount === this.index) { + mCommandIndex = i; + break; + } + mSegmentCount++; + } + } parsedLineStyleProps = { - x1: absolutePath[0][1], - y1: absolutePath[0][2], - x2: absolutePath[1][1], - y2: absolutePath[1][2], + x1: absolutePath[mCommandIndex][1], + y1: absolutePath[mCommandIndex][2], + x2: absolutePath[mCommandIndex + 1][1], + y2: absolutePath[mCommandIndex + 1][2], z1: 0, z2: 0, defX, @@ -323,10 +349,7 @@ export class InstancedLineMesh extends Instanced { let parsedLineStyleProps: Partial; if (object.nodeName === Shape.LINE) { parsedLineStyleProps = (object as Line).parsedStyle; - } else if ( - object.nodeName === Shape.POLYLINE && - object.renderable.proxyNodeName === Shape.LINE - ) { + } else if (object.nodeName === Shape.POLYLINE) { const { points: { points }, defX, @@ -353,10 +376,7 @@ export class InstancedLineMesh extends Instanced { markerStartOffset, markerEndOffset, }; - } else if ( - object.nodeName === Shape.PATH && - object.renderable.proxyNodeName === Shape.LINE - ) { + } else if (object.nodeName === Shape.PATH) { const { path: { absolutePath }, defX, diff --git a/packages/g-plugin-device-renderer/src/meshes/InstancedPath.ts b/packages/g-plugin-device-renderer/src/drawcalls/InstancedPath.ts similarity index 86% rename from packages/g-plugin-device-renderer/src/meshes/InstancedPath.ts rename to packages/g-plugin-device-renderer/src/drawcalls/InstancedPath.ts index b076a26eb..8def9c4ae 100644 --- a/packages/g-plugin-device-renderer/src/meshes/InstancedPath.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/InstancedPath.ts @@ -30,6 +30,8 @@ import { RenderHelper } from '../render'; import { TexturePool } from '../TexturePool'; import { LightPool } from '../LightPool'; import { bezierCurveTo, quadCurveTo } from '../utils'; +import { InstancedFillDrawcall } from './InstancedFill'; +import { BatchContext } from '../renderer'; enum LineVertexAttributeBufferIndex { PACKED = VertexAttributeBufferIndex.POSITION + 1, @@ -54,14 +56,36 @@ const SEGMENT_NUM = 12; /** * Used for Curve only contains 2 commands, e.g. [[M], [C | Q | A]] */ -export class InstancedPathMesh extends Instanced { +export class InstancedPathDrawcall extends Instanced { + static calcSubpathNum(object: DisplayObject) { + if (object.nodeName === Shape.PATH) { + const { + path: { absolutePath }, + } = object.parsedStyle as ParsedPathStyleProps; + return absolutePath.filter((d) => d[0] === 'M').length; + } + + return 1; + } + constructor( protected renderHelper: RenderHelper, protected texturePool: TexturePool, protected lightPool: LightPool, object: DisplayObject, + drawcallCtors: (new (..._: any) => Instanced)[], + index: number, + context: BatchContext, ) { - super(renderHelper, texturePool, lightPool, object); + super( + renderHelper, + texturePool, + lightPool, + object, + drawcallCtors, + index, + context, + ); this.segmentNum = this.calcSegmentNum(object); } @@ -71,9 +95,25 @@ export class InstancedPathMesh extends Instanced { private calcSegmentNum(object: DisplayObject) { // FIXME: only need to collect instanced count - const { instancedCount } = updateBuffer(object, false, SEGMENT_NUM); + const { instancedCount } = updateBuffer( + object, + false, + SEGMENT_NUM, + this.calcSubpathIndex(object), + ); return instancedCount; } + + private calcSubpathIndex(object: DisplayObject) { + if (object.nodeName === Shape.PATH) { + const fillDrawcallCount = this.drawcallCtors.filter( + (ctor) => ctor === InstancedFillDrawcall, + ).length; + return this.index - fillDrawcallCount; + } + return 0; + } + /** * Paths with the same number of vertices should be merged. */ @@ -83,6 +123,10 @@ export class InstancedPathMesh extends Instanced { return false; } + if (this.index !== index) { + return false; + } + const segmentNum = this.calcSegmentNum(object); return this.segmentNum === segmentNum; @@ -110,7 +154,12 @@ export class InstancedPathMesh extends Instanced { pointsBuffer: pBuffer, travelBuffer: tBuffer, instancedCount: count, - } = updateBuffer(object, false, SEGMENT_NUM); + } = updateBuffer( + object, + false, + SEGMENT_NUM, + this.calcSubpathIndex(object), + ); const { lineDash, lineDashOffset, isBillboard } = (object as Path) .parsedStyle; @@ -300,7 +349,12 @@ export class InstancedPathMesh extends Instanced { pointsBuffer: pBuffer, travelBuffer: tBuffer, instancedCount: iCount, - } = updateBuffer(object, false, SEGMENT_NUM); + } = updateBuffer( + object, + false, + SEGMENT_NUM, + this.calcSubpathIndex(object), + ); instancedCount = iCount; // Can't use interleaved buffer here, we should spread them like: @@ -388,6 +442,7 @@ export function updateBuffer( object: DisplayObject, needEarcut = false, segmentNum?: number, + subPathIndex = 0, ) { const { lineCap, lineJoin } = object.parsedStyle as ParsedBaseStyleProps; let { defX, defY } = object.parsedStyle; @@ -662,10 +717,7 @@ export function updateBuffer( }); if (needEarcut) { - const pointsBuffer = points.reduce((prev, cur) => { - prev.push(...cur); - return prev; - }, []); + const pointsBuffer = points[subPathIndex]; // use earcut for triangulation triangles = earcut(pointsBuffer, [], 2); return { @@ -690,73 +742,60 @@ export function updateBuffer( endJoint = JOINT_TYPE.JOINT_CAP_SQUARE; } - let j = (Math.round(0 / stridePoints) + 2) * strideFloats; - return points - .map((points) => { - // const needDash = !isNil(lineDash); - let dist = 0; - const pointsBuffer: number[] = []; - const travelBuffer: number[] = []; - for (let i = 0; i < points.length; i += stridePoints) { - // calc travel - // if (needDash) { - if (i > 1) { - dist += Math.sqrt( - Math.pow(points[i] - points[i - 2], 2) + - Math.pow(points[i + 1] - points[i + 1 - 2], 2), - ); - } - travelBuffer.push(dist); - // } else { - // travelBuffer.push(0); - // } - - pointsBuffer[j++] = points[i]; - pointsBuffer[j++] = points[i + 1]; - pointsBuffer[j] = jointType; - if (i == 0 && capType !== JOINT_TYPE.CAP_ROUND) { - pointsBuffer[j] += capType; - } - if (i + stridePoints * 2 >= points.length) { - pointsBuffer[j] += endJoint - jointType; - } else if (i + stridePoints >= points.length) { - pointsBuffer[j] = 0; - } - j++; + const subPath = points[subPathIndex]; + { + const points = subPath; + let j = (Math.round(0 / stridePoints) + 2) * strideFloats; + // const needDash = !isNil(lineDash); + let dist = 0; + const pointsBuffer: number[] = []; + const travelBuffer: number[] = []; + for (let i = 0; i < points.length; i += stridePoints) { + // calc travel + // if (needDash) { + if (i > 1) { + dist += Math.sqrt( + Math.pow(points[i] - points[i - 2], 2) + + Math.pow(points[i + 1] - points[i + 1 - 2], 2), + ); } - pointsBuffer[j++] = points[points.length - 4]; - pointsBuffer[j++] = points[points.length - 3]; - pointsBuffer[j++] = 0; - pointsBuffer[0] = points[0]; - pointsBuffer[1] = points[1]; - pointsBuffer[2] = 0; - pointsBuffer[3] = points[2]; - pointsBuffer[4] = points[3]; - pointsBuffer[5] = capType === JOINT_TYPE.CAP_ROUND ? capType : 0; - - const instancedCount = Math.round(points.length / stridePoints); - - return { - pointsBuffer, - travelBuffer, - triangles, - instancedCount, - }; - }) - .reduce( - (prev, cur) => { - prev.pointsBuffer.push(...cur.pointsBuffer); - prev.travelBuffer.push(...cur.travelBuffer); - prev.instancedCount += cur.instancedCount; - return prev; - }, - { - pointsBuffer: [], - travelBuffer: [], - triangles, - instancedCount: 0, - }, - ); + travelBuffer.push(dist); + // } else { + // travelBuffer.push(0); + // } + + pointsBuffer[j++] = points[i]; + pointsBuffer[j++] = points[i + 1]; + pointsBuffer[j] = jointType; + if (i == 0 && capType !== JOINT_TYPE.CAP_ROUND) { + pointsBuffer[j] += capType; + } + if (i + stridePoints * 2 >= points.length) { + pointsBuffer[j] += endJoint - jointType; + } else if (i + stridePoints >= points.length) { + pointsBuffer[j] = 0; + } + j++; + } + pointsBuffer[j++] = points[points.length - 4]; + pointsBuffer[j++] = points[points.length - 3]; + pointsBuffer[j++] = 0; + pointsBuffer[0] = points[0]; + pointsBuffer[1] = points[1]; + pointsBuffer[2] = 0; + pointsBuffer[3] = points[2]; + pointsBuffer[4] = points[3]; + pointsBuffer[5] = capType === JOINT_TYPE.CAP_ROUND ? capType : 0; + + const instancedCount = Math.round(points.length / stridePoints); + + return { + pointsBuffer, + travelBuffer, + triangles, + instancedCount, + }; + } } function getJointType(lineJoin: CanvasLineJoin) { diff --git a/packages/g-plugin-device-renderer/src/meshes/Mesh.ts b/packages/g-plugin-device-renderer/src/drawcalls/Mesh.ts similarity index 96% rename from packages/g-plugin-device-renderer/src/meshes/Mesh.ts rename to packages/g-plugin-device-renderer/src/drawcalls/Mesh.ts index 329f8ef0e..8a74945b6 100644 --- a/packages/g-plugin-device-renderer/src/meshes/Mesh.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/Mesh.ts @@ -2,7 +2,7 @@ import type { DisplayObject } from '@antv/g-lite'; import { Shape } from '@antv/g-lite'; import type { Mesh } from '../Mesh'; import { Instanced } from './Instanced'; -export class MeshMesh extends Instanced { +export class MeshDrawcall extends Instanced { protected lightReceived = true; shouldMerge(object: DisplayObject, index: number) { diff --git a/packages/g-plugin-device-renderer/src/meshes/SDF.ts b/packages/g-plugin-device-renderer/src/drawcalls/SDF.ts similarity index 99% rename from packages/g-plugin-device-renderer/src/meshes/SDF.ts rename to packages/g-plugin-device-renderer/src/drawcalls/SDF.ts index a6a64a2a6..b84358f10 100644 --- a/packages/g-plugin-device-renderer/src/meshes/SDF.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/SDF.ts @@ -33,7 +33,7 @@ const SDF_Shape: string[] = [Shape.CIRCLE, Shape.ELLIPSE, Shape.RECT]; * Use SDF to render 2D shapes, eg. circle, ellipse. * Use less triangles(2) and vertices compared with normal triangulation. */ -export class SDFMesh extends Instanced { +export class SDFDrawcall extends Instanced { shouldMerge(object: DisplayObject, index: number) { const shouldMerge = super.shouldMerge(object, index); diff --git a/packages/g-plugin-device-renderer/src/meshes/Text.ts b/packages/g-plugin-device-renderer/src/drawcalls/Text.ts similarity index 90% rename from packages/g-plugin-device-renderer/src/meshes/Text.ts rename to packages/g-plugin-device-renderer/src/drawcalls/Text.ts index ba18add77..7dc540661 100644 --- a/packages/g-plugin-device-renderer/src/meshes/Text.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/Text.ts @@ -4,7 +4,7 @@ import type { Text as TextShape, Tuple4Number, } from '@antv/g-lite'; -import { isCSSRGB, runtime } from '@antv/g-lite'; +import { isCSSRGB } from '@antv/g-lite'; import { mat4 } from 'gl-matrix'; import { CullMode, Format, VertexBufferFrequency } from '../platform'; import { RENDER_ORDER_SCALE } from '../renderer/Batch'; @@ -23,6 +23,7 @@ import { packUint8ToFloat } from '../utils/compression'; import { LightPool } from '../LightPool'; import { TexturePool } from '../TexturePool'; import { RenderHelper } from '../render'; +import { BatchContext } from '../renderer'; enum TextVertexAttributeBufferIndex { INSTANCED = VertexAttributeBufferIndex.POSITION + 1, @@ -43,8 +44,8 @@ export enum TextUniform { HAS_STROKE = 'u_HasStroke', } -export class TextMesh extends Instanced { - private glyphManager = new GlyphManager(); +export class TextDrawcall extends Instanced { + private glyphManager: GlyphManager; private packedBufferObjectMap = new WeakMap< DisplayObject, @@ -60,9 +61,21 @@ export class TextMesh extends Instanced { protected texturePool: TexturePool, protected lightPool: LightPool, object: DisplayObject, + drawcallCtors: (new (..._: any) => Instanced)[], + index: number, + context: BatchContext, ) { - super(renderHelper, texturePool, lightPool, object); + super( + renderHelper, + texturePool, + lightPool, + object, + drawcallCtors, + index, + context, + ); this.fontHash = this.calcFontHash(object); + this.glyphManager = new GlyphManager(this.context); } private calcFontHash(object: DisplayObject) { @@ -124,7 +137,7 @@ export class TextMesh extends Instanced { linePositionY = 0; } else if (textBaseline === 'alphabetic') { linePositionY = -height + lineHeight * 0.25; - if (!runtime.enableCSSParsing) { + if (!this.context.enableCSSParsing) { linePositionY = -height; } // linePositionY = -height + fontProperties.ascent; @@ -387,30 +400,30 @@ export class TextMesh extends Instanced { const [start, end] = this.packedBufferObjectMap.get(object); const sliced = vertice.slice(start, end); for (let i = 0; i < end - start; i += bytes) { - if (name === 'modelMatrix') { - sliced[i + 0] = modelMatrix[0]; - sliced[i + 1] = modelMatrix[1]; - sliced[i + 2] = modelMatrix[2]; - sliced[i + 3] = modelMatrix[3]; - sliced[i + 4] = modelMatrix[4]; - sliced[i + 5] = modelMatrix[5]; - sliced[i + 6] = modelMatrix[6]; - sliced[i + 7] = modelMatrix[7]; - sliced[i + 8] = modelMatrix[8]; - sliced[i + 9] = modelMatrix[9]; - sliced[i + 10] = modelMatrix[10]; - sliced[i + 11] = modelMatrix[11]; - sliced[i + 12] = modelMatrix[12]; - sliced[i + 13] = modelMatrix[13]; - sliced[i + 14] = modelMatrix[14]; - sliced[i + 15] = modelMatrix[15]; - } else if (name === 'fill') { - sliced[i + 16] = packUint8ToFloat(fillColor[0], fillColor[1]); - sliced[i + 17] = packUint8ToFloat(fillColor[2], fillColor[3]); - } else if (name === 'stroke') { - sliced[i + 18] = packUint8ToFloat(strokeColor[0], strokeColor[1]); - sliced[i + 19] = packUint8ToFloat(strokeColor[2], strokeColor[3]); - } + // if (name === 'modelMatrix') { + sliced[i + 0] = modelMatrix[0]; + sliced[i + 1] = modelMatrix[1]; + sliced[i + 2] = modelMatrix[2]; + sliced[i + 3] = modelMatrix[3]; + sliced[i + 4] = modelMatrix[4]; + sliced[i + 5] = modelMatrix[5]; + sliced[i + 6] = modelMatrix[6]; + sliced[i + 7] = modelMatrix[7]; + sliced[i + 8] = modelMatrix[8]; + sliced[i + 9] = modelMatrix[9]; + sliced[i + 10] = modelMatrix[10]; + sliced[i + 11] = modelMatrix[11]; + sliced[i + 12] = modelMatrix[12]; + sliced[i + 13] = modelMatrix[13]; + sliced[i + 14] = modelMatrix[14]; + sliced[i + 15] = modelMatrix[15]; + // } else if (name === 'fill') { + sliced[i + 16] = packUint8ToFloat(fillColor[0], fillColor[1]); + sliced[i + 17] = packUint8ToFloat(fillColor[2], fillColor[3]); + // } else if (name === 'stroke') { + sliced[i + 18] = packUint8ToFloat(strokeColor[0], strokeColor[1]); + sliced[i + 19] = packUint8ToFloat(strokeColor[2], strokeColor[3]); + // } sliced[i + 20] = opacity; sliced[i + 21] = fillOpacity; sliced[i + 22] = strokeOpacity; diff --git a/packages/g-plugin-device-renderer/src/meshes/index.ts b/packages/g-plugin-device-renderer/src/drawcalls/index.ts similarity index 100% rename from packages/g-plugin-device-renderer/src/meshes/index.ts rename to packages/g-plugin-device-renderer/src/drawcalls/index.ts diff --git a/packages/g-plugin-device-renderer/src/meshes/symbol/AlphaImage.ts b/packages/g-plugin-device-renderer/src/drawcalls/symbol/AlphaImage.ts similarity index 100% rename from packages/g-plugin-device-renderer/src/meshes/symbol/AlphaImage.ts rename to packages/g-plugin-device-renderer/src/drawcalls/symbol/AlphaImage.ts diff --git a/packages/g-plugin-device-renderer/src/meshes/symbol/GlyphAtlas.ts b/packages/g-plugin-device-renderer/src/drawcalls/symbol/GlyphAtlas.ts similarity index 100% rename from packages/g-plugin-device-renderer/src/meshes/symbol/GlyphAtlas.ts rename to packages/g-plugin-device-renderer/src/drawcalls/symbol/GlyphAtlas.ts diff --git a/packages/g-plugin-device-renderer/src/meshes/symbol/GlyphManager.ts b/packages/g-plugin-device-renderer/src/drawcalls/symbol/GlyphManager.ts similarity index 94% rename from packages/g-plugin-device-renderer/src/meshes/symbol/GlyphManager.ts rename to packages/g-plugin-device-renderer/src/drawcalls/symbol/GlyphManager.ts index 3bf058850..2281ae49f 100644 --- a/packages/g-plugin-device-renderer/src/meshes/symbol/GlyphManager.ts +++ b/packages/g-plugin-device-renderer/src/drawcalls/symbol/GlyphManager.ts @@ -1,4 +1,4 @@ -import { CanvasLike } from '@antv/g-lite'; +import { CanvasLike, GlobalRuntime } from '@antv/g-lite'; import type { Device, Texture } from '../../platform'; import { Format, makeTextureDescriptor2D } from '../../platform'; import { TinySDF } from '../../utils'; @@ -46,6 +46,8 @@ export class GlyphManager { private glyphMap: Record> = {}; private glyphAtlasTexture: Texture; + constructor(private runtime: GlobalRuntime) {} + getMap() { return this.glyphMap; } @@ -191,16 +193,19 @@ export class GlyphManager { // 创建 SDF sdfGenerator = this.sdfGeneratorCache[fontStack] = // TODO: use OffscreenCanvas in TextService - new TinySDF({ - canvas, - fontSize, - fontFamily, - fontWeight, - fontStyle, - buffer, - radius, - cutoff, - }); + new TinySDF( + { + canvas, + fontSize, + fontFamily, + fontWeight, + fontStyle, + buffer, + radius, + cutoff, + }, + this.runtime, + ); } if (!this.textMetricsCache[fontStack]) { diff --git a/packages/g-plugin-device-renderer/src/meshes/symbol/SymbolQuad.ts b/packages/g-plugin-device-renderer/src/drawcalls/symbol/SymbolQuad.ts similarity index 100% rename from packages/g-plugin-device-renderer/src/meshes/symbol/SymbolQuad.ts rename to packages/g-plugin-device-renderer/src/drawcalls/symbol/SymbolQuad.ts diff --git a/packages/g-plugin-device-renderer/src/index.ts b/packages/g-plugin-device-renderer/src/index.ts index 12f21111d..2977ea385 100644 --- a/packages/g-plugin-device-renderer/src/index.ts +++ b/packages/g-plugin-device-renderer/src/index.ts @@ -21,13 +21,17 @@ import { } from './renderer'; import { RenderGraphPlugin } from './RenderGraphPlugin'; import { TexturePool } from './TexturePool'; -import { RendererParameters, ToneMapping } from './interfaces'; +import { + DeviceRendererPluginOptions, + RendererParameters, + ToneMapping, +} from './interfaces'; export * from './geometries'; export * from './interfaces'; export * from './lights'; export * from './materials'; -export * from './meshes'; +export * from './drawcalls'; export * from './passes'; export * from './platform'; export * from './render'; @@ -47,12 +51,16 @@ export class Plugin extends AbstractRendererPlugin { toneMappingExposure: 1, }; + constructor(private options: Partial = {}) { + super(); + } + init(runtime: GlobalRuntime): void { runtime.geometryUpdaterFactory[Shape.MESH] = new MeshUpdater(); const renderHelper = new RenderHelper(this.parameters); const lightPool = new LightPool(); - const texturePool = new TexturePool(this.context); + const texturePool = new TexturePool(this.context, runtime); const pickingIdGenerator = new PickingIdGenerator(); const circleRenderer = new CircleRenderer(); @@ -84,6 +92,7 @@ export class Plugin extends AbstractRendererPlugin { lightPool, texturePool, batchManager, + this.options, ); this.addRenderingPlugin(renderGraphPlugin); this.addRenderingPlugin( diff --git a/packages/g-plugin-device-renderer/src/interfaces.ts b/packages/g-plugin-device-renderer/src/interfaces.ts index f6cc99391..f6eabf9a6 100644 --- a/packages/g-plugin-device-renderer/src/interfaces.ts +++ b/packages/g-plugin-device-renderer/src/interfaces.ts @@ -17,3 +17,7 @@ export interface RendererParameters { toneMapping: ToneMapping; toneMappingExposure: number; } + +export interface DeviceRendererPluginOptions { + enableFXAA: boolean; +} diff --git a/packages/g-plugin-device-renderer/src/passes/FXAA.ts b/packages/g-plugin-device-renderer/src/passes/FXAA.ts index 78c41b669..b102dc31a 100644 --- a/packages/g-plugin-device-renderer/src/passes/FXAA.ts +++ b/packages/g-plugin-device-renderer/src/passes/FXAA.ts @@ -87,8 +87,7 @@ export function pushFXAAPass( ], // rendering a fullscreen triangle instead of quad // @see https://www.saschawillems.de/blog/2016/08/13/vulkan-tutorial-on-rendering-a-fullscreen-quad-without-buffers/ - // data: new Float32Array([-4, -4, 4, -4, 0, 4]), - data: new Float32Array([-1, -3, -1, 1, 3, -1]), + data: new Float32Array([1, 3, -3, -1, 1, -1]), }); geometry.vertexCount = 3; diff --git a/packages/g-plugin-device-renderer/src/renderer/Batch.ts b/packages/g-plugin-device-renderer/src/renderer/Batch.ts index d0d8e6f49..0c0ea6006 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Batch.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Batch.ts @@ -1,5 +1,5 @@ import type { DisplayObject } from '@antv/g-lite'; -import type { Instanced } from '../meshes/Instanced'; +import type { Instanced } from '../drawcalls/Instanced'; import type { RenderInst } from '../render/RenderInst'; /** @@ -16,14 +16,11 @@ export abstract class Batch { * describe render insts used in this draw call * eg. a Polygon with stroke will use 2 renderInsts */ - meshes: (typeof Instanced)[] = []; - private clipPathMeshCreated = false; + abstract getDrawcallCtors(object: DisplayObject): (typeof Instanced)[]; - shouldSubmitRenderInst(object: DisplayObject, index: number): boolean { - return true; - } + private clipPathMeshCreated = false; - beforeUploadUBO(renderInst: RenderInst, mesh: Instanced, index: number) {} + beforeUploadUBO(renderInst: RenderInst, mesh: Instanced) {} beforeInitMesh(mesh: Instanced) {} afterInitMesh(mesh: Instanced) {} diff --git a/packages/g-plugin-device-renderer/src/renderer/BatchManager.ts b/packages/g-plugin-device-renderer/src/renderer/BatchManager.ts index 2320b0197..ad26ec2aa 100644 --- a/packages/g-plugin-device-renderer/src/renderer/BatchManager.ts +++ b/packages/g-plugin-device-renderer/src/renderer/BatchManager.ts @@ -5,7 +5,7 @@ import type { } from '@antv/g-lite'; import type { Renderable3D } from '../components/Renderable3D'; import type { LightPool } from '../LightPool'; -import type { Instanced } from '../meshes/Instanced'; +import type { Instanced } from '../drawcalls/Instanced'; import type { Device } from '../platform'; import type { RenderInstList, RenderHelper } from '../render'; import type { TexturePool } from '../TexturePool'; @@ -31,7 +31,7 @@ export class BatchManager { /** * draw calls */ - private meshes: Instanced[] = []; + private drawcalls: Instanced[] = []; /** * update patches which can be merged before rendering @@ -54,9 +54,9 @@ export class BatchManager { this.updatePendingPatches(); } - this.meshes.forEach((mesh) => { + this.drawcalls.forEach((mesh) => { // init rendering service, create geometry & material - mesh.init(this.context); + mesh.init(); let objects = mesh.objects; if (mesh.clipPathTarget) { @@ -89,48 +89,54 @@ export class BatchManager { } add(object: DisplayObject) { - // @ts-ignore - const renderable3D = object.renderable3D as Renderable3D; - if (renderable3D && !renderable3D.meshes.length) { - const renderer = this.rendererFactory[object.nodeName]; + const renderable3D = (object as any).renderable3D as Renderable3D; + if (renderable3D && !renderable3D.drawcalls.length) { + const renderer = this.rendererFactory[object.nodeName] as Batch; if (renderer) { - renderer.meshes.forEach((meshTag, i) => { - renderable3D.meshes[i] = undefined; - const shouldSubmit = renderer.shouldSubmitRenderInst(object, i); - if (shouldSubmit) { - let existedMesh = this.meshes.find( - (mesh) => - meshTag === mesh.constructor && - mesh.index === i && - mesh.objects.length < mesh.maxInstances && - mesh.shouldMerge(object, i), - ); - if ( - !existedMesh || - existedMesh.key !== object.parsedStyle.batchKey - ) { - existedMesh = new meshTag( - this.renderHelper, - this.texturePool, - this.lightPool, - object, + // A complex Path can be splitted into multple sub paths. + renderer + .getDrawcallCtors(object) + .forEach( + ( + drawcallCtor: new (..._: any) => Instanced, + i: number, + drawcallCtors: (new (..._: any) => Instanced)[], + ) => { + let existedDrawcall = this.drawcalls.find( + (mesh) => + drawcallCtor === mesh.constructor && + mesh.index === i && + mesh.objects.length < mesh.maxInstances && + mesh.shouldMerge(object, i), ); - existedMesh.renderer = renderer; - existedMesh.index = i; - this.meshes.push(existedMesh); + if ( + !existedDrawcall || + existedDrawcall.key !== object.parsedStyle.batchKey + ) { + existedDrawcall = new drawcallCtor( + this.renderHelper, + this.texturePool, + this.lightPool, + object, + drawcallCtors, + i, + this.context, + ); + existedDrawcall.renderer = renderer; + this.drawcalls.push(existedDrawcall); - if (object.parsedStyle.batchKey) { - existedMesh.key = object.parsedStyle.batchKey; + if (object.parsedStyle.batchKey) { + existedDrawcall.key = object.parsedStyle.batchKey; + } } - } - if (existedMesh) { - existedMesh.objects.push(object); - renderable3D.meshes[i] = existedMesh; - existedMesh.geometryDirty = true; - } - } - }); + if (existedDrawcall) { + existedDrawcall.objects.push(object); + renderable3D.drawcalls[i] = existedDrawcall; + existedDrawcall.geometryDirty = true; + } + }, + ); } } } @@ -139,7 +145,7 @@ export class BatchManager { // @ts-ignore const renderable3D = object.renderable3D as Renderable3D; if (renderable3D) { - renderable3D.meshes.forEach((mesh) => { + renderable3D.drawcalls.forEach((mesh) => { if (mesh) { // remove from mesh const index = mesh.objects.indexOf(object); @@ -149,11 +155,11 @@ export class BatchManager { } if (mesh.objects.length === 0) { - this.meshes.splice(this.meshes.indexOf(mesh), 1); + this.drawcalls.splice(this.drawcalls.indexOf(mesh), 1); } } }); - renderable3D.meshes = []; + renderable3D.drawcalls = []; } } @@ -166,76 +172,82 @@ export class BatchManager { const renderable3D = (object as any).renderable3D as Renderable3D; const renderer = this.rendererFactory[object.nodeName] as Batch; if (renderer) { - renderer.meshes.forEach((meshCtor, i) => { - const shouldSubmit = renderer.shouldSubmitRenderInst(object, i); - let existedMesh = renderable3D.meshes.find( - (mesh) => mesh && mesh.index === i && mesh.constructor === meshCtor, + const drawcallCtors = renderer.getDrawcallCtors(object); + drawcallCtors.forEach((drawcallCtor, i, drawcallCtors) => { + let existedDrawcall = renderable3D.drawcalls.find( + (mesh) => + mesh && mesh.index === i && mesh.constructor === drawcallCtor, ); - // is this mesh already rendered in current displayobject? - if (shouldSubmit !== !!existedMesh) { - if (existedMesh) { - // remove from mesh - existedMesh.objects.splice(existedMesh.objects.indexOf(object), 1); - existedMesh.geometryDirty = true; - if (existedMesh.objects.length === 0) { - this.meshes.splice(this.meshes.indexOf(existedMesh), 1); - } - renderable3D.meshes[renderable3D.meshes.indexOf(existedMesh)] = - undefined; - } + if (!existedDrawcall) { + // Clear invalid drawcall. + existedDrawcall = renderable3D.drawcalls[i]; - if (shouldSubmit) { - // clear first - existedMesh = this.meshes.find( - (mesh) => - meshCtor === mesh.constructor && - mesh.index === i && - mesh.objects.length < mesh.maxInstances && - mesh.shouldMerge(object, i), + if (existedDrawcall) { + // remove from mesh + existedDrawcall.objects.splice( + existedDrawcall.objects.indexOf(object), + 1, ); + existedDrawcall.geometryDirty = true; - if (!existedMesh) { - // @ts-ignore - existedMesh = new meshCtor( - this.renderHelper, - this.texturePool, - this.lightPool, - object, - ); - existedMesh.renderer = renderer; - existedMesh.index = i; - existedMesh.init(this.context); - this.meshes.push(existedMesh); - } else { - existedMesh.geometryDirty = true; + if (existedDrawcall.objects.length === 0) { + this.drawcalls.splice(this.drawcalls.indexOf(existedDrawcall), 1); } + renderable3D.drawcalls[ + renderable3D.drawcalls.indexOf(existedDrawcall) + ] = undefined; + } - if (existedMesh) { - existedMesh.objects.push(object); - renderable3D.meshes[i] = existedMesh; - } + // We should create a new drawcall from scratch. + existedDrawcall = this.drawcalls.find( + (mesh) => + drawcallCtor === mesh.constructor && + mesh.index === i && + mesh.objects.length < mesh.maxInstances && + mesh.shouldMerge(object, i), + ); + + if (!existedDrawcall) { + // @ts-ignore + existedDrawcall = new drawcallCtor( + this.renderHelper, + this.texturePool, + this.lightPool, + object, + drawcallCtors, + i, + this.context, + ); + existedDrawcall.renderer = renderer; + existedDrawcall.init(); + this.drawcalls.push(existedDrawcall); + } else { + existedDrawcall.geometryDirty = true; } + + existedDrawcall.objects.push(object); + renderable3D.drawcalls[i] = existedDrawcall; } - if (shouldSubmit && existedMesh) { - if (existedMesh.inited && !existedMesh.geometryDirty) { - const shouldMerge = existedMesh.shouldMerge(object, i); + if (existedDrawcall) { + if (existedDrawcall.inited && !existedDrawcall.geometryDirty) { + const shouldMerge = existedDrawcall.shouldMerge(object, i); if (shouldMerge) { - const objectIdx = existedMesh.objects.indexOf(object); + const objectIdx = existedDrawcall.objects.indexOf(object); if (immediately) { object.parsedStyle[attributeName] = newValue; - existedMesh.updateAttribute( + existedDrawcall.updateAttribute( [object], objectIdx, attributeName, newValue, ); } else { - const patchKey = existedMesh.id + attributeName; + const patchKey = existedDrawcall.id + attributeName; if (!this.pendingUpdatePatches[patchKey]) { this.pendingUpdatePatches[patchKey] = { - instance: existedMesh, + instance: existedDrawcall, objectIndices: [], name: attributeName, value: newValue, @@ -255,26 +267,39 @@ export class BatchManager { this.remove(object); this.add(object); } - } else { - this.remove(object); - this.add(object); } } }); + + // Clear redundant drawcalls. + if (renderable3D.drawcalls.length > drawcallCtors.length) { + const drawcallNum = renderable3D.drawcalls.length; + for (let i = drawcallNum - 1; i >= drawcallCtors.length; i--) { + const existedDrawcall = renderable3D.drawcalls[i]; + + // remove from mesh + existedDrawcall.objects.splice( + existedDrawcall.objects.indexOf(object), + 1, + ); + existedDrawcall.geometryDirty = true; + + if (existedDrawcall.objects.length === 0) { + this.drawcalls.splice(this.drawcalls.indexOf(existedDrawcall), 1); + } + renderable3D.drawcalls.pop(); + } + } } } changeRenderOrder(object: DisplayObject, renderOrder: number) { // @ts-ignore const renderable3D = object.renderable3D as Renderable3D; - if (renderable3D && renderable3D.meshes.length) { - renderable3D.meshes.forEach((mesh) => { + if (renderable3D && renderable3D.drawcalls.length) { + renderable3D.drawcalls.forEach((mesh) => { if (mesh && mesh.inited && !mesh.geometryDirty) { - const shouldSubmit = mesh.renderer.shouldSubmitRenderInst( - object, - mesh.index, - ); - if (shouldSubmit && mesh.inited) { + if (mesh.inited) { mesh.changeRenderOrder(object, renderOrder); } } diff --git a/packages/g-plugin-device-renderer/src/renderer/Circle.ts b/packages/g-plugin-device-renderer/src/renderer/Circle.ts index b4456ef3d..f974c57c7 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Circle.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Circle.ts @@ -3,30 +3,26 @@ import type { DisplayObject, ParsedCircleStyleProps, } from '@antv/g-lite'; -import { InstancedPathMesh, SDFMesh } from '../meshes'; +import { Instanced, InstancedPathDrawcall, SDFDrawcall } from '../drawcalls'; import { Batch } from './Batch'; /** * Use 2 meshes: * * SDF to draw fill & simple stroke if needed. - * * InstancedPathMesh to draw stroke separately. + * * InstancedPathDrawcall to draw stroke separately. */ export class CircleRenderer extends Batch { - meshes = [SDFMesh, InstancedPathMesh]; - - shouldSubmitRenderInst(object: DisplayObject, index: number) { - if (index === 0) { - const { fill } = object.parsedStyle as ParsedCircleStyleProps; - if ((fill as CSSRGB).isNone) { - return false; - } + getDrawcallCtors(object: DisplayObject) { + const drawcalls: (typeof Instanced)[] = []; + const { fill } = object.parsedStyle as ParsedCircleStyleProps; + if (!(fill as CSSRGB).isNone) { + drawcalls.push(SDFDrawcall); } - - if (index === 1) { - return this.needDrawStrokeSeparately(object); + if (this.needDrawStrokeSeparately(object)) { + drawcalls.push(InstancedPathDrawcall); } - return true; + return drawcalls; } /** diff --git a/packages/g-plugin-device-renderer/src/renderer/Group.ts b/packages/g-plugin-device-renderer/src/renderer/Group.ts index b5396ccd1..d97e282a5 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Group.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Group.ts @@ -1,9 +1,6 @@ -import type { DisplayObject } from '@antv/g-lite'; import { Batch } from './Batch'; export class GroupRenderer extends Batch { - meshes = []; - - shouldSubmitRenderInst(object: DisplayObject, index: number) { - return true; + getDrawcallCtors() { + return []; } } diff --git a/packages/g-plugin-device-renderer/src/renderer/Image.ts b/packages/g-plugin-device-renderer/src/renderer/Image.ts index 2ae213083..bdb7ea642 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Image.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Image.ts @@ -1,10 +1,7 @@ -import type { DisplayObject } from '@antv/g-lite'; -import { ImageMesh } from '../meshes'; +import { ImageDrawcall } from '../drawcalls'; import { Batch } from './Batch'; export class ImageRenderer extends Batch { - meshes = [ImageMesh]; - - shouldSubmitRenderInst(object: DisplayObject, index: number) { - return true; + getDrawcallCtors() { + return [ImageDrawcall]; } } diff --git a/packages/g-plugin-device-renderer/src/renderer/Line.ts b/packages/g-plugin-device-renderer/src/renderer/Line.ts index 4cdeb9309..38fa9df2b 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Line.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Line.ts @@ -1,5 +1,4 @@ -import type { DisplayObject } from '@antv/g-lite'; -import { InstancedLineMesh } from '../meshes'; +import { InstancedLineDrawcall } from '../drawcalls'; import { Batch } from './Batch'; /** @@ -10,9 +9,7 @@ import { Batch } from './Batch'; * TODO: joint & cap */ export class LineRenderer extends Batch { - meshes = [InstancedLineMesh]; - - shouldSubmitRenderInst(object: DisplayObject, index: number) { - return true; + getDrawcallCtors() { + return [InstancedLineDrawcall]; } } diff --git a/packages/g-plugin-device-renderer/src/renderer/Mesh.ts b/packages/g-plugin-device-renderer/src/renderer/Mesh.ts index 0b1e66b8c..14b3e450d 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Mesh.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Mesh.ts @@ -1,5 +1,7 @@ -import { MeshMesh } from '../meshes'; +import { MeshDrawcall } from '../drawcalls'; import { Batch } from './Batch'; export class MeshRenderer extends Batch { - meshes = [MeshMesh]; + getDrawcallCtors() { + return [MeshDrawcall]; + } } diff --git a/packages/g-plugin-device-renderer/src/renderer/Path.ts b/packages/g-plugin-device-renderer/src/renderer/Path.ts index 36f1bc4ff..586da087b 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Path.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Path.ts @@ -4,55 +4,53 @@ import type { CSSRGB, DisplayObject, ParsedBaseStyleProps } from '@antv/g-lite'; import { Shape } from '@antv/g-lite'; import { - InstancedFillMesh, - InstancedLineMesh, - InstancedPathMesh, -} from '../meshes'; + Instanced, + InstancedFillDrawcall, + InstancedLineDrawcall, + InstancedPathDrawcall, +} from '../drawcalls'; import { Batch } from './Batch'; /** * Use the following perf enhancements: - * * Downgrading the "simple" Path / Polyline to {@link InstancedLineMesh}, e.g. 'M 0 0 L 100 0' - * * Merge the Path into {@link InstancedPathMesh} which contains only one curve command, e.g 'M 0 0 Q 10 10 100 100' + * * Downgrading the "simple" Path / Polyline to {@link InstancedLineDrawcall}, e.g. 'M 0 0 L 100 0' + * * Merge the Path into {@link InstancedPathDrawcall} which contains only one curve command, e.g 'M 0 0 Q 10 10 100 100' * @see https://github.com/antvis/G/issues/1113 */ export class PathRenderer extends Batch { - meshes = [InstancedFillMesh, InstancedLineMesh, InstancedPathMesh]; + // meshes = [ + // InstancedFillDrawcall ?, + // (InstancedLineDrawcall | InstancedPathDrawcall) *, // sub paths + // ]; - shouldSubmitRenderInst(object: DisplayObject, index: number) { + getDrawcallCtors(object: DisplayObject) { const { fill, stroke, opacity, strokeOpacity, lineWidth } = object.parsedStyle as ParsedBaseStyleProps; const hasStroke = stroke && !(stroke as CSSRGB).isNone; - const isLine = InstancedLineMesh.isLine(object); + const subpathNum = InstancedPathDrawcall.calcSubpathNum(object); - object.renderable.proxyNodeName = isLine ? Shape.LINE : null; + const drawcalls: (typeof Instanced)[] = []; // Polyline don't need fill - if ( - index === 0 && - (object.nodeName === Shape.POLYLINE || (fill as CSSRGB).isNone) - ) { - return false; - } - - // use Line for simple Path - if (index === 1) { - return isLine; + if (!(object.nodeName === Shape.POLYLINE || (fill as CSSRGB).isNone)) { + for (let i = 0; i < subpathNum; i++) { + drawcalls.push(InstancedFillDrawcall); + } } - if (index === 2) { + for (let i = 0; i < subpathNum; i++) { if ( - isLine || - strokeOpacity === 0 || - opacity === 0 || - lineWidth === 0 || - !hasStroke + !(strokeOpacity === 0 || opacity === 0 || lineWidth === 0 || !hasStroke) ) { - return false; + const isLine = InstancedLineDrawcall.isLine(object, i); + if (isLine) { + drawcalls.push(InstancedLineDrawcall); + } else { + drawcalls.push(InstancedPathDrawcall); + } } - return true; } - return true; + return drawcalls; } } diff --git a/packages/g-plugin-device-renderer/src/renderer/Rect.ts b/packages/g-plugin-device-renderer/src/renderer/Rect.ts index b38788b8d..0aed8c15e 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Rect.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Rect.ts @@ -1,38 +1,42 @@ import type { CSSRGB, DisplayObject, ParsedRectStyleProps } from '@antv/g-lite'; -import { InstancedFillMesh, InstancedPathMesh, SDFMesh } from '../meshes'; +import { + Instanced, + InstancedFillDrawcall, + InstancedPathDrawcall, + SDFDrawcall, +} from '../drawcalls'; import { Batch } from './Batch'; /** * Use 2 meshes: - * * For simple Rect with fill & simple stroke, we use SDFMesh to draw which has a better performance. + * * For simple Rect with fill & simple stroke, we use SDFDrawcall to draw which has a better performance. * * FillMesh & LineMesh to draw rounded rect with different radius. */ export class RectRenderer extends Batch { - meshes = [SDFMesh, InstancedFillMesh, InstancedPathMesh]; + getDrawcallCtors(object: DisplayObject) { + const drawcalls: (typeof Instanced)[] = []; - shouldSubmitRenderInst(object: DisplayObject, index: number) { - const { radius } = object.parsedStyle as ParsedRectStyleProps; + const { fill, radius } = object.parsedStyle as ParsedRectStyleProps; const hasDifferentRadius = radius && radius.length && radius.some((r) => r !== radius[0]); - if (index === 0) { - const { fill } = object.parsedStyle as ParsedRectStyleProps; - if ((fill as CSSRGB).isNone || hasDifferentRadius) { - return false; - } + if (!((fill as CSSRGB).isNone || hasDifferentRadius)) { + drawcalls.push(SDFDrawcall); } - if (index === 1) { - return hasDifferentRadius; + if (hasDifferentRadius) { + drawcalls.push(InstancedFillDrawcall); } - if (index === 2) { - return hasDifferentRadius + if ( + hasDifferentRadius ? hasDifferentRadius - : this.needDrawStrokeSeparately(object); + : this.needDrawStrokeSeparately(object) + ) { + drawcalls.push(InstancedPathDrawcall); } - return true; + return drawcalls; } /** diff --git a/packages/g-plugin-device-renderer/src/renderer/Text.ts b/packages/g-plugin-device-renderer/src/renderer/Text.ts index f30f5dee3..d0f19490e 100644 --- a/packages/g-plugin-device-renderer/src/renderer/Text.ts +++ b/packages/g-plugin-device-renderer/src/renderer/Text.ts @@ -1,29 +1,34 @@ import type { CSSRGB, DisplayObject, ParsedTextStyleProps } from '@antv/g-lite'; -import type { Instanced } from '../meshes'; -import { TextMesh, TextUniform } from '../meshes'; +import type { Instanced } from '../drawcalls'; +import { TextDrawcall, TextUniform } from '../drawcalls'; import type { RenderInst } from '../render/RenderInst'; import { Batch } from './Batch'; +import { Renderable3D } from '../components/Renderable3D'; export class TextRenderer extends Batch { /** * one for fill, one for stroke */ - meshes = [TextMesh, TextMesh]; + getDrawcallCtors(object: DisplayObject) { + const drawcalls: (typeof Instanced)[] = []; - shouldSubmitRenderInst(object: DisplayObject, index: number) { const { stroke, lineWidth } = object.parsedStyle as ParsedTextStyleProps; const hasStroke = !!(stroke && !(stroke as CSSRGB).isNone && lineWidth); - if (!hasStroke && index === 0) { - // skip rendering stroke - return false; + if (hasStroke) { + drawcalls.push(TextDrawcall); } - return true; + + drawcalls.push(TextDrawcall); + return drawcalls; } - beforeUploadUBO(renderInst: RenderInst, mesh: Instanced, index: number) { + beforeUploadUBO(renderInst: RenderInst, mesh: Instanced) { + const drawcallNum = ((mesh.instance as any).renderable3D as Renderable3D) + .drawcalls.length; + mesh.material.setUniforms({ - [TextUniform.HAS_STROKE]: 1 - mesh.index, + [TextUniform.HAS_STROKE]: drawcallNum === 1 ? 0 : 1 - mesh.index, }); } } diff --git a/packages/g-plugin-device-renderer/src/utils/tiny-sdf.ts b/packages/g-plugin-device-renderer/src/utils/tiny-sdf.ts index e681171a4..55c4f0eea 100644 --- a/packages/g-plugin-device-renderer/src/utils/tiny-sdf.ts +++ b/packages/g-plugin-device-renderer/src/utils/tiny-sdf.ts @@ -2,7 +2,7 @@ * Borrow from https://github.com/mapbox/tiny-sdf */ -import { CanvasLike, runtime } from '@antv/g-lite'; +import { CanvasLike, GlobalRuntime } from '@antv/g-lite'; const INF = 1e20; @@ -29,7 +29,7 @@ export class TinySDF { private gridInner: Float64Array; private ctx: CanvasRenderingContext2D; - constructor(options: TinySDFOptions) { + constructor(options: TinySDFOptions, runtime: GlobalRuntime) { const { fontSize = 24, buffer = 3, diff --git a/packages/g-plugin-dom-interaction/CHANGELOG.md b/packages/g-plugin-dom-interaction/CHANGELOG.md index 0fce7321b..f07a069e6 100644 --- a/packages/g-plugin-dom-interaction/CHANGELOG.md +++ b/packages/g-plugin-dom-interaction/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-dom-interaction +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-dom-interaction/package.json b/packages/g-plugin-dom-interaction/package.json index f1833414a..007805c32 100644 --- a/packages/g-plugin-dom-interaction/package.json +++ b/packages/g-plugin-dom-interaction/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-dom-interaction", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin", "keywords": [ "antv", diff --git a/packages/g-plugin-dragndrop/CHANGELOG.md b/packages/g-plugin-dragndrop/CHANGELOG.md index 0d26b60fc..bcef5d681 100644 --- a/packages/g-plugin-dragndrop/CHANGELOG.md +++ b/packages/g-plugin-dragndrop/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-plugin-dragndrop +## 1.8.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.8.6 ### Patch Changes diff --git a/packages/g-plugin-dragndrop/package.json b/packages/g-plugin-dragndrop/package.json index 350663c02..16131c5cc 100644 --- a/packages/g-plugin-dragndrop/package.json +++ b/packages/g-plugin-dragndrop/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-dragndrop", - "version": "1.8.6", + "version": "1.8.7", "description": "A G plugin for Drag n Drop implemented with PointerEvents", "keywords": [ "antv", @@ -39,7 +39,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "publishConfig": { diff --git a/packages/g-plugin-gpgpu/CHANGELOG.md b/packages/g-plugin-gpgpu/CHANGELOG.md index 44c13c31e..8299b9496 100644 --- a/packages/g-plugin-gpgpu/CHANGELOG.md +++ b/packages/g-plugin-gpgpu/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-plugin-gpgpu +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-webgpu@1.9.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-gpgpu/package.json b/packages/g-plugin-gpgpu/package.json index f3ecaa059..572a643f1 100644 --- a/packages/g-plugin-gpgpu/package.json +++ b/packages/g-plugin-gpgpu/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-gpgpu", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for GPGPU based on WebGPU", "keywords": [ "webgpu", diff --git a/packages/g-plugin-html-renderer/CHANGELOG.md b/packages/g-plugin-html-renderer/CHANGELOG.md index 27e6f14f2..688a7f08b 100644 --- a/packages/g-plugin-html-renderer/CHANGELOG.md +++ b/packages/g-plugin-html-renderer/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-plugin-html-renderer +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-html-renderer/package.json b/packages/g-plugin-html-renderer/package.json index 5de139e5f..e88ba2a80 100644 --- a/packages/g-plugin-html-renderer/package.json +++ b/packages/g-plugin-html-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-html-renderer", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for rendering HTML", "keywords": [ "antv", @@ -39,7 +39,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-html-renderer/src/HTMLRenderingPlugin.ts b/packages/g-plugin-html-renderer/src/HTMLRenderingPlugin.ts index 4ec7200ce..a2dd6304a 100644 --- a/packages/g-plugin-html-renderer/src/HTMLRenderingPlugin.ts +++ b/packages/g-plugin-html-renderer/src/HTMLRenderingPlugin.ts @@ -6,7 +6,6 @@ import { MutationEvent, RenderingPlugin, RenderingPluginContext, - runtime, } from '@antv/g-lite'; import { CanvasEvent, @@ -77,7 +76,7 @@ export class HTMLRenderingPlugin implements RenderingPlugin { setTransform(object, $el); - runtime.nativeHTMLMap.set($el, object); + this.context.nativeHTMLMap.set($el, object); } }; @@ -87,7 +86,7 @@ export class HTMLRenderingPlugin implements RenderingPlugin { const $el = this.getOrCreateEl(object); if ($el) { $el.remove(); - runtime.nativeHTMLMap.delete($el); + this.context.nativeHTMLMap.delete($el); } // const existedId = this.getId(object); @@ -257,23 +256,25 @@ export class HTMLRenderingPlugin implements RenderingPlugin { ] = `${transformOrigin[0].value} ${transformOrigin[1].value}`; break; case 'width': - if (runtime.enableCSSParsing) { + if (this.context.enableCSSParsing) { const width = object.computedStyleMap().get('width'); $el.style.width = width.toString(); } else { const { width } = object.parsedStyle; - $el.style.width = isNumber(width) ? `${width}px` : width.toString(); + $el.style.width = isNumber(width) + ? `${width}px` + : (width as string).toString(); } break; case 'height': - if (runtime.enableCSSParsing) { + if (this.context.enableCSSParsing) { const height = object.computedStyleMap().get('height'); $el.style.height = height.toString(); } else { const { height } = object.parsedStyle; $el.style.height = isNumber(height) ? `${height}px` - : height.toString(); + : (height as string).toString(); } break; case 'zIndex': diff --git a/packages/g-plugin-image-loader/CHANGELOG.md b/packages/g-plugin-image-loader/CHANGELOG.md index 1f1280048..4880ec11d 100644 --- a/packages/g-plugin-image-loader/CHANGELOG.md +++ b/packages/g-plugin-image-loader/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-plugin-image-loader +## 1.3.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.3.6 ### Patch Changes diff --git a/packages/g-plugin-image-loader/package.json b/packages/g-plugin-image-loader/package.json index a1f311af9..71dee25dd 100644 --- a/packages/g-plugin-image-loader/package.json +++ b/packages/g-plugin-image-loader/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-image-loader", - "version": "1.3.6", + "version": "1.3.7", "description": "A G plugin for loading image", "keywords": [ "antv", @@ -39,7 +39,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-matterjs/CHANGELOG.md b/packages/g-plugin-matterjs/CHANGELOG.md index e8915acca..247177c84 100644 --- a/packages/g-plugin-matterjs/CHANGELOG.md +++ b/packages/g-plugin-matterjs/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-matterjs +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-matterjs/package.json b/packages/g-plugin-matterjs/package.json index 4297bbae0..5bc4a8a2c 100644 --- a/packages/g-plugin-matterjs/package.json +++ b/packages/g-plugin-matterjs/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-matterjs", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for matter.js physics engine", "keywords": [ "antv", diff --git a/packages/g-plugin-mobile-interaction/CHANGELOG.md b/packages/g-plugin-mobile-interaction/CHANGELOG.md index 3efa47259..f25b16d49 100644 --- a/packages/g-plugin-mobile-interaction/CHANGELOG.md +++ b/packages/g-plugin-mobile-interaction/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-mobile-interaction +## 0.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 0.9.6 ### Patch Changes diff --git a/packages/g-plugin-mobile-interaction/package.json b/packages/g-plugin-mobile-interaction/package.json index 579356111..90582e3fe 100644 --- a/packages/g-plugin-mobile-interaction/package.json +++ b/packages/g-plugin-mobile-interaction/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-mobile-interaction", - "version": "0.9.6", + "version": "0.9.7", "description": "A G plugin listening events in mobile environment", "keywords": [ "antv", diff --git a/packages/g-plugin-physx/CHANGELOG.md b/packages/g-plugin-physx/CHANGELOG.md index 152d5f845..4422a0cd6 100644 --- a/packages/g-plugin-physx/CHANGELOG.md +++ b/packages/g-plugin-physx/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-physx +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-physx/package.json b/packages/g-plugin-physx/package.json index e89851911..62788f44a 100644 --- a/packages/g-plugin-physx/package.json +++ b/packages/g-plugin-physx/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-physx", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for PhysX", "keywords": [ "antv", diff --git a/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md b/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md index 53d2532ae..dfe9f2ee4 100644 --- a/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md +++ b/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g-plugin-rough-canvas-renderer +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-canvas@1.11.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-rough-canvas-renderer/package.json b/packages/g-plugin-rough-canvas-renderer/package.json index c3dee947f..8df8ae7e6 100644 --- a/packages/g-plugin-rough-canvas-renderer/package.json +++ b/packages/g-plugin-rough-canvas-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-rough-canvas-renderer", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin of renderer implementation with rough.js", "keywords": [ "antv", @@ -40,7 +40,7 @@ "dependencies": { "@antv/g-canvas": "workspace:*", "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "roughjs": "^4.5.2", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-rough-svg-renderer/CHANGELOG.md b/packages/g-plugin-rough-svg-renderer/CHANGELOG.md index a258a5c66..aeb325038 100644 --- a/packages/g-plugin-rough-svg-renderer/CHANGELOG.md +++ b/packages/g-plugin-rough-svg-renderer/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g-plugin-rough-svg-renderer +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + - @antv/g-svg@1.10.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-rough-svg-renderer/package.json b/packages/g-plugin-rough-svg-renderer/package.json index 87a1e4799..bbff4ae28 100644 --- a/packages/g-plugin-rough-svg-renderer/package.json +++ b/packages/g-plugin-rough-svg-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-rough-svg-renderer", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin of renderer implementation with rough.js", "keywords": [ "antv", @@ -40,7 +40,7 @@ "dependencies": { "@antv/g-lite": "workspace:*", "@antv/g-svg": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "roughjs": "^4.5.2", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-rough-svg-renderer/src/RoughElementLifeCycleContribution.ts b/packages/g-plugin-rough-svg-renderer/src/RoughElementLifeCycleContribution.ts index 56bb85b98..e76ff1de4 100644 --- a/packages/g-plugin-rough-svg-renderer/src/RoughElementLifeCycleContribution.ts +++ b/packages/g-plugin-rough-svg-renderer/src/RoughElementLifeCycleContribution.ts @@ -1,6 +1,7 @@ import type { CanvasContext, DisplayObject, + GlobalRuntime, ParsedCircleStyleProps, ParsedEllipseStyleProps, ParsedLineStyleProps, @@ -18,7 +19,7 @@ import { generateRoughOptions, SUPPORTED_ROUGH_OPTIONS } from './util'; export class RoughElementLifeCycleContribution implements SVGRenderer.ElementLifeCycleContribution { - constructor(private context: CanvasContext) {} + constructor(private context: CanvasContext, private runtime: GlobalRuntime) {} createElement( object: DisplayObject, @@ -96,6 +97,7 @@ export class RoughElementLifeCycleContribution $el, parsedStyle, object as Text, + this.runtime, ); break; } diff --git a/packages/g-plugin-svg-picker/CHANGELOG.md b/packages/g-plugin-svg-picker/CHANGELOG.md index 1a2ed1e4d..e5b9f47a6 100644 --- a/packages/g-plugin-svg-picker/CHANGELOG.md +++ b/packages/g-plugin-svg-picker/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-plugin-svg-picker +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-svg-renderer@1.10.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-svg-picker/package.json b/packages/g-plugin-svg-picker/package.json index 8dc28077b..516685005 100644 --- a/packages/g-plugin-svg-picker/package.json +++ b/packages/g-plugin-svg-picker/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-svg-picker", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for picking in SVG", "keywords": [ "antv", diff --git a/packages/g-plugin-svg-renderer/CHANGELOG.md b/packages/g-plugin-svg-renderer/CHANGELOG.md index bcc824271..5258a2b09 100644 --- a/packages/g-plugin-svg-renderer/CHANGELOG.md +++ b/packages/g-plugin-svg-renderer/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-plugin-svg-renderer +## 1.10.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.10.6 ### Patch Changes diff --git a/packages/g-plugin-svg-renderer/package.json b/packages/g-plugin-svg-renderer/package.json index 05ba0d507..6b1156bfe 100644 --- a/packages/g-plugin-svg-renderer/package.json +++ b/packages/g-plugin-svg-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-svg-renderer", - "version": "1.10.6", + "version": "1.10.7", "description": "A G plugin of renderer implementation with SVG", "keywords": [ "antv", @@ -39,7 +39,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-svg-renderer/src/DefaultElementLifeCycleContribution.ts b/packages/g-plugin-svg-renderer/src/DefaultElementLifeCycleContribution.ts index 5cd9c5a47..6f7959261 100644 --- a/packages/g-plugin-svg-renderer/src/DefaultElementLifeCycleContribution.ts +++ b/packages/g-plugin-svg-renderer/src/DefaultElementLifeCycleContribution.ts @@ -1,4 +1,9 @@ -import type { CanvasContext, DisplayObject, Text } from '@antv/g-lite'; +import type { + CanvasContext, + DisplayObject, + GlobalRuntime, + Text, +} from '@antv/g-lite'; import { Shape } from '@antv/g-lite'; import { updateImageElementAttribute, @@ -97,7 +102,7 @@ export const SHAPE_UPDATE_DEPS: Record = { export class DefaultElementLifeCycleContribution implements ElementLifeCycleContribution { - constructor(private context: CanvasContext) {} + constructor(private context: CanvasContext, private runtime: GlobalRuntime) {} createElement( object: DisplayObject, @@ -147,7 +152,12 @@ export class DefaultElementLifeCycleContribution break; } case Shape.TEXT: { - updateTextElementAttribute($el, parsedStyle, object as Text); + updateTextElementAttribute( + $el, + parsedStyle, + object as Text, + this.runtime, + ); break; } } diff --git a/packages/g-plugin-svg-renderer/src/SVGRendererPlugin.ts b/packages/g-plugin-svg-renderer/src/SVGRendererPlugin.ts index 10e430d78..5bc08da94 100644 --- a/packages/g-plugin-svg-renderer/src/SVGRendererPlugin.ts +++ b/packages/g-plugin-svg-renderer/src/SVGRendererPlugin.ts @@ -8,7 +8,6 @@ import { RenderingPlugin, RenderingPluginContext, ContextService, - runtime, } from '@antv/g-lite'; import { ElementEvent, @@ -466,6 +465,7 @@ export class SVGRendererPlugin implements RenderingPlugin { } private updateAttribute(object: DisplayObject, attributes: string[]) { + const { enableCSSParsing } = this.context; const { document } = this.context.config; // @ts-ignore @@ -499,7 +499,7 @@ export class SVGRendererPlugin implements RenderingPlugin { // update common attributes attributes.forEach((name) => { const usedName = SVG_ATTR_MAP[name]; - const computedValue = runtime.enableCSSParsing + const computedValue = enableCSSParsing ? computedStyle[name] : parsedStyle[name]; const computedValueStr = @@ -512,7 +512,7 @@ export class SVGRendererPlugin implements RenderingPlugin { if ( !usedName || ((nodeName === Shape.GROUP || object.isCustomElement) && - !runtime.enableCSSParsing && + !enableCSSParsing && (inherited || usedName === 'fill' || usedName === 'stroke')) ) { return; @@ -552,7 +552,7 @@ export class SVGRendererPlugin implements RenderingPlugin { this, ); } - } else if (runtime.enableCSSParsing && inherited) { + } else if (enableCSSParsing && inherited) { // use computed value // update `visibility` on if ( diff --git a/packages/g-plugin-svg-renderer/src/index.ts b/packages/g-plugin-svg-renderer/src/index.ts index 12d140264..d2c6dbdfa 100644 --- a/packages/g-plugin-svg-renderer/src/index.ts +++ b/packages/g-plugin-svg-renderer/src/index.ts @@ -1,4 +1,4 @@ -import { AbstractRendererPlugin } from '@antv/g-lite'; +import { AbstractRendererPlugin, GlobalRuntime } from '@antv/g-lite'; import { isNil } from '@antv/util'; import { ElementSVG } from './components/ElementSVG'; import { DefaultElementLifeCycleContribution } from './DefaultElementLifeCycleContribution'; @@ -20,28 +20,37 @@ export class Plugin extends AbstractRendererPlugin { super(); } - init(): void { + init(runtime: GlobalRuntime): void { const { outputSVGElementId, outputSVGElementName } = this.options; const defElementManager = new DefElementManager(this.context); // default implementation - const defaultElementLifeCycleContribution = new DefaultElementLifeCycleContribution( - this.context, - ); + const defaultElementLifeCycleContribution = + new DefaultElementLifeCycleContribution(this.context, runtime); // @ts-ignore - this.context.defaultElementLifeCycleContribution = defaultElementLifeCycleContribution; + this.context.defaultElementLifeCycleContribution = + defaultElementLifeCycleContribution; // @ts-ignore - this.context.SVGElementLifeCycleContribution = defaultElementLifeCycleContribution; + this.context.SVGElementLifeCycleContribution = + defaultElementLifeCycleContribution; const SVGRendererPluginOptions: SVGRendererPluginOptions = { - outputSVGElementId: !isNil(outputSVGElementId) ? !!outputSVGElementId : true, - outputSVGElementName: !isNil(outputSVGElementName) ? !!outputSVGElementName : true, + outputSVGElementId: !isNil(outputSVGElementId) + ? !!outputSVGElementId + : true, + outputSVGElementName: !isNil(outputSVGElementName) + ? !!outputSVGElementName + : true, }; this.addRenderingPlugin( // @ts-ignore - new SVGRendererPlugin(SVGRendererPluginOptions, defElementManager, this.context), + new SVGRendererPlugin( + SVGRendererPluginOptions, + defElementManager, + this.context, + ), ); } destroy(): void { diff --git a/packages/g-plugin-svg-renderer/src/shapes/paths/Text.ts b/packages/g-plugin-svg-renderer/src/shapes/paths/Text.ts index 951ea869f..3ec8478a0 100644 --- a/packages/g-plugin-svg-renderer/src/shapes/paths/Text.ts +++ b/packages/g-plugin-svg-renderer/src/shapes/paths/Text.ts @@ -1,5 +1,4 @@ -import type { ParsedTextStyleProps, Text } from '@antv/g-lite'; -import { runtime } from '@antv/g-lite'; +import type { GlobalRuntime, ParsedTextStyleProps, Text } from '@antv/g-lite'; import { TEXT_PATH_PREFIX } from '../../SVGRendererPlugin'; import { createSVGElement } from '../../utils/dom'; import { convertHTML } from '../../utils/format'; @@ -18,6 +17,7 @@ export function updateTextElementAttribute( $el: SVGElement, parsedStyle: ParsedTextStyleProps, text: Text, + runtime: GlobalRuntime, ) { const { lineWidth, diff --git a/packages/g-plugin-webgl-device/CHANGELOG.md b/packages/g-plugin-webgl-device/CHANGELOG.md index e208fb7de..6e569c026 100644 --- a/packages/g-plugin-webgl-device/CHANGELOG.md +++ b/packages/g-plugin-webgl-device/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g-plugin-webgl-device +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-device-renderer@1.9.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-webgl-device/package.json b/packages/g-plugin-webgl-device/package.json index 03aaf0b15..5387e4e78 100644 --- a/packages/g-plugin-webgl-device/package.json +++ b/packages/g-plugin-webgl-device/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-webgl-device", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin implements GPUDevice interface with WebGL API", "keywords": [ "antv", @@ -41,7 +41,7 @@ "dependencies": { "@antv/g-lite": "workspace:*", "@antv/g-plugin-device-renderer": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "eventemitter3": "^5.0.1", "tslib": "^2.5.3" }, diff --git a/packages/g-plugin-webgpu-device/CHANGELOG.md b/packages/g-plugin-webgpu-device/CHANGELOG.md index 30125a125..95a88adb0 100644 --- a/packages/g-plugin-webgpu-device/CHANGELOG.md +++ b/packages/g-plugin-webgpu-device/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g-plugin-webgpu-device +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-device-renderer@1.9.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-webgpu-device/package.json b/packages/g-plugin-webgpu-device/package.json index cb22fe0ea..c807b6fc8 100644 --- a/packages/g-plugin-webgpu-device/package.json +++ b/packages/g-plugin-webgpu-device/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-webgpu-device", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin implements GPUDevice interface with WebGPU API", "keywords": [ "antv", @@ -41,7 +41,7 @@ "dependencies": { "@antv/g-lite": "workspace:*", "@antv/g-plugin-device-renderer": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "@webgpu/types": "^0.1.33", "eventemitter3": "^5.0.1", "tslib": "^2.5.3" diff --git a/packages/g-plugin-webgpu-device/src/WebGPUDeviceContribution.ts b/packages/g-plugin-webgpu-device/src/WebGPUDeviceContribution.ts index f964af383..5518d5ea2 100644 --- a/packages/g-plugin-webgpu-device/src/WebGPUDeviceContribution.ts +++ b/packages/g-plugin-webgpu-device/src/WebGPUDeviceContribution.ts @@ -1,19 +1,23 @@ -import { runtime } from '@antv/g-lite'; +import type { GlobalRuntime } from '@antv/g-lite'; import type { DeviceContribution } from '@antv/g-plugin-device-renderer'; import init, { glsl_compile } from '../../../rust/pkg/glsl_wgsl_compiler'; import type { WebGPUDeviceOptions } from './interfaces'; import { Device_WebGPU } from './platform/Device'; export class WebGPUDeviceContribution implements DeviceContribution { - constructor(private pluginOptions: Partial) {} + constructor( + private pluginOptions: Partial, + private runtime: GlobalRuntime, + ) {} async createSwapChain($canvas: HTMLCanvasElement) { - if ((runtime.globalThis.navigator as any).gpu === undefined) return null; + if ((this.runtime.globalThis.navigator as any).gpu === undefined) + return null; let adapter = null; try { adapter = await ( - runtime.globalThis.navigator as any + this.runtime.globalThis.navigator as any ).gpu.requestAdapter(); } catch (e) { console.log(e); diff --git a/packages/g-plugin-webgpu-device/src/index.ts b/packages/g-plugin-webgpu-device/src/index.ts index e01cea79b..408e0db71 100644 --- a/packages/g-plugin-webgpu-device/src/index.ts +++ b/packages/g-plugin-webgpu-device/src/index.ts @@ -1,4 +1,4 @@ -import { AbstractRendererPlugin } from '@antv/g-lite'; +import { AbstractRendererPlugin, GlobalRuntime } from '@antv/g-lite'; import type { WebGPUDeviceOptions } from './interfaces'; import { WebGPUDeviceContribution } from './WebGPUDeviceContribution'; export class Plugin extends AbstractRendererPlugin { @@ -7,11 +7,14 @@ export class Plugin extends AbstractRendererPlugin { super(); } - init(): void { - this.context.deviceContribution = new WebGPUDeviceContribution({ - shaderCompilerPath: '/glsl_wgsl_compiler_bg.wasm', - ...this.options, - }); + init(runtime: GlobalRuntime): void { + this.context.deviceContribution = new WebGPUDeviceContribution( + { + shaderCompilerPath: '/glsl_wgsl_compiler_bg.wasm', + ...this.options, + }, + runtime, + ); } destroy(): void { delete this.context.deviceContribution; diff --git a/packages/g-plugin-yoga/CHANGELOG.md b/packages/g-plugin-yoga/CHANGELOG.md index 7ae4433c9..b1a99e94c 100644 --- a/packages/g-plugin-yoga/CHANGELOG.md +++ b/packages/g-plugin-yoga/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-yoga +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-plugin-yoga/package.json b/packages/g-plugin-yoga/package.json index 6c28d2f97..36f1a5db9 100644 --- a/packages/g-plugin-yoga/package.json +++ b/packages/g-plugin-yoga/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-yoga", - "version": "1.9.6", + "version": "1.9.7", "description": "A G plugin for Yoga layout engine", "keywords": [ "antv", diff --git a/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md b/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md index 43e6fb720..4789a9e36 100644 --- a/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md +++ b/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g-plugin-zdog-canvas-renderer +## 1.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-canvas@1.11.7 + - @antv/g-lite@1.2.7 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-plugin-zdog-canvas-renderer/package.json b/packages/g-plugin-zdog-canvas-renderer/package.json index de2b75bec..78e3cbeed 100644 --- a/packages/g-plugin-zdog-canvas-renderer/package.json +++ b/packages/g-plugin-zdog-canvas-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-zdog-canvas-renderer", - "version": "1.2.6", + "version": "1.2.7", "description": "A G plugin of renderer implementation with Zdog", "keywords": [ "antv", @@ -40,7 +40,7 @@ "dependencies": { "@antv/g-canvas": "workspace:*", "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3", "zdog": "^1.1.3" }, diff --git a/packages/g-plugin-zdog-svg-renderer/CHANGELOG.md b/packages/g-plugin-zdog-svg-renderer/CHANGELOG.md index 03efde7ce..0382727eb 100644 --- a/packages/g-plugin-zdog-svg-renderer/CHANGELOG.md +++ b/packages/g-plugin-zdog-svg-renderer/CHANGELOG.md @@ -1,5 +1,17 @@ # @antv/g-plugin-zdog-svg-renderer +## 1.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-svg-renderer@1.10.7 + - @antv/g-lite@1.2.7 + - @antv/g-svg@1.10.7 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-plugin-zdog-svg-renderer/package.json b/packages/g-plugin-zdog-svg-renderer/package.json index 095f608bd..a33d28f71 100644 --- a/packages/g-plugin-zdog-svg-renderer/package.json +++ b/packages/g-plugin-zdog-svg-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-zdog-svg-renderer", - "version": "1.2.6", + "version": "1.2.7", "description": "A G plugin of renderer implementation with Zdog", "keywords": [ "antv", @@ -41,7 +41,7 @@ "@antv/g-lite": "workspace:*", "@antv/g-plugin-svg-renderer": "workspace:*", "@antv/g-svg": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3", "zdog": "^1.1.3" }, diff --git a/packages/g-plugin-zdog-svg-renderer/src/ZdogElementLifeCycleContribution.ts b/packages/g-plugin-zdog-svg-renderer/src/ZdogElementLifeCycleContribution.ts index 91c4c3038..73e93a3b6 100644 --- a/packages/g-plugin-zdog-svg-renderer/src/ZdogElementLifeCycleContribution.ts +++ b/packages/g-plugin-zdog-svg-renderer/src/ZdogElementLifeCycleContribution.ts @@ -1,6 +1,7 @@ import type { CanvasContext, DisplayObject, + GlobalRuntime, Text, // ParsedCircleStyleProps, // ParsedEllipseStyleProps, @@ -16,7 +17,7 @@ import { SVGRenderer } from '@antv/g-svg'; export class ZdogElementLifeCycleContribution implements SVGRenderer.ElementLifeCycleContribution { - constructor(private context: CanvasContext) {} + constructor(private context: CanvasContext, private runtime: GlobalRuntime) {} createElement(object: DisplayObject): SVGElement { const { nodeName } = object; @@ -83,6 +84,7 @@ export class ZdogElementLifeCycleContribution $el, parsedStyle, object as Text, + this.runtime, ); break; } diff --git a/packages/g-svg/CHANGELOG.md b/packages/g-svg/CHANGELOG.md index 0c19c32d0..65b4a1c09 100644 --- a/packages/g-svg/CHANGELOG.md +++ b/packages/g-svg/CHANGELOG.md @@ -1,5 +1,18 @@ # @antv/g-svg +## 1.10.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-svg-renderer@1.10.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-svg-picker@1.9.7 + - @antv/g-plugin-dom-interaction@1.9.7 + ## 1.10.6 ### Patch Changes diff --git a/packages/g-svg/package.json b/packages/g-svg/package.json index 3730e59d0..94c0e97a4 100644 --- a/packages/g-svg/package.json +++ b/packages/g-svg/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-svg", - "version": "1.10.6", + "version": "1.10.7", "description": "A renderer implemented by SVG", "keywords": [ "antv", @@ -42,7 +42,7 @@ "@antv/g-plugin-dom-interaction": "workspace:*", "@antv/g-plugin-svg-picker": "workspace:*", "@antv/g-plugin-svg-renderer": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "devDependencies": { diff --git a/packages/g-web-animations-api/CHANGELOG.md b/packages/g-web-animations-api/CHANGELOG.md index 9e32f61cd..4710e4e2e 100644 --- a/packages/g-web-animations-api/CHANGELOG.md +++ b/packages/g-web-animations-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-web-animations-api +## 1.2.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-lite@1.2.7 + ## 1.2.6 ### Patch Changes diff --git a/packages/g-web-animations-api/package.json b/packages/g-web-animations-api/package.json index 232f8c33e..5e39e74c7 100644 --- a/packages/g-web-animations-api/package.json +++ b/packages/g-web-animations-api/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-web-animations-api", - "version": "1.2.6", + "version": "1.2.7", "description": "A simple implementation of Web Animations API.", "keywords": [ "antv", @@ -41,7 +41,7 @@ }, "dependencies": { "@antv/g-lite": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "publishConfig": { diff --git a/packages/g-web-components/CHANGELOG.md b/packages/g-web-components/CHANGELOG.md index 4fb9291ff..b239e988b 100644 --- a/packages/g-web-components/CHANGELOG.md +++ b/packages/g-web-components/CHANGELOG.md @@ -1,5 +1,15 @@ # @antv/g-web-components +## 1.9.7 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-canvas@1.11.7 + - @antv/g-webgl@1.9.7 + - @antv/g-lite@1.2.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-web-components/package.json b/packages/g-web-components/package.json index f065bd17e..1061f5b2f 100644 --- a/packages/g-web-components/package.json +++ b/packages/g-web-components/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-web-components", - "version": "1.9.6", + "version": "1.9.7", "description": "A declarative usage for G implemented with WebComponents", "keywords": [ "antv", diff --git a/packages/g-webgl/CHANGELOG.md b/packages/g-webgl/CHANGELOG.md index fd0e4d3e9..b05d49b54 100644 --- a/packages/g-webgl/CHANGELOG.md +++ b/packages/g-webgl/CHANGELOG.md @@ -1,5 +1,20 @@ # @antv/g-webgl +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-device-renderer@1.9.7 + - @antv/g-plugin-html-renderer@1.9.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-plugin-webgl-device@1.9.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-dom-interaction@1.9.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-webgl/package.json b/packages/g-webgl/package.json index d22091611..1dd093451 100644 --- a/packages/g-webgl/package.json +++ b/packages/g-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-webgl", - "version": "1.9.6", + "version": "1.9.7", "description": "A renderer implemented by WebGL1/2", "keywords": [ "antv", @@ -44,7 +44,7 @@ "@antv/g-plugin-html-renderer": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", "@antv/g-plugin-webgl-device": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "tslib": "^2.5.3" }, "devDependencies": { diff --git a/packages/g-webgl/src/index.ts b/packages/g-webgl/src/index.ts index 3bec0061c..72922b886 100644 --- a/packages/g-webgl/src/index.ts +++ b/packages/g-webgl/src/index.ts @@ -14,13 +14,14 @@ interface WebGLRendererConfig extends RendererConfig { onContextLost: (e: Event) => void; onContextRestored: (e: Event) => void; onContextCreationError: (e: Event) => void; + enableFXAA: boolean; } export class Renderer extends AbstractRenderer { constructor(config?: Partial) { super(config); - const deviceRendererPlugin = new DeviceRenderer.Plugin(); + const deviceRendererPlugin = new DeviceRenderer.Plugin(config); this.registerPlugin(new ContextRegisterPlugin(deviceRendererPlugin)); this.registerPlugin(new ImageLoader.Plugin()); diff --git a/packages/g-webgpu/CHANGELOG.md b/packages/g-webgpu/CHANGELOG.md index 56eca83c2..42d31adeb 100644 --- a/packages/g-webgpu/CHANGELOG.md +++ b/packages/g-webgpu/CHANGELOG.md @@ -1,5 +1,20 @@ # @antv/g-webgpu +## 1.9.7 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-plugin-device-renderer@1.9.7 + - @antv/g-plugin-html-renderer@1.9.7 + - @antv/g-plugin-webgpu-device@1.9.7 + - @antv/g-plugin-image-loader@1.3.7 + - @antv/g-lite@1.2.7 + - @antv/g-plugin-dom-interaction@1.9.7 + ## 1.9.6 ### Patch Changes diff --git a/packages/g-webgpu/package.json b/packages/g-webgpu/package.json index 906f121c6..23ced67c9 100644 --- a/packages/g-webgpu/package.json +++ b/packages/g-webgpu/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-webgpu", - "version": "1.9.6", + "version": "1.9.7", "description": "A renderer implemented by WebGPU", "keywords": [ "antv", @@ -44,7 +44,7 @@ "@antv/g-plugin-html-renderer": "workspace:*", "@antv/g-plugin-image-loader": "workspace:*", "@antv/g-plugin-webgpu-device": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "@webgpu/types": "^0.1.6", "tslib": "^2.5.3" }, diff --git a/packages/g-webgpu/src/index.ts b/packages/g-webgpu/src/index.ts index 47dd5cd39..879ecbd1a 100644 --- a/packages/g-webgpu/src/index.ts +++ b/packages/g-webgpu/src/index.ts @@ -1,5 +1,4 @@ -import { ClipSpaceNearZ, RendererConfig } from '@antv/g-lite'; -import { AbstractRenderer } from '@antv/g-lite'; +import { AbstractRenderer, ClipSpaceNearZ, RendererConfig } from '@antv/g-lite'; import * as DeviceRenderer from '@antv/g-plugin-device-renderer'; import * as DomInteraction from '@antv/g-plugin-dom-interaction'; import * as HTMLRenderer from '@antv/g-plugin-html-renderer'; diff --git a/packages/g/CHANGELOG.md b/packages/g/CHANGELOG.md index d5a519998..3a6b444e4 100644 --- a/packages/g/CHANGELOG.md +++ b/packages/g/CHANGELOG.md @@ -1,5 +1,16 @@ # @antv/g +## 5.18.8 + +### Patch Changes + +- Updated dependencies [70aa0b32] +- Updated dependencies [789bd4c9] + - @antv/g-web-animations-api@1.2.7 + - @antv/g-camera-api@1.2.7 + - @antv/g-lite@1.2.7 + - @antv/g-dom-mutation-observer-api@1.2.7 + ## 5.18.7 ### Patch Changes diff --git a/packages/g/package.json b/packages/g/package.json index e75c6219a..a63718456 100644 --- a/packages/g/package.json +++ b/packages/g/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g", - "version": "5.18.7", + "version": "5.18.8", "description": "A core module for rendering engine implements DOM API.", "keywords": [ "antv", diff --git a/packages/react-g/CHANGELOG.md b/packages/react-g/CHANGELOG.md index 5b8f86f56..c3d3a3975 100644 --- a/packages/react-g/CHANGELOG.md +++ b/packages/react-g/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/react-g +## 1.10.8 + +### Patch Changes + +- 70aa0b32: Retrieve runtime from context instead of global. +- 789bd4c9: Split a path containing multiple segments into subpaths. + - @antv/g@5.18.8 + ## 1.10.7 ### Patch Changes diff --git a/packages/react-g/package.json b/packages/react-g/package.json index 147c6aa48..c1f874cea 100644 --- a/packages/react-g/package.json +++ b/packages/react-g/package.json @@ -1,6 +1,6 @@ { "name": "@antv/react-g", - "version": "1.10.7", + "version": "1.10.8", "description": "react render for @antv/g", "keywords": [ "react", @@ -40,7 +40,7 @@ }, "dependencies": { "@antv/g": "workspace:*", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "gl-matrix": "^3.4.3", "react-reconciler": "^0.26.2", "scheduler": "^0.20.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 11dcb4af2..09917bb4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,8 +8,8 @@ importers: .: devDependencies: '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 '@changesets/cli': specifier: ^2.26.2 version: 2.26.2 @@ -161,8 +161,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -194,8 +194,8 @@ importers: specifier: workspace:* version: link:../g-plugin-image-loader '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -231,8 +231,8 @@ importers: specifier: workspace:* version: link:../g-plugin-image-loader '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 canvaskit-wasm: specifier: ^0.34.0 version: 0.34.0 @@ -250,8 +250,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -306,8 +306,8 @@ importers: specifier: workspace:* version: link:../g-math '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 d3-color: specifier: ^1.4.0 version: 1.4.0 @@ -343,8 +343,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -352,8 +352,8 @@ importers: packages/g-math: dependencies: '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -385,8 +385,8 @@ importers: specifier: workspace:* version: link:../g-plugin-mobile-interaction '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -425,8 +425,8 @@ importers: specifier: workspace:* version: link:../g-plugin-svg-renderer '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -459,8 +459,8 @@ importers: specifier: workspace:* version: link:../g-plugin-webgl-device '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -478,8 +478,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -557,8 +557,8 @@ importers: specifier: workspace:* version: link:../g-math '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -578,8 +578,8 @@ importers: specifier: workspace:* version: link:../g-plugin-canvas-renderer '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -602,8 +602,8 @@ importers: specifier: workspace:* version: link:../g-plugin-image-loader '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -623,8 +623,8 @@ importers: specifier: workspace:* version: link:../g-plugin-image-loader '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 canvaskit-wasm: specifier: ^0.34.0 version: 0.34.0 @@ -682,8 +682,8 @@ importers: specifier: workspace:* version: link:../g-shader-components '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 '@webgpu/types': specifier: ^0.1.6 version: 0.1.33 @@ -731,8 +731,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -755,8 +755,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -770,8 +770,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -828,8 +828,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 roughjs: specifier: ^4.5.2 version: 4.5.2 @@ -846,8 +846,8 @@ importers: specifier: workspace:* version: link:../g-svg '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 roughjs: specifier: ^4.5.2 version: 4.5.2 @@ -873,8 +873,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -891,8 +891,8 @@ importers: specifier: workspace:* version: link:../g-plugin-device-renderer '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 eventemitter3: specifier: ^5.0.1 version: 5.0.1 @@ -909,8 +909,8 @@ importers: specifier: workspace:* version: link:../g-plugin-device-renderer '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 '@webgpu/types': specifier: ^0.1.33 version: 0.1.33 @@ -942,8 +942,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -967,8 +967,8 @@ importers: specifier: workspace:* version: link:../g-svg '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -1001,8 +1001,8 @@ importers: specifier: workspace:* version: link:../g-plugin-svg-renderer '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -1017,8 +1017,8 @@ importers: specifier: workspace:* version: link:../g-lite '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -1066,8 +1066,8 @@ importers: specifier: workspace:* version: link:../g-plugin-webgl-device '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 tslib: specifier: ^2.5.3 version: 2.5.3 @@ -1100,8 +1100,8 @@ importers: specifier: workspace:* version: link:../g-plugin-webgpu-device '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 '@webgpu/types': specifier: ^0.1.6 version: 0.1.33 @@ -1122,8 +1122,8 @@ importers: specifier: workspace:* version: link:../g '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -1171,11 +1171,11 @@ importers: specifier: ^1.8.79 version: link:../packages/react-g '@antv/util': - specifier: ^3.3.1 - version: 3.3.1(gl-matrix@3.4.3) + specifier: ^3.3.4 + version: 3.3.4 '@antv/webgpu-graph': specifier: ^1.0.0 - version: 1.0.0(@antv/g-lite@packages+g-lite)(@antv/g-webgpu@packages+g-webgpu)(gl-matrix@3.4.3) + version: 1.0.0(@antv/g-lite@packages+g-lite)(@antv/g-webgpu@packages+g-webgpu) '@naoak/workerize-transferable': specifier: ^0.1.0 version: 0.1.0(workerize-loader@2.0.2) @@ -1565,7 +1565,7 @@ packages: '@antv/g-lite': ^1.0.0 dependencies: '@antv/g-lite': 1.2.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 gl-matrix: 3.4.3 dev: false @@ -1609,7 +1609,7 @@ packages: resolution: {integrity: sha512-NxSqvhK62fvm+r/SPM1CP0HdUl2mJarV6mM/l77paCgFaEMpU+1veWdF97N1cUQ8QFOmgaodr5aiZBz0rkn8ag==} dependencies: '@antv/g-math': 2.0.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 d3-color: 1.4.0 eventemitter3: 5.0.1 gl-matrix: 3.4.3 @@ -1627,7 +1627,7 @@ packages: /@antv/g-math@2.0.1: resolution: {integrity: sha512-Y1DREalYzUMaglD0m6V9s9UxsseXgSmwNA3l9zDHRH1CXDLcvtmrku+DQM9oCgPtbPWV43AdyAYoNT3WLyL/WA==} dependencies: - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 gl-matrix: 3.4.3 tslib: 2.5.3 dev: false @@ -1639,7 +1639,7 @@ packages: '@antv/g-math': 2.0.1 '@antv/g-plugin-image-loader': 1.3.1 '@antv/g-shader-components': 1.8.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 '@webgpu/types': 0.1.33 earcut: 2.2.3 eventemitter3: 5.0.1 @@ -1669,7 +1669,7 @@ packages: resolution: {integrity: sha512-bk94rLrQ2wclVt2aghWytTr8Ur9a0ImMcf2V2vmoatjD1+/k+EtsF230RcoflVk9MGr4Cn0LqFXVIiPSmckYHw==} dependencies: '@antv/g-lite': 1.2.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 gl-matrix: 3.4.3 tslib: 2.5.3 dev: false @@ -1678,12 +1678,12 @@ packages: resolution: {integrity: sha512-IdrlWjN6vBWjoqSu58ZbeL3Ta8q+Eq+686dMa0yCMCRnVlmym/mcW2JzCCA+IUcaCM39UEiDmyinJs8Ic04X9A==} dependencies: '@antv/g-lite': 1.2.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 gl-matrix: 3.4.3 tslib: 2.5.3 dev: false - /@antv/g-plugin-webgl-device@1.7.54(@antv/g-lite@packages+g-lite)(@antv/g-plugin-device-renderer@1.9.1)(gl-matrix@3.4.3): + /@antv/g-plugin-webgl-device@1.7.54(@antv/g-lite@packages+g-lite)(@antv/g-plugin-device-renderer@1.9.1): resolution: {integrity: sha512-1Bnf+eb5HcK7plBYSBAKQDc+KWW0VZ3paFv8rEfJCnp7nTt4kHH2j9wdjwHztft4eOaxdRH1hdV1Aom05sahqg==} peerDependencies: '@antv/g-lite': ^1.0.0 @@ -1691,11 +1691,9 @@ packages: dependencies: '@antv/g-lite': link:packages/g-lite '@antv/g-plugin-device-renderer': 1.9.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) + '@antv/util': 3.3.4 eventemitter3: 4.0.7 tslib: 2.5.3 - transitivePeerDependencies: - - gl-matrix dev: false /@antv/g-shader-components@1.8.1: @@ -1712,18 +1710,16 @@ packages: tslib: 2.5.3 dev: false - /@antv/g-web-animations-api@1.0.39(@antv/g-lite@1.2.1)(gl-matrix@3.4.3): + /@antv/g-web-animations-api@1.0.39(@antv/g-lite@1.2.1): resolution: {integrity: sha512-0QXVzjk8kKrVokxHLLphkJsMPvbhLgcQN8/eVUdPaj+A0Yf6Cpg/hquYaGBBuqzwoMVB0ROUsIvwXgRtoXQONA==} peerDependencies: '@antv/g-lite': ^1.0.0 dependencies: '@antv/g-lite': 1.2.1 - '@antv/util': 3.3.1(gl-matrix@3.4.3) - transitivePeerDependencies: - - gl-matrix + '@antv/util': 3.3.4 dev: false - /@antv/g-webgl@1.7.74(@antv/g-lite@packages+g-lite)(gl-matrix@3.4.3): + /@antv/g-webgl@1.7.74(@antv/g-lite@packages+g-lite): resolution: {integrity: sha512-efi5NjuUWcIQt1kxp9kQSPIC9xwVzHbKiXSjrl6SkZ7rXWekBWfPsfnRca0zEzZQ91M90/F0jvdRLe6uXXqrIQ==} peerDependencies: '@antv/g-lite': ^1.0.0 @@ -1733,10 +1729,8 @@ packages: '@antv/g-plugin-dom-interaction': 1.9.1 '@antv/g-plugin-html-renderer': 1.9.1 '@antv/g-plugin-image-loader': 1.3.1 - '@antv/g-plugin-webgl-device': 1.7.54(@antv/g-lite@packages+g-lite)(@antv/g-plugin-device-renderer@1.9.1)(gl-matrix@3.4.3) - '@antv/util': 3.3.1(gl-matrix@3.4.3) - transitivePeerDependencies: - - gl-matrix + '@antv/g-plugin-webgl-device': 1.7.54(@antv/g-lite@packages+g-lite)(@antv/g-plugin-device-renderer@1.9.1) + '@antv/util': 3.3.4 dev: false /@antv/g-webgpu-core@0.5.6: @@ -1851,7 +1845,7 @@ packages: '@antv/g6-pc': 0.5.2 dev: false - /@antv/g@5.16.33(gl-matrix@3.4.3): + /@antv/g@5.16.33: resolution: {integrity: sha512-11F82JsrXeJZTZSREiaPhnILkzoHqajkebA4fkPQ4XXjpoAcpIEow//NF8LbJOr3c1hogTyDh+aofwFeY+JnMw==} dependencies: '@antv/g-camera-api': 1.0.40(@antv/g-lite@1.2.1) @@ -1859,9 +1853,7 @@ packages: '@antv/g-css-typed-om-api': 1.0.38(@antv/g-lite@1.2.1) '@antv/g-dom-mutation-observer-api': 1.0.38(@antv/g-lite@1.2.1) '@antv/g-lite': 1.2.1 - '@antv/g-web-animations-api': 1.0.39(@antv/g-lite@1.2.1)(gl-matrix@3.4.3) - transitivePeerDependencies: - - gl-matrix + '@antv/g-web-animations-api': 1.0.39(@antv/g-lite@1.2.1) dev: false /@antv/hierarchy@0.6.11: @@ -1918,28 +1910,25 @@ packages: tslib: 2.5.3 dev: false - /@antv/util@3.3.1(gl-matrix@3.4.3): - resolution: {integrity: sha512-9p2SLovz4iBo6OsAdV1MU9lShwqCez2CMLCL0voIXNsIDxG2t17l8EN8/hoADCTH5AigC2U3ru9/HdD5YtOiQg==} - peerDependencies: - gl-matrix: ^3.3.0 + /@antv/util@3.3.4: + resolution: {integrity: sha512-NGRjPCPje8GIC14Ye7sjebamFIjxoZ+mCIqfXz6wD/M6fA9SgJivzmLB3Ry01Wq8PI36oOVv9BwrAGV1JD8vjA==} dependencies: fast-deep-equal: 3.1.3 gl-matrix: 3.4.3 tslib: 2.5.3 - /@antv/webgpu-graph@1.0.0(@antv/g-lite@packages+g-lite)(@antv/g-webgpu@packages+g-webgpu)(gl-matrix@3.4.3): + /@antv/webgpu-graph@1.0.0(@antv/g-lite@packages+g-lite)(@antv/g-webgpu@packages+g-webgpu): resolution: {integrity: sha512-zE9lyg+uJkOe/1O7EdfOesuqD6svKRhQCNMocpFwA7cka4jdBY5h6iE60FiHNGPza6/Cy7mXVDYuGT/t+8/F1g==} dependencies: - '@antv/g': 5.16.33(gl-matrix@3.4.3) + '@antv/g': 5.16.33 '@antv/g-plugin-gpgpu': 1.7.50(@antv/g-lite@packages+g-lite)(@antv/g-webgpu@packages+g-webgpu) - '@antv/g-webgl': 1.7.74(@antv/g-lite@packages+g-lite)(gl-matrix@3.4.3) + '@antv/g-webgl': 1.7.74(@antv/g-lite@packages+g-lite) '@types/offscreencanvas': 2019.6.4 '@webgpu/types': 0.1.33 tslib: 2.5.3 transitivePeerDependencies: - '@antv/g-lite' - '@antv/g-webgpu' - - gl-matrix dev: false /@babel/code-frame@7.12.11: diff --git a/site/examples/perf/webgl/demo/lines.js b/site/examples/perf/webgl/demo/lines.js new file mode 100644 index 000000000..d2c64b2d5 --- /dev/null +++ b/site/examples/perf/webgl/demo/lines.js @@ -0,0 +1,122 @@ +import { Canvas, CanvasEvent, Line } from '@antv/g'; +import { Renderer as WebGLRenderer } from '@antv/g-webgl'; +import { Renderer as WebGPURenderer } from '@antv/g-webgpu'; +import * as lil from 'lil-gui'; +import Stats from 'stats.js'; + +// create a renderer +const webglRenderer = new WebGLRenderer(); +const webgpuRenderer = new WebGPURenderer({ + shaderCompilerPath: '/glsl_wgsl_compiler_bg.wasm', +}); + +// create a canvas +const canvas = new Canvas({ + container: 'container', + width: 600, + height: 500, + renderer: webglRenderer, +}); + +canvas.addEventListener(CanvasEvent.READY, () => { + for (let i = 0; i < 5000; i++) { + const line = new Line({ + style: { + x1: Math.random() * 600, + y1: Math.random() * 500, + x2: Math.random() * 600, + y2: Math.random() * 500, + stroke: '#5B8FF9', + lineWidth: 2, + }, + }); + canvas.appendChild(line); + } +}); + +// stats +const stats = new Stats(); +stats.showPanel(0); +const $stats = stats.dom; +$stats.style.position = 'absolute'; +$stats.style.left = '0px'; +$stats.style.top = '0px'; +const $wrapper = document.getElementById('container'); +$wrapper.appendChild($stats); + +const camera = canvas.getCamera(); +canvas.addEventListener(CanvasEvent.AFTER_RENDER, () => { + if (stats) { + stats.update(); + } + + // manipulate camera instead of the root of canvas + camera.rotate(0, 0, 1); +}); + +// update Camera's zoom +// @see https://github.com/mrdoob/three.js/blob/master/examples/jsm/controls/OrbitControls.js +const minZoom = 0; +const maxZoom = Infinity; +canvas + .getContextService() + .getDomElement() // g-canvas/webgl 为 ,g-svg 为 + .addEventListener( + 'wheel', + (e) => { + e.preventDefault(); + let zoom; + if (e.deltaY < 0) { + zoom = Math.max(minZoom, Math.min(maxZoom, camera.getZoom() / 0.95)); + } else { + zoom = Math.max(minZoom, Math.min(maxZoom, camera.getZoom() * 0.95)); + } + camera.setZoom(zoom); + }, + { passive: false }, + ); + +// GUI +const gui = new lil.GUI({ autoPlace: false }); +$wrapper.appendChild(gui.domElement); +const rendererFolder = gui.addFolder('renderer'); +const rendererConfig = { + renderer: 'webgl', +}; +rendererFolder + .add(rendererConfig, 'renderer', ['webgl', 'webgpu']) + .onChange((rendererName) => { + let renderer; + if (rendererName === 'webgl') { + renderer = webglRenderer; + } else if (rendererName === 'webgpu') { + renderer = webgpuRenderer; + } + canvas.setRenderer(renderer); + }); +rendererFolder.open(); + +const transformFolder = gui.addFolder('style'); +const transformConfig = { + lineWidth: 2, + lineDash: 10, + lineDashOffset: 0, +}; +transformFolder + .add(transformConfig, 'lineWidth', 0, 20) + .onChange((lineWidth) => { + const lines = canvas.document.querySelectorAll('line'); + lines.forEach((line) => { + line.style.lineWidth = lineWidth; + }); + }); +transformFolder.add(transformConfig, 'lineDash', 0, 50).onChange((dash) => { + const lines = canvas.document.querySelectorAll('line'); + lines[0].style.lineDash = [dash, dash]; +}); +transformFolder + .add(transformConfig, 'lineDashOffset', 0, 50) + .onChange((lineDashOffset) => { + const lines = canvas.document.querySelectorAll('line'); + lines[0].style.lineDashOffset = lineDashOffset; + }); diff --git a/site/examples/perf/webgl/demo/meta.json b/site/examples/perf/webgl/demo/meta.json index ab83dc796..49bbe6eeb 100644 --- a/site/examples/perf/webgl/demo/meta.json +++ b/site/examples/perf/webgl/demo/meta.json @@ -32,6 +32,14 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*sQH_T5LdKdcAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "lines.js", + "title": { + "zh": "大量直线", + "en": "Instanced Lines" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GNRuTqpp6BAAAAAAAAAAAAAADmJ7AQ/original" + }, { "filename": "polygons.js", "title": { diff --git a/site/examples/shape/path/demo/multi-segments.js b/site/examples/shape/path/demo/multi-segments.js index 5331435c2..152a03d43 100644 --- a/site/examples/shape/path/demo/multi-segments.js +++ b/site/examples/shape/path/demo/multi-segments.js @@ -26,14 +26,22 @@ const canvas = new Canvas({ const path = new Path({ style: { - transform: 'translate(200, 100) scale(10)', - d: 'M2 4C0.8954304997175604 3.9999999991219815 -1.3527075029566811e-16 4.895430499717561 0 6C0 6 0 9.9375 0 12C1.3527075029566811e-16 13.10456950028244 0.8954304997175604 14.00000000087802 2 14C8 14 10.25 14 14 14C15.104569499040734 13.99999999912198 16 13.104569499040734 16 12C16 9 16 7.875 16 6C16 4.895430500959266 15.104569499040734 4.0000000008780185 14 4C13.414 4 13.194249999999998 4 12.828 4C12.297610373455704 3.9998867247945213 11.788985462367364 3.7890987493850155 11.414 3.414C11 3 10.84475 2.8447500000000003 10.586 2.5860000000000003C10.211014537632636 2.210901250614985 9.702389626544296 2.0001132752054787 9.172 2.0000000000000004C8 2.0000000000000004 7.560500000000001 2.0000000000000004 6.828000000000001 2.0000000000000004C6.297610373455706 2.0001132752054787 5.788985462367367 2.210901250614985 5.4140000000000015 2.5860000000000003C5.000000000000002 3 4.844750000000001 3.1552499999999997 4.586000000000001 3.414C4.211014537632636 3.7890987493850155 3.7023896265442966 3.9998867247945213 3.1720000000000015 4C2.5860000000000016 4 2.3662500000000017 4 2.0000000000000018 4C2.000000000000001 4 2.000000000000001 4 2 4M10.5 8.5C10.5 6.575499102701247 8.416666666666666 5.372686041889527 6.75 6.334936490538903C5.976497308103742 6.781518477924107 5.5 7.606836025229591 5.5 8.5C5.5 10.424500897298753 7.583333333333334 11.627313958110474 9.25 10.665063509461097C10.023502691896258 10.218481522075892 10.5 9.39316397477041 10.5 8.5C10.5 8.5 10.5 8.5 10.5 8.5M2.5 6C2.1150998205402494 6.000000000305956 1.874537208444147 5.583333333830511 2.0669872979090567 5.2500000003442C2.1563036954051213 5.095299461648009 2.321367204761929 4.999999999858005 2.5 5C2.8849001794597506 5.000000000305956 3.125462791688336 5.416666667163845 2.933012701693495 5.7500000003442C2.8436963042354777 5.904700538406512 2.6786327946700927 5.999999999858005 2.5 6C2.5 6 2.5 6 2.5 6M11.5 8.5C11.5 11.194301256218253 8.583333333333334 12.878239541354663 6.250000000000001 11.531088913245537C5.167096231345241 10.90587413090625 4.5 9.750429564678573 4.5 8.5C4.5 5.805698743781747 7.416666666666667 4.121760458645338 9.75 5.468911086754464C10.832903768654761 6.094125869093751 11.5 7.249570435321427 11.5 8.5C11.5 8.5 11.5 8.5 11.5 8.5', + d: 'M 0 395.708 L 0.308 394.171 L 0.616 391.627 L 0.924 390.84 L 1.847 390.928 L 2.463 391.168 L 2.771 390.498 L 3.079 390.49 L 3.387 390.192 L 4.311 387.925 L 4.619 387.094 L 4.926 385.768 L 4.926 385.433 L 5.234 384.413 L 6.158 383.961 L 6.466 385.302 L 6.774 385.433 L 7.082 383.902 L 7.39 383.48 L 8.313 382.051 L 8.621 380.915 L 8.929 381.388 L 9.237 382.992 L 9.545 380.856 L 10.777 380.324 L 11.084 377.103 L 11.392 375.34 L 12.008 377.373 L 12.932 375.238 L 13.24 374.261 L 13.548 373.554 L 13.856 373.241 L 14.163 372.935 L 14.779 376.068 L 15.087 375.93 L 15.395 378.029 L 15.703 377.118 L 16.011 375.842 L 16.935 372.497 L 17.243 373.54 L 17.55 375.077 L 17.858 373.365 L 18.166 374.02 L 19.09 374.501 L 19.398 376.462 L 19.706 374.829 L 20.014 375.799 L 20.322 374.72 L 21.553 375.289 L 21.861 370.982 L 22.477 366.915 L 22.785 367.243 L 23.708 368.679 L 23.708 367.207 L 24.016 367.177 L 24.324 365.953 L 24.632 363.286 L 25.556 363.016 L 25.864 362.426 L 26.172 363.002 L 26.48 361.632 L 26.787 358.899 L 27.711 358.935 L 28.019 365.356 L 28.327 363.628 L 28.635 357.259 L 28.943 358.826 L 29.866 360.589 L 30.174 367.637 L 30.79 365.275 L 31.098 364.19 L 31.406 367.571 L 32.33 365.093 L 32.638 365.254 L 32.946 365.997 L 33.253 371.55 L 33.253 372.563 L 34.177 370.53 L 34.485 373.27 L 34.793 376.28 L 35.101 378.357 L 35.409 374.706 L 36.332 374.589 L 36.64 370.69 L 36.948 367.09 L 37.256 368.139 L 37.564 365.057 L 38.488 367.279 L 38.796 371.237 L 39.104 365.946 L 39.411 364.364 L 39.719 362.739 L 41.259 358.6 L 41.567 363.993 L 41.875 365.268 L 42.183 367.629 L 42.798 364.029 L 43.106 364.918 L 43.414 363.927 L 43.722 363.672 L 44.03 362.499 L 44.954 362.79 L 45.262 360.961 L 45.569 361.07 L 45.877 361.406 L 46.185 358.607 L 47.109 355.597 L 47.417 352.027 L 47.725 352.325 L 48.033 351.065 L 48.341 351.815 L 49.572 349.724 L 49.88 348.186 L 50.188 348.572 L 50.496 349.797 L 50.804 346 L 51.728 341.292 L 52.035 341.328 L 52.035 342.108 L 52.343 345.431 L 52.651 341.773 L 53.575 341.97 L 53.883 340.075 L 54.191 337.765 L 54.499 337.218 L 54.807 339.463 L 55.73 336.591 L 56.038 327.992 L 56.346 328.16 L 56.654 330.455 L 56.962 329.056 L 57.886 328.772 L 58.193 327.38 L 58.501 325.23 L 59.117 327.059 L 59.425 326.746 L 60.349 327.978 L 60.657 323.889 L 60.965 327.89 L 61.272 335.783 L 61.58 343.143 L 62.196 351.604 L 62.504 339.798 L 62.812 342.604 L 63.12 343.923 L 63.428 342.4 L 64.351 344.178 L 64.659 340.607 L 64.967 340.891 L 65.583 338.647 L 66.507 337.918 L 66.815 336.264 L 67.123 332.321 L 67.431 329.355 L 67.738 330.863 L 68.97 333.312 L 69.278 332.62 L 69.586 328.473 L 69.894 325.23 L 70.202 322.06 L 70.817 322.126 L 71.125 326.258 L 71.433 324.567 L 71.741 323.86 L 72.049 324.909 L 72.973 329.275 L 73.281 330.31 L 73.589 330.208 L 73.896 327.227 L 74.204 322.344 L 75.128 318.781 L 75.744 318.671 L 76.052 318.948 L 76.36 318.03 L 77.283 319.305 M 105.918 354.687 L 106.226 356.173 L 106.534 353.171 L 106.842 352.099 L 107.766 350.052 L 108.074 352.274 L 108.381 353.295 L 108.381 351.028 L 108.689 356.428 L 109.613 355.962 L 109.921 355.525 L 110.229 351.648 L 110.537 351.072 L 110.845 346.299 L 111.768 341.11 L 112.076 346.911 L 112.384 344.95 L 112.692 340.541 L 113 339.966 L 113.924 338.136 L 114.232 336.089 L 114.54 336.89 L 115.155 332.481 L 115.463 331.796 L 116.387 329.034 L 116.695 327.628 L 117.003 330.594 L 117.311 328.794 L 117.619 329.967 L 118.234 326.535 L 118.542 325.223 L 118.85 327.919 L 119.158 325.39 L 119.466 326.928 L 120.39 329.858 L 120.698 328.182 L 121.005 333.8 L 121.313 334.631 L 121.621 331.629 L 122.853 327.795 L 123.161 327.373 L 123.469 327.606 L 123.777 326.105 L 125.008 328.036 L 125.316 328.568 L 125.624 328.699 L 125.932 325.609 L 126.24 328.371 L 127.163 331.308 L 127.163 328.371 L 127.471 331.891 L 127.779 337.393 L 128.087 338.042 L 129.011 334.784 L 129.319 331.439 L 129.627 333.392 L 129.935 331.825 L 130.243 335.928 L 131.166 337.466 L 131.474 337.4 L 131.782 334.383 L 132.09 341.037 L 132.398 339.703 L 133.322 341.634 L 133.937 336.358 L 134.245 341.095 L 134.553 339.681 L 135.785 336.008 L 136.093 332.809 L 136.401 336.672 L 136.401 334.937 L 136.708 337.889 L 137.632 336.941 L 137.94 340.031 L 138.248 337.721 L 138.556 338.45 L 138.864 343.303 L 139.787 342.473 L 140.095 345.584 L 140.403 342.494 L 140.711 347.763 L 141.019 345.511 L 141.943 351.137 L 142.251 349.184 L 142.559 347.144 L 142.866 347.822 L 143.482 349.49 L 144.406 351.99 L 144.714 346.59 L 145.022 344.003 L 145.33 344.455 L 145.638 340.097 L 146.253 337.174 L 146.561 334.864 L 146.869 332.991 L 147.177 332.977 L 147.485 335.586 L 148.409 335.841 L 148.717 337.196 L 149.025 335.513 L 149.332 336.642 L 149.64 334.821 L 150.564 337.911 L 150.872 337.116 L 151.18 336.366 L 151.488 337.043 L 151.796 340.111 L 153.335 342.545 L 153.643 341.984 L 153.951 346.167 L 154.259 346.925 L 155.183 348.572 L 155.49 353.12 L 155.49 353.171 L 155.798 352.413 L 156.106 355.117 L 157.03 361.369 L 157.338 361.719 L 157.646 370.501 L 157.954 365.939 L 158.262 360.968 L 159.185 368.154 L 159.493 371.222 L 159.801 369.859 L 160.109 367.513 L 160.417 370.202 L 161.341 386.949 L 161.649 380.827 L 162.264 384.136 L 162.572 390.709 L 162.88 392.917 L 163.804 392.137 L 164.112 398.682 L 164.42 398.223 L 164.728 398.988 L 164.728 393.114 L 165.651 383.305 L 165.959 387.809 L 166.267 392.276 L 166.575 389.405 L 166.883 392.677 L 167.807 391.919 L 168.114 396.984 L 168.422 393.063 L 168.73 392.072 L 169.038 393.42 L 169.962 396.546 L 170.27 390.848 L 170.578 387.466 L 170.886 382.736 L 171.193 385.251 L 172.425 385.71 L 172.733 382.773 L 173.041 388.377 L 173.349 391.438 L 173.657 392.065 L 174.272 393.784 L 174.58 394.593 L 174.888 397.982 L 175.196 393.376 L 175.504 397.895 L 176.428 399.425 L 176.736 398.135 L 177.044 400.773 L 177.351 405 L 177.659 403.477 L 178.583 395.92 L 178.891 397.487 L 179.199 394.426 L 179.507 394.426 L 179.815 396.124 L 181.046 398.849 L 181.354 396.269 L 181.662 393.77 L 181.97 397.042 L 182.278 395.154 L 183.202 390.986 L 183.51 390.738 L 183.51 392.086 L 183.817 394.426 L 184.125 392.043 L 185.049 394.608 L 185.357 394.112 L 185.665 398.682 L 185.973 398.485 L 186.281 398.07 L 187.204 401.174 L 187.512 400.708 L 187.82 401.684 L 188.128 401.684 L 188.436 401.123 L 189.36 400.54 L 189.668 400.773 L 189.975 401.458 M 218.302 384.449 L 218.61 381.519 L 218.918 379.129 L 219.842 377.336 L 220.15 379.851 L 220.458 378.889 L 220.766 376.52 L 220.766 376.52 L 221.689 376.046 L 221.997 377.438 L 222.305 377.927 L 222.613 375.15 L 222.921 373.714 L 223.845 375.842 L 224.153 374.924 L 224.46 375.106 L 224.768 372.271 L 225.076 373.365 L 226 372.76 L 226.308 373.365 L 226.616 372.461 L 226.924 371.958 L 227.54 370.931 L 228.463 367.411 L 228.771 366.944 L 229.079 367.097 L 229.387 369.604 L 229.695 369.509 L 230.311 369.233 L 230.619 372.986 L 230.926 376.578 L 231.234 374.057 L 231.542 374.443 L 232.466 371.361 L 232.774 370.778 L 233.082 371.929 L 233.39 373.161 L 233.698 374.385 L 234.929 368.351 L 235.237 366.696 L 235.545 365.224 L 235.853 364.685 L 237.084 362.105 L 237.392 362.003 L 237.7 360.939 L 238.008 358.906 L 238.316 358.228 L 239.24 358.826 L 239.548 359.649 L 239.548 361.449 L 239.856 361.668 L 240.163 363.84 L 241.087 364.481 L 241.395 364.292 L 241.703 364.853 L 242.011 364.634 L 242.319 362.011 L 243.243 363.548 L 243.55 365.997 L 243.858 364.386 L 244.166 361.734 L 244.474 359.853 L 245.398 360.196 L 245.706 359.861 L 246.322 359.569 L 246.629 361.617 L 246.937 361.617 L 247.861 362.645 L 248.169 364.984 L 248.477 363.658 L 248.785 364.284 L 248.785 362.71 L 249.708 359.926 L 250.016 359.977 L 250.324 356.618 L 250.632 356.151 L 250.94 353.069 L 251.864 352.223 L 252.172 353.244 L 252.48 349.432 L 252.787 348.645 L 253.095 347.064 L 254.019 346.984 L 254.327 347.056 L 254.635 347.035 L 254.943 345.023 L 255.251 344.586 L 256.482 342.371 L 256.79 343.012 L 257.098 343.332 L 257.406 344.207 L 257.714 343.041 L 258.33 343.617 L 258.946 343.187 L 259.253 340.92 L 259.561 342.115 L 260.485 347.355 L 260.793 344.141 L 261.101 343.704 L 261.409 342.443 L 261.717 340.337 L 262.64 340.454 L 262.948 340.206 L 263.256 341.656 L 263.564 340.17 L 263.872 339.732 L 264.796 341.073 L 265.411 343.194 L 265.719 343.281 L 266.027 342.283 L 266.335 339.543 L 267.567 337.634 L 267.875 338.938 L 267.875 337.903 L 268.183 338.195 L 269.106 337.058 L 269.414 336.008 L 269.722 331.119 L 270.03 329.165 L 270.338 328.823 L 271.262 329.552 L 271.569 329.216 L 271.877 328.473 L 272.185 329.697 L 272.493 330.754 L 273.417 327.999 L 273.725 328.561 L 274.033 328.582 L 274.649 331.855 L 274.956 328.91 L 275.88 328.094 L 276.188 325.186 L 276.496 325.012 L 276.804 325.726 L 277.112 324.851 L 277.728 324.603 L 278.035 325.179 L 278.343 324.254 L 278.651 324.786 L 278.959 326.615 L 279.883 325.296 L 280.191 318.81 L 280.499 314.321 L 280.807 314.117 L 281.114 315.035 L 282.038 316.099 L 282.346 319.823 L 282.654 323.445 L 282.962 320.566 L 283.27 326.287 L 284.501 325.697 L 284.809 326.105 L 285.117 324.603 L 285.425 322.257 L 285.733 322.031 L 286.657 316.842 L 286.657 315.734 L 286.965 315.538 L 287.272 316.456 L 287.58 314.663 L 288.504 313.074 L 288.812 312.805 L 289.12 313.563 L 289.428 317.534 L 289.736 317.964 L 290.659 313.621 L 290.967 314.67 L 291.275 314.853 L 291.583 314.853 L 291.891 317.476 L 292.815 317.972 L 293.431 320.114 L 293.738 320.654 L 294.046 320.471 L 294.354 322.774 L 295.278 325.959 L 295.586 325.288 L 295.894 319.509 L 295.894 320.508 L 296.202 321.79 L 297.125 320.107 L 297.433 322.155 L 297.741 321.528 L 298.049 323.838 L 298.357 321.237 L 299.281 319.196 L 299.589 317.644 L 299.896 316.376 L 300.204 311.318 L 300.512 311.318 L 301.436 309.445 L 301.744 311.274 L 302.052 309.423 L 302.36 310.087 M 330.687 291.693 L 330.995 291.693 L 331.918 289.856 L 332.226 289.091 L 332.534 288.319 L 332.842 288.792 L 333.15 287.451 L 333.766 287.087 L 334.074 286.985 L 334.381 284.609 L 334.689 282.255 L 334.997 283.363 L 335.921 283.603 L 336.229 285.411 L 336.537 274.749 L 336.845 269.466 L 337.153 266.288 L 338.076 267.257 L 338.384 272.694 L 338.692 273.015 L 339 267.884 L 339.308 273.386 L 340.54 269.553 L 340.847 275.143 L 341.155 277.11 L 341.463 284.201 L 341.771 291.773 L 342.387 278.56 L 342.695 276.717 L 343.003 272.658 L 343.311 275.376 L 343.619 278.684 L 344.542 278.393 L 344.85 279.748 L 345.158 282.678 L 345.466 290.388 L 345.774 287.065 L 346.698 283.829 L 347.005 284.952 L 347.313 285.761 L 347.621 279.027 L 347.929 276.454 L 348.853 276.454 L 349.469 273.576 L 349.777 271.302 L 350.084 271.907 L 350.392 277.125 L 351.316 280.783 L 351.624 281.956 L 351.932 286.424 L 351.932 281.097 L 352.24 278.91 L 353.163 278.349 L 353.471 274.407 L 353.779 268.897 L 354.087 265.53 L 354.395 263.927 L 355.319 266.769 L 355.627 264.087 L 355.935 266.186 L 356.243 267.622 L 356.55 269.298 L 357.474 268.132 L 357.782 276.972 L 358.09 280.353 L 358.706 282.576 L 359.014 283.698 L 359.937 283.698 L 360.245 282.467 L 360.553 275.157 L 360.861 275.573 L 361.169 274.458 L 361.785 276.163 L 362.093 280.156 L 362.401 279.479 L 362.708 280.412 L 363.016 281.541 L 363.94 284.689 L 364.248 280.091 L 364.556 278.378 L 364.864 274.895 L 365.172 274.224 L 366.095 274.705 L 366.403 271.207 L 366.711 273.481 L 367.019 275.558 L 367.327 276.185 L 368.559 272.832 L 368.866 272.774 L 369.174 272.009 L 369.482 272.942 L 369.79 274.115 L 370.714 272.905 L 370.714 274.611 L 371.022 281.33 L 371.33 280.164 L 371.638 282.124 L 372.561 283.188 L 372.869 280.033 L 373.177 279.231 L 373.485 281.556 L 373.793 281.731 L 374.717 284.529 L 375.025 288.807 L 375.332 286.65 L 375.64 288.552 L 375.948 287.575 L 376.872 286.934 L 377.18 286.497 L 377.796 281.228 L 378.104 279.887 L 378.411 275.077 L 379.335 275.077 L 379.643 275.777 L 379.951 272.053 L 380.259 271.943 L 380.259 271.696 L 381.183 269.05 L 381.49 268.307 L 381.798 266.733 L 382.106 262.105 L 382.414 262.98 L 383.338 257.252 L 383.646 256.858 L 383.954 253.958 L 384.262 253.105 L 384.569 250.627 L 385.493 251.473 L 385.801 254.606 L 386.109 254.235 L 386.417 256.873 L 387.033 257.769 L 387.956 260.597 L 388.264 253.09 L 388.572 252.908 L 388.88 252.886 L 389.188 249.352 L 389.804 248.412 L 390.112 246.094 L 390.42 244.928 L 390.728 243.347 L 391.035 234.288 L 391.959 231.913 L 392.267 238.114 L 392.575 237.356 L 392.883 238.093 L 393.191 239.586 L 394.114 238.588 L 394.422 239.164 L 394.73 239.324 L 395.038 241.212 L 395.346 244.316 L 396.578 241.984 L 396.886 238.209 L 397.193 235.702 L 397.501 231.716 L 397.809 232.547 L 398.733 231.461 L 399.041 233.312 L 399.041 231.891 L 399.349 232.889 L 399.657 239.178 L 400.58 239.9 L 400.888 243.872 L 401.196 244.666 L 401.504 238.887 L 401.812 240.126 L 402.736 235.294 L 403.044 238.668 L 403.351 234.245 L 403.967 234.099 L 404.891 232.736 L 405.199 236.905 L 405.815 233.079 L 406.123 231.803 L 406.431 232.321 L 407.354 230.346 L 407.662 231.76 L 407.97 229.719 L 408.278 230.63 L 408.278 230.047 L 409.202 229.238 L 409.51 230.244 L 409.817 230.193 L 410.125 229.544 L 410.433 230.011 L 411.357 228.845 L 411.665 227.394 L 411.973 226.695 L 412.281 227.832 L 413.512 227.045 L 413.82 226.469 L 414.128 226.6 L 414.436 227.788 L 414.744 228.59 M 443.071 212.557 L 443.995 215.013 L 444.302 216.689 L 444.61 217.308 L 444.918 217.279 L 445.226 219.48 L 445.842 222.585 L 446.15 221.419 L 446.458 218.7 L 446.766 221.404 L 447.074 225.019 L 447.997 221.819 L 448.305 217.44 L 448.613 214.124 L 448.921 208.082 L 450.153 206.399 L 450.46 208.286 L 450.768 208.483 L 451.076 210.961 L 451.384 208.498 L 452.616 211.303 L 452.924 209.904 L 453.232 208.906 L 453.54 210.961 L 453.847 211.026 L 454.771 210.341 L 454.771 208.993 L 455.079 210.611 L 455.387 211.092 L 455.695 215.516 L 456.619 220.763 L 456.926 218.693 L 457.234 215.975 L 457.542 215.494 L 457.85 219.363 L 458.774 219.961 L 459.082 221.572 L 459.39 218.227 L 459.698 219.524 L 460.005 217.767 L 461.237 210.174 L 461.853 211.865 L 462.161 211.435 L 462.469 213.373 L 463.392 217.308 L 463.7 221.681 L 464.008 221.535 L 464.316 222.082 L 464.316 226.155 L 465.24 225.645 L 465.548 221.389 L 465.856 225.536 L 466.163 226.695 L 466.471 230.266 L 467.395 233.866 L 467.703 226.593 L 468.011 228.553 L 468.319 222.271 L 468.627 225.828 L 469.55 221.681 L 469.858 219.334 L 470.166 220.223 L 470.474 219.036 L 471.09 213.504 L 472.322 209.008 L 472.629 207.31 L 472.937 203.345 L 473.245 201.516 L 473.861 205.677 L 474.169 205.86 L 474.477 202.748 L 474.785 202.93 L 475.093 197.719 L 476.016 191.248 L 476.324 189.025 L 476.632 181.701 L 476.94 181.417 L 477.248 177.037 L 478.172 173.248 L 478.48 169.669 L 478.787 177.555 L 479.095 178.116 L 479.403 179.092 L 480.635 174.523 L 480.943 180.236 L 481.251 177.569 L 481.559 188.646 L 481.866 191.379 L 482.79 206.253 L 483.098 191.095 L 483.098 198.616 L 483.406 191.321 L 483.714 188.923 L 484.638 184.245 L 484.946 186.38 L 485.253 186.409 L 485.561 196.896 L 485.869 204.198 L 486.793 203.899 L 487.101 191.394 L 487.409 189.514 L 487.717 191.306 L 488.025 184.121 L 488.948 179.464 L 489.256 179.449 L 489.564 183.21 L 490.18 185.979 L 490.488 191.066 L 491.719 186.919 L 492.027 183.866 L 492.335 183.713 L 492.643 188.566 L 493.259 186.773 L 493.567 183.363 L 493.875 179.952 L 494.183 177.285 L 494.49 171.79 L 495.414 163.679 L 495.722 162.353 L 496.03 163.307 L 496.338 170.828 L 496.646 169.021 L 497.569 169.844 L 497.877 172.694 L 498.185 174.334 L 498.493 179.027 L 498.801 185.768 L 500.033 190.665 L 500.341 192.195 L 500.649 188.005 L 500.956 188.646 L 501.264 194.163 L 501.88 180.309 L 502.188 171.943 L 502.496 170.559 L 502.804 166.011 L 503.112 156.122 L 504.035 157.587 L 504.343 155.947 L 504.651 173.16 L 504.959 175.572 L 505.267 177.351 L 506.191 167.95 L 506.499 173.78 L 506.807 171.717 L 507.114 168.737 L 507.422 168.547 L 508.346 168.671 L 508.962 174.698 L 509.27 174.042 L 509.578 169.917 L 509.886 171.98 L 510.809 172.351 L 511.117 167.614 L 511.425 175.594 L 511.425 182.926 L 511.733 183.363 L 512.657 187.269 L 512.965 180.295 L 513.272 183.253 L 513.58 188.617 L 513.888 190.417 L 514.812 194.739 L 515.12 189.273 L 515.428 196.211 L 516.044 198.703 L 516.967 189.557 L 517.275 191.685 L 517.583 185.126 L 518.199 180.951 L 518.507 179.661 L 519.431 177.249 L 519.738 178.75 L 520.046 180.105 L 520.354 178.961 L 520.662 176.804 L 521.278 178.101 L 521.586 180.309 L 521.894 186.591 L 522.202 187.502 L 522.51 185.986 L 523.433 185.119 L 523.741 175.106 L 524.049 174.749 L 524.357 173.211 L 524.665 169.655 L 525.896 167.396 L 526.204 170.231 L 526.512 168.423 L 526.82 168.511 M 556.071 12.826 L 556.379 5.036 L 556.687 8.687 L 556.995 1.858 L 558.226 0 L 558.226 5.677 L 558.534 7.309 L 558.842 9.809 L 559.15 22.591 L 560.074 40.883 L 560.381 19.334 L 560.689 20.325 L 560.997 35.556 L 561.305 46.094 L 562.229 47.027 L 562.537 55.349 L 562.845 19.115 L 563.153 20.791 L 563.46 24.217 L 564.384 38.078 L 565 39.426', lineWidth: 1, lineJoin: 'round', stroke: '#54BECC', cursor: 'pointer', }, }); + +const path2 = new Path({ + style: { + d: 'M 100 100 L 200 100 L 200 200 z M 300 100 L 300 200 L 200 300 z', + // d: 'M 100 100 L 200 100 L 200 200 M 300 100 L 300 200 L 200 300', + fill: 'red', + // stroke: 'red', + }, +}); path.addEventListener('mouseenter', () => { path.style.stroke = 'red'; }); @@ -43,6 +51,7 @@ path.addEventListener('mouseleave', () => { canvas.addEventListener(CanvasEvent.READY, () => { canvas.appendChild(path); + canvas.appendChild(path2); }); // stats diff --git a/site/package.json b/site/package.json index 8788b8712..e4273ec2f 100644 --- a/site/package.json +++ b/site/package.json @@ -29,7 +29,7 @@ "@antv/g-plugin-image-loader": "^1.3.1", "@antv/g6": "^4.5.2", "@antv/react-g": "^1.8.79", - "@antv/util": "^3.3.1", + "@antv/util": "^3.3.4", "@antv/webgpu-graph": "^1.0.0", "@naoak/workerize-transferable": "^0.1.0", "@observablehq/plot": "0.5.2",