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

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 (182) hide show
  1. package/dist/xeokit-sdk.cjs.js +44599 -13003
  2. package/dist/xeokit-sdk.es.js +44598 -13004
  3. package/dist/xeokit-sdk.es5.js +3486 -1386
  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/viewer/Viewer.js +103 -55
  9. package/src/viewer/scene/canvas/Canvas.js +43 -3
  10. package/src/viewer/scene/geometry/ReadableGeometry.js +25 -0
  11. package/src/viewer/scene/lights/CubeTexture.js +13 -0
  12. package/src/viewer/scene/lights/DirLight.js +1 -2
  13. package/src/viewer/scene/lights/PointLight.js +1 -2
  14. package/src/viewer/scene/materials/Texture.js +9 -0
  15. package/src/viewer/scene/math/rtcCoords.js +38 -1
  16. package/src/viewer/scene/mesh/Mesh.js +212 -452
  17. package/src/viewer/scene/mesh/draw/DrawRenderer.js +996 -0
  18. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1502 -305
  19. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +259 -0
  20. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +159 -0
  21. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +286 -0
  22. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +262 -0
  23. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +221 -0
  24. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +157 -9
  25. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +223 -0
  26. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +150 -21
  27. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +200 -0
  28. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +124 -12
  29. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  30. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +97 -22
  31. package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
  32. package/src/viewer/scene/model/SceneModel.js +861 -245
  33. package/src/viewer/scene/model/SceneModelEntity.js +4 -4
  34. package/src/viewer/scene/model/SceneModelMesh.js +3 -3
  35. package/src/viewer/scene/model/dtx/BindableDataTexture.js +31 -0
  36. package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +27 -0
  37. package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +897 -0
  38. package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +46 -0
  39. package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +411 -0
  40. package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +49 -0
  41. package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +208 -0
  42. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +389 -0
  43. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +65 -0
  44. package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +1399 -0
  45. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +46 -0
  46. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +250 -0
  47. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +518 -0
  48. package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +54 -0
  49. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +639 -0
  50. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +464 -0
  51. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +423 -0
  52. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +431 -0
  53. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +345 -0
  54. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +436 -0
  55. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +466 -0
  56. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +437 -0
  57. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +460 -0
  58. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +437 -0
  59. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +307 -0
  60. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +472 -0
  61. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +474 -0
  62. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +435 -0
  63. package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
  64. package/src/viewer/scene/model/vbo/VBORenderer.js +664 -0
  65. package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +704 -0
  66. package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +19 -0
  67. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +318 -0
  68. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +114 -0
  69. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +99 -0
  70. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +124 -0
  71. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +313 -0
  72. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +311 -0
  73. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +24 -0
  74. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +688 -0
  75. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +24 -0
  76. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +168 -0
  77. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +136 -0
  78. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +156 -0
  79. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +148 -0
  80. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +144 -0
  81. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +107 -0
  82. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +146 -0
  83. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +315 -0
  84. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +305 -0
  85. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +24 -0
  86. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +1346 -0
  87. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +131 -0
  88. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +135 -0
  89. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +12 -0
  90. package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +403 -0
  91. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +35 -0
  92. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +252 -0
  93. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +294 -0
  94. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +115 -0
  95. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +246 -0
  96. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +139 -0
  97. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +125 -0
  98. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  99. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +144 -0
  100. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +130 -0
  101. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +121 -0
  102. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +131 -0
  103. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +107 -0
  104. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +144 -0
  105. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +313 -0
  106. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +312 -0
  107. package/src/viewer/scene/model/vbo/float16.js +760 -0
  108. package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +711 -0
  109. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +148 -0
  110. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +26 -0
  111. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +139 -0
  112. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +127 -0
  113. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +308 -0
  114. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +299 -0
  115. package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +733 -0
  116. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +174 -0
  117. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +156 -0
  118. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +149 -0
  119. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +170 -0
  120. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +152 -0
  121. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +26 -0
  122. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +174 -0
  123. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +119 -0
  124. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +154 -0
  125. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +307 -0
  126. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +293 -0
  127. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +150 -0
  128. package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +1289 -0
  129. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +135 -0
  130. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +137 -0
  131. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +12 -0
  132. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +403 -0
  133. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +267 -0
  134. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +299 -0
  135. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  136. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +255 -0
  137. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +130 -0
  138. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +32 -0
  139. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +138 -0
  140. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +128 -0
  141. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  142. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +149 -0
  143. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +136 -0
  144. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +130 -0
  145. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +145 -0
  146. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +113 -0
  147. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +148 -0
  148. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +319 -0
  149. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +310 -0
  150. package/src/viewer/scene/scene/Scene.js +38 -21
  151. package/src/viewer/scene/webgl/ArrayBuf.js +20 -5
  152. package/src/viewer/scene/webgl/Attribute.js +23 -0
  153. package/src/viewer/scene/webgl/FrameContext.js +86 -14
  154. package/src/viewer/scene/webgl/Program.js +181 -0
  155. package/src/viewer/scene/webgl/RenderBuffer.js +262 -62
  156. package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
  157. package/src/viewer/scene/webgl/Renderer.js +843 -880
  158. package/src/viewer/scene/webgl/Sampler.js +18 -0
  159. package/src/viewer/scene/webgl/Shader.js +49 -0
  160. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +132 -60
  161. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +328 -167
  162. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
  163. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +384 -0
  164. package/src/viewer/scene/mesh/draw/LambertShaderSource.js +0 -35
  165. package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +0 -34
  166. package/src/viewer/scene/model/layer/DTXLayer.js +0 -940
  167. package/src/viewer/scene/model/layer/Layer.js +0 -786
  168. package/src/viewer/scene/model/layer/VBOLayer.js +0 -1019
  169. package/src/viewer/scene/model/layer/programs/ColorProgram.js +0 -35
  170. package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +0 -46
  171. package/src/viewer/scene/model/layer/programs/DepthProgram.js +0 -11
  172. package/src/viewer/scene/model/layer/programs/EdgesProgram.js +0 -12
  173. package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +0 -24
  174. package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +0 -12
  175. package/src/viewer/scene/model/layer/programs/PBRProgram.js +0 -180
  176. package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +0 -30
  177. package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +0 -12
  178. package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +0 -18
  179. package/src/viewer/scene/model/layer/programs/ShadowProgram.js +0 -23
  180. package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +0 -15
  181. package/src/viewer/scene/model/layer/programs/SnapProgram.js +0 -28
  182. 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};