@rtzh/engine 0.0.5 → 0.0.7

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 (237) hide show
  1. package/Build/Workers/chunk-243UEBJF.js +1045 -0
  2. package/Build/Workers/chunk-2UNHFFAZ.js +352 -0
  3. package/Build/Workers/chunk-2Y2KA6PM.js +387 -0
  4. package/Build/Workers/chunk-2ZXYLPPT.js +163 -0
  5. package/Build/Workers/chunk-32ZGDYJY.js +3514 -0
  6. package/Build/Workers/chunk-3NSMZ3XW.js +1067 -0
  7. package/Build/Workers/chunk-3WT5VKYM.js +101 -0
  8. package/Build/Workers/chunk-4DIL24GG.js +1460 -0
  9. package/Build/Workers/chunk-4FEDW3WT.js +299 -0
  10. package/Build/Workers/chunk-4IXXMXPJ.js +682 -0
  11. package/Build/Workers/chunk-4SC4KVID.js +692 -0
  12. package/Build/Workers/chunk-52UUGJQ6.js +288 -0
  13. package/Build/Workers/chunk-53AFSDGM.js +37 -0
  14. package/Build/Workers/chunk-54LZ6OUD.js +1067 -0
  15. package/Build/Workers/chunk-54SSO7NS.js +352 -0
  16. package/Build/Workers/chunk-565HBO3F.js +352 -0
  17. package/Build/Workers/chunk-5L3PEFKO.js +629 -0
  18. package/Build/Workers/chunk-5RMI6LFO.js +692 -0
  19. package/Build/Workers/chunk-5SVTAJRH.js +837 -0
  20. package/Build/Workers/chunk-5VDZEVQX.js +788 -0
  21. package/Build/Workers/chunk-5VWFNSLF.js +44 -0
  22. package/Build/Workers/chunk-5W4ISZGQ.js +1483 -0
  23. package/Build/Workers/chunk-5ZMMQ7HE.js +37 -0
  24. package/Build/Workers/chunk-64VDO4BW.js +114 -0
  25. package/Build/Workers/chunk-6AUSOZOL.js +476 -0
  26. package/Build/Workers/chunk-6BIU5AL4.js +692 -0
  27. package/Build/Workers/chunk-6KA3AJM6.js +455 -0
  28. package/Build/Workers/chunk-6MYDYE24.js +280 -0
  29. package/Build/Workers/chunk-6RUDXAFC.js +2719 -0
  30. package/Build/Workers/chunk-6YSUD2OH.js +219 -0
  31. package/Build/Workers/chunk-6YT2LZ3Z.js +1443 -0
  32. package/Build/Workers/chunk-73EGVDOC.js +398 -0
  33. package/Build/Workers/chunk-7BOVULMD.js +44 -0
  34. package/Build/Workers/chunk-7KOMCIWI.js +8366 -0
  35. package/Build/Workers/chunk-7MMYV5PM.js +288 -0
  36. package/Build/Workers/chunk-7QPQGSS3.js +57 -0
  37. package/Build/Workers/chunk-AEURJQ3B.js +73 -0
  38. package/Build/Workers/chunk-AMJRLIO3.js +414 -0
  39. package/Build/Workers/chunk-APOATHFZ.js +138 -0
  40. package/Build/Workers/chunk-AVNHAFMV.js +114 -0
  41. package/Build/Workers/chunk-AWMYTHW4.js +101 -0
  42. package/Build/Workers/chunk-BCYABDWF.js +3514 -0
  43. package/Build/Workers/chunk-BJHSYHOQ.js +97 -0
  44. package/Build/Workers/chunk-BM6ZG63T.js +171 -0
  45. package/Build/Workers/chunk-C3G2NDXM.js +162 -0
  46. package/Build/Workers/chunk-CTARL7CY.js +511 -0
  47. package/Build/Workers/chunk-DIA4J2DB.js +497 -0
  48. package/Build/Workers/chunk-E3NHG3TR.js +1460 -0
  49. package/Build/Workers/chunk-E5BSDIGY.js +139 -0
  50. package/Build/Workers/chunk-EDVAQGDJ.js +2719 -0
  51. package/Build/Workers/chunk-EFHDO3L2.js +102 -0
  52. package/Build/Workers/chunk-EJVGOIOW.js +1317 -0
  53. package/Build/Workers/chunk-EPVJ5OOH.js +8366 -0
  54. package/Build/Workers/chunk-ERYOZBVC.js +171 -0
  55. package/Build/Workers/chunk-ET7LWDHA.js +58 -0
  56. package/Build/Workers/chunk-EWDHM5NC.js +37 -0
  57. package/Build/Workers/chunk-F4Q3VOCC.js +1317 -0
  58. package/Build/Workers/chunk-FCSN7XOU.js +55 -0
  59. package/Build/Workers/chunk-FD62YGTB.js +219 -0
  60. package/Build/Workers/chunk-FHM3HFYM.js +1045 -0
  61. package/Build/Workers/chunk-FNI64UKI.js +57 -0
  62. package/Build/Workers/chunk-FRUZKVBP.js +352 -0
  63. package/Build/Workers/chunk-FSYQE5XE.js +55 -0
  64. package/Build/Workers/chunk-FYW5UQ24.js +837 -0
  65. package/Build/Workers/chunk-FYZVCB32.js +75 -0
  66. package/Build/Workers/chunk-G7PGTG3P.js +387 -0
  67. package/Build/Workers/chunk-GAQXLBFJ.js +1483 -0
  68. package/Build/Workers/chunk-GEH53ULL.js +299 -0
  69. package/Build/Workers/chunk-GLA2PT5T.js +476 -0
  70. package/Build/Workers/chunk-GWLEBUVI.js +2058 -0
  71. package/Build/Workers/chunk-GYIGOBV2.js +439 -0
  72. package/Build/Workers/chunk-GZMTBQM2.js +1443 -0
  73. package/Build/Workers/chunk-H2MM7FMU.js +1054 -0
  74. package/Build/Workers/chunk-H33FCT5U.js +940 -0
  75. package/Build/Workers/chunk-HAR6Y2HP.js +1800 -0
  76. package/Build/Workers/chunk-HBL3QZ2L.js +642 -0
  77. package/Build/Workers/chunk-HEKLTOOR.js +1443 -0
  78. package/Build/Workers/chunk-HM4MH5IG.js +138 -0
  79. package/Build/Workers/chunk-I5JHYEIE.js +241 -0
  80. package/Build/Workers/chunk-IB2XQV6U.js +101 -0
  81. package/Build/Workers/chunk-IC2JHDCI.js +114 -0
  82. package/Build/Workers/chunk-IEEHNZ36.js +241 -0
  83. package/Build/Workers/chunk-IRG63TBY.js +55 -0
  84. package/Build/Workers/chunk-IXM65GBF.js +256 -0
  85. package/Build/Workers/chunk-IY53MZW2.js +58 -0
  86. package/Build/Workers/chunk-IYAZCFAC.js +642 -0
  87. package/Build/Workers/chunk-J2CUNLQP.js +940 -0
  88. package/Build/Workers/chunk-J766O3PA.js +256 -0
  89. package/Build/Workers/chunk-JRPAFYGJ.js +1054 -0
  90. package/Build/Workers/chunk-JWEZXKBE.js +73 -0
  91. package/Build/Workers/chunk-KFOT2YV5.js +138 -0
  92. package/Build/Workers/chunk-KGQGZ7PF.js +778 -0
  93. package/Build/Workers/chunk-KMZXZUA7.js +1460 -0
  94. package/Build/Workers/chunk-KOVKY3HB.js +198 -0
  95. package/Build/Workers/chunk-KQ4ET526.js +163 -0
  96. package/Build/Workers/chunk-L2QIVAZV.js +3514 -0
  97. package/Build/Workers/chunk-LGMONS4O.js +1317 -0
  98. package/Build/Workers/chunk-LJHG4PJQ.js +305 -0
  99. package/Build/Workers/chunk-LNS36LUZ.js +2058 -0
  100. package/Build/Workers/chunk-LPJHTJDQ.js +305 -0
  101. package/Build/Workers/chunk-LRW2QXMW.js +352 -0
  102. package/Build/Workers/chunk-LUUEGFLT.js +305 -0
  103. package/Build/Workers/chunk-LW2VGHDM.js +1800 -0
  104. package/Build/Workers/chunk-LXM2ZC4V.js +288 -0
  105. package/Build/Workers/chunk-LXMLERGC.js +1067 -0
  106. package/Build/Workers/chunk-MEFWVMG6.js +788 -0
  107. package/Build/Workers/chunk-MJVNNURF.js +368 -0
  108. package/Build/Workers/chunk-MWN26ZEM.js +280 -0
  109. package/Build/Workers/chunk-NIWB6UMY.js +198 -0
  110. package/Build/Workers/chunk-NJEG7WRW.js +387 -0
  111. package/Build/Workers/chunk-O224ZEA5.js +58 -0
  112. package/Build/Workers/chunk-O5ICO3AS.js +682 -0
  113. package/Build/Workers/chunk-O5QH7XD5.js +629 -0
  114. package/Build/Workers/chunk-O6T3T3V3.js +97 -0
  115. package/Build/Workers/chunk-OBM2JYMG.js +75 -0
  116. package/Build/Workers/chunk-ODZZZGXK.js +219 -0
  117. package/Build/Workers/chunk-OFTWEOW2.js +1483 -0
  118. package/Build/Workers/chunk-OIJH6LAY.js +497 -0
  119. package/Build/Workers/chunk-OJFVD5ZS.js +778 -0
  120. package/Build/Workers/chunk-OJNPKCEL.js +73 -0
  121. package/Build/Workers/chunk-PQLZOYZE.js +642 -0
  122. package/Build/Workers/chunk-PU44PXY2.js +75 -0
  123. package/Build/Workers/chunk-Q36VXWGP.js +57 -0
  124. package/Build/Workers/chunk-Q4XPVYXJ.js +476 -0
  125. package/Build/Workers/chunk-QGXE4VZ3.js +55 -0
  126. package/Build/Workers/chunk-QIEHP7O4.js +280 -0
  127. package/Build/Workers/chunk-QY55DT53.js +97 -0
  128. package/Build/Workers/chunk-R3PTQZ6H.js +44 -0
  129. package/Build/Workers/chunk-RJVB3K2X.js +511 -0
  130. package/Build/Workers/chunk-RORZNBGJ.js +299 -0
  131. package/Build/Workers/chunk-RRBGLANL.js +55 -0
  132. package/Build/Workers/chunk-RT7PY6BH.js +2719 -0
  133. package/Build/Workers/chunk-SAD42JSM.js +102 -0
  134. package/Build/Workers/chunk-SBR7MW44.js +139 -0
  135. package/Build/Workers/chunk-SFM3GNS2.js +682 -0
  136. package/Build/Workers/chunk-SKXE77AM.js +139 -0
  137. package/Build/Workers/chunk-SLYUIIFB.js +455 -0
  138. package/Build/Workers/chunk-SQSWONTJ.js +241 -0
  139. package/Build/Workers/chunk-SRLJWNU2.js +368 -0
  140. package/Build/Workers/chunk-SZELHE7Q.js +163 -0
  141. package/Build/Workers/chunk-T4LDJBKR.js +124 -0
  142. package/Build/Workers/chunk-TBASKFFL.js +124 -0
  143. package/Build/Workers/chunk-TDGGEIZE.js +398 -0
  144. package/Build/Workers/chunk-TQ63SH2Z.js +352 -0
  145. package/Build/Workers/chunk-U3VI26GL.js +162 -0
  146. package/Build/Workers/chunk-U77FLUQF.js +368 -0
  147. package/Build/Workers/chunk-UIYQEJ5H.js +1054 -0
  148. package/Build/Workers/chunk-UJ72JOGF.js +511 -0
  149. package/Build/Workers/chunk-UY7I27VQ.js +1800 -0
  150. package/Build/Workers/chunk-VLB25GGE.js +439 -0
  151. package/Build/Workers/chunk-VVKDT4J7.js +837 -0
  152. package/Build/Workers/chunk-VXDOONLH.js +162 -0
  153. package/Build/Workers/chunk-W4DV7TAL.js +8366 -0
  154. package/Build/Workers/chunk-WFTPZ3ZX.js +788 -0
  155. package/Build/Workers/chunk-WLIQ26XU.js +455 -0
  156. package/Build/Workers/chunk-WOEPS2UA.js +171 -0
  157. package/Build/Workers/chunk-WWLWTSMV.js +55 -0
  158. package/Build/Workers/chunk-WX2ZANQC.js +940 -0
  159. package/Build/Workers/chunk-XEB4GEXW.js +629 -0
  160. package/Build/Workers/chunk-XFKTM6GN.js +2058 -0
  161. package/Build/Workers/chunk-XKBR7TJB.js +398 -0
  162. package/Build/Workers/chunk-XYRT4RDI.js +1045 -0
  163. package/Build/Workers/chunk-XZINQPR6.js +124 -0
  164. package/Build/Workers/chunk-YLKTSY65.js +414 -0
  165. package/Build/Workers/chunk-YLSZYTTO.js +102 -0
  166. package/Build/Workers/chunk-YQXKIGXX.js +414 -0
  167. package/Build/Workers/chunk-YR3LX3PR.js +497 -0
  168. package/Build/Workers/chunk-Z5MHVJGN.js +778 -0
  169. package/Build/Workers/chunk-ZBRVFEGF.js +256 -0
  170. package/Build/Workers/chunk-ZCPCQJBX.js +198 -0
  171. package/Build/Workers/chunk-ZS7KQSEM.js +439 -0
  172. package/Build/Workers/combineGeometry.js +24 -24
  173. package/Build/Workers/createBoxGeometry.js +18 -18
  174. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  175. package/Build/Workers/createCircleGeometry.js +26 -26
  176. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  177. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  178. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  179. package/Build/Workers/createCorridorGeometry.js +29 -29
  180. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  181. package/Build/Workers/createCylinderGeometry.js +20 -20
  182. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  183. package/Build/Workers/createEllipseGeometry.js +26 -26
  184. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  185. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  186. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  187. package/Build/Workers/createFrustumGeometry.js +18 -18
  188. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  189. package/Build/Workers/createGeometry.js +24 -24
  190. package/Build/Workers/createGroundPolylineGeometry.js +22 -22
  191. package/Build/Workers/createPlaneGeometry.js +16 -16
  192. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  193. package/Build/Workers/createPolygonGeometry.js +32 -32
  194. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  195. package/Build/Workers/createPolylineGeometry.js +25 -25
  196. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  197. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  198. package/Build/Workers/createRectangleGeometry.js +27 -27
  199. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  200. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  201. package/Build/Workers/createSphereGeometry.js +19 -19
  202. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  203. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  204. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  205. package/Build/Workers/createVectorTileGeometries.js +24 -24
  206. package/Build/Workers/createVectorTilePoints.js +13 -13
  207. package/Build/Workers/createVectorTilePolygons.js +22 -22
  208. package/Build/Workers/createVectorTilePolylines.js +14 -14
  209. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  210. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  211. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  212. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  213. package/Build/Workers/createWallGeometry.js +24 -24
  214. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  215. package/Build/Workers/decodeDraco.js +10 -10
  216. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  217. package/Build/Workers/decodeI3S.js +10 -10
  218. package/Build/Workers/gaussianSplatSorter.js +4 -4
  219. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  220. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  221. package/Build/Workers/transcodeKTX2.js +6 -6
  222. package/Build/Workers/transferTypedArrayTest.js +1 -1
  223. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  224. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  225. package/Source/Scene/Cesium3DTileset.js +4163 -4105
  226. package/Source/Scene/Model/BarycentricWireframePipelineStage.js +327 -73
  227. package/Source/Scene/Model/Model.js +3631 -3512
  228. package/Source/Scene/Model/Model3DTileContent.js +585 -568
  229. package/Source/Scene/Model/ModelRuntimePrimitive.js +391 -391
  230. package/Source/Scene/Model/WireframePipelineStage.js +122 -122
  231. package/Source/Shaders/Model/ModelFS.glsl +38 -2
  232. package/Source/Shaders/Model/ModelFS.js +38 -2
  233. package/Source/Shaders/Model/ModelVS.glsl +3 -0
  234. package/Source/Shaders/Model/ModelVS.js +3 -0
  235. package/index.d.ts +801 -773
  236. package/index.js +145 -145
  237. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import Buffer from "../../Renderer/Buffer.js";
2
2
  import BufferUsage from "../../Renderer/BufferUsage.js";
3
+ import Cartesian3 from "../../Core/Cartesian3.js";
3
4
  import Color from "../../Core/Color.js";
4
5
  import ComponentDatatype from "../../Core/ComponentDatatype.js";
5
6
  import defined from "../../Core/defined.js";
@@ -8,6 +9,9 @@ import ModelUtility from "./ModelUtility.js";
8
9
  import PrimitiveType from "../../Core/PrimitiveType.js";
9
10
  import ShaderDestination from "../../Renderer/ShaderDestination.js";
10
11
  import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
12
+ import oneTimeWarning from "../../Core/oneTimeWarning.js";
13
+ import AttributeType from "../AttributeType.js";
14
+ import Pass from "../../Renderer/Pass.js";
11
15
 
12
16
  const BarycentricWireframePipelineStage = {
13
17
  name: "BarycentricWireframePipelineStage",
@@ -20,6 +24,15 @@ BarycentricWireframePipelineStage.process = function (
20
24
  ) {
21
25
  const shaderBuilder = renderResources.shaderBuilder;
22
26
  const model = renderResources.model;
27
+ const webgl2 = frameState.context.webgl2;
28
+
29
+ if (!webgl2) {
30
+ oneTimeWarning(
31
+ "barycentric-wireframe-webgl1",
32
+ "Barycentric wireframe mode requires WebGL 2. Falling back to lines mode.",
33
+ );
34
+ return;
35
+ }
23
36
 
24
37
  const barycentricAttributeLocation = shaderBuilder.addAttribute(
25
38
  "vec3",
@@ -29,7 +42,7 @@ BarycentricWireframePipelineStage.process = function (
29
42
  shaderBuilder.addDefine(
30
43
  "HAS_BARYCENTRIC_WIREFRAME",
31
44
  undefined,
32
- ShaderDestination.FRAGMENT,
45
+ ShaderDestination.BOTH,
33
46
  );
34
47
 
35
48
  if (model.debugWireframeOverlay) {
@@ -40,7 +53,17 @@ BarycentricWireframePipelineStage.process = function (
40
53
  );
41
54
  }
42
55
 
56
+ if ((model._debugWireframeScanSpeed ?? 0.0) > 0.0) {
57
+ shaderBuilder.addDefine(
58
+ "WIREFRAME_SCANLINE",
59
+ undefined,
60
+ ShaderDestination.FRAGMENT,
61
+ );
62
+ }
63
+
43
64
  shaderBuilder.addVarying("vec3", "v_barycentric");
65
+ shaderBuilder.addVarying("vec3", "v_wireframeWorldPos");
66
+ shaderBuilder.addVarying("vec3", "v_wireframeLocalPos");
44
67
 
45
68
  shaderBuilder.addUniform(
46
69
  "float",
@@ -52,16 +75,95 @@ BarycentricWireframePipelineStage.process = function (
52
75
  "u_wireframeColor",
53
76
  ShaderDestination.FRAGMENT,
54
77
  );
78
+ shaderBuilder.addUniform(
79
+ "float",
80
+ "u_wireframeFillAlpha",
81
+ ShaderDestination.FRAGMENT,
82
+ );
83
+ shaderBuilder.addUniform(
84
+ "float",
85
+ "u_wireframeGlow",
86
+ ShaderDestination.FRAGMENT,
87
+ );
88
+ shaderBuilder.addUniform(
89
+ "float",
90
+ "u_wireframeScanSpeed",
91
+ ShaderDestination.FRAGMENT,
92
+ );
93
+ shaderBuilder.addUniform(
94
+ "float",
95
+ "u_wireframeTime",
96
+ ShaderDestination.FRAGMENT,
97
+ );
98
+ shaderBuilder.addUniform(
99
+ "float",
100
+ "u_wireframeModelMinHeight",
101
+ ShaderDestination.BOTH,
102
+ );
103
+ shaderBuilder.addUniform(
104
+ "float",
105
+ "u_wireframeModelMaxHeight",
106
+ ShaderDestination.BOTH,
107
+ );
108
+ shaderBuilder.addUniform(
109
+ "vec3",
110
+ "u_wireframeScanAxis",
111
+ ShaderDestination.FRAGMENT,
112
+ );
113
+ shaderBuilder.addUniform(
114
+ "float",
115
+ "u_wireframeScanMin",
116
+ ShaderDestination.FRAGMENT,
117
+ );
118
+ shaderBuilder.addUniform(
119
+ "float",
120
+ "u_wireframeScanMax",
121
+ ShaderDestination.FRAGMENT,
122
+ );
55
123
 
56
124
  const stageUniforms = renderResources.uniformMap;
57
125
  stageUniforms.u_wireframeWidth = function () {
58
126
  return model.debugWireframeLineWidth ?? 1.0;
59
127
  };
60
128
  stageUniforms.u_wireframeColor = function () {
61
- return defined(model.color) ? model.color : Color.WHITE;
129
+ return model.debugWireframeColor ?? Color.WHITE;
62
130
  };
131
+ stageUniforms.u_wireframeFillAlpha = function () {
132
+ return defined(model._debugWireframeFillColor)
133
+ ? 1.0
134
+ : (model._debugWireframeFillAlpha ?? 1.0);
135
+ };
136
+ stageUniforms.u_wireframeGlow = function () {
137
+ return model._debugWireframeGlow ?? 0.0;
138
+ };
139
+ stageUniforms.u_wireframeScanSpeed = function () {
140
+ return model._debugWireframeScanSpeed ?? 0.0;
141
+ };
142
+ stageUniforms.u_wireframeTime = function () {
143
+ return frameState.time.secondsOfDay;
144
+ };
145
+ stageUniforms.u_wireframeModelMinHeight = function () {
146
+ return model._debugWireframeModelMinHeight ?? 0.0;
147
+ };
148
+ stageUniforms.u_wireframeModelMaxHeight = function () {
149
+ return model._debugWireframeModelMaxHeight ?? 1.0;
150
+ };
151
+ stageUniforms.u_wireframeScanAxis = function () {
152
+ return model._debugWireframeScanAxis ?? new Cartesian3(0, 0, 1);
153
+ };
154
+ stageUniforms.u_wireframeScanMin = function () {
155
+ return model._debugWireframeScanMin ?? 0.0;
156
+ };
157
+ stageUniforms.u_wireframeScanMax = function () {
158
+ return model._debugWireframeScanMax ?? 1.0;
159
+ };
160
+
161
+ // Enable alpha blending when fillAlpha < 1.0 in preserve-original-color mode
162
+ if (!defined(model._debugWireframeFillColor) && (model._debugWireframeFillAlpha ?? 1.0) < 1.0) {
163
+ renderResources.alphaOptions.pass = Pass.TRANSLUCENT;
164
+ }
63
165
 
64
- addBarycentricAttribute(
166
+ deindexGeometryAndAddBarycentric(
65
167
  renderResources,
66
168
  primitive,
67
169
  barycentricAttributeLocation,
@@ -69,108 +171,260 @@ BarycentricWireframePipelineStage.process = function (
69
171
  );
70
172
  };
71
173
 
72
- function getOriginalIndices(primitive, indices, frameState) {
73
- const positionAttribute = ModelUtility.getAttributeBySemantic(
74
- primitive,
75
- VertexAttributeSemantic.POSITION,
174
+ function getAttributeIndex(shaderBuilder, semantic, setIndex) {
175
+ return shaderBuilder.attributeLocations[semantic + "_" + (setIndex ?? 0)];
176
+ }
177
+
178
+ function getComponentsFromType(type) {
179
+ return AttributeType.getNumberOfComponents(type);
180
+ }
181
+
182
+ function extractAttributeData(attribute) {
183
+ if (!defined(attribute)) {
184
+ return undefined;
185
+ }
186
+
187
+ const typedArray = attribute.typedArray;
188
+ if (!defined(typedArray)) {
189
+ return undefined;
190
+ }
191
+
192
+ const componentDatatype = attribute.componentDatatype;
193
+ const componentsPerAttribute = getComponentsFromType(attribute.type);
194
+ const count = attribute.count;
195
+ const byteOffset = attribute.byteOffset ?? 0;
196
+ const byteStride = attribute.byteStride;
197
+ const componentSize = ComponentDatatype.getSizeInBytes(componentDatatype);
198
+ const stride = defined(byteStride) && byteStride !== 0
199
+ ? byteStride
200
+ : componentsPerAttribute * componentSize;
201
+
202
+ const result = ComponentDatatype.createTypedArray(
203
+ componentDatatype,
204
+ count * componentsPerAttribute,
76
205
  );
77
- const vertexCount = positionAttribute.count;
78
- const webgl2 = frameState.context.webgl2;
79
206
 
80
- let originalIndices;
81
- if (defined(indices)) {
82
- const indicesBuffer = indices.buffer;
83
- const indicesCount = indices.count;
84
- if (defined(indicesBuffer) && webgl2) {
85
- const useUint8Array = indicesBuffer.sizeInBytes === indicesCount;
86
- originalIndices = useUint8Array
87
- ? new Uint8Array(indicesCount)
88
- : IndexDatatype.createTypedArray(vertexCount, indicesCount);
89
-
90
- indicesBuffer.getBufferData(originalIndices);
91
- } else {
92
- originalIndices = indices.typedArray;
207
+ const baseOffset = byteOffset;
208
+ for (let i = 0; i < count; i++) {
209
+ const byteIndex = baseOffset + i * stride;
210
+ const elementIndex = byteIndex / componentSize;
211
+ for (let c = 0; c < componentsPerAttribute; c++) {
212
+ result[i * componentsPerAttribute + c] = typedArray[elementIndex + c];
213
+ }
214
+ }
215
+
216
+ return {
217
+ data: result,
218
+ count: count,
219
+ componentsPerAttribute: componentsPerAttribute,
220
+ componentDatatype: componentDatatype,
221
+ normalized: attribute.normalized,
222
+ };
223
+ }
224
+
225
+ function extractIndicesData(primitive) {
226
+ const indices = primitive.indices;
227
+ if (!defined(indices)) {
228
+ return undefined;
229
+ }
230
+
231
+ const typedArray = indices.typedArray;
232
+ if (defined(typedArray)) {
233
+ return typedArray;
234
+ }
235
+
236
+ return undefined;
237
+ }
238
+
239
+ function deindexAttributeData(
240
+ originalData,
241
+ originalIndices,
242
+ componentsPerAttribute,
243
+ componentDatatype,
244
+ ) {
245
+ const newVertexCount = originalIndices.length;
246
+ const totalComponents = newVertexCount * componentsPerAttribute;
247
+ const newData = ComponentDatatype.createTypedArray(componentDatatype, totalComponents);
248
+
249
+ for (let i = 0; i < newVertexCount; i++) {
250
+ const oldIndex = originalIndices[i];
251
+ const srcOffset = oldIndex * componentsPerAttribute;
252
+ const dstOffset = i * componentsPerAttribute;
253
+ for (let c = 0; c < componentsPerAttribute; c++) {
254
+ newData[dstOffset + c] = originalData[srcOffset + c];
93
255
  }
94
256
  }
95
- return originalIndices;
257
+
258
+ return newData;
96
259
  }
97
260
 
98
- function addBarycentricAttribute(
261
+ function createVertexBuffer(typedArray, frameState, model) {
262
+ const buffer = Buffer.createVertexBuffer({
263
+ context: frameState.context,
264
+ typedArray: typedArray,
265
+ usage: BufferUsage.STATIC_DRAW,
266
+ });
267
+ model._pipelineResources.push(buffer);
268
+ return buffer;
269
+ }
270
+
271
+ function deindexGeometryAndAddBarycentric(
99
272
  renderResources,
100
273
  primitive,
101
- attributeLocation,
274
+ barycentricAttributeLocation,
102
275
  frameState,
103
276
  ) {
104
- const positionAttribute = ModelUtility.getAttributeBySemantic(
277
+ const model = renderResources.model;
278
+ const shaderBuilder = renderResources.shaderBuilder;
279
+ const originalIndices = extractIndicesData(primitive);
280
+ const positionAttr = ModelUtility.getAttributeBySemantic(
105
281
  primitive,
106
282
  VertexAttributeSemantic.POSITION,
107
283
  );
108
- const vertexCount = positionAttribute.count;
109
- const indices = renderResources.indices;
110
- const originalIndices = getOriginalIndices(primitive, indices, frameState);
111
284
 
112
- const barycentricValues = new Float32Array(vertexCount * 3);
285
+ if (!defined(positionAttr)) {
286
+ return;
287
+ }
288
+
289
+ const originalVertexCount = positionAttr.count;
290
+
291
+ if (!defined(originalIndices)) {
292
+ const barycentricValues = new Float32Array(originalVertexCount * 3);
293
+ for (let i = 0; i < originalVertexCount; i += 3) {
294
+ barycentricValues[i * 3] = 1.0;
295
+ barycentricValues[i * 3 + 1] = 0.0;
296
+ barycentricValues[i * 3 + 2] = 0.0;
113
297
 
114
- if (defined(originalIndices)) {
115
- const indexCount = indices.count;
116
- const primitiveType = primitive.primitiveType;
298
+ barycentricValues[(i + 1) * 3] = 0.0;
299
+ barycentricValues[(i + 1) * 3 + 1] = 1.0;
300
+ barycentricValues[(i + 1) * 3 + 2] = 0.0;
117
301
 
118
- if (PrimitiveType.isTriangles(primitiveType)) {
119
- for (let i = 0; i < indexCount; i += 3) {
120
- const i0 = originalIndices[i];
121
- const i1 = originalIndices[i + 1];
122
- const i2 = originalIndices[i + 2];
302
+ barycentricValues[(i + 2) * 3] = 0.0;
303
+ barycentricValues[(i + 2) * 3 + 1] = 0.0;
304
+ barycentricValues[(i + 2) * 3 + 2] = 1.0;
305
+ }
306
+
307
+ const barycentricBuffer = createVertexBuffer(barycentricValues, frameState, model);
123
308
 
124
- barycentricValues[i0 * 3] = 1.0;
125
- barycentricValues[i0 * 3 + 1] = 0.0;
126
- barycentricValues[i0 * 3 + 2] = 0.0;
309
+ const barycentricAttribute = {
310
+ index: barycentricAttributeLocation,
311
+ vertexBuffer: barycentricBuffer,
312
+ count: originalVertexCount,
313
+ componentsPerAttribute: 3,
314
+ componentDatatype: ComponentDatatype.FLOAT,
315
+ offsetInBytes: 0,
316
+ strideInBytes: 0,
317
+ normalize: false,
318
+ };
319
+ renderResources.attributes.push(barycentricAttribute);
320
+ return;
321
+ }
127
322
 
128
- barycentricValues[i1 * 3] = 0.0;
129
- barycentricValues[i1 * 3 + 1] = 1.0;
130
- barycentricValues[i1 * 3 + 2] = 0.0;
323
+ const primitiveType = primitive.primitiveType;
324
+ if (!PrimitiveType.isTriangles(primitiveType)) {
325
+ return;
326
+ }
131
327
 
132
- barycentricValues[i2 * 3] = 0.0;
133
- barycentricValues[i2 * 3 + 1] = 0.0;
134
- barycentricValues[i2 * 3 + 2] = 1.0;
135
- }
328
+ const newVertexCount = originalIndices.length;
329
+ const newAttributes = [];
330
+ const originalAttributes = primitive.attributes;
331
+
332
+ for (let i = 0; i < originalAttributes.length; i++) {
333
+ const attr = originalAttributes[i];
334
+ const semantic = attr.semantic;
335
+ const setIndex = attr.setIndex;
336
+
337
+ let attributeIndex;
338
+ if (semantic === VertexAttributeSemantic.POSITION) {
339
+ attributeIndex = shaderBuilder.attributeLocations.position;
340
+ } else if (semantic === VertexAttributeSemantic.NORMAL) {
341
+ attributeIndex = shaderBuilder.attributeLocations.normal;
342
+ } else if (semantic === VertexAttributeSemantic.TANGENT) {
343
+ attributeIndex = shaderBuilder.attributeLocations.tangent;
344
+ } else if (semantic === VertexAttributeSemantic.TEXCOORD) {
345
+ attributeIndex = shaderBuilder.attributeLocations["texCoord_" + setIndex];
346
+ } else if (semantic === VertexAttributeSemantic.COLOR) {
347
+ attributeIndex = shaderBuilder.attributeLocations["color_" + setIndex];
348
+ } else if (semantic === VertexAttributeSemantic.JOINTS) {
349
+ attributeIndex = shaderBuilder.attributeLocations["joints_" + setIndex];
350
+ } else if (semantic === VertexAttributeSemantic.WEIGHTS) {
351
+ attributeIndex = shaderBuilder.attributeLocations["weights_" + setIndex];
352
+ } else {
353
+ continue;
136
354
  }
137
- } else {
138
- for (let i = 0; i < vertexCount; i += 3) {
139
- const baseIndex = i * 3;
140
- barycentricValues[baseIndex] = 1.0;
141
- barycentricValues[baseIndex + 1] = 0.0;
142
- barycentricValues[baseIndex + 2] = 0.0;
143
-
144
- barycentricValues[baseIndex + 3] = 0.0;
145
- barycentricValues[baseIndex + 4] = 1.0;
146
- barycentricValues[baseIndex + 5] = 0.0;
147
-
148
- barycentricValues[baseIndex + 6] = 0.0;
149
- barycentricValues[baseIndex + 7] = 0.0;
150
- barycentricValues[baseIndex + 8] = 1.0;
355
+
356
+ if (!defined(attributeIndex)) {
357
+ continue;
151
358
  }
359
+
360
+ const extracted = extractAttributeData(attr);
361
+ if (!defined(extracted)) {
362
+ continue;
363
+ }
364
+
365
+ const newData = deindexAttributeData(
366
+ extracted.data,
367
+ originalIndices,
368
+ extracted.componentsPerAttribute,
369
+ extracted.componentDatatype,
370
+ );
371
+
372
+ const newBuffer = createVertexBuffer(newData, frameState, model);
373
+
374
+ newAttributes.push({
375
+ index: attributeIndex,
376
+ vertexBuffer: newBuffer,
377
+ count: newVertexCount,
378
+ componentsPerAttribute: extracted.componentsPerAttribute,
379
+ componentDatatype: extracted.componentDatatype,
380
+ offsetInBytes: 0,
381
+ strideInBytes: 0,
382
+ normalize: extracted.normalized,
383
+ });
152
384
  }
153
385
 
154
- const barycentricBuffer = Buffer.createVertexBuffer({
155
- context: frameState.context,
156
- typedArray: barycentricValues,
157
- usage: BufferUsage.STATIC_DRAW,
158
- });
386
+ const instanceAttributes = renderResources.attributes.filter(
387
+ function (attr) {
388
+ return attr.instanceDivisor === 1;
389
+ },
390
+ );
391
+ for (let i = 0; i < instanceAttributes.length; i++) {
392
+ newAttributes.push(instanceAttributes[i]);
393
+ }
159
394
 
160
- const model = renderResources.model;
161
- model._pipelineResources.push(barycentricBuffer);
395
+ const barycentricValues = new Float32Array(newVertexCount * 3);
396
+ for (let i = 0; i < newVertexCount; i += 3) {
397
+ barycentricValues[i * 3] = 1.0;
398
+ barycentricValues[i * 3 + 1] = 0.0;
399
+ barycentricValues[i * 3 + 2] = 0.0;
400
+
401
+ barycentricValues[(i + 1) * 3] = 0.0;
402
+ barycentricValues[(i + 1) * 3 + 1] = 1.0;
403
+ barycentricValues[(i + 1) * 3 + 2] = 0.0;
404
+
405
+ barycentricValues[(i + 2) * 3] = 0.0;
406
+ barycentricValues[(i + 2) * 3 + 1] = 0.0;
407
+ barycentricValues[(i + 2) * 3 + 2] = 1.0;
408
+ }
162
409
 
163
- const barycentricAttribute = {
164
- index: attributeLocation,
410
+ const barycentricBuffer = createVertexBuffer(barycentricValues, frameState, model);
411
+
412
+ newAttributes.push({
413
+ index: barycentricAttributeLocation,
165
414
  vertexBuffer: barycentricBuffer,
415
+ count: newVertexCount,
166
416
  componentsPerAttribute: 3,
167
417
  componentDatatype: ComponentDatatype.FLOAT,
168
418
  offsetInBytes: 0,
169
419
  strideInBytes: 0,
170
420
  normalize: false,
171
- };
421
+ });
172
422
 
173
- renderResources.attributes.push(barycentricAttribute);
423
+ renderResources.attributes = newAttributes;
424
+ renderResources.indices = undefined;
425
+ renderResources.count = newVertexCount;
426
+ renderResources.primitiveType = PrimitiveType.TRIANGLES;
427
+ renderResources.wireframeIndexBuffer = undefined;
174
428
  }
175
429
 
176
430
  export default BarycentricWireframePipelineStage;