@xeokit/xeokit-sdk 2.6.91 → 2.6.93

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.
Files changed (184) hide show
  1. package/dist/xeokit-sdk.cjs.js +13128 -44669
  2. package/dist/xeokit-sdk.es.js +13129 -44668
  3. package/dist/xeokit-sdk.es5.js +1414 -3498
  4. package/dist/xeokit-sdk.min.cjs.js +8 -8
  5. package/dist/xeokit-sdk.min.es.js +8 -8
  6. package/dist/xeokit-sdk.min.es5.js +7 -7
  7. package/package.json +1 -1
  8. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +21 -1
  9. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +32 -6
  10. package/src/viewer/Viewer.js +55 -103
  11. package/src/viewer/scene/canvas/Canvas.js +3 -43
  12. package/src/viewer/scene/geometry/ReadableGeometry.js +0 -25
  13. package/src/viewer/scene/lights/CubeTexture.js +0 -13
  14. package/src/viewer/scene/lights/DirLight.js +2 -1
  15. package/src/viewer/scene/lights/PointLight.js +2 -1
  16. package/src/viewer/scene/materials/Texture.js +0 -9
  17. package/src/viewer/scene/math/rtcCoords.js +1 -38
  18. package/src/viewer/scene/mesh/Mesh.js +454 -212
  19. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +305 -1504
  20. package/src/viewer/scene/mesh/draw/LambertShaderSource.js +35 -0
  21. package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +34 -0
  22. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +9 -158
  23. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +21 -151
  24. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +12 -124
  25. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +22 -97
  26. package/src/viewer/scene/model/SceneModel.js +248 -852
  27. package/src/viewer/scene/model/SceneModelEntity.js +4 -4
  28. package/src/viewer/scene/model/SceneModelMesh.js +3 -3
  29. package/src/viewer/scene/model/layer/DTXLayer.js +940 -0
  30. package/src/viewer/scene/model/layer/Layer.js +788 -0
  31. package/src/viewer/scene/model/layer/VBOLayer.js +1019 -0
  32. package/src/viewer/scene/model/layer/programs/ColorProgram.js +35 -0
  33. package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +46 -0
  34. package/src/viewer/scene/model/layer/programs/DepthProgram.js +11 -0
  35. package/src/viewer/scene/model/layer/programs/EdgesProgram.js +12 -0
  36. package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +24 -0
  37. package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +12 -0
  38. package/src/viewer/scene/model/layer/programs/PBRProgram.js +180 -0
  39. package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +30 -0
  40. package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +12 -0
  41. package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +18 -0
  42. package/src/viewer/scene/model/layer/programs/ShadowProgram.js +23 -0
  43. package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +15 -0
  44. package/src/viewer/scene/model/layer/programs/SnapProgram.js +29 -0
  45. package/src/viewer/scene/scene/Scene.js +21 -38
  46. package/src/viewer/scene/webgl/ArrayBuf.js +5 -20
  47. package/src/viewer/scene/webgl/FrameContext.js +14 -86
  48. package/src/viewer/scene/webgl/RenderBuffer.js +62 -262
  49. package/src/viewer/scene/webgl/Renderer.js +880 -843
  50. package/src/viewer/scene/webgl/WebGLRenderer.js +612 -0
  51. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +60 -132
  52. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +167 -328
  53. package/src/viewer/scene/mesh/draw/DrawRenderer.js +0 -998
  54. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +0 -259
  55. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +0 -160
  56. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +0 -286
  57. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +0 -263
  58. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +0 -221
  59. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +0 -223
  60. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +0 -200
  61. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +0 -214
  62. package/src/viewer/scene/model/RENDER_PASSES.js +0 -34
  63. package/src/viewer/scene/model/dtx/BindableDataTexture.js +0 -31
  64. package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +0 -27
  65. package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +0 -897
  66. package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +0 -46
  67. package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +0 -411
  68. package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +0 -49
  69. package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +0 -208
  70. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +0 -389
  71. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +0 -65
  72. package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +0 -1399
  73. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +0 -46
  74. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +0 -250
  75. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +0 -518
  76. package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +0 -54
  77. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +0 -639
  78. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +0 -464
  79. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +0 -423
  80. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +0 -431
  81. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +0 -345
  82. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +0 -436
  83. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +0 -466
  84. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +0 -437
  85. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +0 -460
  86. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +0 -437
  87. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +0 -307
  88. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +0 -472
  89. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +0 -474
  90. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +0 -435
  91. package/src/viewer/scene/model/vbo/ScratchMemory.js +0 -63
  92. package/src/viewer/scene/model/vbo/VBORenderer.js +0 -664
  93. package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +0 -704
  94. package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +0 -19
  95. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +0 -318
  96. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +0 -114
  97. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +0 -99
  98. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +0 -124
  99. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +0 -313
  100. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +0 -311
  101. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +0 -24
  102. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +0 -688
  103. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +0 -24
  104. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +0 -168
  105. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +0 -136
  106. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +0 -156
  107. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +0 -148
  108. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +0 -144
  109. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +0 -107
  110. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +0 -146
  111. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +0 -315
  112. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +0 -305
  113. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +0 -24
  114. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +0 -1346
  115. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +0 -131
  116. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +0 -135
  117. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +0 -12
  118. package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +0 -403
  119. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +0 -35
  120. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +0 -252
  121. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +0 -294
  122. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +0 -115
  123. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +0 -246
  124. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +0 -139
  125. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +0 -125
  126. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +0 -561
  127. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +0 -144
  128. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +0 -130
  129. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +0 -121
  130. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +0 -131
  131. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +0 -107
  132. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +0 -144
  133. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +0 -313
  134. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +0 -312
  135. package/src/viewer/scene/model/vbo/float16.js +0 -760
  136. package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +0 -711
  137. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +0 -148
  138. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +0 -26
  139. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +0 -139
  140. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +0 -127
  141. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +0 -308
  142. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +0 -299
  143. package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +0 -733
  144. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +0 -174
  145. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +0 -156
  146. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +0 -149
  147. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +0 -170
  148. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +0 -152
  149. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +0 -26
  150. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +0 -174
  151. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +0 -119
  152. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +0 -154
  153. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +0 -307
  154. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +0 -293
  155. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +0 -150
  156. package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +0 -1289
  157. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +0 -135
  158. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +0 -137
  159. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +0 -12
  160. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +0 -403
  161. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +0 -267
  162. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +0 -299
  163. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +0 -126
  164. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +0 -255
  165. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +0 -130
  166. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +0 -32
  167. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +0 -138
  168. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +0 -128
  169. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +0 -561
  170. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +0 -149
  171. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +0 -136
  172. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +0 -130
  173. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +0 -145
  174. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +0 -113
  175. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +0 -148
  176. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +0 -319
  177. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +0 -310
  178. package/src/viewer/scene/webgl/Attribute.js +0 -23
  179. package/src/viewer/scene/webgl/Program.js +0 -181
  180. package/src/viewer/scene/webgl/RenderBufferManager.js +0 -34
  181. package/src/viewer/scene/webgl/Sampler.js +0 -18
  182. package/src/viewer/scene/webgl/Shader.js +0 -49
  183. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +0 -324
  184. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +0 -384
@@ -1,221 +0,0 @@
1
- /**
2
- * @author xeolabs / https://github.com/xeolabs
3
- */
4
-
5
- import {OcclusionShaderSource} from "./OcclusionShaderSource.js";
6
- import {Program} from "../../webgl/Program.js";
7
- import {stats} from "../../stats.js";
8
- import {math} from "../../math/math.js";
9
- import {getPlaneRTCPos} from "../../math/rtcCoords.js";
10
-
11
- const tempVec3a = math.vec3();
12
-
13
- // No ID, because there is exactly one PickMeshRenderer per scene
14
-
15
- /**
16
- * @private
17
- */
18
- const OcclusionRenderer = function (hash, mesh) {
19
- this._hash = hash;
20
- this._shaderSource = new OcclusionShaderSource(mesh);
21
- this._scene = mesh.scene;
22
- this._useCount = 0;
23
- this._allocate(mesh);
24
- };
25
-
26
- const renderers = {};
27
-
28
- OcclusionRenderer.get = function (mesh) {
29
- const hash = [
30
- mesh.scene.canvas.canvas.id,
31
- mesh.scene._sectionPlanesState.getHash(),
32
- mesh._geometry._state.hash,
33
- mesh._state.occlusionHash
34
- ].join(";");
35
- let renderer = renderers[hash];
36
- if (!renderer) {
37
- renderer = new OcclusionRenderer(hash, mesh);
38
- if (renderer.errors) {
39
- console.log(renderer.errors.join("\n"));
40
- return null;
41
- }
42
- renderers[hash] = renderer;
43
- stats.memory.programs++;
44
- }
45
- renderer._useCount++;
46
- return renderer;
47
- };
48
-
49
- OcclusionRenderer.prototype.put = function () {
50
- if (--this._useCount === 0) {
51
- if (this._program) {
52
- this._program.destroy();
53
- }
54
- delete renderers[this._hash];
55
- stats.memory.programs--;
56
- }
57
- };
58
-
59
- OcclusionRenderer.prototype.webglContextRestored = function () {
60
- this._program = null;
61
- };
62
-
63
- OcclusionRenderer.prototype.drawMesh = function (frameCtx, mesh) {
64
-
65
- if (!this._program) {
66
- this._allocate(mesh);
67
- }
68
-
69
- const scene = this._scene;
70
- const gl = scene.canvas.gl;
71
- const materialState = mesh._material._state;
72
- const meshState = mesh._state;
73
- const geometryState = mesh._geometry._state;
74
- const origin = mesh.origin;
75
-
76
- if (materialState.alpha < 1.0) {
77
- return;
78
- }
79
-
80
- if (frameCtx.lastProgramId !== this._program.id) {
81
- frameCtx.lastProgramId = this._program.id;
82
- this._bindProgram(frameCtx);
83
- }
84
-
85
- if (materialState.id !== this._lastMaterialId) {
86
- const backfaces = materialState.backfaces;
87
- if (frameCtx.backfaces !== backfaces) {
88
- if (backfaces) {
89
- gl.disable(gl.CULL_FACE);
90
- } else {
91
- gl.enable(gl.CULL_FACE);
92
- }
93
- frameCtx.backfaces = backfaces;
94
- }
95
- const frontface = materialState.frontface;
96
- if (frameCtx.frontface !== frontface) {
97
- if (frontface) {
98
- gl.frontFace(gl.CCW);
99
- } else {
100
- gl.frontFace(gl.CW);
101
- }
102
- frameCtx.frontface = frontface;
103
- }
104
- this._lastMaterialId = materialState.id;
105
- }
106
-
107
- const camera = scene.camera;
108
-
109
- gl.uniformMatrix4fv(this._uViewMatrix, false, origin ? frameCtx.getRTCViewMatrix(meshState.originHash, origin) : camera.viewMatrix);
110
-
111
- if (meshState.clippable) {
112
- const numAllocatedSectionPlanes = scene._sectionPlanesState.getNumAllocatedSectionPlanes();
113
- const numSectionPlanes = scene._sectionPlanesState.sectionPlanes.length;
114
- if (numAllocatedSectionPlanes > 0) {
115
- const sectionPlanes = scene._sectionPlanesState.sectionPlanes;
116
- const renderFlags = mesh.renderFlags;
117
- for (let sectionPlaneIndex = 0; sectionPlaneIndex < numAllocatedSectionPlanes; sectionPlaneIndex++) {
118
- const sectionPlaneUniforms = this._uSectionPlanes[sectionPlaneIndex];
119
- if (sectionPlaneUniforms) {
120
- if (sectionPlaneIndex < numSectionPlanes) {
121
- const active = renderFlags.sectionPlanesActivePerLayer[sectionPlaneIndex];
122
- gl.uniform1i(sectionPlaneUniforms.active, active ? 1 : 0);
123
- if (active) {
124
- const sectionPlane = sectionPlanes[sectionPlaneIndex];
125
- if (origin) {
126
- const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a);
127
- gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
128
- } else {
129
- gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
130
- }
131
- gl.uniform3fv(sectionPlaneUniforms.dir, sectionPlane.dir);
132
- }
133
- } else {
134
- gl.uniform1i(sectionPlaneUniforms.active, 0);
135
- }
136
- }
137
- }
138
- }
139
- }
140
-
141
- gl.uniformMatrix4fv(this._uProjMatrix, false, camera._project._state.matrix);
142
- gl.uniformMatrix4fv(this._uModelMatrix, gl.FALSE, mesh.worldMatrix);
143
-
144
- if (this._uClippable) {
145
- gl.uniform1i(this._uClippable, mesh._state.clippable);
146
- }
147
-
148
- gl.uniform3fv(this._uOffset, mesh._state.offset);
149
-
150
- if (geometryState.id !== this._lastGeometryId) {
151
- if (this._uPositionsDecodeMatrix) {
152
- gl.uniformMatrix4fv(this._uPositionsDecodeMatrix, false, geometryState.positionsDecodeMatrix);
153
- }
154
- if (this._aPosition) {
155
- this._aPosition.bindArrayBuffer(geometryState.positionsBuf, geometryState.compressGeometry ? gl.UNSIGNED_SHORT : gl.FLOAT);
156
- frameCtx.bindArray++;
157
- }
158
- if (geometryState.indicesBuf) {
159
- geometryState.indicesBuf.bind();
160
- frameCtx.bindArray++;
161
- }
162
- this._lastGeometryId = geometryState.id;
163
- }
164
- if (geometryState.indicesBuf) {
165
- gl.drawElements(geometryState.primitive, geometryState.indicesBuf.numItems, geometryState.indicesBuf.itemType, 0);
166
- frameCtx.drawElements++;
167
- } else if (geometryState.positions) {
168
- gl.drawArrays(gl.TRIANGLES, 0, geometryState.positions.numItems);
169
- }
170
- };
171
-
172
- OcclusionRenderer.prototype._allocate = function (mesh) {
173
- const scene = mesh.scene;
174
- const gl = scene.canvas.gl;
175
- this._program = new Program(gl, this._shaderSource);
176
- if (this._program.errors) {
177
- this.errors = this._program.errors;
178
- return;
179
- }
180
- const program = this._program;
181
- this._uPositionsDecodeMatrix = program.getLocation("positionsDecodeMatrix");
182
- this._uModelMatrix = program.getLocation("modelMatrix");
183
- this._uViewMatrix = program.getLocation("viewMatrix");
184
- this._uProjMatrix = program.getLocation("projMatrix");
185
- this._uSectionPlanes = [];
186
- const clips = scene._sectionPlanesState.sectionPlanes;
187
- for (let i = 0, len = clips.length; i < len; i++) {
188
- this._uSectionPlanes.push({
189
- active: program.getLocation("sectionPlaneActive" + i),
190
- pos: program.getLocation("sectionPlanePos" + i),
191
- dir: program.getLocation("sectionPlaneDir" + i)
192
- });
193
- }
194
- this._aPosition = program.getAttribute("position");
195
- this._uClippable = program.getLocation("clippable");
196
- this._uOffset = program.getLocation("offset");
197
- if (scene.logarithmicDepthBufferEnabled ) {
198
- this._uLogDepthBufFC = program.getLocation("logDepthBufFC");
199
- }
200
- this._lastMaterialId = null;
201
- this._lastVertexBufsId = null;
202
- this._lastGeometryId = null;
203
- };
204
-
205
- OcclusionRenderer.prototype._bindProgram = function (frameCtx) {
206
- const scene = this._scene;
207
- const project = scene.camera.project;
208
- const gl = scene.canvas.gl;
209
- this._program.bind();
210
- frameCtx.useProgram++;
211
- gl.uniformMatrix4fv(this._uProjMatrix, false, project.matrix);
212
- if (scene.logarithmicDepthBufferEnabled ) {
213
- const logDepthBufFC = 2.0 / (Math.log(project.far + 1.0) / Math.LN2);
214
- gl.uniform1f(this._uLogDepthBufFC, logDepthBufFC);
215
- }
216
- this._lastMaterialId = null;
217
- this._lastVertexBufsId = null;
218
- this._lastGeometryId = null;
219
- };
220
-
221
- export {OcclusionRenderer};
@@ -1,223 +0,0 @@
1
- /**
2
- * @author xeolabs / https://github.com/xeolabs
3
- */
4
-
5
- import {PickMeshShaderSource} from "./PickMeshShaderSource.js";
6
- import {Program} from "../../webgl/Program.js";
7
- import {stats} from "../../stats.js";
8
- import {math} from "../../math/math.js";
9
- import {getPlaneRTCPos} from "../../math/rtcCoords.js";
10
-
11
- const tempVec3a = math.vec3();
12
-
13
- // No ID, because there is exactly one PickMeshRenderer per scene
14
-
15
- /**
16
- * @private
17
- */
18
- const PickMeshRenderer = function (hash, mesh) {
19
- this._hash = hash;
20
- this._shaderSource = new PickMeshShaderSource(mesh);
21
- this._scene = mesh.scene;
22
- this._useCount = 0;
23
- this._allocate(mesh);
24
- };
25
-
26
- const renderers = {};
27
-
28
- PickMeshRenderer.get = function (mesh) {
29
- const hash = [
30
- mesh.scene.canvas.canvas.id,
31
- mesh.scene._sectionPlanesState.getHash(),
32
- mesh._geometry._state.hash,
33
- mesh._state.hash
34
- ].join(";");
35
- let renderer = renderers[hash];
36
- if (!renderer) {
37
- renderer = new PickMeshRenderer(hash, mesh);
38
- if (renderer.errors) {
39
- console.log(renderer.errors.join("\n"));
40
- return null;
41
- }
42
- renderers[hash] = renderer;
43
- stats.memory.programs++;
44
- }
45
- renderer._useCount++;
46
- return renderer;
47
- };
48
-
49
- PickMeshRenderer.prototype.put = function () {
50
- if (--this._useCount === 0) {
51
- if (this._program) {
52
- this._program.destroy();
53
- }
54
- delete renderers[this._hash];
55
- stats.memory.programs--;
56
- }
57
- };
58
-
59
- PickMeshRenderer.prototype.webglContextRestored = function () {
60
- this._program = null;
61
- };
62
-
63
- PickMeshRenderer.prototype.drawMesh = function (frameCtx, mesh) {
64
-
65
- if (!this._program) {
66
- this._allocate(mesh);
67
- }
68
-
69
- const scene = this._scene;
70
- const gl = scene.canvas.gl;
71
- const meshState = mesh._state;
72
- const materialState = mesh._material._state;
73
- const geometryState = mesh._geometry._state;
74
- const origin = mesh.origin;
75
-
76
- if (frameCtx.lastProgramId !== this._program.id) {
77
- frameCtx.lastProgramId = this._program.id;
78
- this._bindProgram(frameCtx);
79
- }
80
-
81
- gl.uniformMatrix4fv(this._uViewMatrix, false, origin ? frameCtx.getRTCPickViewMatrix(meshState.originHash, origin) : frameCtx.pickViewMatrix);
82
-
83
- if (meshState.clippable) {
84
- const numAllocatedSectionPlanes = scene._sectionPlanesState.getNumAllocatedSectionPlanes();
85
- const numSectionPlanes = scene._sectionPlanesState.sectionPlanes.length;
86
- if (numAllocatedSectionPlanes > 0) {
87
- const sectionPlanes = scene._sectionPlanesState.sectionPlanes;
88
- const renderFlags = mesh.renderFlags;
89
- for (let sectionPlaneIndex = 0; sectionPlaneIndex < numAllocatedSectionPlanes; sectionPlaneIndex++) {
90
- const sectionPlaneUniforms = this._uSectionPlanes[sectionPlaneIndex];
91
- if (sectionPlaneUniforms) {
92
- if (sectionPlaneIndex < numSectionPlanes) {
93
- const active = renderFlags.sectionPlanesActivePerLayer[sectionPlaneIndex];
94
- gl.uniform1i(sectionPlaneUniforms.active, active ? 1 : 0);
95
- if (active) {
96
- const sectionPlane = sectionPlanes[sectionPlaneIndex];
97
- if (origin) {
98
- const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a);
99
- gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
100
- } else {
101
- gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
102
- }
103
- gl.uniform3fv(sectionPlaneUniforms.dir, sectionPlane.dir);
104
- }
105
- } else {
106
- gl.uniform1i(sectionPlaneUniforms.active, 0);
107
- }
108
- }
109
- }
110
- }
111
- }
112
-
113
- if (materialState.id !== this._lastMaterialId) {
114
- const backfaces = materialState.backfaces;
115
- if (frameCtx.backfaces !== backfaces) {
116
- if (backfaces) {
117
- gl.disable(gl.CULL_FACE);
118
- } else {
119
- gl.enable(gl.CULL_FACE);
120
- }
121
- frameCtx.backfaces = backfaces;
122
- }
123
- const frontface = materialState.frontface;
124
- if (frameCtx.frontface !== frontface) {
125
- if (frontface) {
126
- gl.frontFace(gl.CCW);
127
- } else {
128
- gl.frontFace(gl.CW);
129
- }
130
- frameCtx.frontface = frontface;
131
- }
132
- this._lastMaterialId = materialState.id;
133
- }
134
-
135
- gl.uniformMatrix4fv(this._uProjMatrix, false, frameCtx.pickProjMatrix);
136
- gl.uniformMatrix4fv(this._uModelMatrix, false, mesh.worldMatrix);
137
- if (this._uClippable) {
138
- gl.uniform1i(this._uClippable, mesh._state.clippable);
139
- }
140
- gl.uniform3fv(this._uOffset, mesh._state.offset);
141
-
142
- if (geometryState.id !== this._lastGeometryId) {
143
- if (this._uPositionsDecodeMatrix) {
144
- gl.uniformMatrix4fv(this._uPositionsDecodeMatrix, false, geometryState.positionsDecodeMatrix);
145
- }
146
- if (this._aPosition) {
147
- this._aPosition.bindArrayBuffer(geometryState.positionsBuf, geometryState.compressGeometry ? gl.UNSIGNED_SHORT : gl.FLOAT);
148
- frameCtx.bindArray++;
149
- }
150
- if (geometryState.indicesBuf) {
151
- geometryState.indicesBuf.bind();
152
- frameCtx.bindArray++;
153
- }
154
- this._lastGeometryId = geometryState.id;
155
- }
156
-
157
- // Mesh-indexed color
158
- var pickID = mesh._state.pickID;
159
- const a = pickID >> 24 & 0xFF;
160
- const b = pickID >> 16 & 0xFF;
161
- const g = pickID >> 8 & 0xFF;
162
- const r = pickID & 0xFF;
163
- gl.uniform4f(this._uPickColor, r / 255, g / 255, b / 255, a / 255);
164
-
165
- gl.uniform2fv(this._uPickClipPos, frameCtx.pickClipPos);
166
-
167
- if (geometryState.indicesBuf) {
168
- gl.drawElements(geometryState.primitive, geometryState.indicesBuf.numItems, geometryState.indicesBuf.itemType, 0);
169
- frameCtx.drawElements++;
170
- } else if (geometryState.positions) {
171
- gl.drawArrays(gl.TRIANGLES, 0, geometryState.positions.numItems);
172
- }
173
- };
174
-
175
- PickMeshRenderer.prototype._allocate = function (mesh) {
176
- const scene = mesh.scene;
177
- const gl = scene.canvas.gl;
178
- this._program = new Program(gl, this._shaderSource);
179
- if (this._program.errors) {
180
- this.errors = this._program.errors;
181
- return;
182
- }
183
- const program = this._program;
184
- this._uPositionsDecodeMatrix = program.getLocation("positionsDecodeMatrix");
185
- this._uModelMatrix = program.getLocation("modelMatrix");
186
- this._uViewMatrix = program.getLocation("viewMatrix");
187
- this._uProjMatrix = program.getLocation("projMatrix");
188
- this._uSectionPlanes = [];
189
- const clips = scene._sectionPlanesState.sectionPlanes;
190
- for (let i = 0, len = clips.length; i < len; i++) {
191
- this._uSectionPlanes.push({
192
- active: program.getLocation("sectionPlaneActive" + i),
193
- pos: program.getLocation("sectionPlanePos" + i),
194
- dir: program.getLocation("sectionPlaneDir" + i)
195
- });
196
- }
197
- this._aPosition = program.getAttribute("position");
198
- this._uClippable = program.getLocation("clippable");
199
- this._uPickColor = program.getLocation("pickColor");
200
- this._uPickClipPos = program.getLocation("pickClipPos");
201
- this._uOffset = program.getLocation("offset");
202
- if (scene.logarithmicDepthBufferEnabled ) {
203
- this._uLogDepthBufFC = program.getLocation("logDepthBufFC");
204
- }
205
- this._lastMaterialId = null;
206
- this._lastGeometryId = null;
207
- };
208
-
209
- PickMeshRenderer.prototype._bindProgram = function (frameCtx) {
210
- const scene = this._scene;
211
- const gl = scene.canvas.gl;
212
- const project = scene.camera.project;
213
- this._program.bind();
214
- frameCtx.useProgram++;
215
- if (scene.logarithmicDepthBufferEnabled ) {
216
- const logDepthBufFC = 2.0 / (Math.log(project.far + 1.0) / Math.LN2);
217
- gl.uniform1f(this._uLogDepthBufFC, logDepthBufFC);
218
- }
219
- this._lastMaterialId = null;
220
- this._lastGeometryId = null;
221
- };
222
-
223
- export {PickMeshRenderer};
@@ -1,200 +0,0 @@
1
- /**
2
- * @author xeolabs / https://github.com/xeolabs
3
- */
4
-
5
- import {PickTriangleShaderSource} from "./PickTriangleShaderSource.js";
6
- import {Program} from "../../webgl/Program.js";
7
- import {stats} from "../../stats.js";
8
- import {getPlaneRTCPos} from "../../math/rtcCoords.js";
9
- import {math} from "../../math/math.js";
10
-
11
- const tempVec3a = math.vec3();
12
-
13
- /**
14
- * @private
15
- */
16
- const PickTriangleRenderer = function (hash, mesh) {
17
- this._hash = hash;
18
- this._scene = mesh.scene;
19
- this._useCount = 0;
20
- this._shaderSource = new PickTriangleShaderSource(mesh);
21
- this._allocate(mesh);
22
- };
23
-
24
- const renderers = {};
25
-
26
- PickTriangleRenderer.get = function (mesh) {
27
- const hash = [
28
- mesh.scene.canvas.canvas.id,
29
- mesh.scene._sectionPlanesState.getHash(),
30
- mesh._geometry._state.compressGeometry ? "cp" : "",
31
- mesh._state.hash
32
- ].join(";");
33
- let renderer = renderers[hash];
34
- if (!renderer) {
35
- renderer = new PickTriangleRenderer(hash, mesh);
36
- if (renderer.errors) {
37
- console.log(renderer.errors.join("\n"));
38
- return null;
39
- }
40
- renderers[hash] = renderer;
41
- stats.memory.programs++;
42
- }
43
- renderer._useCount++;
44
- return renderer;
45
- };
46
-
47
- PickTriangleRenderer.prototype.put = function () {
48
- if (--this._useCount === 0) {
49
- if (this._program) {
50
- this._program.destroy();
51
- }
52
- delete renderers[this._hash];
53
- stats.memory.programs--;
54
- }
55
- };
56
-
57
- PickTriangleRenderer.prototype.webglContextRestored = function () {
58
- this._program = null;
59
- };
60
-
61
- PickTriangleRenderer.prototype.drawMesh = function (frameCtx, mesh) {
62
-
63
- if (!this._program) {
64
- this._allocate(mesh);
65
- }
66
-
67
- const scene = this._scene;
68
- const gl = scene.canvas.gl;
69
- const meshState = mesh._state;
70
- const materialState = mesh._material._state;
71
- const geometry = mesh._geometry;
72
- const geometryState = mesh._geometry._state;
73
- const origin = mesh.origin;
74
- const backfaces = materialState.backfaces;
75
- const frontface = materialState.frontface;
76
- const project = scene.camera.project;
77
- const positionsBuf = geometry._getPickTrianglePositions();
78
- const pickColorsBuf = geometry._getPickTriangleColors();
79
-
80
- this._program.bind();
81
-
82
- frameCtx.useProgram++;
83
-
84
- if (scene.logarithmicDepthBufferEnabled ) {
85
- const logDepthBufFC = 2.0 / (Math.log(project.far + 1.0) / Math.LN2);
86
- gl.uniform1f(this._uLogDepthBufFC, logDepthBufFC);
87
- }
88
-
89
- gl.uniformMatrix4fv(this._uViewMatrix, false, origin ? frameCtx.getRTCPickViewMatrix(meshState.originHash, origin) : frameCtx.pickViewMatrix);
90
-
91
- if (meshState.clippable) {
92
- const numAllocatedSectionPlanes = scene._sectionPlanesState.getNumAllocatedSectionPlanes();
93
- const numSectionPlanes = scene._sectionPlanesState.sectionPlanes.length;
94
- if (numAllocatedSectionPlanes > 0) {
95
- const sectionPlanes = scene._sectionPlanesState.sectionPlanes;
96
- const renderFlags = mesh.renderFlags;
97
- for (let sectionPlaneIndex = 0; sectionPlaneIndex < numAllocatedSectionPlanes; sectionPlaneIndex++) {
98
- const sectionPlaneUniforms = this._uSectionPlanes[sectionPlaneIndex];
99
- if (sectionPlaneUniforms) {
100
- if (sectionPlaneIndex < numSectionPlanes) {
101
- const active = renderFlags.sectionPlanesActivePerLayer[sectionPlaneIndex];
102
- gl.uniform1i(sectionPlaneUniforms.active, active ? 1 : 0);
103
- if (active) {
104
- const sectionPlane = sectionPlanes[sectionPlaneIndex];
105
- if (origin) {
106
- const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a);
107
- gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
108
- } else {
109
- gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
110
- }
111
- gl.uniform3fv(sectionPlaneUniforms.dir, sectionPlane.dir);
112
- }
113
- } else {
114
- gl.uniform1i(sectionPlaneUniforms.active, 0);
115
- }
116
- }
117
- }
118
- }
119
- }
120
-
121
- gl.uniformMatrix4fv(this._uProjMatrix, false, frameCtx.pickProjMatrix);
122
-
123
- if (scene.logarithmicDepthBufferEnabled) {
124
- gl.uniform1f(this._uZFar, scene.camera.project.far);
125
- }
126
-
127
- if (frameCtx.backfaces !== backfaces) {
128
- if (backfaces) {
129
- gl.disable(gl.CULL_FACE);
130
- } else {
131
- gl.enable(gl.CULL_FACE);
132
- }
133
- frameCtx.backfaces = backfaces;
134
- }
135
- if (frameCtx.frontface !== frontface) {
136
- if (frontface) {
137
- gl.frontFace(gl.CCW);
138
- } else {
139
- gl.frontFace(gl.CW);
140
- }
141
- frameCtx.frontface = frontface;
142
- }
143
-
144
- gl.uniformMatrix4fv(this._uModelMatrix, false, mesh.worldMatrix);
145
- if (this._uClippable) {
146
- gl.uniform1i(this._uClippable, mesh._state.clippable);
147
- }
148
- gl.uniform3fv(this._uOffset, mesh._state.offset);
149
- if (this._uPositionsDecodeMatrix) {
150
- gl.uniformMatrix4fv(this._uPositionsDecodeMatrix, false, geometryState.positionsDecodeMatrix);
151
- this._aPosition.bindArrayBuffer(positionsBuf, geometryState.compressGeometry ? gl.UNSIGNED_SHORT : gl.FLOAT);
152
- } else {
153
- this._aPosition.bindArrayBuffer(positionsBuf);
154
- }
155
-
156
- gl.uniform2fv(this._uPickClipPos, frameCtx.pickClipPos);
157
-
158
- pickColorsBuf.bind();
159
- gl.enableVertexAttribArray(this._aColor.location);
160
- gl.vertexAttribPointer(this._aColor.location, pickColorsBuf.itemSize, pickColorsBuf.itemType, true, 0, 0); // Normalize
161
- gl.drawArrays(geometryState.primitive, 0, positionsBuf.numItems / 3);
162
- };
163
-
164
- PickTriangleRenderer.prototype._allocate = function (mesh) {
165
- const scene = mesh.scene;
166
- const gl = scene.canvas.gl;
167
- this._program = new Program(gl, this._shaderSource);
168
- this._useCount = 0;
169
- if (this._program.errors) {
170
- this.errors = this._program.errors;
171
- return;
172
- }
173
- const program = this._program;
174
- this._uPositionsDecodeMatrix = program.getLocation("positionsDecodeMatrix");
175
- this._uModelMatrix = program.getLocation("modelMatrix");
176
- this._uViewMatrix = program.getLocation("viewMatrix");
177
- this._uProjMatrix = program.getLocation("projMatrix");
178
- this._uSectionPlanes = [];
179
- const sectionPlanes = scene._sectionPlanesState.sectionPlanes;
180
- for (let i = 0, len = sectionPlanes.length; i < len; i++) {
181
- this._uSectionPlanes.push({
182
- active: program.getLocation("sectionPlaneActive" + i),
183
- pos: program.getLocation("sectionPlanePos" + i),
184
- dir: program.getLocation("sectionPlaneDir" + i)
185
- });
186
- }
187
- this._aPosition = program.getAttribute("position");
188
- this._aColor = program.getAttribute("color");
189
- this._uPickClipPos = program.getLocation("pickClipPos");
190
- this._uClippable = program.getLocation("clippable");
191
- this._uOffset = program.getLocation("offset");
192
- if (scene.logarithmicDepthBufferEnabled ) {
193
- this._uLogDepthBufFC = program.getLocation("logDepthBufFC");
194
- }
195
- };
196
-
197
- export {PickTriangleRenderer};
198
-
199
-
200
-