@xeokit/xeokit-sdk 2.6.83-renderers-refactor-v0 → 2.6.84

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 +44606 -13005
  2. package/dist/xeokit-sdk.es.js +44605 -13006
  3. package/dist/xeokit-sdk.es5.js +3492 -1387
  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/extras/ContextMenu/ContextMenu.js +7 -2
  9. package/src/viewer/Viewer.js +103 -55
  10. package/src/viewer/scene/canvas/Canvas.js +43 -3
  11. package/src/viewer/scene/geometry/ReadableGeometry.js +25 -0
  12. package/src/viewer/scene/lights/CubeTexture.js +13 -0
  13. package/src/viewer/scene/lights/DirLight.js +1 -2
  14. package/src/viewer/scene/lights/PointLight.js +1 -2
  15. package/src/viewer/scene/materials/Texture.js +9 -0
  16. package/src/viewer/scene/math/rtcCoords.js +38 -1
  17. package/src/viewer/scene/mesh/Mesh.js +212 -452
  18. package/src/viewer/scene/mesh/draw/DrawRenderer.js +996 -0
  19. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1502 -305
  20. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +259 -0
  21. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +159 -0
  22. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +286 -0
  23. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +262 -0
  24. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +221 -0
  25. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +157 -9
  26. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +223 -0
  27. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +150 -21
  28. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +200 -0
  29. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +124 -12
  30. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  31. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +97 -22
  32. package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
  33. package/src/viewer/scene/model/SceneModel.js +861 -245
  34. package/src/viewer/scene/model/SceneModelEntity.js +4 -4
  35. package/src/viewer/scene/model/SceneModelMesh.js +3 -3
  36. package/src/viewer/scene/model/dtx/BindableDataTexture.js +31 -0
  37. package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +27 -0
  38. package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +897 -0
  39. package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +46 -0
  40. package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +411 -0
  41. package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +49 -0
  42. package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +208 -0
  43. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +389 -0
  44. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +65 -0
  45. package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +1399 -0
  46. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +46 -0
  47. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +250 -0
  48. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +518 -0
  49. package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +54 -0
  50. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +639 -0
  51. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +464 -0
  52. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +423 -0
  53. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +431 -0
  54. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +345 -0
  55. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +436 -0
  56. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +466 -0
  57. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +437 -0
  58. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +460 -0
  59. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +437 -0
  60. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +307 -0
  61. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +472 -0
  62. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +474 -0
  63. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +435 -0
  64. package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
  65. package/src/viewer/scene/model/vbo/VBORenderer.js +664 -0
  66. package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +704 -0
  67. package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +19 -0
  68. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +318 -0
  69. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +114 -0
  70. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +99 -0
  71. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +124 -0
  72. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +313 -0
  73. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +311 -0
  74. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +24 -0
  75. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +688 -0
  76. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +24 -0
  77. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +168 -0
  78. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +136 -0
  79. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +156 -0
  80. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +148 -0
  81. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +144 -0
  82. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +107 -0
  83. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +146 -0
  84. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +315 -0
  85. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +305 -0
  86. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +24 -0
  87. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +1346 -0
  88. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +131 -0
  89. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +135 -0
  90. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +12 -0
  91. package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +403 -0
  92. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +35 -0
  93. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +252 -0
  94. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +294 -0
  95. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +115 -0
  96. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +246 -0
  97. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +139 -0
  98. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +125 -0
  99. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  100. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +144 -0
  101. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +130 -0
  102. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +121 -0
  103. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +131 -0
  104. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +107 -0
  105. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +144 -0
  106. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +313 -0
  107. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +312 -0
  108. package/src/viewer/scene/model/vbo/float16.js +760 -0
  109. package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +711 -0
  110. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +148 -0
  111. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +26 -0
  112. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +139 -0
  113. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +127 -0
  114. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +308 -0
  115. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +299 -0
  116. package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +733 -0
  117. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +174 -0
  118. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +156 -0
  119. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +149 -0
  120. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +170 -0
  121. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +152 -0
  122. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +26 -0
  123. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +174 -0
  124. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +119 -0
  125. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +154 -0
  126. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +307 -0
  127. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +293 -0
  128. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +150 -0
  129. package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +1289 -0
  130. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +135 -0
  131. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +137 -0
  132. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +12 -0
  133. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +403 -0
  134. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +267 -0
  135. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +299 -0
  136. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  137. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +255 -0
  138. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +130 -0
  139. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +32 -0
  140. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +138 -0
  141. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +128 -0
  142. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  143. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +149 -0
  144. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +136 -0
  145. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +130 -0
  146. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +145 -0
  147. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +113 -0
  148. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +148 -0
  149. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +319 -0
  150. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +310 -0
  151. package/src/viewer/scene/scene/Scene.js +38 -21
  152. package/src/viewer/scene/webgl/ArrayBuf.js +20 -5
  153. package/src/viewer/scene/webgl/Attribute.js +23 -0
  154. package/src/viewer/scene/webgl/FrameContext.js +86 -14
  155. package/src/viewer/scene/webgl/Program.js +181 -0
  156. package/src/viewer/scene/webgl/RenderBuffer.js +262 -62
  157. package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
  158. package/src/viewer/scene/webgl/Renderer.js +843 -880
  159. package/src/viewer/scene/webgl/Sampler.js +18 -0
  160. package/src/viewer/scene/webgl/Shader.js +49 -0
  161. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +132 -60
  162. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +328 -167
  163. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
  164. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +384 -0
  165. package/src/viewer/scene/mesh/draw/LambertShaderSource.js +0 -35
  166. package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +0 -34
  167. package/src/viewer/scene/model/layer/DTXLayer.js +0 -940
  168. package/src/viewer/scene/model/layer/Layer.js +0 -786
  169. package/src/viewer/scene/model/layer/VBOLayer.js +0 -1019
  170. package/src/viewer/scene/model/layer/programs/ColorProgram.js +0 -35
  171. package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +0 -46
  172. package/src/viewer/scene/model/layer/programs/DepthProgram.js +0 -11
  173. package/src/viewer/scene/model/layer/programs/EdgesProgram.js +0 -12
  174. package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +0 -24
  175. package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +0 -12
  176. package/src/viewer/scene/model/layer/programs/PBRProgram.js +0 -180
  177. package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +0 -30
  178. package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +0 -12
  179. package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +0 -18
  180. package/src/viewer/scene/model/layer/programs/ShadowProgram.js +0 -23
  181. package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +0 -15
  182. package/src/viewer/scene/model/layer/programs/SnapProgram.js +0 -28
  183. package/src/viewer/scene/webgl/WebGLRenderer.js +0 -612
@@ -1,12 +1,124 @@
1
- export const PickTriangleShaderSource = function(meshHash, programVariables, geometry) {
2
- const vColor = programVariables.createVarying("vec4", "vColor", () => geometry.attributes.pickColor);
3
- const outColor = programVariables.createOutput("vec4", "outColor");
4
- return {
5
- getHash: () => [ meshHash ],
6
- programName: "PickTriangle",
7
- isPick: true,
8
- trianglePick: true,
9
- dontBillboardAnything: true,
10
- appendFragmentOutputs: (src) => src.push(`${outColor} = ${vColor};`)
11
- };
12
- };
1
+ /**
2
+ * @private
3
+ */
4
+
5
+ class PickTriangleShaderSource {
6
+ constructor(mesh) {
7
+ this.vertex = buildVertex(mesh);
8
+ this.fragment = buildFragment(mesh);
9
+ }
10
+ }
11
+
12
+ function buildVertex(mesh) {
13
+ const scene = mesh.scene;
14
+ const sectionPlanesState = scene._sectionPlanesState;
15
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
16
+ const quantizedGeometry = !!mesh._geometry._state.compressGeometry;
17
+ const src = [];
18
+ src.push('#version 300 es');
19
+ src.push("// Surface picking vertex shader");
20
+ src.push("in vec3 position;");
21
+ src.push("in vec4 color;");
22
+ src.push("uniform mat4 modelMatrix;");
23
+ src.push("uniform mat4 viewMatrix;");
24
+ src.push("uniform mat4 projMatrix;");
25
+ src.push("uniform vec3 offset;");
26
+ if (clipping) {
27
+ src.push("uniform bool clippable;");
28
+ src.push("out vec4 vWorldPosition;");
29
+ }
30
+ if (scene.logarithmicDepthBufferEnabled) {
31
+ src.push("uniform float logDepthBufFC;");
32
+ src.push("out float vFragDepth;");
33
+ src.push("bool isPerspectiveMatrix(mat4 m) {");
34
+ src.push(" return (m[2][3] == - 1.0);");
35
+ src.push("}");
36
+ src.push("out float isPerspective;");
37
+ }
38
+
39
+ src.push("uniform vec2 pickClipPos;");
40
+
41
+ src.push("vec4 remapClipPos(vec4 clipPos) {");
42
+ src.push(" clipPos.xy /= clipPos.w;")
43
+ src.push(" clipPos.xy -= pickClipPos;");
44
+ src.push(" clipPos.xy *= clipPos.w;")
45
+ src.push(" return clipPos;")
46
+ src.push("}");
47
+
48
+ src.push("out vec4 vColor;");
49
+ if (quantizedGeometry) {
50
+ src.push("uniform mat4 positionsDecodeMatrix;");
51
+ }
52
+ src.push("void main(void) {");
53
+ src.push("vec4 localPosition = vec4(position, 1.0); ");
54
+ if (quantizedGeometry) {
55
+ src.push("localPosition = positionsDecodeMatrix * localPosition;");
56
+ }
57
+ src.push(" vec4 worldPosition = modelMatrix * localPosition; ");
58
+ src.push(" worldPosition.xyz = worldPosition.xyz + offset;");
59
+ src.push(" vec4 viewPosition = viewMatrix * worldPosition;");
60
+ if (clipping) {
61
+ src.push(" vWorldPosition = worldPosition;");
62
+ }
63
+ src.push(" vColor = color;");
64
+ src.push("vec4 clipPos = projMatrix * viewPosition;");
65
+ if (scene.logarithmicDepthBufferEnabled) {
66
+ src.push("vFragDepth = 1.0 + clipPos.w;");
67
+ src.push("isPerspective = float (isPerspectiveMatrix(projMatrix));");
68
+ }
69
+ src.push("gl_Position = remapClipPos(clipPos);");
70
+ src.push("}");
71
+ return src;
72
+ }
73
+
74
+ function buildFragment(mesh) {
75
+ const scene = mesh.scene;
76
+ const sectionPlanesState = scene._sectionPlanesState;
77
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
78
+ const src = [];
79
+ src.push('#version 300 es');
80
+ src.push("// Surface picking fragment shader");
81
+ src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
82
+ src.push("precision highp float;");
83
+ src.push("precision highp int;");
84
+ src.push("#else");
85
+ src.push("precision mediump float;");
86
+ src.push("precision mediump int;");
87
+ src.push("#endif");
88
+ src.push("in vec4 vColor;");
89
+ if (scene.logarithmicDepthBufferEnabled) {
90
+ src.push("in float isPerspective;");
91
+ src.push("uniform float logDepthBufFC;");
92
+ src.push("in float vFragDepth;");
93
+ }
94
+ if (clipping) {
95
+ src.push("uniform bool clippable;");
96
+ src.push("in vec4 vWorldPosition;");
97
+ for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
98
+ src.push("uniform bool sectionPlaneActive" + i + ";");
99
+ src.push("uniform vec3 sectionPlanePos" + i + ";");
100
+ src.push("uniform vec3 sectionPlaneDir" + i + ";");
101
+ }
102
+ }
103
+ src.push("out vec4 outColor;");
104
+ src.push("void main(void) {");
105
+ if (clipping) {
106
+ src.push("if (clippable) {");
107
+ src.push(" float dist = 0.0;");
108
+ for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
109
+ src.push("if (sectionPlaneActive" + i + ") {");
110
+ src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
111
+ src.push("}");
112
+ }
113
+ src.push(" if (dist > 0.0) { discard; }");
114
+ src.push("}");
115
+ }
116
+ if (scene.logarithmicDepthBufferEnabled) {
117
+ src.push("gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
118
+ }
119
+ src.push(" outColor = vColor;");
120
+ src.push("}");
121
+ return src;
122
+ }
123
+
124
+ export {PickTriangleShaderSource};
@@ -0,0 +1,214 @@
1
+ import {ShadowShaderSource} from "./ShadowShaderSource.js";
2
+ import {Program} from "../../webgl/Program.js";
3
+ import {stats} from "../../stats.js";
4
+
5
+ /**
6
+ * @private
7
+ */
8
+ const ShadowRenderer = function (hash, mesh) {
9
+ this._hash = hash;
10
+ this._shaderSource = new ShadowShaderSource(mesh);
11
+ this._scene = mesh.scene;
12
+ this._useCount = 0;
13
+ this._allocate(mesh);
14
+ };
15
+
16
+ const renderers = {};
17
+
18
+ ShadowRenderer.get = function (mesh) {
19
+ const scene = mesh.scene;
20
+ const hash = [scene.canvas.canvas.id, scene._sectionPlanesState.getHash(), mesh._geometry._state.hash, mesh._state.hash].join(";");
21
+ let renderer = renderers[hash];
22
+ if (!renderer) {
23
+ renderer = new ShadowRenderer(hash, mesh);
24
+ if (renderer.errors) {
25
+ console.log(renderer.errors.join("\n"));
26
+ return null;
27
+ }
28
+ renderers[hash] = renderer;
29
+ stats.memory.programs++;
30
+ }
31
+ renderer._useCount++;
32
+ return renderer;
33
+ };
34
+
35
+ ShadowRenderer.prototype.put = function () {
36
+ if (--this._useCount === 0) {
37
+ if (this._program) {
38
+ this._program.destroy();
39
+ }
40
+ delete renderers[this._hash];
41
+ stats.memory.programs--;
42
+ }
43
+ };
44
+
45
+ ShadowRenderer.prototype.webglContextRestored = function () {
46
+ this._program = null;
47
+ };
48
+
49
+ ShadowRenderer.prototype.drawMesh = function (frame, mesh) {
50
+ if (!this._program) {
51
+ this._allocate(mesh);
52
+ }
53
+ const scene = this._scene;
54
+ const gl = scene.canvas.gl;
55
+ const materialState = mesh._material._state;
56
+ const geometryState = mesh._geometry._state;
57
+ if (frame.lastProgramId !== this._program.id) {
58
+ frame.lastProgramId = this._program.id;
59
+ this._bindProgram(frame);
60
+ }
61
+ if (materialState.id !== this._lastMaterialId) {
62
+ const backfaces = materialState.backfaces;
63
+ if (frame.backfaces !== backfaces) {
64
+ if (backfaces) {
65
+ gl.disable(gl.CULL_FACE);
66
+ } else {
67
+ gl.enable(gl.CULL_FACE);
68
+ }
69
+ frame.backfaces = backfaces;
70
+ }
71
+ const frontface = materialState.frontface;
72
+ if (frame.frontface !== frontface) {
73
+ if (frontface) {
74
+ gl.frontFace(gl.CCW);
75
+ } else {
76
+ gl.frontFace(gl.CW);
77
+ }
78
+ frame.frontface = frontface;
79
+ }
80
+ if (frame.lineWidth !== materialState.lineWidth) {
81
+ gl.lineWidth(materialState.lineWidth);
82
+ frame.lineWidth = materialState.lineWidth;
83
+ }
84
+ if (this._uPointSize) {
85
+ gl.uniform1i(this._uPointSize, materialState.pointSize);
86
+ }
87
+ this._lastMaterialId = materialState.id;
88
+ }
89
+ gl.uniformMatrix4fv(this._uModelMatrix, gl.FALSE, mesh.worldMatrix);
90
+ if (geometryState.combineGeometry) {
91
+ const vertexBufs = mesh.vertexBufs;
92
+ if (vertexBufs.id !== this._lastVertexBufsId) {
93
+ if (vertexBufs.positionsBuf && this._aPosition) {
94
+ this._aPosition.bindArrayBuffer(vertexBufs.positionsBuf, vertexBufs.compressGeometry ? gl.UNSIGNED_SHORT : gl.FLOAT);
95
+ frame.bindArray++;
96
+ }
97
+ this._lastVertexBufsId = vertexBufs.id;
98
+ }
99
+ }
100
+ if (this._uClippable) {
101
+ gl.uniform1i(this._uClippable, mesh._state.clippable);
102
+ }
103
+ gl.uniform3fv(this._uOffset, mesh._state.offset);
104
+ if (geometryState.id !== this._lastGeometryId) {
105
+ if (this._uPositionsDecodeMatrix) {
106
+ gl.uniformMatrix4fv(this._uPositionsDecodeMatrix, false, geometryState.positionsDecodeMatrix);
107
+ }
108
+ if (geometryState.combineGeometry) { // VBOs were bound by the preceding VertexBufs chunk
109
+ if (geometryState.indicesBufCombined) {
110
+ geometryState.indicesBufCombined.bind();
111
+ frame.bindArray++;
112
+ }
113
+ } else {
114
+ if (this._aPosition) {
115
+ this._aPosition.bindArrayBuffer(geometryState.positionsBuf, geometryState.compressGeometry ? gl.UNSIGNED_SHORT : gl.FLOAT);
116
+ frame.bindArray++;
117
+ }
118
+ if (geometryState.indicesBuf) {
119
+ geometryState.indicesBuf.bind();
120
+ frame.bindArray++;
121
+ }
122
+ }
123
+ this._lastGeometryId = geometryState.id;
124
+ }
125
+ if (geometryState.combineGeometry) {
126
+ if (geometryState.indicesBufCombined) {
127
+ gl.drawElements(geometryState.primitive, geometryState.indicesBufCombined.numItems, geometryState.indicesBufCombined.itemType, 0);
128
+ frame.drawElements++;
129
+ } else {
130
+ // TODO: drawArrays() with VertexBufs positions
131
+ }
132
+ } else {
133
+ if (geometryState.indicesBuf) {
134
+ gl.drawElements(geometryState.primitive, geometryState.indicesBuf.numItems, geometryState.indicesBuf.itemType, 0);
135
+ frame.drawElements++;
136
+ } else if (geometryState.positions) {
137
+ gl.drawArrays(gl.TRIANGLES, 0, geometryState.positions.numItems);
138
+ frame.drawArrays++;
139
+ }
140
+ }
141
+ };
142
+
143
+ ShadowRenderer.prototype._allocate = function (mesh) {
144
+ const scene = mesh.scene;
145
+ const gl = scene.canvas.gl;
146
+ this._program = new Program(gl, this._shaderSource);
147
+ this._scene = scene;
148
+ this._useCount = 0;
149
+ if (this._program.errors) {
150
+ this.errors = this._program.errors;
151
+ return;
152
+ }
153
+ const program = this._program;
154
+ this._uPositionsDecodeMatrix = program.getLocation("positionsDecodeMatrix");
155
+ this._uModelMatrix = program.getLocation("modelMatrix");
156
+ this._uShadowViewMatrix = program.getLocation("shadowViewMatrix");
157
+ this._uShadowProjMatrix = program.getLocation("shadowProjMatrix");
158
+ this._uSectionPlanes = {};
159
+ const clips = scene._sectionPlanesState.sectionPlanes;
160
+ for (let i = 0, len = clips.length; i < len; i++) {
161
+ this._uSectionPlanes.push({
162
+ active: program.getLocation("sectionPlaneActive" + i),
163
+ pos: program.getLocation("sectionPlanePos" + i),
164
+ dir: program.getLocation("sectionPlaneDir" + i)
165
+ });
166
+ }
167
+ this._aPosition = program.getAttribute("position");
168
+ this._uClippable = program.getLocation("clippable");
169
+ this._uOffset = program.getLocation("offset");
170
+ this._lastMaterialId = null;
171
+ this._lastVertexBufsId = null;
172
+ this._lastGeometryId = null;
173
+ };
174
+
175
+ ShadowRenderer.prototype._bindProgram = function (frame) {
176
+ if (!this._program) {
177
+ this._allocate(mesh);
178
+ }
179
+ const scene = this._scene;
180
+ const gl = scene.canvas.gl;
181
+ const sectionPlanesState = scene._sectionPlanesState;
182
+ this._program.bind();
183
+ frame.useProgram++;
184
+ gl.uniformMatrix4fv(this._uShadowViewMatrix, false, frame.shadowViewMatrix);
185
+ gl.uniformMatrix4fv(this._uShadowProjMatrix, false, frame.shadowProjMatrix);
186
+ this._lastMaterialId = null;
187
+ this._lastVertexBufsId = null;
188
+ this._lastGeometryId = null;
189
+ if (sectionPlanesState.getNumAllocatedSectionPlanes() > 0) {
190
+ let sectionPlaneUniforms;
191
+ let uSectionPlaneActive;
192
+ let sectionPlane;
193
+ let uSectionPlanePos;
194
+ let uSectionPlaneDir;
195
+ for (let i = 0, len = this._uSectionPlanes.length; i < len; i++) {
196
+ sectionPlaneUniforms = this._uSectionPlanes[i];
197
+ uSectionPlaneActive = sectionPlaneUniforms.active;
198
+ sectionPlane = sectionPlanesState.sectionPlanes[i];
199
+ if (uSectionPlaneActive) {
200
+ gl.uniform1i(uSectionPlaneActive, sectionPlane.active);
201
+ }
202
+ uSectionPlanePos = sectionPlaneUniforms.pos;
203
+ if (uSectionPlanePos) {
204
+ gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
205
+ }
206
+ uSectionPlaneDir = sectionPlaneUniforms.dir;
207
+ if (uSectionPlaneDir) {
208
+ gl.uniform3fv(sectionPlaneUniforms.dir, sectionPlane.dir);
209
+ }
210
+ }
211
+ }
212
+ };
213
+
214
+ export {ShadowRenderer};
@@ -1,23 +1,98 @@
1
- export const ShadowShaderSource = function(meshHash, programVariables) {
2
- const encodeFloat = programVariables.createFragmentDefinition(
3
- "encodeFloat",
4
- (name, src) => {
5
- src.push(`vec4 ${name}( const in float depth ) {`);
6
- src.push(" const vec4 bitShift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0);");
7
- src.push(" const vec4 bitMask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);");
8
- src.push(" vec4 comp = fract(depth * bitShift);");
9
- src.push(" comp -= comp.xxyz * bitMask;");
10
- src.push(" return comp;");
1
+ /**
2
+ * @private
3
+ */
4
+ class ShadowShaderSource {
5
+ constructor(mesh) {
6
+ this.vertex = buildVertex(mesh);
7
+ this.fragment = buildFragment(mesh);
8
+ }
9
+ }
10
+
11
+ function buildVertex(mesh) {
12
+ const scene = mesh.scene;
13
+ const clipping = scene._sectionPlanesState.sectionPlanes.length > 0;
14
+ const quantizedGeometry = !!mesh._geometry._state.compressGeometry;
15
+ const src = [];
16
+ src.push("// Mesh shadow vertex shader");
17
+ src.push("in vec3 position;");
18
+ src.push("uniform mat4 modelMatrix;");
19
+ src.push("uniform mat4 shadowViewMatrix;");
20
+ src.push("uniform mat4 shadowProjMatrix;");
21
+ src.push("uniform vec3 offset;");
22
+ if (quantizedGeometry) {
23
+ src.push("uniform mat4 positionsDecodeMatrix;");
24
+ }
25
+ if (clipping) {
26
+ src.push("out vec4 vWorldPosition;");
27
+ }
28
+ src.push("void main(void) {");
29
+ src.push("vec4 localPosition = vec4(position, 1.0); ");
30
+ src.push("vec4 worldPosition;");
31
+ if (quantizedGeometry) {
32
+ src.push("localPosition = positionsDecodeMatrix * localPosition;");
33
+ }
34
+ src.push("worldPosition = modelMatrix * localPosition;");
35
+ src.push("worldPosition.xyz = worldPosition.xyz + offset;");
36
+ src.push("vec4 viewPosition = shadowViewMatrix * worldPosition; ");
37
+ if (clipping) {
38
+ src.push("vWorldPosition = worldPosition;");
39
+ }
40
+ src.push(" gl_Position = shadowProjMatrix * viewPosition;");
41
+ src.push("}");
42
+ return src;
43
+ }
44
+
45
+ function buildFragment(mesh) {
46
+ const scene = mesh.scene;
47
+ const gl = scene.canvas.gl;
48
+ const sectionPlanesState = scene._sectionPlanesState;
49
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
50
+ const src = [];
51
+ src.push("// Mesh shadow fragment shader");
52
+
53
+ src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
54
+ src.push("precision highp float;");
55
+ src.push("precision highp int;");
56
+ src.push("#else");
57
+ src.push("precision mediump float;");
58
+ src.push("precision mediump int;");
59
+ src.push("#endif");
60
+
61
+ if (clipping) {
62
+ src.push("uniform bool clippable;");
63
+ src.push("in vec4 vWorldPosition;");
64
+ for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
65
+ src.push("uniform bool sectionPlaneActive" + i + ";");
66
+ src.push("uniform vec3 sectionPlanePos" + i + ";");
67
+ src.push("uniform vec3 sectionPlaneDir" + i + ";");
68
+ }
69
+ }
70
+
71
+ src.push("vec4 encodeFloat( const in float depth ) {");
72
+ src.push(" const vec4 bitShift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0);");
73
+ src.push(" const vec4 bitMask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);");
74
+ src.push(" vec4 comp = fract(depth * bitShift);");
75
+ src.push(" comp -= comp.xxyz * bitMask;");
76
+ src.push(" return comp;");
77
+ src.push("}");
78
+
79
+ src.push("out vec4 outColor;");
80
+
81
+ src.push("void main(void) {");
82
+ if (clipping) {
83
+ src.push("if (clippable) {");
84
+ src.push(" float dist = 0.0;");
85
+ for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
86
+ src.push("if (sectionPlaneActive" + i + ") {");
87
+ src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
11
88
  src.push("}");
12
- });
13
- const outColor = programVariables.createOutput("vec4", "outColor");
14
- return {
15
- getHash: () => [ meshHash ],
16
- programName: "Shadow",
17
- setsLineWidth: true,
18
- useShadowView: true,
19
- dontBillboardAnything: true,
20
- dontGetLogDepth: true,
21
- appendFragmentOutputs: (src, getGammaOutputExpression, gl_FragCoord) => src.push(`${outColor} = ${encodeFloat}(${gl_FragCoord}.z);`)
22
- };
23
- };
89
+ }
90
+ src.push(" if (dist > 0.0) { discard; }");
91
+ src.push("}");
92
+ }
93
+ src.push("outColor = encodeFloat(gl_FragCoord.z);");
94
+ src.push("}");
95
+ return src;
96
+ }
97
+
98
+ export {ShadowShaderSource};
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @private
3
+ */
4
+ const RENDER_PASSES = {
5
+
6
+ // Skipped - suppress rendering
7
+
8
+ NOT_RENDERED: 0,
9
+
10
+ // Normal rendering - mutually exclusive modes
11
+
12
+ COLOR_OPAQUE: 1,
13
+ COLOR_TRANSPARENT: 2,
14
+
15
+ // Emphasis silhouette rendering - mutually exclusive modes
16
+
17
+ SILHOUETTE_HIGHLIGHTED: 3,
18
+ SILHOUETTE_SELECTED: 4,
19
+ SILHOUETTE_XRAYED: 5,
20
+
21
+ // Edges rendering - mutually exclusive modes
22
+
23
+ EDGES_COLOR_OPAQUE: 6,
24
+ EDGES_COLOR_TRANSPARENT: 7,
25
+ EDGES_HIGHLIGHTED: 8,
26
+ EDGES_SELECTED: 9,
27
+ EDGES_XRAYED: 10,
28
+
29
+ // Picking
30
+
31
+ PICK: 11
32
+ };
33
+
34
+ export {RENDER_PASSES};