@xeokit/xeokit-sdk 2.6.85-renderers-refactor-v2 → 2.6.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/xeokit-sdk.cjs.js +44618 -13007
- package/dist/xeokit-sdk.es.js +44617 -13008
- package/dist/xeokit-sdk.es5.js +3488 -1387
- package/dist/xeokit-sdk.min.cjs.js +8 -8
- package/dist/xeokit-sdk.min.es.js +8 -8
- package/dist/xeokit-sdk.min.es5.js +7 -7
- package/package.json +1 -1
- package/src/plugins/lib/html/MenuEvent.js +2 -2
- package/src/viewer/Viewer.js +103 -55
- package/src/viewer/scene/canvas/Canvas.js +43 -3
- package/src/viewer/scene/geometry/ReadableGeometry.js +25 -0
- package/src/viewer/scene/lights/CubeTexture.js +13 -0
- package/src/viewer/scene/lights/DirLight.js +1 -2
- package/src/viewer/scene/lights/PointLight.js +1 -2
- package/src/viewer/scene/materials/Texture.js +9 -0
- package/src/viewer/scene/math/rtcCoords.js +38 -1
- package/src/viewer/scene/mesh/Mesh.js +212 -454
- package/src/viewer/scene/mesh/draw/DrawRenderer.js +998 -0
- package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1504 -305
- package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +259 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +160 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +286 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +263 -0
- package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +221 -0
- package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +158 -9
- package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +223 -0
- package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +151 -21
- package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +200 -0
- package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +124 -12
- package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
- package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +97 -22
- package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
- package/src/viewer/scene/model/SceneModel.js +861 -245
- package/src/viewer/scene/model/SceneModelEntity.js +4 -4
- package/src/viewer/scene/model/SceneModelMesh.js +3 -3
- package/src/viewer/scene/model/dtx/BindableDataTexture.js +31 -0
- package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +27 -0
- package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +897 -0
- package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +46 -0
- package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +411 -0
- package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +49 -0
- package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +208 -0
- package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +389 -0
- package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +65 -0
- package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +1399 -0
- package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +46 -0
- package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +250 -0
- package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +518 -0
- package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +54 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +639 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +464 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +423 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +431 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +345 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +436 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +466 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +437 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +460 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +437 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +307 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +472 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +474 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +435 -0
- package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
- package/src/viewer/scene/model/vbo/VBORenderer.js +664 -0
- package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +704 -0
- package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +19 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +318 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +114 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +99 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +124 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +313 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +311 -0
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +24 -0
- package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +688 -0
- package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +24 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +168 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +136 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +156 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +148 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +144 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +107 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +146 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +315 -0
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +305 -0
- package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +24 -0
- package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +1346 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +131 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +135 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +12 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +403 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +35 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +252 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +294 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +115 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +246 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +139 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +125 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +561 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +144 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +121 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +131 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +107 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +144 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +313 -0
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +312 -0
- package/src/viewer/scene/model/vbo/float16.js +760 -0
- package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +711 -0
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +148 -0
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +26 -0
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +139 -0
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +127 -0
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +308 -0
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +299 -0
- package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +733 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +174 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +156 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +149 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +170 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +152 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +26 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +174 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +119 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +154 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +307 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +293 -0
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +150 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +1289 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +135 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +137 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +12 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +403 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +267 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +299 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +126 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +255 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +32 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +138 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +128 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +561 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +149 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +136 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +145 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +113 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +148 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +319 -0
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +310 -0
- package/src/viewer/scene/scene/Scene.js +38 -21
- package/src/viewer/scene/webgl/ArrayBuf.js +20 -5
- package/src/viewer/scene/webgl/Attribute.js +23 -0
- package/src/viewer/scene/webgl/FrameContext.js +86 -14
- package/src/viewer/scene/webgl/Program.js +181 -0
- package/src/viewer/scene/webgl/RenderBuffer.js +262 -62
- package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
- package/src/viewer/scene/webgl/Renderer.js +843 -880
- package/src/viewer/scene/webgl/Sampler.js +18 -0
- package/src/viewer/scene/webgl/Shader.js +49 -0
- package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +132 -60
- package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +328 -167
- package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
- package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +384 -0
- package/src/viewer/utils/os.js +9 -0
- package/src/viewer/scene/mesh/draw/LambertShaderSource.js +0 -35
- package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +0 -34
- package/src/viewer/scene/model/layer/DTXLayer.js +0 -940
- package/src/viewer/scene/model/layer/Layer.js +0 -786
- package/src/viewer/scene/model/layer/VBOLayer.js +0 -1019
- package/src/viewer/scene/model/layer/programs/ColorProgram.js +0 -35
- package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +0 -46
- package/src/viewer/scene/model/layer/programs/DepthProgram.js +0 -11
- package/src/viewer/scene/model/layer/programs/EdgesProgram.js +0 -12
- package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +0 -24
- package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +0 -12
- package/src/viewer/scene/model/layer/programs/PBRProgram.js +0 -180
- package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +0 -30
- package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +0 -12
- package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +0 -18
- package/src/viewer/scene/model/layer/programs/ShadowProgram.js +0 -23
- package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +0 -15
- package/src/viewer/scene/model/layer/programs/SnapProgram.js +0 -28
- package/src/viewer/scene/webgl/WebGLRenderer.js +0 -612
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xeokit/xeokit-sdk",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.86",
|
|
4
4
|
"description": "3D BIM IFC Viewer SDK for AEC engineering applications. Open Source JavaScript Toolkit based on pure WebGL for top performance, real-world coordinates and full double precision",
|
|
5
5
|
"module": "./dist/xeokit-sdk.es.js",
|
|
6
6
|
"main": "./dist/xeokit-sdk.cjs.js",
|
|
@@ -67,7 +67,7 @@ export function addContextMenuListener(elem, callback, failCallback = () => {})
|
|
|
67
67
|
event.stopPropagation();
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
if (os.
|
|
70
|
+
if (os.isIphoneOrIpadSafari()) {
|
|
71
71
|
elem.addEventListener('touchstart', touchStartHandler);
|
|
72
72
|
elem.addEventListener('touchmove', touchMoveHandler);
|
|
73
73
|
elem.addEventListener('touchend', touchEndHandler);
|
|
@@ -77,7 +77,7 @@ export function addContextMenuListener(elem, callback, failCallback = () => {})
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
return function removeContextMenuListener() {
|
|
80
|
-
if (os.
|
|
80
|
+
if (os.isIphoneOrIpadSafari()) {
|
|
81
81
|
elem.removeEventListener('touchstart', touchStartHandler);
|
|
82
82
|
elem.removeEventListener('touchmove', touchMoveHandler);
|
|
83
83
|
elem.removeEventListener('touchend', touchEndHandler);
|
package/src/viewer/Viewer.js
CHANGED
|
@@ -311,55 +311,11 @@ class Viewer {
|
|
|
311
311
|
* Exit snapshot mode using {@link Viewer#endSnapshot}.
|
|
312
312
|
*/
|
|
313
313
|
beginSnapshot() {
|
|
314
|
-
if (
|
|
315
|
-
|
|
316
|
-
this._snapshotBegun = true;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
_renderSnapshotToCanvas(params) {
|
|
321
|
-
const resize = (params.width !== undefined && params.height !== undefined);
|
|
322
|
-
const canvas = this.scene.canvas.canvas;
|
|
323
|
-
const saveWidth = canvas.clientWidth;
|
|
324
|
-
const saveHeight = canvas.clientHeight;
|
|
325
|
-
const excludeGizmos = !params.includeGizmos;
|
|
326
|
-
|
|
327
|
-
if (resize) {
|
|
328
|
-
canvas.width = params.width ? Math.floor(params.width) : canvas.width;
|
|
329
|
-
canvas.height = params.height ? Math.floor(params.height) : canvas.height;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
this.beginSnapshot();
|
|
333
|
-
|
|
334
|
-
if (excludeGizmos) {
|
|
335
|
-
this.sendToPlugins("snapshotStarting"); // Tells plugins to hide things that shouldn't be in snapshot
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const snapshotCanvas = this.scene._renderer.snapshot.renderSnapshotToCanvas();
|
|
339
|
-
|
|
340
|
-
if (resize) {
|
|
341
|
-
canvas.width = saveWidth;
|
|
342
|
-
canvas.height = saveHeight;
|
|
343
|
-
this.scene.glRedraw();
|
|
314
|
+
if (this._snapshotBegun) {
|
|
315
|
+
return;
|
|
344
316
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
canvas: snapshotCanvas,
|
|
348
|
-
toDataURL: () => {
|
|
349
|
-
if (excludeGizmos) {
|
|
350
|
-
this.sendToPlugins("snapshotFinished");
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
this.endSnapshot();
|
|
354
|
-
|
|
355
|
-
let format = params.format || "png";
|
|
356
|
-
if (format !== "jpeg" && format !== "png" && format !== "bmp") {
|
|
357
|
-
console.error("Unsupported image format: '" + format + "' - supported types are 'jpeg', 'bmp' and 'png' - defaulting to 'png'");
|
|
358
|
-
format = "png";
|
|
359
|
-
}
|
|
360
|
-
return snapshotCanvas.toDataURL(`image/${format}`);
|
|
361
|
-
}
|
|
362
|
-
};
|
|
317
|
+
this.scene._renderer.beginSnapshot();
|
|
318
|
+
this._snapshotBegun = true;
|
|
363
319
|
}
|
|
364
320
|
|
|
365
321
|
/**
|
|
@@ -382,9 +338,54 @@ class Viewer {
|
|
|
382
338
|
* @returns {String} String-encoded image data URI.
|
|
383
339
|
*/
|
|
384
340
|
getSnapshot(params = {}) {
|
|
341
|
+
|
|
342
|
+
const needFinishSnapshot = (!this._snapshotBegun);
|
|
343
|
+
const resize = (params.width !== undefined && params.height !== undefined);
|
|
344
|
+
const canvas = this.scene.canvas.canvas;
|
|
345
|
+
const saveWidth = canvas.clientWidth;
|
|
346
|
+
const saveHeight = canvas.clientHeight;
|
|
347
|
+
const width = params.width ? Math.floor(params.width) : canvas.width;
|
|
348
|
+
const height = params.height ? Math.floor(params.height) : canvas.height;
|
|
349
|
+
|
|
350
|
+
if (resize) {
|
|
351
|
+
canvas.width = width;
|
|
352
|
+
canvas.height = height;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (!this._snapshotBegun) {
|
|
356
|
+
this.beginSnapshot({
|
|
357
|
+
width,
|
|
358
|
+
height
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
if (!params.includeGizmos) {
|
|
363
|
+
this.sendToPlugins("snapshotStarting"); // Tells plugins to hide things that shouldn't be in snapshot
|
|
364
|
+
}
|
|
365
|
+
|
|
385
366
|
// firing "rendering" is necessary to trigger DTX{Lines,Triangles}Layer::_uploadDeferredFlags
|
|
386
367
|
this.scene.fire("rendering", { }, true);
|
|
387
|
-
|
|
368
|
+
|
|
369
|
+
this.scene._renderer.renderSnapshot();
|
|
370
|
+
|
|
371
|
+
const imageDataURI = this.scene._renderer.readSnapshot(params);
|
|
372
|
+
|
|
373
|
+
if (resize) {
|
|
374
|
+
canvas.width = saveWidth;
|
|
375
|
+
canvas.height = saveHeight;
|
|
376
|
+
|
|
377
|
+
this.scene.glRedraw();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if (!params.includeGizmos) {
|
|
381
|
+
this.sendToPlugins("snapshotFinished");
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
if (needFinishSnapshot) {
|
|
385
|
+
this.endSnapshot();
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return imageDataURI;
|
|
388
389
|
}
|
|
389
390
|
|
|
390
391
|
/**
|
|
@@ -427,7 +428,36 @@ class Viewer {
|
|
|
427
428
|
// right amount of pixels, for a sharper image.
|
|
428
429
|
|
|
429
430
|
|
|
430
|
-
const
|
|
431
|
+
const needFinishSnapshot = (!this._snapshotBegun);
|
|
432
|
+
const resize = (params.width !== undefined && params.height !== undefined);
|
|
433
|
+
const canvas = this.scene.canvas.canvas;
|
|
434
|
+
const saveWidth = canvas.clientWidth;
|
|
435
|
+
const saveHeight = canvas.clientHeight;
|
|
436
|
+
const snapshotWidth = params.width ? Math.floor(params.width) : canvas.width;
|
|
437
|
+
const snapshotHeight = params.height ? Math.floor(params.height) : canvas.height;
|
|
438
|
+
|
|
439
|
+
if (resize) {
|
|
440
|
+
canvas.width = snapshotWidth;
|
|
441
|
+
canvas.height = snapshotHeight;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
if (!this._snapshotBegun) {
|
|
445
|
+
this.beginSnapshot();
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (!params.includeGizmos) {
|
|
449
|
+
this.sendToPlugins("snapshotStarting"); // Tells plugins to hide things that shouldn't be in snapshot
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
this.scene._renderer.renderSnapshot();
|
|
453
|
+
|
|
454
|
+
const snapshotCanvas = this.scene._renderer.readSnapshotAsCanvas();
|
|
455
|
+
|
|
456
|
+
if (resize) {
|
|
457
|
+
canvas.width = saveWidth;
|
|
458
|
+
canvas.height = saveHeight;
|
|
459
|
+
this.scene.glRedraw();
|
|
460
|
+
}
|
|
431
461
|
|
|
432
462
|
const pluginToCapture = {};
|
|
433
463
|
const pluginContainerElements = [];
|
|
@@ -451,7 +481,6 @@ class Viewer {
|
|
|
451
481
|
document.head.appendChild(style);
|
|
452
482
|
style.sheet?.insertRule('body > div:last-child img { display: inline-block; }');
|
|
453
483
|
|
|
454
|
-
const snapshotCanvas = snapshotResult.canvas;
|
|
455
484
|
for (let i = 0, len = pluginContainerElements.length; i < len; i++) {
|
|
456
485
|
const containerElement = pluginContainerElements[i];
|
|
457
486
|
await html2canvas(containerElement, {
|
|
@@ -467,7 +496,24 @@ class Viewer {
|
|
|
467
496
|
|
|
468
497
|
style.remove();
|
|
469
498
|
|
|
470
|
-
|
|
499
|
+
if (!params.includeGizmos) {
|
|
500
|
+
this.sendToPlugins("snapshotFinished");
|
|
501
|
+
}
|
|
502
|
+
if (needFinishSnapshot) {
|
|
503
|
+
this.endSnapshot();
|
|
504
|
+
}
|
|
505
|
+
let format = params.format || "png";
|
|
506
|
+
if (format !== "jpeg" && format !== "png" && format !== "bmp") {
|
|
507
|
+
console.error("Unsupported image format: '" + format + "' - supported types are 'jpeg', 'bmp' and 'png' - defaulting to 'png'");
|
|
508
|
+
format = "png";
|
|
509
|
+
}
|
|
510
|
+
if (!params.includeGizmos) {
|
|
511
|
+
this.sendToPlugins("snapshotFinished");
|
|
512
|
+
}
|
|
513
|
+
if (needFinishSnapshot) {
|
|
514
|
+
this.endSnapshot();
|
|
515
|
+
}
|
|
516
|
+
return snapshotCanvas.toDataURL(`image/${format}`);
|
|
471
517
|
}
|
|
472
518
|
|
|
473
519
|
/**
|
|
@@ -477,10 +523,12 @@ class Viewer {
|
|
|
477
523
|
*
|
|
478
524
|
*/
|
|
479
525
|
endSnapshot() {
|
|
480
|
-
if (this._snapshotBegun) {
|
|
481
|
-
|
|
482
|
-
this._snapshotBegun = false;
|
|
526
|
+
if (!this._snapshotBegun) {
|
|
527
|
+
return;
|
|
483
528
|
}
|
|
529
|
+
this.scene._renderer.endSnapshot();
|
|
530
|
+
this.scene._renderer.render({force: true});
|
|
531
|
+
this._snapshotBegun = false;
|
|
484
532
|
}
|
|
485
533
|
|
|
486
534
|
/** Destroys this Viewer.
|
|
@@ -118,8 +118,38 @@ class Canvas extends Component {
|
|
|
118
118
|
|
|
119
119
|
this._initWebGL(cfg);
|
|
120
120
|
|
|
121
|
+
// Bind context loss and recovery handlers
|
|
122
|
+
|
|
121
123
|
const self = this;
|
|
122
124
|
|
|
125
|
+
this.canvas.addEventListener("webglcontextlost", this._webglcontextlostListener = function (event) {
|
|
126
|
+
console.time("webglcontextrestored");
|
|
127
|
+
self.scene._webglContextLost();
|
|
128
|
+
/**
|
|
129
|
+
* Fired whenever the WebGL context has been lost
|
|
130
|
+
* @event webglcontextlost
|
|
131
|
+
*/
|
|
132
|
+
self.fire("webglcontextlost");
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
},
|
|
135
|
+
false);
|
|
136
|
+
|
|
137
|
+
this.canvas.addEventListener("webglcontextrestored", this._webglcontextrestoredListener = function (event) {
|
|
138
|
+
self._initWebGL();
|
|
139
|
+
if (self.gl) {
|
|
140
|
+
self.scene._webglContextRestored(self.gl);
|
|
141
|
+
/**
|
|
142
|
+
* Fired whenever the WebGL context has been restored again after having previously being lost
|
|
143
|
+
* @event webglContextRestored
|
|
144
|
+
* @param value The WebGL context object
|
|
145
|
+
*/
|
|
146
|
+
self.fire("webglcontextrestored", self.gl);
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
}
|
|
149
|
+
console.timeEnd("webglcontextrestored");
|
|
150
|
+
},
|
|
151
|
+
false);
|
|
152
|
+
|
|
123
153
|
// Attach to resize events on the canvas
|
|
124
154
|
let dirtyBoundary = true; // make sure we publish the 1st boundary event
|
|
125
155
|
|
|
@@ -418,9 +448,12 @@ class Canvas extends Component {
|
|
|
418
448
|
*
|
|
419
449
|
* ````JavaScript
|
|
420
450
|
*
|
|
451
|
+
* // Ignore transparent pixels (default is false)
|
|
452
|
+
* var opaqueOnly = true;
|
|
453
|
+
*
|
|
421
454
|
* var colors = new Float32Array(8);
|
|
422
455
|
*
|
|
423
|
-
* viewer.scene.canvas.readPixels([ 100, 22, 12, 33 ], colors, 2);
|
|
456
|
+
* viewer.scene.canvas.readPixels([ 100, 22, 12, 33 ], colors, 2, opaqueOnly);
|
|
424
457
|
* ````
|
|
425
458
|
*
|
|
426
459
|
* Then the r,g,b components of the colors will be set to the colors at those pixels.
|
|
@@ -428,9 +461,10 @@ class Canvas extends Component {
|
|
|
428
461
|
* @param {Number[]} pixels
|
|
429
462
|
* @param {Number[]} colors
|
|
430
463
|
* @param {Number} size
|
|
464
|
+
* @param {Boolean} opaqueOnly
|
|
431
465
|
*/
|
|
432
|
-
readPixels(pixels, colors, size) {
|
|
433
|
-
return this.scene._renderer.
|
|
466
|
+
readPixels(pixels, colors, size, opaqueOnly) {
|
|
467
|
+
return this.scene._renderer.readPixels(pixels, colors, size, opaqueOnly);
|
|
434
468
|
}
|
|
435
469
|
|
|
436
470
|
/**
|
|
@@ -445,7 +479,13 @@ class Canvas extends Component {
|
|
|
445
479
|
destroy() {
|
|
446
480
|
this.scene.off(this._tick);
|
|
447
481
|
this._spinner._destroy();
|
|
482
|
+
// Memory leak avoidance
|
|
483
|
+
this.canvas.removeEventListener("webglcontextlost", this._webglcontextlostListener);
|
|
484
|
+
this.canvas.removeEventListener("webglcontextrestored", this._webglcontextrestoredListener);
|
|
485
|
+
|
|
486
|
+
// this.gl.getExtension("WEBGL_lose_context").loseContext(); // disabled because of XCD-306 and XEOK-295
|
|
448
487
|
this.gl = null;
|
|
488
|
+
|
|
449
489
|
super.destroy();
|
|
450
490
|
}
|
|
451
491
|
}
|
|
@@ -224,6 +224,12 @@ class ReadableGeometry extends Geometry {
|
|
|
224
224
|
|
|
225
225
|
memoryStats.meshes++;
|
|
226
226
|
|
|
227
|
+
this._buildVBOs();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
_buildVBOs() {
|
|
231
|
+
const state = this._state;
|
|
232
|
+
const gl = this.scene.canvas.gl;
|
|
227
233
|
if (state.indices) {
|
|
228
234
|
state.indicesBuf = new ArrayBuf(gl, gl.ELEMENT_ARRAY_BUFFER, state.indices, state.indices.length, 1, gl.STATIC_DRAW);
|
|
229
235
|
memoryStats.indices += state.indicesBuf.numItems;
|
|
@@ -332,6 +338,25 @@ class ReadableGeometry extends Geometry {
|
|
|
332
338
|
// memoryStats.colors += this._pickVertexColorsBuf.numItems;
|
|
333
339
|
}
|
|
334
340
|
|
|
341
|
+
_webglContextLost() {
|
|
342
|
+
if (this._sceneVertexBufs) {
|
|
343
|
+
this._sceneVertexBufs.webglContextLost();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
_webglContextRestored() {
|
|
348
|
+
if (this._sceneVertexBufs) {
|
|
349
|
+
this._sceneVertexBufs.webglContextRestored();
|
|
350
|
+
}
|
|
351
|
+
this._buildVBOs();
|
|
352
|
+
this._edgeIndicesBuf = null;
|
|
353
|
+
this._pickVertexPositionsBuf = null;
|
|
354
|
+
this._pickTrianglePositionsBuf = null;
|
|
355
|
+
this._pickTriangleColorsBuf = null;
|
|
356
|
+
this._pickVertexPositionsBuf = null;
|
|
357
|
+
this._pickVertexColorsBuf = null;
|
|
358
|
+
}
|
|
359
|
+
|
|
335
360
|
/**
|
|
336
361
|
* Gets the Geometry's primitive type.
|
|
337
362
|
|
|
@@ -89,6 +89,19 @@ class CubeTexture extends Component {
|
|
|
89
89
|
return value;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
_webglContextRestored() {
|
|
93
|
+
const gl = this.scene.canvas.gl;
|
|
94
|
+
this._state.texture = null;
|
|
95
|
+
// if (this._images.length > 0) {
|
|
96
|
+
// this._state.texture = new xeokit.renderer.Texture2D(gl, gl.TEXTURE_CUBE_MAP);
|
|
97
|
+
// this._state.texture.setImage(this._images, this._state);
|
|
98
|
+
// this._state.texture.setProps(this._state);
|
|
99
|
+
// } else
|
|
100
|
+
if (this._src) {
|
|
101
|
+
this._loadSrc(this._src);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
92
105
|
_loadSrc(src) {
|
|
93
106
|
const self = this;
|
|
94
107
|
const gl = this.scene.canvas.gl;
|
|
@@ -177,8 +177,7 @@ class DirLight extends Light {
|
|
|
177
177
|
|
|
178
178
|
getShadowRenderBuf: () => {
|
|
179
179
|
if (!this._shadowRenderBuf) {
|
|
180
|
-
this._shadowRenderBuf = new RenderBuffer(this.scene.canvas.gl); // Super old mobile devices have a limit of 1024x1024 textures
|
|
181
|
-
this._shadowRenderBuf.setSize([1024, 1024]);
|
|
180
|
+
this._shadowRenderBuf = new RenderBuffer(this.scene.canvas.canvas, this.scene.canvas.gl, {size: [1024, 1024]}); // Super old mobile devices have a limit of 1024x1024 textures
|
|
182
181
|
}
|
|
183
182
|
return this._shadowRenderBuf;
|
|
184
183
|
}
|
|
@@ -181,8 +181,7 @@ class PointLight extends Light {
|
|
|
181
181
|
|
|
182
182
|
getShadowRenderBuf: () => {
|
|
183
183
|
if (!self._shadowRenderBuf) {
|
|
184
|
-
self._shadowRenderBuf = new RenderBuffer(self.scene.canvas.gl); // Super old mobile devices have a limit of 1024x1024 textures
|
|
185
|
-
self._shadowRenderBuf.setSize([1024, 1024]);
|
|
184
|
+
self._shadowRenderBuf = new RenderBuffer(self.scene.canvas.canvas, self.scene.canvas.gl, {size: [1024, 1024]}); // Super old mobile devices have a limit of 1024x1024 textures
|
|
186
185
|
}
|
|
187
186
|
return self._shadowRenderBuf;
|
|
188
187
|
}
|
|
@@ -212,6 +212,15 @@ class Texture extends Component {
|
|
|
212
212
|
return value;
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
+
_webglContextRestored() {
|
|
216
|
+
this._state.texture = new Texture2D({gl: this.scene.canvas.gl});
|
|
217
|
+
if (this._image) {
|
|
218
|
+
this.image = this._image;
|
|
219
|
+
} else if (this._src) {
|
|
220
|
+
this.src = this._src;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
215
224
|
_update() {
|
|
216
225
|
const state = this._state;
|
|
217
226
|
if (this._matrixDirty) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {math} from './math.js';
|
|
2
2
|
|
|
3
3
|
const tempVec3a = math.vec3();
|
|
4
|
+
const tempVec4 = math.vec4();
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Given a view matrix and a relative-to-center (RTC) coordinate origin, returns a view matrix
|
|
@@ -103,4 +104,40 @@ function worldToRTCPositions(worldPositions, rtcPositions, rtcCenter, cellSize =
|
|
|
103
104
|
return rtcNeeded;
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Converts an RTC 3D position to World-space.
|
|
109
|
+
*
|
|
110
|
+
* @private
|
|
111
|
+
* @param {Float64Array} rtcCenter Double-precision relative-to-center (RTC) center pos.
|
|
112
|
+
* @param {Float32Array} rtcPos Single-precision offset fom that center.
|
|
113
|
+
* @param {Float64Array} worldPos The World-space position.
|
|
114
|
+
*/
|
|
115
|
+
function rtcToWorldPos(rtcCenter, rtcPos, worldPos) {
|
|
116
|
+
worldPos[0] = rtcCenter[0] + rtcPos[0];
|
|
117
|
+
worldPos[1] = rtcCenter[1] + rtcPos[1];
|
|
118
|
+
worldPos[2] = rtcCenter[2] + rtcPos[2];
|
|
119
|
+
return worldPos;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Given a 3D plane defined by distance from origin and direction, and an RTC center position,
|
|
124
|
+
* return a plane position that is relative to the RTC center.
|
|
125
|
+
*
|
|
126
|
+
* @private
|
|
127
|
+
* @param dist
|
|
128
|
+
* @param dir
|
|
129
|
+
* @param rtcCenter
|
|
130
|
+
* @param rtcPlanePos
|
|
131
|
+
* @returns {*}
|
|
132
|
+
*/
|
|
133
|
+
function getPlaneRTCPos(dist, dir, rtcOrigin, rtcPlanePos, originMatrix) {
|
|
134
|
+
const rtcCenter = (originMatrix
|
|
135
|
+
? (tempVec4.set(rtcOrigin, 0), tempVec4[3] = 1, math.mulMat4v4(originMatrix, tempVec4, tempVec4))
|
|
136
|
+
: rtcOrigin);
|
|
137
|
+
const rtcCenterToPlaneDist = math.dotVec3(dir, rtcCenter) + dist;
|
|
138
|
+
const dirNormalized = math.normalizeVec3(dir, tempVec3a);
|
|
139
|
+
math.mulVec3Scalar(dirNormalized, -rtcCenterToPlaneDist, rtcPlanePos);
|
|
140
|
+
return rtcPlanePos;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export {createRTCViewMat, worldToRTCPos, worldToRTCPositions, rtcToWorldPos, getPlaneRTCPos};
|