@xeokit/xeokit-sdk 2.6.84 → 2.6.85-renderers-refactor-v2

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 (183) hide show
  1. package/dist/xeokit-sdk.cjs.js +13077 -44659
  2. package/dist/xeokit-sdk.es.js +13078 -44658
  3. package/dist/xeokit-sdk.es5.js +1402 -3502
  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/lib/ui/index.js +12 -0
  9. package/src/viewer/Viewer.js +55 -103
  10. package/src/viewer/scene/canvas/Canvas.js +3 -43
  11. package/src/viewer/scene/geometry/ReadableGeometry.js +0 -25
  12. package/src/viewer/scene/lights/CubeTexture.js +0 -13
  13. package/src/viewer/scene/lights/DirLight.js +2 -1
  14. package/src/viewer/scene/lights/PointLight.js +2 -1
  15. package/src/viewer/scene/materials/Texture.js +0 -9
  16. package/src/viewer/scene/math/rtcCoords.js +1 -38
  17. package/src/viewer/scene/mesh/Mesh.js +454 -212
  18. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +305 -1502
  19. package/src/viewer/scene/mesh/draw/LambertShaderSource.js +35 -0
  20. package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +34 -0
  21. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +9 -157
  22. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +21 -150
  23. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +12 -124
  24. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +22 -97
  25. package/src/viewer/scene/model/SceneModel.js +245 -861
  26. package/src/viewer/scene/model/SceneModelEntity.js +4 -4
  27. package/src/viewer/scene/model/SceneModelMesh.js +3 -3
  28. package/src/viewer/scene/model/layer/DTXLayer.js +940 -0
  29. package/src/viewer/scene/model/layer/Layer.js +786 -0
  30. package/src/viewer/scene/model/layer/VBOLayer.js +1019 -0
  31. package/src/viewer/scene/model/layer/programs/ColorProgram.js +35 -0
  32. package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +46 -0
  33. package/src/viewer/scene/model/layer/programs/DepthProgram.js +11 -0
  34. package/src/viewer/scene/model/layer/programs/EdgesProgram.js +12 -0
  35. package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +24 -0
  36. package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +12 -0
  37. package/src/viewer/scene/model/layer/programs/PBRProgram.js +180 -0
  38. package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +30 -0
  39. package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +12 -0
  40. package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +18 -0
  41. package/src/viewer/scene/model/layer/programs/ShadowProgram.js +23 -0
  42. package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +15 -0
  43. package/src/viewer/scene/model/layer/programs/SnapProgram.js +28 -0
  44. package/src/viewer/scene/scene/Scene.js +21 -38
  45. package/src/viewer/scene/webgl/ArrayBuf.js +5 -20
  46. package/src/viewer/scene/webgl/FrameContext.js +14 -86
  47. package/src/viewer/scene/webgl/RenderBuffer.js +62 -262
  48. package/src/viewer/scene/webgl/Renderer.js +880 -843
  49. package/src/viewer/scene/webgl/WebGLRenderer.js +612 -0
  50. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +60 -132
  51. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +167 -328
  52. package/src/viewer/scene/mesh/draw/DrawRenderer.js +0 -996
  53. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +0 -259
  54. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +0 -159
  55. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +0 -286
  56. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +0 -262
  57. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +0 -221
  58. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +0 -223
  59. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +0 -200
  60. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +0 -214
  61. package/src/viewer/scene/model/RENDER_PASSES.js +0 -34
  62. package/src/viewer/scene/model/dtx/BindableDataTexture.js +0 -31
  63. package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +0 -27
  64. package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +0 -897
  65. package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +0 -46
  66. package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +0 -411
  67. package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +0 -49
  68. package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +0 -208
  69. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +0 -389
  70. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +0 -65
  71. package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +0 -1399
  72. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +0 -46
  73. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +0 -250
  74. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +0 -518
  75. package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +0 -54
  76. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +0 -639
  77. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +0 -464
  78. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +0 -423
  79. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +0 -431
  80. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +0 -345
  81. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +0 -436
  82. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +0 -466
  83. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +0 -437
  84. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +0 -460
  85. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +0 -437
  86. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +0 -307
  87. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +0 -472
  88. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +0 -474
  89. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +0 -435
  90. package/src/viewer/scene/model/vbo/ScratchMemory.js +0 -63
  91. package/src/viewer/scene/model/vbo/VBORenderer.js +0 -664
  92. package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +0 -704
  93. package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +0 -19
  94. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +0 -318
  95. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +0 -114
  96. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +0 -99
  97. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +0 -124
  98. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +0 -313
  99. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +0 -311
  100. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +0 -24
  101. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +0 -688
  102. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +0 -24
  103. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +0 -168
  104. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +0 -136
  105. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +0 -156
  106. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +0 -148
  107. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +0 -144
  108. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +0 -107
  109. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +0 -146
  110. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +0 -315
  111. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +0 -305
  112. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +0 -24
  113. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +0 -1346
  114. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +0 -131
  115. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +0 -135
  116. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +0 -12
  117. package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +0 -403
  118. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +0 -35
  119. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +0 -252
  120. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +0 -294
  121. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +0 -115
  122. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +0 -246
  123. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +0 -139
  124. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +0 -125
  125. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +0 -561
  126. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +0 -144
  127. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +0 -130
  128. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +0 -121
  129. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +0 -131
  130. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +0 -107
  131. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +0 -144
  132. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +0 -313
  133. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +0 -312
  134. package/src/viewer/scene/model/vbo/float16.js +0 -760
  135. package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +0 -711
  136. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +0 -148
  137. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +0 -26
  138. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +0 -139
  139. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +0 -127
  140. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +0 -308
  141. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +0 -299
  142. package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +0 -733
  143. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +0 -174
  144. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +0 -156
  145. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +0 -149
  146. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +0 -170
  147. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +0 -152
  148. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +0 -26
  149. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +0 -174
  150. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +0 -119
  151. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +0 -154
  152. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +0 -307
  153. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +0 -293
  154. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +0 -150
  155. package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +0 -1289
  156. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +0 -135
  157. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +0 -137
  158. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +0 -12
  159. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +0 -403
  160. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +0 -267
  161. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +0 -299
  162. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +0 -126
  163. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +0 -255
  164. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +0 -130
  165. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +0 -32
  166. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +0 -138
  167. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +0 -128
  168. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +0 -561
  169. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +0 -149
  170. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +0 -136
  171. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +0 -130
  172. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +0 -145
  173. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +0 -113
  174. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +0 -148
  175. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +0 -319
  176. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +0 -310
  177. package/src/viewer/scene/webgl/Attribute.js +0 -23
  178. package/src/viewer/scene/webgl/Program.js +0 -181
  179. package/src/viewer/scene/webgl/RenderBufferManager.js +0 -34
  180. package/src/viewer/scene/webgl/Sampler.js +0 -18
  181. package/src/viewer/scene/webgl/Shader.js +0 -49
  182. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +0 -324
  183. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +0 -384
@@ -1,46 +0,0 @@
1
- /**
2
- * @private
3
- */
4
- export class DTXLinesState {
5
-
6
- constructor() {
7
- this.texturePerObjectColorsAndFlags = null;
8
- this.texturePerObjectOffsets = null;
9
- this.texturePerObjectInstanceMatrices = null;
10
- this.texturePerObjectPositionsDecodeMatrix = null;
11
- this.texturePerVertexIdCoordinates = null;
12
- this.texturePerLineIdPortionIds8Bits = null;
13
- this.texturePerLineIdPortionIds16Bits = null;
14
- this.texturePerLineIdPortionIds32Bits = null;
15
- this.texturePerLineIdIndices8Bits = null;
16
- this.texturePerLineIdIndices16Bits = null;
17
- this.texturePerLineIdIndices32Bits = null;
18
- this.textureModelMatrices = null;
19
- }
20
-
21
- finalize() {
22
- this.indicesPerBitnessTextures = {
23
- 8: this.texturePerLineIdIndices8Bits,
24
- 16: this.texturePerLineIdIndices16Bits,
25
- 32: this.texturePerLineIdIndices32Bits,
26
- };
27
- this.indicesPortionIdsPerBitnessTextures = {
28
- 8: this.texturePerLineIdPortionIds8Bits,
29
- 16: this.texturePerLineIdPortionIds16Bits,
30
- 32: this.texturePerLineIdPortionIds32Bits,
31
- };
32
- }
33
-
34
- bindCommonTextures(glProgram, objectDecodeMatricesShaderName, vertexTextureShaderName, objectAttributesTextureShaderName, objectMatricesShaderName) {
35
- this.texturePerObjectPositionsDecodeMatrix.bindTexture(glProgram, objectDecodeMatricesShaderName, 1);
36
- this.texturePerVertexIdCoordinates.bindTexture(glProgram, vertexTextureShaderName, 2);
37
- this.texturePerObjectColorsAndFlags.bindTexture(glProgram, objectAttributesTextureShaderName, 3);
38
- this.texturePerObjectInstanceMatrices.bindTexture(glProgram, objectMatricesShaderName, 4);
39
- }
40
-
41
- bindLineIndicesTextures(glProgram, portionIdsShaderName, lineIndicesShaderName, textureBitness) {
42
- this.indicesPortionIdsPerBitnessTextures[textureBitness].bindTexture(glProgram, portionIdsShaderName, 5);
43
- this.indicesPerBitnessTextures[textureBitness].bindTexture(glProgram, lineIndicesShaderName, 6);
44
- }
45
- }
46
-
@@ -1,411 +0,0 @@
1
- import {BindableDataTexture} from "./../BindableDataTexture.js";
2
- import {dataTextureRamStats} from "./dataTextureRamStats.js";
3
-
4
- /**
5
- * @private
6
- */
7
- export class DTXLinesTextureFactory {
8
- /**
9
- * Enables the currently binded ````WebGLTexture```` to be used as a data texture.
10
- *
11
- * @param {WebGL2RenderingContext} gl
12
- *
13
- * @private
14
- */
15
- disableBindedTextureFiltering(gl) {
16
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
17
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
18
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
19
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
20
- }
21
-
22
- /**
23
- * This will generate an RGBA texture for:
24
- * - colors
25
- * - pickColors
26
- * - flags
27
- * - flags2
28
- * - vertex bases
29
- * - vertex base offsets
30
- *
31
- * The texture will have:
32
- * - 4 RGBA columns per row: for each object (pick) color and flags(2)
33
- * - N rows where N is the number of objects
34
- *
35
- * @param {WebGL2RenderingContext} gl
36
- * @param {ArrayLike<ArrayLike<int>>} colors Array of colors for all objects in the layer
37
- * @param {ArrayLike<ArrayLike<int>>} pickColors Array of pickColors for all objects in the layer
38
- * @param {ArrayLike<int>} vertexBases Array of position-index-bases foteh all objects in the layer
39
- * @param {ArrayLike<int>} indexBaseOffsets For lines: array of offests between the (gl_VertexID / 2) and the position where the indices start in the texture layer
40
- *
41
- * @returns {BindableDataTexture}
42
- */
43
- generateTextureForColorsAndFlags(gl, colors, pickColors, vertexBases, indexBaseOffsets) {
44
- const numPortions = colors.length;
45
-
46
- // The number of rows in the texture is the number of
47
- // objects in the layer.
48
-
49
- this.numPortions = numPortions;
50
-
51
- const textureWidth = 512 * 8;
52
- const textureHeight = Math.ceil(numPortions / (textureWidth / 8));
53
-
54
- if (textureHeight === 0) {
55
- throw "texture height===0";
56
- }
57
-
58
- // 8 columns per texture row:
59
- // - col0: (RGBA) object color RGBA
60
- // - col1: (packed Uint32 as RGBA) object pick color
61
- // - col2: (packed 4 bytes as RGBA) object flags
62
- // - col3: (packed 4 bytes as RGBA) object flags2
63
- // - col4: (packed Uint32 bytes as RGBA) vertex base
64
- // - col5: (packed Uint32 bytes as RGBA) index base offset
65
-
66
-
67
- // // - col6: (packed Uint32 bytes as RGBA) edge index base offset
68
- // // - col7: (packed 4 bytes as RGBA) is-solid flag for objects
69
-
70
- const texArray = new Uint8Array(4 * textureWidth * textureHeight);
71
-
72
- dataTextureRamStats.sizeDataColorsAndFlags += texArray.byteLength;
73
- dataTextureRamStats.numberOfTextures++;
74
-
75
- for (let i = 0; i < numPortions; i++) {
76
- // object color
77
- texArray.set(colors [i], i * 32 + 0);
78
- texArray.set(pickColors [i], i * 32 + 4); // object pick color
79
- texArray.set([0, 0, 0, 0], i * 32 + 8); // object flags
80
- texArray.set([0, 0, 0, 0], i * 32 + 12); // object flags2
81
-
82
- // vertex base
83
- texArray.set([
84
- (vertexBases[i] >> 24) & 255,
85
- (vertexBases[i] >> 16) & 255,
86
- (vertexBases[i] >> 8) & 255,
87
- (vertexBases[i]) & 255,
88
- ],
89
- i * 32 + 16
90
- );
91
-
92
- // lines index base offset
93
- texArray.set(
94
- [
95
- (indexBaseOffsets[i] >> 24) & 255,
96
- (indexBaseOffsets[i] >> 16) & 255,
97
- (indexBaseOffsets[i] >> 8) & 255,
98
- (indexBaseOffsets[i]) & 255,
99
- ],
100
- i * 32 + 20
101
- );
102
-
103
- // // edge index base offset
104
- // texArray.set(
105
- // [
106
- // (edgeIndexBaseOffsets[i] >> 24) & 255,
107
- // (edgeIndexBaseOffsets[i] >> 16) & 255,
108
- // (edgeIndexBaseOffsets[i] >> 8) & 255,
109
- // (edgeIndexBaseOffsets[i]) & 255,
110
- // ],
111
- // i * 32 + 24
112
- // );
113
- //
114
- // // is-solid flag
115
- // texArray.set([solid[i] ? 1 : 0, 0, 0, 0], i * 32 + 28);
116
- }
117
- const texture = gl.createTexture();
118
- gl.bindTexture(gl.TEXTURE_2D, texture);
119
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA8UI, textureWidth, textureHeight);
120
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGBA_INTEGER, gl.UNSIGNED_BYTE, texArray, 0);
121
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
122
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
123
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
124
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
125
- gl.bindTexture(gl.TEXTURE_2D, null);
126
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight, texArray);
127
- }
128
-
129
- /**
130
- * This will generate a texture for all object offsets.
131
- *
132
- * @param {WebGL2RenderingContext} gl
133
- * @param {int[]} offsets Array of int[3], one XYZ offset array for each object
134
- *
135
- * @returns {BindableDataTexture}
136
- */
137
- generateTextureForObjectOffsets(gl, numOffsets) {
138
- const textureWidth = 512;
139
- const textureHeight = Math.ceil(numOffsets / textureWidth);
140
- if (textureHeight === 0) {
141
- throw "texture height===0";
142
- }
143
- const texArray = new Float32Array(3 * textureWidth * textureHeight).fill(0);
144
- dataTextureRamStats.sizeDataTextureOffsets += texArray.byteLength;
145
- dataTextureRamStats.numberOfTextures++;
146
- const texture = gl.createTexture();
147
- gl.bindTexture(gl.TEXTURE_2D, texture);
148
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB32F, textureWidth, textureHeight);
149
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB, gl.FLOAT, texArray, 0);
150
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
151
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
152
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
153
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
154
- gl.bindTexture(gl.TEXTURE_2D, null);
155
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight, texArray);
156
- }
157
-
158
- /**
159
- * This will generate a texture for all positions decode matrices in the layer.
160
- *
161
- * The texture will have:
162
- * - 4 RGBA columns per row (each column will contain 4 packed half-float (16 bits) components).
163
- * Thus, each row will contain 16 packed half-floats corresponding to a complete positions decode matrix)
164
- * - N rows where N is the number of objects
165
- *
166
- * @param {WebGL2RenderingContext} gl
167
- * @param {ArrayLike<Matrix4x4>} instanceMatrices Array of geometry instancing matrices for all objects in the layer. Null if the objects are not instanced.
168
- *
169
- * @returns {BindableDataTexture}
170
- */
171
- generateTextureForInstancingMatrices(gl, instanceMatrices) {
172
- const numMatrices = instanceMatrices.length;
173
- if (numMatrices === 0) {
174
- throw "num instance matrices===0";
175
- }
176
- // in one row we can fit 512 matrices
177
- const textureWidth = 512 * 4;
178
- const textureHeight = Math.ceil(numMatrices / (textureWidth / 4));
179
- const texArray = new Float32Array(4 * textureWidth * textureHeight);
180
- // dataTextureRamStats.sizeDataPositionDecodeMatrices += texArray.byteLength;
181
- dataTextureRamStats.numberOfTextures++;
182
- for (let i = 0; i < instanceMatrices.length; i++) { // 4x4 values
183
- texArray.set(instanceMatrices[i], i * 16);
184
- }
185
- const texture = gl.createTexture();
186
- gl.bindTexture(gl.TEXTURE_2D, texture);
187
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, textureWidth, textureHeight);
188
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGBA, gl.FLOAT, texArray, 0);
189
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
190
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
191
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
192
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
193
- gl.bindTexture(gl.TEXTURE_2D, null);
194
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight, texArray);
195
- }
196
-
197
- /**
198
- * This will generate a texture for all positions decode matrices in the layer.
199
- *
200
- * The texture will have:
201
- * - 4 RGBA columns per row (each column will contain 4 packed half-float (16 bits) components).
202
- * Thus, each row will contain 16 packed half-floats corresponding to a complete positions decode matrix)
203
- * - N rows where N is the number of objects
204
- *
205
- * @param {WebGL2RenderingContext} gl
206
- * @param {ArrayLike<Matrix4x4>} positionDecodeMatrices Array of positions decode matrices for all objects in the layer
207
- *
208
- * @returns {BindableDataTexture}
209
- */
210
- generateTextureForPositionsDecodeMatrices(gl, positionDecodeMatrices) {
211
- const numMatrices = positionDecodeMatrices.length;
212
- if (numMatrices === 0) {
213
- throw "num decode+entity matrices===0";
214
- }
215
- // in one row we can fit 512 matrices
216
- const textureWidth = 512 * 4;
217
- const textureHeight = Math.ceil(numMatrices / (textureWidth / 4));
218
- const texArray = new Float32Array(4 * textureWidth * textureHeight);
219
- dataTextureRamStats.sizeDataPositionDecodeMatrices += texArray.byteLength;
220
- dataTextureRamStats.numberOfTextures++;
221
- for (let i = 0; i < positionDecodeMatrices.length; i++) { // 4x4 values
222
- texArray.set(positionDecodeMatrices[i], i * 16);
223
- }
224
- const texture = gl.createTexture();
225
- gl.bindTexture(gl.TEXTURE_2D, texture);
226
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, textureWidth, textureHeight);
227
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGBA, gl.FLOAT, texArray, 0);
228
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
229
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
230
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
231
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
232
- gl.bindTexture(gl.TEXTURE_2D, null);
233
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
234
- }
235
-
236
- /**
237
- * @param {WebGL2RenderingContext} gl
238
- * @param indicesArrays
239
- * @param lenIndices
240
- *
241
- * @returns {BindableDataTexture}
242
- */
243
- generateTextureFor8BitIndices(gl, indicesArrays, lenIndices) {
244
- if (lenIndices === 0) {
245
- return {texture: null, textureHeight: 0,};
246
- }
247
- const textureWidth = 4096;
248
- const textureHeight = Math.ceil(lenIndices / 3 / textureWidth);
249
- if (textureHeight === 0) {
250
- throw "texture height===0";
251
- }
252
- const texArraySize = textureWidth * textureHeight * 3;
253
- const texArray = new Uint8Array(texArraySize);
254
- dataTextureRamStats.sizeDataTextureIndices += texArray.byteLength;
255
- dataTextureRamStats.numberOfTextures++;
256
- for (let i = 0, j = 0, len = indicesArrays.length; i < len; i++) {
257
- const pc = indicesArrays[i];
258
- texArray.set(pc, j);
259
- j += pc.length;
260
- }
261
- const texture = gl.createTexture();
262
- gl.bindTexture(gl.TEXTURE_2D, texture);
263
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB8UI, textureWidth, textureHeight);
264
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_BYTE, texArray, 0);
265
- this.disableBindedTextureFiltering(gl);
266
- gl.bindTexture(gl.TEXTURE_2D, null);
267
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
268
- }
269
-
270
- /**
271
- * @param {WebGL2RenderingContext} gl
272
- * @param indicesArrays
273
- * @param lenIndices
274
- *
275
- * @returns {BindableDataTexture}
276
- */
277
- generateTextureFor16BitIndices(gl, indicesArrays, lenIndices) {
278
- if (lenIndices === 0) {
279
- return {texture: null, textureHeight: 0,};
280
- }
281
- const textureWidth = 4096;
282
- const textureHeight = Math.ceil(lenIndices / 3 / textureWidth);
283
- if (textureHeight === 0) {
284
- throw "texture height===0";
285
- }
286
- const texArraySize = textureWidth * textureHeight * 3;
287
- const texArray = new Uint16Array(texArraySize);
288
- dataTextureRamStats.sizeDataTextureIndices += texArray.byteLength;
289
- dataTextureRamStats.numberOfTextures++;
290
- for (let i = 0, j = 0, len = indicesArrays.length; i < len; i++) {
291
- const pc = indicesArrays[i];
292
- texArray.set(pc, j);
293
- j += pc.length;
294
- }
295
- const texture = gl.createTexture();
296
- gl.bindTexture(gl.TEXTURE_2D, texture);
297
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB16UI, textureWidth, textureHeight);
298
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
299
- this.disableBindedTextureFiltering(gl);
300
- gl.bindTexture(gl.TEXTURE_2D, null);
301
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
302
- }
303
-
304
- /**
305
- * @param {WebGL2RenderingContext} gl
306
- * @param indicesArrays
307
- * @param lenIndices
308
- *
309
- * @returns {BindableDataTexture}
310
- */
311
- generateTextureFor32BitIndices(gl, indicesArrays, lenIndices) {
312
- if (lenIndices === 0) {
313
- return {texture: null, textureHeight: 0,};
314
- }
315
- const textureWidth = 4096;
316
- const textureHeight = Math.ceil(lenIndices / 3 / textureWidth);
317
- if (textureHeight === 0) {
318
- throw "texture height===0";
319
- }
320
- const texArraySize = textureWidth * textureHeight * 3;
321
- const texArray = new Uint32Array(texArraySize);
322
- dataTextureRamStats.sizeDataTextureIndices += texArray.byteLength;
323
- dataTextureRamStats.numberOfTextures++;
324
- for (let i = 0, j = 0, len = indicesArrays.length; i < len; i++) {
325
- const pc = indicesArrays[i];
326
- texArray.set(pc, j);
327
- j += pc.length;
328
- }
329
- const texture = gl.createTexture();
330
- gl.bindTexture(gl.TEXTURE_2D, texture);
331
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB32UI, textureWidth, textureHeight);
332
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_INT, texArray, 0);
333
- this.disableBindedTextureFiltering(gl);
334
- gl.bindTexture(gl.TEXTURE_2D, null);
335
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
336
- }
337
-
338
- /**
339
- * @param {WebGL2RenderingContext} gl
340
- * @param {ArrayLike<int>} positionsArrays Arrays of quantized positions in the layer
341
- * @param lenPositions
342
- *
343
- * This will generate a texture for positions in the layer.
344
- *
345
- * The texture will have:
346
- * - 1024 columns, where each pixel will be a 16-bit-per-component RGB texture, corresponding to the XYZ of the position
347
- * - a number of rows R where R*1024 is just >= than the number of vertices (positions / 3)
348
- *
349
- * @returns {BindableDataTexture}
350
- */
351
- generateTextureForPositions(gl, positionsArrays, lenPositions) {
352
- const numVertices = lenPositions / 3;
353
- const textureWidth = 4096;
354
- const textureHeight = Math.ceil(numVertices / textureWidth);
355
- if (textureHeight === 0) {
356
- throw "texture height===0";
357
- }
358
- const texArraySize = textureWidth * textureHeight * 3;
359
- const texArray = new Uint16Array(texArraySize);
360
- dataTextureRamStats.sizeDataTexturePositions += texArray.byteLength;
361
- dataTextureRamStats.numberOfTextures++;
362
- for (let i = 0, j = 0, len = positionsArrays.length; i < len; i++) {
363
- const pc = positionsArrays[i];
364
- texArray.set(pc, j);
365
- j += pc.length;
366
- }
367
- const texture = gl.createTexture();
368
- gl.bindTexture(gl.TEXTURE_2D, texture);
369
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB16UI, textureWidth, textureHeight);
370
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
371
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
372
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
373
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
374
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
375
- gl.bindTexture(gl.TEXTURE_2D, null);
376
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
377
- }
378
-
379
- /**
380
- * @param {WebGL2RenderingContext} gl
381
- * @param {ArrayLike<int>} portionIdsArray
382
- *
383
- * @returns {BindableDataTexture}
384
- */
385
- generateTextureForPackedPortionIds(gl, portionIdsArray) {
386
- if (portionIdsArray.length === 0) {
387
- return {texture: null, textureHeight: 0};
388
- }
389
- const lenArray = portionIdsArray.length;
390
- const textureWidth = 4096;
391
- const textureHeight = Math.ceil(lenArray / textureWidth);
392
- if (textureHeight === 0) {
393
- throw "texture height===0";
394
- }
395
- const texArraySize = textureWidth * textureHeight;
396
- const texArray = new Uint16Array(texArraySize);
397
- texArray.set(portionIdsArray, 0);
398
- dataTextureRamStats.sizeDataTexturePortionIds += texArray.byteLength;
399
- dataTextureRamStats.numberOfTextures++;
400
- const texture = gl.createTexture();
401
- gl.bindTexture(gl.TEXTURE_2D, texture);
402
- gl.texStorage2D(gl.TEXTURE_2D, 1, gl.R16UI, textureWidth, textureHeight);
403
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RED_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
404
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
405
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
406
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
407
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
408
- gl.bindTexture(gl.TEXTURE_2D, null);
409
- return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
410
- }
411
- }
@@ -1,49 +0,0 @@
1
- export const dataTextureRamStats = {
2
- sizeDataColorsAndFlags: 0,
3
- sizeDataPositionDecodeMatrices: 0,
4
- sizeDataTextureOffsets: 0,
5
- sizeDataTexturePositions: 0,
6
- sizeDataTextureIndices: 0,
7
- sizeDataTexturePortionIds: 0,
8
- numberOfGeometries: 0,
9
- numberOfPortions: 0,
10
- numberOfLayers: 0,
11
- numberOfTextures: 0,
12
- totalLines: 0,
13
- totalLines8Bits: 0,
14
- totalLines16Bits: 0,
15
- totalLines32Bits: 0,
16
- cannotCreatePortion: {
17
- because10BitsObjectId: 0,
18
- becauseTextureSize: 0,
19
- },
20
- overheadSizeAlignementIndices: 0,
21
- overheadSizeAlignementEdgeIndices: 0,
22
- };
23
-
24
- window.printDataTextureRamStats = function () {
25
-
26
- console.log(JSON.stringify(dataTextureRamStats, null, 4));
27
-
28
- let totalRamSize = 0;
29
-
30
- Object.keys(dataTextureRamStats).forEach(key => {
31
- if (key.startsWith("size")) {
32
- totalRamSize += dataTextureRamStats[key];
33
- }
34
- });
35
-
36
- console.log(`Total size ${totalRamSize} bytes (${(totalRamSize / 1000 / 1000).toFixed(2)} MB)`);
37
- console.log(`Avg bytes / triangle: ${(totalRamSize / dataTextureRamStats.totalLines).toFixed(2)}`);
38
-
39
- let percentualRamStats = {};
40
-
41
- Object.keys(dataTextureRamStats).forEach(key => {
42
- if (key.startsWith("size")) {
43
- percentualRamStats[key] =
44
- `${(dataTextureRamStats[key] / totalRamSize * 100).toFixed(2)} % of total`;
45
- }
46
- });
47
-
48
- console.log(JSON.stringify({percentualRamUsage: percentualRamStats}, null, 4));
49
- };