@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
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import {VBORenderer} from "./../../../VBORenderer.js";
|
|
2
|
+
import {createRTCViewMat} from "../../../../../math/rtcCoords.js";
|
|
3
|
+
import {math} from "../../../../../math/math.js";
|
|
4
|
+
|
|
5
|
+
const tempVec3a = math.vec3();
|
|
6
|
+
const tempVec3b = math.vec3();
|
|
7
|
+
const tempVec3c = math.vec3();
|
|
8
|
+
const tempVec3d = math.vec3();
|
|
9
|
+
const tempMat4a = math.mat4();
|
|
10
|
+
|
|
11
|
+
const SNAPPING_LOG_DEPTH_BUF_ENABLED = true; // Improves occlusion accuracy at distance
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
export class TrianglesSnapRenderer extends VBORenderer {
|
|
17
|
+
|
|
18
|
+
constructor(scene) {
|
|
19
|
+
super(scene, false, { instancing: true });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
drawLayer(frameCtx, instancingLayer, renderPass) {
|
|
23
|
+
|
|
24
|
+
if (!this._program) {
|
|
25
|
+
this._allocate(instancingLayer);
|
|
26
|
+
if (this.errors) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (frameCtx.lastProgramId !== this._program.id) {
|
|
32
|
+
frameCtx.lastProgramId = this._program.id;
|
|
33
|
+
this._bindProgram();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const model = instancingLayer.model;
|
|
37
|
+
const scene = model.scene;
|
|
38
|
+
const camera = scene.camera;
|
|
39
|
+
const gl = scene.canvas.gl;
|
|
40
|
+
const state = instancingLayer._state;
|
|
41
|
+
const origin = instancingLayer._state.origin;
|
|
42
|
+
const {position, rotationMatrix} = model;
|
|
43
|
+
const aabb = instancingLayer.aabb; // Per-layer AABB for best RTC accuracy
|
|
44
|
+
const viewMatrix = frameCtx.pickViewMatrix || camera.viewMatrix;
|
|
45
|
+
|
|
46
|
+
if (this._vaoCache.has(instancingLayer)) {
|
|
47
|
+
gl.bindVertexArray(this._vaoCache.get(instancingLayer));
|
|
48
|
+
} else {
|
|
49
|
+
this._vaoCache.set(instancingLayer, this._makeVAO(state))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const coordinateScaler = tempVec3a;
|
|
53
|
+
coordinateScaler[0] = math.safeInv(aabb[3] - aabb[0]) * math.MAX_INT;
|
|
54
|
+
coordinateScaler[1] = math.safeInv(aabb[4] - aabb[1]) * math.MAX_INT;
|
|
55
|
+
coordinateScaler[2] = math.safeInv(aabb[5] - aabb[2]) * math.MAX_INT;
|
|
56
|
+
|
|
57
|
+
frameCtx.snapPickCoordinateScale[0] = math.safeInv(coordinateScaler[0]);
|
|
58
|
+
frameCtx.snapPickCoordinateScale[1] = math.safeInv(coordinateScaler[1]);
|
|
59
|
+
frameCtx.snapPickCoordinateScale[2] = math.safeInv(coordinateScaler[2]);
|
|
60
|
+
|
|
61
|
+
let rtcViewMatrix;
|
|
62
|
+
let rtcCameraEye;
|
|
63
|
+
|
|
64
|
+
if (origin || position[0] !== 0 || position[1] !== 0 || position[2] !== 0) {
|
|
65
|
+
const rtcOrigin = tempVec3b;
|
|
66
|
+
if (origin) {
|
|
67
|
+
const rotatedOrigin = math.transformPoint3(rotationMatrix, origin, tempVec3c);
|
|
68
|
+
rtcOrigin[0] = rotatedOrigin[0];
|
|
69
|
+
rtcOrigin[1] = rotatedOrigin[1];
|
|
70
|
+
rtcOrigin[2] = rotatedOrigin[2];
|
|
71
|
+
} else {
|
|
72
|
+
rtcOrigin[0] = 0;
|
|
73
|
+
rtcOrigin[1] = 0;
|
|
74
|
+
rtcOrigin[2] = 0;
|
|
75
|
+
}
|
|
76
|
+
rtcOrigin[0] += position[0];
|
|
77
|
+
rtcOrigin[1] += position[1];
|
|
78
|
+
rtcOrigin[2] += position[2];
|
|
79
|
+
rtcViewMatrix = createRTCViewMat(viewMatrix, rtcOrigin, tempMat4a);
|
|
80
|
+
rtcCameraEye = tempVec3d;
|
|
81
|
+
rtcCameraEye[0] = camera.eye[0] - rtcOrigin[0];
|
|
82
|
+
rtcCameraEye[1] = camera.eye[1] - rtcOrigin[1];
|
|
83
|
+
rtcCameraEye[2] = camera.eye[2] - rtcOrigin[2];
|
|
84
|
+
frameCtx.snapPickOrigin[0] = rtcOrigin[0];
|
|
85
|
+
frameCtx.snapPickOrigin[1] = rtcOrigin[1];
|
|
86
|
+
frameCtx.snapPickOrigin[2] = rtcOrigin[2];
|
|
87
|
+
} else {
|
|
88
|
+
rtcViewMatrix = viewMatrix;
|
|
89
|
+
rtcCameraEye = camera.eye;
|
|
90
|
+
frameCtx.snapPickOrigin[0] = 0;
|
|
91
|
+
frameCtx.snapPickOrigin[1] = 0;
|
|
92
|
+
frameCtx.snapPickOrigin[2] = 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
|
|
96
|
+
gl.uniform2fv(this.uVectorA, frameCtx.snapVectorA);
|
|
97
|
+
gl.uniform2fv(this.uInverseVectorAB, frameCtx.snapInvVectorAB);
|
|
98
|
+
gl.uniform1i(this._uLayerNumber, frameCtx.snapPickLayerNumber);
|
|
99
|
+
gl.uniform3fv(this._uCoordinateScaler, coordinateScaler);
|
|
100
|
+
gl.uniform1i(this._uRenderPass, renderPass);
|
|
101
|
+
gl.uniform1i(this._uPickInvisible, frameCtx.pickInvisible);
|
|
102
|
+
|
|
103
|
+
let offset = 0;
|
|
104
|
+
const mat4Size = 4 * 4;
|
|
105
|
+
|
|
106
|
+
this._matricesUniformBlockBufferData.set(rotationMatrix, 0);
|
|
107
|
+
this._matricesUniformBlockBufferData.set(rtcViewMatrix, offset += mat4Size);
|
|
108
|
+
this._matricesUniformBlockBufferData.set(camera.projMatrix, offset += mat4Size);
|
|
109
|
+
this._matricesUniformBlockBufferData.set(state.positionsDecodeMatrix, offset += mat4Size);
|
|
110
|
+
|
|
111
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, this._matricesUniformBlockBuffer);
|
|
112
|
+
gl.bufferData(gl.UNIFORM_BUFFER, this._matricesUniformBlockBufferData, gl.DYNAMIC_DRAW);
|
|
113
|
+
|
|
114
|
+
gl.bindBufferBase(
|
|
115
|
+
gl.UNIFORM_BUFFER,
|
|
116
|
+
this._matricesUniformBlockBufferBindingPoint,
|
|
117
|
+
this._matricesUniformBlockBuffer);
|
|
118
|
+
|
|
119
|
+
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
|
|
120
|
+
const logDepthBufFC = 2.0 / (Math.log(frameCtx.pickZFar + 1.0) / Math.LN2); // TODO: Far from pick project matrix
|
|
121
|
+
gl.uniform1f(this._uLogDepthBufFC, logDepthBufFC);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
this.setSectionPlanesStateUniforms(instancingLayer);
|
|
125
|
+
|
|
126
|
+
if (frameCtx.snapMode === "edge" ) {
|
|
127
|
+
if (state.edgeIndicesBuf) {
|
|
128
|
+
state.edgeIndicesBuf.bind();
|
|
129
|
+
gl.drawElementsInstanced(gl.LINES, state.edgeIndicesBuf.numItems, state.edgeIndicesBuf.itemType, 0, state.numInstances);
|
|
130
|
+
state.edgeIndicesBuf.unbind(); // needed?
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
gl.drawArraysInstanced(gl.POINTS, 0, state.positionsBuf.numItems, state.numInstances);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
gl.bindVertexArray(null);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
_allocate() {
|
|
140
|
+
super._allocate();
|
|
141
|
+
|
|
142
|
+
const program = this._program;
|
|
143
|
+
|
|
144
|
+
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
|
|
145
|
+
this._uLogDepthBufFC = program.getLocation("logDepthBufFC");
|
|
146
|
+
}
|
|
147
|
+
this._uCameraEyeRtc = program.getLocation("uCameraEyeRtc");
|
|
148
|
+
this.uVectorA = program.getLocation("snapVectorA");
|
|
149
|
+
this.uInverseVectorAB = program.getLocation("snapInvVectorAB");
|
|
150
|
+
this._uLayerNumber = program.getLocation("layerNumber");
|
|
151
|
+
this._uCoordinateScaler = program.getLocation("coordinateScaler");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
_bindProgram() {
|
|
155
|
+
this._program.bind();
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
_buildVertexShader() {
|
|
160
|
+
const scene = this._scene;
|
|
161
|
+
const sectionPlanesState = scene._sectionPlanesState;
|
|
162
|
+
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
163
|
+
const src = [];
|
|
164
|
+
src.push ('#version 300 es');
|
|
165
|
+
src.push("// SnapInstancingDepthRenderer vertex shader");
|
|
166
|
+
src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
|
|
167
|
+
src.push("precision highp float;");
|
|
168
|
+
src.push("precision highp int;");
|
|
169
|
+
src.push("precision highp usampler2D;");
|
|
170
|
+
src.push("precision highp isampler2D;");
|
|
171
|
+
src.push("precision highp sampler2D;");
|
|
172
|
+
src.push("#else");
|
|
173
|
+
src.push("precision mediump float;");
|
|
174
|
+
src.push("precision mediump int;");
|
|
175
|
+
src.push("precision mediump usampler2D;");
|
|
176
|
+
src.push("precision mediump isampler2D;");
|
|
177
|
+
src.push("precision mediump sampler2D;");
|
|
178
|
+
src.push("#endif");
|
|
179
|
+
src.push("uniform int renderPass;");
|
|
180
|
+
src.push("in vec3 position;");
|
|
181
|
+
if (scene.entityOffsetsEnabled) {
|
|
182
|
+
src.push("in vec3 offset;");
|
|
183
|
+
}
|
|
184
|
+
src.push("in float flags;");
|
|
185
|
+
src.push("in vec4 modelMatrixCol0;"); // Modeling matrix
|
|
186
|
+
src.push("in vec4 modelMatrixCol1;");
|
|
187
|
+
src.push("in vec4 modelMatrixCol2;");
|
|
188
|
+
src.push("uniform bool pickInvisible;");
|
|
189
|
+
|
|
190
|
+
this._addMatricesUniformBlockLines(src);
|
|
191
|
+
|
|
192
|
+
src.push("uniform vec3 uCameraEyeRtc;");
|
|
193
|
+
src.push("uniform vec2 snapVectorA;");
|
|
194
|
+
src.push("uniform vec2 snapInvVectorAB;");
|
|
195
|
+
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
|
|
196
|
+
src.push("uniform float logDepthBufFC;");
|
|
197
|
+
src.push("out float vFragDepth;");
|
|
198
|
+
src.push("bool isPerspectiveMatrix(mat4 m) {");
|
|
199
|
+
src.push(" return (m[2][3] == - 1.0);");
|
|
200
|
+
src.push("}");
|
|
201
|
+
src.push("out float isPerspective;");
|
|
202
|
+
}
|
|
203
|
+
src.push("vec2 remapClipPos(vec2 clipPos) {");
|
|
204
|
+
src.push(" float x = (clipPos.x - snapVectorA.x) * snapInvVectorAB.x;");
|
|
205
|
+
src.push(" float y = (clipPos.y - snapVectorA.y) * snapInvVectorAB.y;");
|
|
206
|
+
src.push(" return vec2(x, y);")
|
|
207
|
+
src.push("}");
|
|
208
|
+
if (clipping) {
|
|
209
|
+
src.push("out vec4 vWorldPosition;");
|
|
210
|
+
src.push("out float vFlags;");
|
|
211
|
+
}
|
|
212
|
+
src.push("out highp vec3 relativeToOriginPosition;");
|
|
213
|
+
src.push("void main(void) {");
|
|
214
|
+
// pickFlag = NOT_RENDERED | PICK
|
|
215
|
+
// renderPass = PICK
|
|
216
|
+
src.push(`int pickFlag = int(flags) >> 12 & 0xF;`);
|
|
217
|
+
src.push(`if (pickFlag != renderPass) {`);
|
|
218
|
+
src.push(" gl_Position = vec4(2.0, 0.0, 0.0, 0.0);"); // Cull vertex
|
|
219
|
+
src.push("} else {");
|
|
220
|
+
src.push(" vec4 worldPosition = positionsDecodeMatrix * vec4(position, 1.0); ");
|
|
221
|
+
src.push(" worldPosition = worldMatrix * vec4(dot(worldPosition, modelMatrixCol0), dot(worldPosition, modelMatrixCol1), dot(worldPosition, modelMatrixCol2), 1.0);");
|
|
222
|
+
if (scene.entityOffsetsEnabled) {
|
|
223
|
+
src.push(" worldPosition.xyz = worldPosition.xyz + offset;");
|
|
224
|
+
}
|
|
225
|
+
src.push("relativeToOriginPosition = worldPosition.xyz;")
|
|
226
|
+
src.push(" vec4 viewPosition = viewMatrix * worldPosition; ");
|
|
227
|
+
if (clipping) {
|
|
228
|
+
src.push(" vWorldPosition = worldPosition;");
|
|
229
|
+
src.push(" vFlags = flags;");
|
|
230
|
+
}
|
|
231
|
+
src.push("vec4 clipPos = projMatrix * viewPosition;");
|
|
232
|
+
src.push("float tmp = clipPos.w;")
|
|
233
|
+
src.push("clipPos.xyzw /= tmp;")
|
|
234
|
+
src.push("clipPos.xy = remapClipPos(clipPos.xy);");
|
|
235
|
+
src.push("clipPos.xyzw *= tmp;")
|
|
236
|
+
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
|
|
237
|
+
src.push("vFragDepth = 1.0 + clipPos.w;");
|
|
238
|
+
src.push("isPerspective = float (isPerspectiveMatrix(projMatrix));");
|
|
239
|
+
}
|
|
240
|
+
src.push("gl_Position = clipPos;");
|
|
241
|
+
src.push("gl_PointSize = 1.0;"); // Windows needs this?
|
|
242
|
+
src.push("}");
|
|
243
|
+
src.push("}");
|
|
244
|
+
return src;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
_buildFragmentShader() {
|
|
248
|
+
const scene = this._scene;
|
|
249
|
+
const sectionPlanesState = scene._sectionPlanesState;
|
|
250
|
+
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
251
|
+
const src = [];
|
|
252
|
+
src.push ('#version 300 es');
|
|
253
|
+
src.push("// SnapInstancingDepthRenderer fragment shader");
|
|
254
|
+
src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
|
|
255
|
+
src.push("precision highp float;");
|
|
256
|
+
src.push("precision highp int;");
|
|
257
|
+
src.push("#else");
|
|
258
|
+
src.push("precision mediump float;");
|
|
259
|
+
src.push("precision mediump int;");
|
|
260
|
+
src.push("#endif");
|
|
261
|
+
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
|
|
262
|
+
src.push("in float isPerspective;");
|
|
263
|
+
src.push("uniform float logDepthBufFC;");
|
|
264
|
+
src.push("in float vFragDepth;");
|
|
265
|
+
}
|
|
266
|
+
src.push("uniform int layerNumber;");
|
|
267
|
+
src.push("uniform vec3 coordinateScaler;");
|
|
268
|
+
if (clipping) {
|
|
269
|
+
src.push("in vec4 vWorldPosition;");
|
|
270
|
+
src.push("in float vFlags;");
|
|
271
|
+
for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
272
|
+
src.push("uniform bool sectionPlaneActive" + i + ";");
|
|
273
|
+
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
274
|
+
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
src.push("in highp vec3 relativeToOriginPosition;");
|
|
278
|
+
src.push("out highp ivec4 outCoords;");
|
|
279
|
+
src.push("void main(void) {");
|
|
280
|
+
if (clipping) {
|
|
281
|
+
src.push(" bool clippable = (int(vFlags) >> 16 & 0xF) == 1;");
|
|
282
|
+
src.push(" if (clippable) {");
|
|
283
|
+
src.push(" float dist = 0.0;");
|
|
284
|
+
for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
285
|
+
src.push("if (sectionPlaneActive" + i + ") {");
|
|
286
|
+
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
287
|
+
src.push("}");
|
|
288
|
+
}
|
|
289
|
+
src.push("if (dist > 0.0) { discard; }");
|
|
290
|
+
src.push("}");
|
|
291
|
+
}
|
|
292
|
+
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
|
|
293
|
+
src.push(" gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
294
|
+
}
|
|
295
|
+
src.push("outCoords = ivec4(relativeToOriginPosition.xyz*coordinateScaler.xyz, layerNumber);")
|
|
296
|
+
src.push("}");
|
|
297
|
+
return src;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
webglContextRestored() {
|
|
301
|
+
this._program = null;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
destroy() {
|
|
305
|
+
if (this._program) {
|
|
306
|
+
this._program.destroy();
|
|
307
|
+
}
|
|
308
|
+
this._program = null;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
@@ -619,10 +619,6 @@ class Scene extends Component {
|
|
|
619
619
|
premultipliedAlpha: cfg.premultipliedAlpha
|
|
620
620
|
});
|
|
621
621
|
|
|
622
|
-
const onContextLost = (event) => this.viewer.destroy();
|
|
623
|
-
canvas.addEventListener("webglcontextlost", onContextLost, false);
|
|
624
|
-
this._removeWebglcontextlostListener = () => canvas.removeEventListener("webglcontextlost", onContextLost, false);
|
|
625
|
-
|
|
626
622
|
this.canvas.on("boundary", () => {
|
|
627
623
|
this.glRedraw();
|
|
628
624
|
});
|
|
@@ -1253,6 +1249,35 @@ class Scene extends Component {
|
|
|
1253
1249
|
this._offsetObjectIds = null; // Lazy regenerate
|
|
1254
1250
|
}
|
|
1255
1251
|
|
|
1252
|
+
_webglContextLost() {
|
|
1253
|
+
// this.loading++;
|
|
1254
|
+
this.canvas.spinner.processes++;
|
|
1255
|
+
for (const id in this.components) {
|
|
1256
|
+
if (this.components.hasOwnProperty(id)) {
|
|
1257
|
+
const component = this.components[id];
|
|
1258
|
+
if (component._webglContextLost) {
|
|
1259
|
+
component._webglContextLost();
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
this._renderer.webglContextLost();
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
_webglContextRestored() {
|
|
1267
|
+
const gl = this.canvas.gl;
|
|
1268
|
+
for (const id in this.components) {
|
|
1269
|
+
if (this.components.hasOwnProperty(id)) {
|
|
1270
|
+
const component = this.components[id];
|
|
1271
|
+
if (component._webglContextRestored) {
|
|
1272
|
+
component._webglContextRestored(gl);
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
this._renderer.webglContextRestored(gl);
|
|
1277
|
+
//this.loading--;
|
|
1278
|
+
this.canvas.spinner.processes--;
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1256
1281
|
/**
|
|
1257
1282
|
* Returns the capabilities of this Scene.
|
|
1258
1283
|
*
|
|
@@ -1482,7 +1507,12 @@ class Scene extends Component {
|
|
|
1482
1507
|
|
|
1483
1508
|
renderEvent.sceneId = this.id;
|
|
1484
1509
|
|
|
1485
|
-
|
|
1510
|
+
const passes = this._passes;
|
|
1511
|
+
const clearEachPass = this._clearEachPass;
|
|
1512
|
+
let pass;
|
|
1513
|
+
let clear;
|
|
1514
|
+
|
|
1515
|
+
for (pass = 0; pass < passes; pass++) {
|
|
1486
1516
|
|
|
1487
1517
|
renderEvent.pass = pass;
|
|
1488
1518
|
|
|
@@ -1495,10 +1525,9 @@ class Scene extends Component {
|
|
|
1495
1525
|
*/
|
|
1496
1526
|
this.fire("rendering", renderEvent, true);
|
|
1497
1527
|
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
}
|
|
1501
|
-
this._renderer.render(pass, this._clearEachPass || (pass === 0));
|
|
1528
|
+
clear = clearEachPass || (pass === 0);
|
|
1529
|
+
|
|
1530
|
+
this._renderer.render({pass: pass, clear: clear, force: forceRender});
|
|
1502
1531
|
|
|
1503
1532
|
/**
|
|
1504
1533
|
* Fired when we have just rendered a frame for a Scene.
|
|
@@ -2319,11 +2348,6 @@ class Scene extends Component {
|
|
|
2319
2348
|
*/
|
|
2320
2349
|
pick(params, pickResult) {
|
|
2321
2350
|
|
|
2322
|
-
if (! this.canvas) {
|
|
2323
|
-
this.error("Picking not allowed on a destroyed Scene");
|
|
2324
|
-
return null;
|
|
2325
|
-
}
|
|
2326
|
-
|
|
2327
2351
|
if (this.canvas.boundary[2] === 0 || this.canvas.boundary[3] === 0) {
|
|
2328
2352
|
this.error("Picking not allowed while canvas has zero width or height");
|
|
2329
2353
|
return null;
|
|
@@ -2377,10 +2401,6 @@ class Scene extends Component {
|
|
|
2377
2401
|
* @deprecated
|
|
2378
2402
|
*/
|
|
2379
2403
|
snapPick(params) {
|
|
2380
|
-
if (! this.canvas) {
|
|
2381
|
-
this.error("Picking not allowed on a destroyed Scene");
|
|
2382
|
-
return null;
|
|
2383
|
-
}
|
|
2384
2404
|
if (undefined === this._warnSnapPickDeprecated) {
|
|
2385
2405
|
this._warnSnapPickDeprecated = true;
|
|
2386
2406
|
this.warn("Scene.snapPick() is deprecated since v2.4.2 - use Scene.pick() instead")
|
|
@@ -2809,9 +2829,6 @@ class Scene extends Component {
|
|
|
2809
2829
|
|
|
2810
2830
|
super.destroy();
|
|
2811
2831
|
|
|
2812
|
-
this._removeWebglcontextlostListener();
|
|
2813
|
-
// this.canvas.gl.getExtension("WEBGL_lose_context").loseContext(); // disabled because of XCD-306 and XEOK-295
|
|
2814
|
-
|
|
2815
2832
|
for (const id in this.components) {
|
|
2816
2833
|
if (this.components.hasOwnProperty(id)) {
|
|
2817
2834
|
this.components[id].destroy();
|
|
@@ -10,6 +10,7 @@ class ArrayBuf {
|
|
|
10
10
|
this._gl = gl;
|
|
11
11
|
this.type = type;
|
|
12
12
|
this.allocated = false;
|
|
13
|
+
this.ConstructorType = data.constructor;
|
|
13
14
|
|
|
14
15
|
switch (data.constructor) {
|
|
15
16
|
|
|
@@ -94,6 +95,25 @@ class ArrayBuf {
|
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
getData(baseIndex = 0, length = (this.numItems) - baseIndex) {
|
|
99
|
+
if (!this.allocated) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const array = new (this.ConstructorType)(length * this.itemSize);
|
|
104
|
+
|
|
105
|
+
this._gl.bindBuffer(this.type, this._handle);
|
|
106
|
+
this._gl.getBufferSubData(
|
|
107
|
+
this.type,
|
|
108
|
+
baseIndex * this.itemByteSize * this.itemSize,
|
|
109
|
+
array,
|
|
110
|
+
0,
|
|
111
|
+
length * this.itemSize
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
return array;
|
|
115
|
+
}
|
|
116
|
+
|
|
97
117
|
bind() {
|
|
98
118
|
if (!this.allocated) {
|
|
99
119
|
return;
|
|
@@ -108,11 +128,6 @@ class ArrayBuf {
|
|
|
108
128
|
this._gl.bindBuffer(this.type, null);
|
|
109
129
|
}
|
|
110
130
|
|
|
111
|
-
bindAtLocation(location) {
|
|
112
|
-
this.bind();
|
|
113
|
-
this._gl.vertexAttribPointer(location, this.itemSize, this.itemType, this.normalized, 0, 0);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
131
|
destroy() {
|
|
117
132
|
if (!this.allocated) {
|
|
118
133
|
return;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @desc Represents a WebGL vertex attribute buffer (VBO).
|
|
3
|
+
* @private
|
|
4
|
+
* @param gl {WebGLRenderingContext} The WebGL rendering context.
|
|
5
|
+
*/
|
|
6
|
+
class Attribute {
|
|
7
|
+
|
|
8
|
+
constructor(gl, location) {
|
|
9
|
+
this._gl = gl;
|
|
10
|
+
this.location = location;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
bindArrayBuffer(arrayBuf) {
|
|
14
|
+
if (!arrayBuf) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
arrayBuf.bind();
|
|
18
|
+
this._gl.enableVertexAttribArray(this.location);
|
|
19
|
+
this._gl.vertexAttribPointer(this.location, arrayBuf.itemSize, arrayBuf.itemType, arrayBuf.normalized, arrayBuf.stride, arrayBuf.offset);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export {Attribute};
|
|
@@ -11,7 +11,15 @@ import {createRTCViewMat} from "../math/rtcCoords.js";
|
|
|
11
11
|
class FrameContext {
|
|
12
12
|
|
|
13
13
|
constructor(scene) {
|
|
14
|
+
|
|
15
|
+
this._scene = scene;
|
|
16
|
+
|
|
14
17
|
this._matPool = [];
|
|
18
|
+
this._matPoolNextFreeIndex = 0;
|
|
19
|
+
|
|
20
|
+
this._rtcViewMats = {};
|
|
21
|
+
this._rtcPickViewMats = {};
|
|
22
|
+
|
|
15
23
|
this.reset();
|
|
16
24
|
}
|
|
17
25
|
|
|
@@ -23,6 +31,13 @@ class FrameContext {
|
|
|
23
31
|
|
|
24
32
|
this._matPoolNextFreeIndex = 0;
|
|
25
33
|
this._rtcViewMats = {};
|
|
34
|
+
this._rtcPickViewMats = {};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The WebGL rendering context.
|
|
38
|
+
* @type {WebGLRenderingContext}
|
|
39
|
+
*/
|
|
40
|
+
this.gl = this._scene.canvas.gl;
|
|
26
41
|
|
|
27
42
|
/**
|
|
28
43
|
* ID of the last {@link WebGLProgram} that was bound during the current frame.
|
|
@@ -142,39 +157,59 @@ class FrameContext {
|
|
|
142
157
|
*/
|
|
143
158
|
this.pass = 0;
|
|
144
159
|
|
|
145
|
-
|
|
160
|
+
/**
|
|
161
|
+
* The 4x4 viewing transform matrix the renderer is currently using when rendering castsShadows.
|
|
162
|
+
*
|
|
163
|
+
* This sets the viewpoint to look from the point of view of each {@link DirLight}
|
|
164
|
+
* or {@link PointLight} that casts a shadow.
|
|
165
|
+
*
|
|
166
|
+
* @property shadowViewMatrix
|
|
167
|
+
* @type {Number[]}
|
|
168
|
+
*/
|
|
169
|
+
this.shadowViewMatrix = null;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The 4x4 viewing projection matrix the renderer is currently using when rendering shadows.
|
|
173
|
+
*
|
|
174
|
+
* @property shadowProjMatrix
|
|
175
|
+
* @type {Number[]}
|
|
176
|
+
*/
|
|
177
|
+
this.shadowProjMatrix = null;
|
|
146
178
|
|
|
147
179
|
/**
|
|
148
|
-
* The 4x4
|
|
180
|
+
* The 4x4 viewing transform matrix the renderer is currently using when rendering a ray-pick.
|
|
149
181
|
*
|
|
150
|
-
* @
|
|
182
|
+
* This sets the viewpoint to look along the ray given to {@link Scene/pick:method"}}Scene#pick(){{/crossLink}}
|
|
183
|
+
* when picking with a ray.
|
|
184
|
+
*
|
|
185
|
+
* @property pickViewMatrix
|
|
151
186
|
* @type {Number[]}
|
|
152
187
|
*/
|
|
153
|
-
this.
|
|
188
|
+
this.pickViewMatrix = null;
|
|
154
189
|
|
|
155
190
|
/**
|
|
156
|
-
* The 4x4 projection matrix.
|
|
191
|
+
* The 4x4 orthographic projection transform matrix the renderer is currently using when rendering a ray-pick.
|
|
157
192
|
*
|
|
158
|
-
* @property
|
|
193
|
+
* @property pickProjMatrix
|
|
159
194
|
* @type {Number[]}
|
|
160
195
|
*/
|
|
161
|
-
this.
|
|
196
|
+
this.pickProjMatrix = null;
|
|
162
197
|
|
|
163
198
|
/**
|
|
164
199
|
* Distance to the near clipping plane when rendering depth fragments for GPU-accelerated 3D picking.
|
|
165
200
|
*
|
|
166
|
-
* @property
|
|
201
|
+
* @property pickZNear
|
|
167
202
|
* @type {Number|*}
|
|
168
203
|
*/
|
|
169
|
-
this.
|
|
204
|
+
this.pickZNear = 0.01;
|
|
170
205
|
|
|
171
206
|
/**
|
|
172
207
|
* Distance to the far clipping plane when rendering depth fragments for GPU-accelerated 3D picking.
|
|
173
208
|
*
|
|
174
|
-
* @property
|
|
209
|
+
* @property pickZFar
|
|
175
210
|
* @type {Number|*}
|
|
176
211
|
*/
|
|
177
|
-
this.
|
|
212
|
+
this.pickZFar = 5000;
|
|
178
213
|
|
|
179
214
|
/**
|
|
180
215
|
* Whether or not the renderer is currently picking invisible objects.
|
|
@@ -184,6 +219,22 @@ class FrameContext {
|
|
|
184
219
|
*/
|
|
185
220
|
this.pickInvisible = false;
|
|
186
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Used to draw only requested elements / indices.
|
|
224
|
+
*
|
|
225
|
+
* @property pickElementsCount
|
|
226
|
+
* @type {Number}
|
|
227
|
+
*/
|
|
228
|
+
this.pickElementsCount = null;
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Used to draw only requested elements / indices.
|
|
232
|
+
*
|
|
233
|
+
* @property pickElementsOffset
|
|
234
|
+
* @type {Number}
|
|
235
|
+
*/
|
|
236
|
+
this.pickElementsOffset = null;
|
|
237
|
+
|
|
187
238
|
/** The current line width.
|
|
188
239
|
*
|
|
189
240
|
* @property lineWidth
|
|
@@ -195,9 +246,16 @@ class FrameContext {
|
|
|
195
246
|
* Collects info from SceneModel.drawSnapInit and SceneModel.drawSnap,
|
|
196
247
|
* which is then used in Renderer to determine snap-picking results.
|
|
197
248
|
*
|
|
198
|
-
* @type {
|
|
249
|
+
* @type {{}}
|
|
250
|
+
*/
|
|
251
|
+
this.snapPickLayerParams = {};
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Collects info from SceneModel.drawSnapInit and SceneModel.drawSnap,
|
|
255
|
+
* which is then used in Renderer to determine snap-picking results.
|
|
256
|
+
* @type {number}
|
|
199
257
|
*/
|
|
200
|
-
this.
|
|
258
|
+
this.snapPickLayerNumber = 0;
|
|
201
259
|
|
|
202
260
|
/**
|
|
203
261
|
* Collects info from SceneModel.drawSnapInit and SceneModel.drawSnap,
|
|
@@ -221,12 +279,26 @@ class FrameContext {
|
|
|
221
279
|
let rtcViewMat = this._rtcViewMats[originHash];
|
|
222
280
|
if (!rtcViewMat) {
|
|
223
281
|
rtcViewMat = this._getNewMat();
|
|
224
|
-
createRTCViewMat(this.
|
|
282
|
+
createRTCViewMat(this._scene.camera.viewMatrix, origin, rtcViewMat);
|
|
225
283
|
this._rtcViewMats[originHash] = rtcViewMat;
|
|
226
284
|
}
|
|
227
285
|
return rtcViewMat;
|
|
228
286
|
}
|
|
229
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Get picking View RTC matrix for the given RTC center.
|
|
290
|
+
*/
|
|
291
|
+
getRTCPickViewMatrix(originHash, origin) {
|
|
292
|
+
let rtcPickViewMat = this._rtcPickViewMats[originHash];
|
|
293
|
+
if (!rtcPickViewMat) {
|
|
294
|
+
rtcPickViewMat = this._getNewMat();
|
|
295
|
+
const pickViewMat = this.pickViewMatrix || this._scene.camera.viewMatrix;
|
|
296
|
+
createRTCViewMat(pickViewMat, origin, rtcPickViewMat);
|
|
297
|
+
this._rtcPickViewMats[originHash] = rtcPickViewMat;
|
|
298
|
+
}
|
|
299
|
+
return rtcPickViewMat;
|
|
300
|
+
}
|
|
301
|
+
|
|
230
302
|
_getNewMat() {
|
|
231
303
|
let mat = this._matPool[this._matPoolNextFreeIndex];
|
|
232
304
|
if (!mat) {
|