@xeokit/xeokit-sdk 2.6.87-renderers-refactor-v4 → 2.6.88
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/README.md +3 -3
- package/dist/xeokit-sdk.cjs.js +44699 -17047
- package/dist/xeokit-sdk.es.js +44698 -17048
- package/dist/xeokit-sdk.es5.js +3588 -1489
- 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 -2
- package/src/plugins/CxConverterIFCLoaderPlugin/CxConverterIFCLoaderPlugin.js +13 -2
- package/src/plugins/DotBIMLoaderPlugin/DotBIMLoaderPlugin.js +2 -2
- package/src/plugins/NavCubePlugin/NavCubePlugin.js +63 -22
- package/src/plugins/SectionPlanesPlugin/SectionPlanesPlugin.js +3 -1
- 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 +852 -248
- 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/types/plugins/lib/ui/index.d.ts +7 -4
- 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 -788
- 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.88",
|
|
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",
|
|
@@ -52,7 +52,6 @@
|
|
|
52
52
|
},
|
|
53
53
|
"homepage": "https://xeokit.io",
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@creooxag/cxconverter": "^0.0.3-alpha",
|
|
56
55
|
"@loaders.gl/core": "^4.3.3",
|
|
57
56
|
"@loaders.gl/gltf": "^4.3.3",
|
|
58
57
|
"@loaders.gl/las": "^4.3.3",
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Plugin } from "../../viewer/Plugin.js";
|
|
2
2
|
import { GLTFLoaderPlugin } from "../GLTFLoaderPlugin/GLTFLoaderPlugin.js";
|
|
3
|
-
import { ifc2gltf } from "@creooxag/cxconverter";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Fetches a file from the given URL and returns its contents as text.
|
|
@@ -51,6 +50,15 @@ class CxConverterIFCLoaderPlugin extends Plugin {
|
|
|
51
50
|
* @type {GLTFLoaderPlugin}
|
|
52
51
|
*/
|
|
53
52
|
this.gltfLoader = new GLTFLoaderPlugin(this.viewer);
|
|
53
|
+
this.cxConverterModule = null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Sets the CxConverter module to be used by this plugin.
|
|
58
|
+
* @param {Object} module The CxConverter module.
|
|
59
|
+
*/
|
|
60
|
+
setCxConverterModule(module) {
|
|
61
|
+
this.cxConverterModule = module;
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
/**
|
|
@@ -63,11 +71,14 @@ class CxConverterIFCLoaderPlugin extends Plugin {
|
|
|
63
71
|
* @returns {Promise<SceneModel>} A promise that resolves to the loaded SceneModel.
|
|
64
72
|
*/
|
|
65
73
|
async load(params = {}) {
|
|
74
|
+
if (!this.cxConverterModule) {
|
|
75
|
+
throw new Error("CxConverter module is not set. Use setCxConverterModule() to set it.");
|
|
76
|
+
}
|
|
66
77
|
if (!params.src) {
|
|
67
78
|
this.error("load() param expected: src");
|
|
68
79
|
}
|
|
69
80
|
const data = await fetchFile(params.src);
|
|
70
|
-
const { gltf, metaData } = await ifc2gltf(
|
|
81
|
+
const { gltf, metaData } = await this.cxConverterModule.ifc2gltf(
|
|
71
82
|
data,
|
|
72
83
|
{
|
|
73
84
|
remote: true,
|
|
@@ -432,7 +432,7 @@ export class DotBIMLoaderPlugin extends Plugin {
|
|
|
432
432
|
|
|
433
433
|
parseDBMesh(dbMeshId, element);
|
|
434
434
|
|
|
435
|
-
const meshId = `${objectId}-mesh`;
|
|
435
|
+
const meshId = `${objectId}-mesh-${dbMeshId}`;
|
|
436
436
|
|
|
437
437
|
let color = element.color ? [element.color.r / 255.0, element.color.g / 255.0, element.color.b / 255.0] : [1, 1, 1];
|
|
438
438
|
let opacity = element.color ? element.color.a / 255.0 : 1.0;
|
|
@@ -505,7 +505,7 @@ export class DotBIMLoaderPlugin extends Plugin {
|
|
|
505
505
|
positions: trianglesCoordinates,
|
|
506
506
|
indices: [...Array(trianglesCoordinates.length / 3).keys()]
|
|
507
507
|
});
|
|
508
|
-
const meshId = `${objectId}-mesh-${faceColor}`;
|
|
508
|
+
const meshId = `${objectId}-mesh-${dbMeshId}-${faceColor}`;
|
|
509
509
|
const faceColorArray = faceColor.split(',').map(Number);
|
|
510
510
|
|
|
511
511
|
let color = [faceColorArray[0] / 255.0, faceColorArray[1] / 255.0, faceColorArray[2] / 255.0];
|
|
@@ -295,25 +295,9 @@ class NavCubePlugin extends Plugin {
|
|
|
295
295
|
lastY = posY;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
function getCoordsWithinElement(
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
event = window.event;
|
|
302
|
-
coords[0] = event.x;
|
|
303
|
-
coords[1] = event.y;
|
|
304
|
-
} else {
|
|
305
|
-
var element = event.target;
|
|
306
|
-
var totalOffsetLeft = 0;
|
|
307
|
-
var totalOffsetTop = 0;
|
|
308
|
-
while (element.offsetParent) {
|
|
309
|
-
totalOffsetLeft += element.offsetLeft;
|
|
310
|
-
totalOffsetTop += element.offsetTop;
|
|
311
|
-
element = element.offsetParent;
|
|
312
|
-
}
|
|
313
|
-
coords[0] = event.pageX - totalOffsetLeft;
|
|
314
|
-
coords[1] = event.pageY - totalOffsetTop;
|
|
315
|
-
}
|
|
316
|
-
return coords;
|
|
298
|
+
function getCoordsWithinElement(clientCoords) {
|
|
299
|
+
const { left, top } = self._navCubeCanvas.getBoundingClientRect();
|
|
300
|
+
return [clientCoords.clientX - left, clientCoords.clientY - top];
|
|
317
301
|
}
|
|
318
302
|
|
|
319
303
|
{
|
|
@@ -349,7 +333,7 @@ class NavCubePlugin extends Plugin {
|
|
|
349
333
|
downY = e.y;
|
|
350
334
|
lastX = e.clientX;
|
|
351
335
|
lastY = e.clientY;
|
|
352
|
-
var canvasPos = getCoordsWithinElement(e);
|
|
336
|
+
var canvasPos = getCoordsWithinElement({clientX: e.clientX, clientY: e.clientY});
|
|
353
337
|
var hit = navCubeScene.pick({
|
|
354
338
|
canvasPos: canvasPos
|
|
355
339
|
});
|
|
@@ -369,7 +353,7 @@ class NavCubePlugin extends Plugin {
|
|
|
369
353
|
if (downX === null) {
|
|
370
354
|
return;
|
|
371
355
|
}
|
|
372
|
-
var canvasPos = getCoordsWithinElement(e);
|
|
356
|
+
var canvasPos = getCoordsWithinElement({clientX: e.clientX, clientY: e.clientY});
|
|
373
357
|
var hit = navCubeScene.pick({
|
|
374
358
|
canvasPos: canvasPos,
|
|
375
359
|
pickSurface: true
|
|
@@ -442,7 +426,7 @@ class NavCubePlugin extends Plugin {
|
|
|
442
426
|
if (!over) {
|
|
443
427
|
return;
|
|
444
428
|
}
|
|
445
|
-
var canvasPos = getCoordsWithinElement(e);
|
|
429
|
+
var canvasPos = getCoordsWithinElement({clientX: e.clientX, clientY: e.clientY});
|
|
446
430
|
var hit = navCubeScene.pick({
|
|
447
431
|
canvasPos: canvasPos,
|
|
448
432
|
pickSurface: true
|
|
@@ -472,6 +456,55 @@ class NavCubePlugin extends Plugin {
|
|
|
472
456
|
}
|
|
473
457
|
}
|
|
474
458
|
});
|
|
459
|
+
|
|
460
|
+
self._navCubeCanvas.addEventListener("touchstart", self._onTouchStart = function (e) {
|
|
461
|
+
if (e.touches.length > 0) {
|
|
462
|
+
downX = e.touches[0].clientX;
|
|
463
|
+
downY = e.touches[0].clientY;
|
|
464
|
+
lastX = e.touches[0].clientX;
|
|
465
|
+
lastY = e.touches[0].clientY;
|
|
466
|
+
var canvasPos = getCoordsWithinElement({clientX: e.touches[0].clientX, clientY: e.touches[0].clientY});
|
|
467
|
+
var hit = navCubeScene.pick({
|
|
468
|
+
canvasPos: canvasPos
|
|
469
|
+
});
|
|
470
|
+
if (hit) {
|
|
471
|
+
down = true;
|
|
472
|
+
} else {
|
|
473
|
+
down = false;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
passive: false
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
self._navCubeCanvas.addEventListener("touchmove", self._onTouchMove = function (e) {
|
|
482
|
+
e.preventDefault();
|
|
483
|
+
var touch = e.touches[0];
|
|
484
|
+
var posX = touch.clientX;
|
|
485
|
+
var posY = touch.clientY;
|
|
486
|
+
|
|
487
|
+
var currentElement = document.elementFromPoint(posX, posY);
|
|
488
|
+
over = (self._navCubeCanvas === currentElement);
|
|
489
|
+
|
|
490
|
+
if (!over) {
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
if (down) {
|
|
494
|
+
actionMove(posX, posY);
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
passive: false
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
self._navCubeCanvas.addEventListener("touchend", self._onTouchEnd = function (e) {
|
|
503
|
+
down = false;
|
|
504
|
+
if (downX === null) {
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
});
|
|
475
508
|
|
|
476
509
|
var flyTo = (function () {
|
|
477
510
|
var center = math.vec3();
|
|
@@ -730,6 +763,10 @@ class NavCubePlugin extends Plugin {
|
|
|
730
763
|
this._navCubeCanvas.removeEventListener("mousemove", this._onMouseMove);
|
|
731
764
|
this._navCubeCanvas.removeEventListener("mouseup", this._onMouseUp);
|
|
732
765
|
|
|
766
|
+
this._navCubeCanvas.removeEventListener("touchstart", this._onTouchStart);
|
|
767
|
+
this._navCubeCanvas.removeEventListener("touchmove", this._onTouchMove);
|
|
768
|
+
this._navCubeCanvas.removeEventListener("touchend", this._onTouchEnd);
|
|
769
|
+
|
|
733
770
|
this._navCubeCanvas = null;
|
|
734
771
|
this._cubeTextureCanvas.destroy();
|
|
735
772
|
this._cubeTextureCanvas = null;
|
|
@@ -739,6 +776,10 @@ class NavCubePlugin extends Plugin {
|
|
|
739
776
|
this._onMouseDown = null;
|
|
740
777
|
this._onMouseMove = null;
|
|
741
778
|
this._onMouseUp = null;
|
|
779
|
+
|
|
780
|
+
this._onTouchStart = null;
|
|
781
|
+
this._onTouchMove = null;
|
|
782
|
+
this._onTouchEnd = null;
|
|
742
783
|
}
|
|
743
784
|
|
|
744
785
|
this._navCubeScene.destroy();
|
|
@@ -329,7 +329,8 @@ class SectionPlanesPlugin extends Plugin {
|
|
|
329
329
|
})(),
|
|
330
330
|
setQuaternion: q => { rootNode.quaternion = q; },
|
|
331
331
|
setScale: s => { rootNode.scale = s; },
|
|
332
|
-
setVisible: v => { rootNode.visible = v; }
|
|
332
|
+
setVisible: v => { rootNode.visible = v; },
|
|
333
|
+
destroy: () => { rootNode.destroy() }
|
|
333
334
|
};
|
|
334
335
|
})();
|
|
335
336
|
let unbindSectionPlane = () => { };
|
|
@@ -348,6 +349,7 @@ class SectionPlanesPlugin extends Plugin {
|
|
|
348
349
|
_destroy: () => {
|
|
349
350
|
unbindSectionPlane();
|
|
350
351
|
ctrl.destroy();
|
|
352
|
+
planeRoot.destroy();
|
|
351
353
|
},
|
|
352
354
|
setCulled: c => { culled = c; updateVisible(); },
|
|
353
355
|
setVisible: v => { visible = v; updateVisible(); },
|
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};
|