@treasuryspatial/map-kit 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mapThreeLayer.d.ts","sourceRoot":"","sources":["../src/mapThreeLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAsUhF"}
1
+ {"version":3,"file":"mapThreeLayer.d.ts","sourceRoot":"","sources":["../src/mapThreeLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA8VhF"}
@@ -22,6 +22,69 @@ export function createMapThreeLayer(options) {
22
22
  let errorCount = 0;
23
23
  let hasRenderable = false;
24
24
  let originResolved = false;
25
+ let didPrerender = false;
26
+ let lastMatrix = null;
27
+ const renderOffscreen = () => {
28
+ if (renderDisabled)
29
+ return;
30
+ if (!renderer || !scene || !camera || !rootGroup || !renderTarget)
31
+ return;
32
+ if (!hasRenderable)
33
+ return;
34
+ if (lastMatrix) {
35
+ applyMatrix(lastMatrix);
36
+ }
37
+ if (!mercatorOrigin && mapRef && !originResolved) {
38
+ try {
39
+ const center = mapRef.getCenter();
40
+ mercatorOrigin = mapboxgl.MercatorCoordinate.fromLngLat(center);
41
+ meterScale = mercatorOrigin.meterInMercatorCoordinateUnits();
42
+ originResolved = true;
43
+ if (debug) {
44
+ log('origin fallback', {
45
+ origin: { lng: center.lng, lat: center.lat },
46
+ mercator: { x: mercatorOrigin.x, y: mercatorOrigin.y, z: mercatorOrigin.z },
47
+ meterScale,
48
+ });
49
+ }
50
+ }
51
+ catch (err) {
52
+ logError('origin fallback failed', err);
53
+ }
54
+ }
55
+ if (mercatorOrigin && lastMatrix && camera) {
56
+ const m = new THREE.Matrix4().fromArray(lastMatrix);
57
+ const translate = new THREE.Matrix4().makeTranslation(mercatorOrigin.x, mercatorOrigin.y, (mercatorOrigin.z ?? 0) + zOffset * meterScale);
58
+ const scale = new THREE.Matrix4().makeScale(meterScale, -meterScale, meterScale);
59
+ const l = new THREE.Matrix4().multiplyMatrices(translate, scale);
60
+ camera.projectionMatrix = m.multiply(l);
61
+ if ('projectionMatrixInverse' in camera) {
62
+ camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();
63
+ }
64
+ }
65
+ const canvas = mapRef?.getCanvas();
66
+ if (canvas && (canvas.width !== targetWidth || canvas.height !== targetHeight)) {
67
+ targetWidth = canvas.width;
68
+ targetHeight = canvas.height;
69
+ renderTarget.setSize(targetWidth, targetHeight);
70
+ log('renderTarget resized', { width: targetWidth, height: targetHeight });
71
+ }
72
+ renderer.setRenderTarget(renderTarget);
73
+ renderer.resetState();
74
+ const gl = renderer.getContext();
75
+ gl.disable(gl.SCISSOR_TEST);
76
+ gl.disable(gl.STENCIL_TEST);
77
+ gl.colorMask(true, true, true, true);
78
+ gl.depthMask(true);
79
+ renderer.setViewport(0, 0, targetWidth, targetHeight);
80
+ renderer.setClearColor(0x000000, 0);
81
+ renderer.setClearAlpha(0);
82
+ renderer.clear(true, true, true);
83
+ checkFramebuffer(gl, 'prerender');
84
+ renderer.render(scene, camera);
85
+ logGlError(gl, 'prerender');
86
+ renderer.setRenderTarget(null);
87
+ };
25
88
  const log = (...args) => {
26
89
  if (!debug)
27
90
  return;
@@ -159,53 +222,9 @@ export function createMapThreeLayer(options) {
159
222
  if (!hasRenderable)
160
223
  return;
161
224
  try {
162
- camera.projectionMatrix = new THREE.Matrix4().fromArray(matrix);
163
- if (!mercatorOrigin && mapRef && !originResolved) {
164
- try {
165
- const center = mapRef.getCenter();
166
- mercatorOrigin = mapboxgl.MercatorCoordinate.fromLngLat(center);
167
- meterScale = mercatorOrigin.meterInMercatorCoordinateUnits();
168
- originResolved = true;
169
- if (debug) {
170
- log('origin fallback', {
171
- origin: { lng: center.lng, lat: center.lat },
172
- mercator: { x: mercatorOrigin.x, y: mercatorOrigin.y, z: mercatorOrigin.z },
173
- meterScale,
174
- });
175
- }
176
- }
177
- catch (err) {
178
- logError('origin fallback failed', err);
179
- }
180
- }
181
- if (mercatorOrigin) {
182
- const translate = new THREE.Matrix4().makeTranslation(mercatorOrigin.x, mercatorOrigin.y, (mercatorOrigin.z ?? 0) + zOffset * meterScale);
183
- const scale = new THREE.Matrix4().makeScale(meterScale, -meterScale, meterScale);
184
- rootGroup.matrix = new THREE.Matrix4().multiplyMatrices(translate, scale);
185
- rootGroup.matrixWorldNeedsUpdate = true;
186
- }
187
- const canvas = mapRef?.getCanvas();
188
- if (canvas && (canvas.width !== targetWidth || canvas.height !== targetHeight)) {
189
- targetWidth = canvas.width;
190
- targetHeight = canvas.height;
191
- renderTarget.setSize(targetWidth, targetHeight);
192
- log('renderTarget resized', { width: targetWidth, height: targetHeight });
193
- }
194
- renderer.setRenderTarget(renderTarget);
195
- renderer.resetState();
196
- const gl = renderer.getContext();
197
- gl.disable(gl.SCISSOR_TEST);
198
- gl.disable(gl.STENCIL_TEST);
199
- gl.colorMask(true, true, true, true);
200
- gl.depthMask(true);
201
- renderer.setViewport(0, 0, targetWidth, targetHeight);
202
- renderer.setClearColor(0x000000, 0);
203
- renderer.setClearAlpha(0);
204
- renderer.clear(true, true, true);
205
- checkFramebuffer(gl, 'prerender');
206
- renderer.render(scene, camera);
207
- logGlError(gl, 'prerender');
208
- renderer.setRenderTarget(null);
225
+ lastMatrix = matrix;
226
+ renderOffscreen();
227
+ didPrerender = true;
209
228
  }
210
229
  catch (err) {
211
230
  errorCount += 1;
@@ -216,7 +235,7 @@ export function createMapThreeLayer(options) {
216
235
  }
217
236
  }
218
237
  },
219
- render: (gl) => {
238
+ render: (gl, matrix) => {
220
239
  if (renderDisabled)
221
240
  return;
222
241
  if (!renderer || !screenScene || !screenCamera)
@@ -224,6 +243,13 @@ export function createMapThreeLayer(options) {
224
243
  if (!hasRenderable)
225
244
  return;
226
245
  try {
246
+ if (matrix) {
247
+ lastMatrix = matrix;
248
+ }
249
+ if (!didPrerender) {
250
+ renderOffscreen();
251
+ }
252
+ didPrerender = false;
227
253
  renderer.resetState();
228
254
  gl.disable(gl.DEPTH_TEST);
229
255
  gl.depthMask(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@treasuryspatial/map-kit",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "main": "./dist/index.js",