From 05e041dbc01346eab6be42b737c188197bf980e1 Mon Sep 17 00:00:00 2001 From: fuzhenn Date: Thu, 20 Nov 2025 17:28:45 +0800 Subject: [PATCH 1/3] fix: fixing spec of default-icon in webgpu --- packages/gl/src/map/MapGPURenderer.ts | 1 - packages/gl/src/reshader/Geometry.ts | 3 +++ packages/gl/src/reshader/shader/Shader.ts | 3 +++ .../vt/src/layer/plugins/painters/CollisionPainter.js | 10 ++++++++-- packages/vt/test/ignore-gpu-blacklist.js | 2 -- 5 files changed, 14 insertions(+), 5 deletions(-) delete mode 100644 packages/vt/test/ignore-gpu-blacklist.js diff --git a/packages/gl/src/map/MapGPURenderer.ts b/packages/gl/src/map/MapGPURenderer.ts index 745e57fe2b..803b3d4896 100644 --- a/packages/gl/src/map/MapGPURenderer.ts +++ b/packages/gl/src/map/MapGPURenderer.ts @@ -20,7 +20,6 @@ async function initGPUDevice() { export default class MapGPURenderer extends MapGLRenderer { device: any; - gpuDevice: GPUDevice; drawLayers(layers: Layer[], framestamp: number) { const updated = super.drawLayers(layers, framestamp); diff --git a/packages/gl/src/reshader/Geometry.ts b/packages/gl/src/reshader/Geometry.ts index 12859d05cd..94210945a0 100644 --- a/packages/gl/src/reshader/Geometry.ts +++ b/packages/gl/src/reshader/Geometry.ts @@ -89,6 +89,9 @@ export default class Geometry { } static padGPUBufferAlignment(array: TypedArray, vertexCount: number): TypedArray { + if (vertexCount === 0) { + return array; + } const itemBytes = array.byteLength / vertexCount; if (itemBytes % 4 === 0) { return array; diff --git a/packages/gl/src/reshader/shader/Shader.ts b/packages/gl/src/reshader/shader/Shader.ts index 6280d5c8c4..a2a82beb58 100644 --- a/packages/gl/src/reshader/shader/Shader.ts +++ b/packages/gl/src/reshader/shader/Shader.ts @@ -595,6 +595,9 @@ export default class GPUShader extends GLShader { } } const commands = this.gpuCommands; + if (!commands) { + return; + } for (let i = 0; i < commands.length; i++) { if (!commands[i]) { continue; diff --git a/packages/vt/src/layer/plugins/painters/CollisionPainter.js b/packages/vt/src/layer/plugins/painters/CollisionPainter.js index d265f37cef..d76133482e 100644 --- a/packages/vt/src/layer/plugins/painters/CollisionPainter.js +++ b/packages/vt/src/layer/plugins/painters/CollisionPainter.js @@ -2,6 +2,8 @@ import * as maptalks from 'maptalks'; import { reshader, vec4 } from '@maptalks/gl'; import collisionVert from './glsl/collision.vert'; import collisionFrag from './glsl/collision.frag'; +import collisionWGSLVert from './wgsl/collision_vert.wgsl'; +import collisionWGSLFrag from './wgsl/collision_frag.wgsl'; import BasicPainter from './BasicPainter'; import { clamp, isNil, getUniqueIds } from '../Util'; import CollisionGroup from './CollisionGroup'; @@ -810,13 +812,14 @@ export default class CollisionPainter extends BasicPainter { primitive: 'lines' } ); + geometry.generateBuffers(this.regl); this._collisionMesh = new reshader.Mesh(geometry); this._collisionScene = new reshader.Scene(); this._collisionScene.addMesh(this._collisionMesh); } const geometry = this._collisionMesh.geometry; geometry.updateData('aPosition', new Float32Array(aPosition)); - geometry.updateData('aVisible', new Uint8Array(aVisible)); + geometry.updateData('aVisible', new Float32Array(aVisible)); geometry.setElements(indices); this._collisionRenderer.render( @@ -847,7 +850,10 @@ export default class CollisionPainter extends BasicPainter { } }; this._collisionShader = new reshader.MeshShader({ - vert: collisionVert, frag: collisionFrag, + vert: collisionVert, + frag: collisionFrag, + wgslVert: collisionWGSLVert, + wgslFrag: collisionWGSLFrag, uniforms: [ 'size' ], diff --git a/packages/vt/test/ignore-gpu-blacklist.js b/packages/vt/test/ignore-gpu-blacklist.js deleted file mode 100644 index da5e0974de..0000000000 --- a/packages/vt/test/ignore-gpu-blacklist.js +++ /dev/null @@ -1,2 +0,0 @@ -const { app } = require('electron'); -app.commandLine.appendSwitch('ignore-gpu-blacklist'); From f6eba1a96566ed996646f13a212f2e75624addb0 Mon Sep 17 00:00:00 2001 From: fuzhenn Date: Mon, 24 Nov 2025 11:21:49 +0800 Subject: [PATCH 2/3] chore: change vt specs to gpu files --- build/transform-to-gpu.js | 19 +++++++++++++++---- packages/vt/package.json | 6 ++++-- .../plugins/painters/wgsl/marker_vert.wgsl | 2 +- .../vt/test/1-privileged-specs/test.spec.js | 2 +- packages/vt/test/integration/gpu.js | 1 + .../vt/test/integration/integration.spec.js | 15 ++++++++++++--- packages/vt/test/integration/terrain.spec.js | 15 +++++++++++++-- packages/vt/test/integration/vector.spec.js | 14 +++++++++++--- packages/vt/test/specs/edit.spec.js | 8 +++++++- packages/vt/test/specs/highlight.spec.js | 9 +++++++-- packages/vt/test/specs/layer.spec.js | 7 ++++++- packages/vt/test/specs/picking.spec.js | 10 ++++++++-- packages/vt/test/specs/postprocess.spec.js | 9 +++++++-- packages/vt/test/specs/update.fn-type.spec.js | 7 ++++++- packages/vt/test/specs/update.lights.spec.js | 9 +++++++-- packages/vt/test/specs/update.spec.js | 8 +++++--- packages/vt/test/specs/update.terrain.spec.js | 10 ++++++++-- packages/vt/test/specs/update.vector.spec.js | 9 +++++++-- .../test/specs/update.vector.symbol.spec.js | 9 +++++++-- packages/vt/test/specs/utils.spec.js | 9 ++++++++- packages/vt/test/specs/vector.event.spec.js | 10 ++++++++-- packages/vt/test/specs/vector.json.spec.js | 7 ++++++- packages/vt/test/unit/Layer.GeoJSON.spec.js | 4 ++-- packages/vt/test/unit/compress.spec.js | 2 +- 24 files changed, 158 insertions(+), 43 deletions(-) create mode 100644 packages/vt/test/integration/gpu.js diff --git a/build/transform-to-gpu.js b/build/transform-to-gpu.js index 657165742f..324b11b965 100644 --- a/build/transform-to-gpu.js +++ b/build/transform-to-gpu.js @@ -12,14 +12,25 @@ fs.readFile(packagePath, "utf8", function (err, data) { return; } const modulePath = path.join(curPath, obj.module); - fs.readFile(modulePath, "utf8", function (err, data) { + replace(modulePath); + const mainPath = path.join(curPath, obj.main); + replace(mainPath); +}); + +function replace(filePath) { + fs.readFile(filePath, "utf8", function (err, data) { if (err) { return console.log(err); } - const result = data.replace(/@maptalks\/gl"/g, "@maptalks/gpu\"").replace(/"@maptalks\/gltf-layer"/g, "\"@maptalks/gltf-layer/dist/maptalks.gltf.gpu.es.js\""); - const gpuFileName = modulePath.replace(/\.es\.js$/, ".gpu.es.js"); + const result = data.replaceAll("@maptalks/gl", "@maptalks/gpu").replace(/"@maptalks\/gltf-layer"/g, "\"@maptalks/gltf-layer/dist/maptalks.gltf.gpu.es.js\""); + let gpuFileName; + if (filePath.indexOf('es.js') > 0) { + gpuFileName = filePath.replace(/\.es\.js$/, ".gpu.es.js"); + } else { + gpuFileName = filePath.replace(/\.js$/, ".gpu.js"); + } fs.writeFile(gpuFileName, result, "utf8", function (err) { if (err) return console.log(err); }); }); -}); +} diff --git a/packages/vt/package.json b/packages/vt/package.json index d7707f2f9d..dd780f830d 100644 --- a/packages/vt/package.json +++ b/packages/vt/package.json @@ -20,8 +20,10 @@ "build": "npm run clean && npm run lint && rollup --environment BUILD:production -c build/rollup.config.js && npm run transform-gpu", "build-dev": "rollup -c build/rollup.config.js", "test": "electron-mocha -t 8000 --retries 3 --main ../ignore-gpu-blacklist.js --show-window --renderer ./test/**/*.spec.js -g \"\\btext\\b|ciskip\" --invert", - "tdd": "electron-mocha -t 8000 --main ../ignore-gpu-blacklist.js --interactive --renderer ./test/**/*.spec.js -g", - "pretest": "npm run build", + "tdd": "npm run transform-gpu && electron-mocha -t 8000 --main ../ignore-gpu-blacklist.js --interactive --renderer ./test/**/*.spec.js -g", + "test-gpu": "npm run transform-gpu && electron-mocha -t 8000 --preload ./test/integration/gpu.js --show-window --renderer ./test/**/*.spec.js -g", + "tdd-gpu": "npm run transform-gpu && electron-mocha -t 8000 --preload ./test/integration/gpu.js --interactive --renderer ./test/integration/integration.spec.js -g", + "pretest": "npm run build && npm run transform-gpu", "preversion": "npm run pretest", "transform-gpu": "node ../../build/transform-to-gpu" }, diff --git a/packages/vt/src/layer/plugins/painters/wgsl/marker_vert.wgsl b/packages/vt/src/layer/plugins/painters/wgsl/marker_vert.wgsl index 74aa0eb004..c986682f76 100644 --- a/packages/vt/src/layer/plugins/painters/wgsl/marker_vert.wgsl +++ b/packages/vt/src/layer/plugins/painters/wgsl/marker_vert.wgsl @@ -321,7 +321,7 @@ fn main(vertexInput: VertexInput) -> VertexOutput { output.vHalo = f32(vertexInput.aShape.w) % 2.0; output.vTextSize = myTextSize; #ifdef ENABLE_COLLISION - output.vOpacity = vertexInput.aOpacity / 255.0; + output.vOpacity = f32(vertexInput.aOpacity) / 255.0; #else output.vOpacity = 1.0; #endif diff --git a/packages/vt/test/1-privileged-specs/test.spec.js b/packages/vt/test/1-privileged-specs/test.spec.js index 7f49316e36..284eeb2988 100644 --- a/packages/vt/test/1-privileged-specs/test.spec.js +++ b/packages/vt/test/1-privileged-specs/test.spec.js @@ -3,7 +3,7 @@ const maptalks = require('maptalks'); const { PolygonLayer -} = require('../../dist/maptalks.vt.js'); +} = require('../../dist/maptalks.vt.gpu.js'); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/integration/gpu.js b/packages/vt/test/integration/gpu.js new file mode 100644 index 0000000000..51c059c435 --- /dev/null +++ b/packages/vt/test/integration/gpu.js @@ -0,0 +1 @@ +window.mapRenderer = 'gpu'; diff --git a/packages/vt/test/integration/integration.spec.js b/packages/vt/test/integration/integration.spec.js index 64dad4c439..3ff7669415 100644 --- a/packages/vt/test/integration/integration.spec.js +++ b/packages/vt/test/integration/integration.spec.js @@ -4,8 +4,8 @@ const assert = require('assert'); const path = require('path'); const fs = require('fs'); const { match, readSpecs, writeImageData, hasOwn } = require('./util'); -const { GroupGLLayer } = require('@maptalks/gl'); -const { GeoJSONVectorTileLayer, VectorTileLayer } = require('../../dist/maptalks.vt.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); +const { GeoJSONVectorTileLayer, VectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); const startServer = require('../specs/server.js'); const PORT = 4398; @@ -30,8 +30,11 @@ const DEFAULT_VIEW = { } }; +const mapRenderer = window.mapRenderer; + +const isWebGPU = mapRenderer === 'gpu'; maptalks.Map.mergeOptions({ - renderer: ['gl', 'gpu'] + renderer: mapRenderer || 'gl' }); const DIFF_LIMIT = 5; @@ -111,6 +114,12 @@ describe('vector tile integration specs', () => { done(); } } else if (!ended && checked) { + if (isWebGPU) { + // webgpu 模式下不比较渲染结果 + ended = true; + done(); + return; + } const canvas = TEST_CANVAS; canvas.width = mapCanvas.width; canvas.height = mapCanvas.height; diff --git a/packages/vt/test/integration/terrain.spec.js b/packages/vt/test/integration/terrain.spec.js index fb14ec4a2b..bcc1f6610b 100644 --- a/packages/vt/test/integration/terrain.spec.js +++ b/packages/vt/test/integration/terrain.spec.js @@ -2,8 +2,8 @@ const maptalks = require('maptalks'); const assert = require('assert'); const path = require('path'); const { match, readSpecs, writeImageData, hasOwn } = require('./util'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); const startServer = require('../specs/server.js'); const PORT = 4398; @@ -25,6 +25,13 @@ const DEFAULT_VIEW = { const TEST_CANVAS = document.createElement('canvas'); +const mapRenderer = window.mapRenderer; + +const isWebGPU = mapRenderer === 'gpu'; +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); + describe('vector tile on terrain integration specs', () => { let map, container, server; const containerSize = 128; @@ -95,6 +102,10 @@ describe('vector tile on terrain integration specs', () => { const expectedPath = style.expected; if (!ended && count >= limit) { ended = true; + if (isWebGPU) { + done(); + return; + } const canvas = TEST_CANVAS; canvas.width = mapCanvas.width; diff --git a/packages/vt/test/integration/vector.spec.js b/packages/vt/test/integration/vector.spec.js index 3c63ee9b9b..410fe9dc8b 100644 --- a/packages/vt/test/integration/vector.spec.js +++ b/packages/vt/test/integration/vector.spec.js @@ -3,8 +3,8 @@ const assert = require('assert'); const path = require('path'); const fs = require('fs'); const { match, readSpecs, hasOwn } = require('./util'); -const { PointLayer, LineStringLayer, PolygonLayer, ExtrudePolygonLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { PointLayer, LineStringLayer, PolygonLayer, ExtrudePolygonLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); const DEFAULT_VIEW = { center: [0, 0], @@ -26,8 +26,11 @@ const TEST_CANVAS = document.createElement('canvas'); const DIFF_LIMIT = 5; +const mapRenderer = window.mapRenderer; + +const isWebGPU = mapRenderer === 'gpu'; maptalks.Map.mergeOptions({ - renderer: ['gl', 'gpu'] + renderer: mapRenderer || 'gl' }); describe('vector 3d integration specs', () => { @@ -70,6 +73,11 @@ describe('vector 3d integration specs', () => { } const doneFn = () => { + if (isWebGPU) { + done(); + return; + } + const mapCanvas = map.getRenderer().canvas; // const canvas = map.getRenderer().canvas; const canvas = TEST_CANVAS; diff --git a/packages/vt/test/specs/edit.spec.js b/packages/vt/test/specs/edit.spec.js index c733782126..fb4e3a41b2 100644 --- a/packages/vt/test/specs/edit.spec.js +++ b/packages/vt/test/specs/edit.spec.js @@ -1,7 +1,7 @@ const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { PolygonLayer } = require('../../dist/maptalks.vt.js'); +const { PolygonLayer } = require('../../dist/maptalks.vt.gpu.js'); const happen = require('happen'); const DEFAULT_VIEW = { @@ -28,6 +28,12 @@ function GET_PAGE_POSITION(obj) { return new maptalks.Point(rect['left'] + docEl['scrollLeft'], rect['top'] + docEl['scrollTop']); } +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); + describe('edit specs', () => { let container, eventContainer, map; before(() => { diff --git a/packages/vt/test/specs/highlight.spec.js b/packages/vt/test/specs/highlight.spec.js index 7acb620b93..a8309c9322 100644 --- a/packages/vt/test/specs/highlight.spec.js +++ b/packages/vt/test/specs/highlight.spec.js @@ -2,9 +2,14 @@ const path = require('path'); const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/layer.spec.js b/packages/vt/test/specs/layer.spec.js index c88fa8d6b5..e26a9c5722 100644 --- a/packages/vt/test/specs/layer.spec.js +++ b/packages/vt/test/specs/layer.spec.js @@ -1,7 +1,12 @@ const assert = require('assert'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer, VectorTileLayer } = require('../../dist/maptalks.vt.js'); +const { GeoJSONVectorTileLayer, VectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/picking.spec.js b/packages/vt/test/specs/picking.spec.js index a0e95d5db8..691a9c5e6b 100644 --- a/packages/vt/test/specs/picking.spec.js +++ b/packages/vt/test/specs/picking.spec.js @@ -5,16 +5,22 @@ const maptalks = require('maptalks'); const startServer = require('./server.js'); const PORT = 4398; +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); + const { GeoJSONVectorTileLayer, PointLayer, LineStringLayer, VectorTileLayer, PolygonLayer -} = require('../../dist/maptalks.vt.js'); +} = require('../../dist/maptalks.vt.gpu.js'); const { GroupGLLayer -} = require('@maptalks/gl'); +} = require('@maptalks/gpu'); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/postprocess.spec.js b/packages/vt/test/specs/postprocess.spec.js index c681fc184f..3700d9655b 100644 --- a/packages/vt/test/specs/postprocess.spec.js +++ b/packages/vt/test/specs/postprocess.spec.js @@ -2,9 +2,14 @@ const path = require('path'); const assert = require('assert'); const { readPixel, compareExpected } = require('../common/Util'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/update.fn-type.spec.js b/packages/vt/test/specs/update.fn-type.spec.js index 3f3b95d0e7..1a12c29b24 100644 --- a/packages/vt/test/specs/update.fn-type.spec.js +++ b/packages/vt/test/specs/update.fn-type.spec.js @@ -1,8 +1,13 @@ const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/update.lights.spec.js b/packages/vt/test/specs/update.lights.spec.js index 43af335172..c7f0e63d64 100644 --- a/packages/vt/test/specs/update.lights.spec.js +++ b/packages/vt/test/specs/update.lights.spec.js @@ -2,9 +2,14 @@ const path = require('path'); const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/update.spec.js b/packages/vt/test/specs/update.spec.js index d565075f4e..306647975f 100644 --- a/packages/vt/test/specs/update.spec.js +++ b/packages/vt/test/specs/update.spec.js @@ -2,13 +2,15 @@ const path = require('path'); const assert = require('assert'); const { readPixel, compareExpected } = require('../common/Util'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer, PolygonLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer, PolygonLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); const startServer = require('./server.js'); const PORT = 4398; +const mapRenderer = window.mapRenderer; + maptalks.Map.mergeOptions({ - renderer: ['gl', 'gpu'] + renderer: mapRenderer || 'gl' }); const DEFAULT_VIEW = { diff --git a/packages/vt/test/specs/update.terrain.spec.js b/packages/vt/test/specs/update.terrain.spec.js index 68495953b0..9744ccdeea 100644 --- a/packages/vt/test/specs/update.terrain.spec.js +++ b/packages/vt/test/specs/update.terrain.spec.js @@ -1,11 +1,17 @@ const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); const startServer = require('./server.js'); const PORT = 4398; +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); + const DEFAULT_VIEW = { center: [91.14478,29.658272], zoom: 12, diff --git a/packages/vt/test/specs/update.vector.spec.js b/packages/vt/test/specs/update.vector.spec.js index eaac564103..2c1dd72f52 100644 --- a/packages/vt/test/specs/update.vector.spec.js +++ b/packages/vt/test/specs/update.vector.spec.js @@ -2,9 +2,14 @@ const path = require('path'); const assert = require('assert'); const { readPixel, compareExpected } = require('../common/Util'); const maptalks = require('maptalks'); -const { PointLayer, LineStringLayer, PolygonLayer, ExtrudePolygonLayer, GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { PointLayer, LineStringLayer, PolygonLayer, ExtrudePolygonLayer, GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/update.vector.symbol.spec.js b/packages/vt/test/specs/update.vector.symbol.spec.js index d1d5260ee7..cac29475fb 100644 --- a/packages/vt/test/specs/update.vector.symbol.spec.js +++ b/packages/vt/test/specs/update.vector.symbol.spec.js @@ -1,9 +1,14 @@ const assert = require('assert'); const { readPixel, } = require('../common/Util'); const maptalks = require('maptalks'); -const { PointLayer, LineStringLayer, PolygonLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { PointLayer, LineStringLayer, PolygonLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/specs/utils.spec.js b/packages/vt/test/specs/utils.spec.js index 0604574c5a..074e9873a0 100644 --- a/packages/vt/test/specs/utils.spec.js +++ b/packages/vt/test/specs/utils.spec.js @@ -1,5 +1,12 @@ const assert = require('assert'); -const { PackUtil, FilterUtil } = require('../../dist/maptalks.vt.js'); +const maptalks = require('maptalks'); +const { PackUtil, FilterUtil } = require('../../dist/maptalks.vt.gpu.js'); + +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); describe('util specs', () => { it('rtl text conversion', () => { diff --git a/packages/vt/test/specs/vector.event.spec.js b/packages/vt/test/specs/vector.event.spec.js index 9f3a48c005..cb168df96c 100644 --- a/packages/vt/test/specs/vector.event.spec.js +++ b/packages/vt/test/specs/vector.event.spec.js @@ -1,10 +1,16 @@ const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { PointLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { PointLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); const happen = require('happen'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); + function GET_PAGE_POSITION(obj) { const docEl = document.documentElement; const rect = obj.getBoundingClientRect(); diff --git a/packages/vt/test/specs/vector.json.spec.js b/packages/vt/test/specs/vector.json.spec.js index 54d313d704..3fdc6f4fb6 100644 --- a/packages/vt/test/specs/vector.json.spec.js +++ b/packages/vt/test/specs/vector.json.spec.js @@ -1,8 +1,13 @@ const assert = require('assert'); const { readPixel } = require('../common/Util'); const maptalks = require('maptalks'); -const { PointLayer, LineStringLayer, PolygonLayer } = require('../../dist/maptalks.vt.js'); +const { PointLayer, LineStringLayer, PolygonLayer } = require('../../dist/maptalks.vt.gpu.js'); +const mapRenderer = window.mapRenderer; + +maptalks.Map.mergeOptions({ + renderer: mapRenderer || 'gl' +}); const DEFAULT_VIEW = { center: [0, 0], diff --git a/packages/vt/test/unit/Layer.GeoJSON.spec.js b/packages/vt/test/unit/Layer.GeoJSON.spec.js index 043b72330d..5d3171259c 100644 --- a/packages/vt/test/unit/Layer.GeoJSON.spec.js +++ b/packages/vt/test/unit/Layer.GeoJSON.spec.js @@ -1,8 +1,8 @@ const maptalks = require('maptalks'); const path = require('path'); const assert = require('assert'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); -const { GroupGLLayer } = require('@maptalks/gl'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); +const { GroupGLLayer } = require('@maptalks/gpu'); // const deepEqual = require('fast-deep-equal'); const points = { diff --git a/packages/vt/test/unit/compress.spec.js b/packages/vt/test/unit/compress.spec.js index 19a9a137b6..22e26f1926 100644 --- a/packages/vt/test/unit/compress.spec.js +++ b/packages/vt/test/unit/compress.spec.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.js'); +const { GeoJSONVectorTileLayer } = require('../../dist/maptalks.vt.gpu.js'); const STYLE = [ { From 012ab394cd21c5b8a9469bec4013f1e9c43d308d Mon Sep 17 00:00:00 2001 From: fuzhenn Date: Mon, 24 Nov 2025 14:03:28 +0800 Subject: [PATCH 3/3] fix: missed wgsl files --- .../plugins/painters/wgsl/collision_frag.wgsl | 10 ++++++ .../plugins/painters/wgsl/collision_vert.wgsl | 31 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 packages/vt/src/layer/plugins/painters/wgsl/collision_frag.wgsl create mode 100644 packages/vt/src/layer/plugins/painters/wgsl/collision_vert.wgsl diff --git a/packages/vt/src/layer/plugins/painters/wgsl/collision_frag.wgsl b/packages/vt/src/layer/plugins/painters/wgsl/collision_frag.wgsl new file mode 100644 index 0000000000..4de2f152cd --- /dev/null +++ b/packages/vt/src/layer/plugins/painters/wgsl/collision_frag.wgsl @@ -0,0 +1,10 @@ +struct VertexOutput { + @location($i) vColor: vec4f, +}; + +@fragment +fn main( + input : VertexOutput, +) -> @location(0) vec4f { + return input.vColor; +} diff --git a/packages/vt/src/layer/plugins/painters/wgsl/collision_vert.wgsl b/packages/vt/src/layer/plugins/painters/wgsl/collision_vert.wgsl new file mode 100644 index 0000000000..7ce98505d0 --- /dev/null +++ b/packages/vt/src/layer/plugins/painters/wgsl/collision_vert.wgsl @@ -0,0 +1,31 @@ +struct Uniforms { + size: vec2f, +}; + +@binding($b) @group(0) var uniforms: Uniforms; + +struct VertexInput { + @location($i) aPosition: vec2f, + @location($i) aVisible: f32, +}; + +struct VertexOutput { + @builtin(position) position: vec4f, + @location($o) vColor: vec4f, +}; + +@vertex +fn main(vertexInput: VertexInput) -> VertexOutput { + var vertexOutput: VertexOutput; + + let uv = (vertexInput.aPosition / uniforms.size - 0.5) * 2.0 * vec2f(1.0, -1.0); + vertexOutput.position = vec4f(uv, 0.0, 1.0); + + vertexOutput.vColor = mix( + vec4f(1.0, 0.0, 0.0, 1.5) * 0.5, + vec4f(0.0, 1.0, 0.0, 1.0) * 0.4, + vertexInput.aVisible + ); + + return vertexOutput; +}