@rtzh/engine 0.0.4 → 0.0.6

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 (228) hide show
  1. package/Build/Workers/{chunk-HAY6YE7M.js → chunk-23CHWHW6.js} +4 -4
  2. package/Build/Workers/{chunk-3K2PK2OU.js → chunk-243UEBJF.js} +10 -10
  3. package/Build/Workers/{chunk-TSAJNE4K.js → chunk-27JI7F7B.js} +2 -2
  4. package/Build/Workers/{chunk-OVPPHDU7.js → chunk-2OWEFNS4.js} +4 -4
  5. package/Build/Workers/{chunk-YBVMSCW4.js → chunk-2VN5W6HA.js} +5 -5
  6. package/Build/Workers/{chunk-OOB2KZC6.js → chunk-2YAONTGQ.js} +7 -7
  7. package/Build/Workers/{chunk-JH27ZGLN.js → chunk-324L25HV.js} +6 -6
  8. package/Build/Workers/{chunk-6LZBBEA7.js → chunk-3EZBCDBK.js} +9 -9
  9. package/Build/Workers/{chunk-25BA4527.js → chunk-3JPA6GA3.js} +12 -12
  10. package/Build/Workers/{chunk-DP76S3IQ.js → chunk-3NSMZ3XW.js} +17 -17
  11. package/Build/Workers/chunk-3WRJXCJS.js +497 -0
  12. package/Build/Workers/{chunk-SBFTVHRW.js → chunk-3ZJ6X3BW.js} +5 -5
  13. package/Build/Workers/{chunk-B2VFNYD7.js → chunk-42I3QSKJ.js} +1 -1
  14. package/Build/Workers/{chunk-BXBGWQ3Z.js → chunk-4BJHO56J.js} +6 -6
  15. package/Build/Workers/{chunk-YPGJSFOO.js → chunk-4DIL24GG.js} +5 -5
  16. package/Build/Workers/{chunk-XOVHLPKW.js → chunk-4FEDW3WT.js} +8 -8
  17. package/Build/Workers/{chunk-WAS3IHIQ.js → chunk-4GPHI5UY.js} +10 -10
  18. package/Build/Workers/{chunk-3M5CRHSG.js → chunk-4NAHNN5G.js} +10 -10
  19. package/Build/Workers/{chunk-KFMCOG26.js → chunk-4SC4KVID.js} +10 -10
  20. package/Build/Workers/{chunk-J3FBVUY4.js → chunk-53AFSDGM.js} +1 -1
  21. package/Build/Workers/{chunk-Q2DXNFYW.js → chunk-54AFUJNV.js} +11 -11
  22. package/Build/Workers/{chunk-7NCJH26L.js → chunk-54SSO7NS.js} +5 -5
  23. package/Build/Workers/{chunk-2BLQ3B4Q.js → chunk-553BNJPP.js} +8 -8
  24. package/Build/Workers/{chunk-GDIBU55R.js → chunk-56MKFDJH.js} +12 -12
  25. package/Build/Workers/{chunk-K4IMD7KH.js → chunk-5DPCF65K.js} +5 -5
  26. package/Build/Workers/{chunk-5QTPACZQ.js → chunk-5MCUZL44.js} +6 -6
  27. package/Build/Workers/{chunk-VIYQ56Z7.js → chunk-5SVTAJRH.js} +12 -12
  28. package/Build/Workers/chunk-5T4DXPEL.js +299 -0
  29. package/Build/Workers/{chunk-56XTN5NJ.js → chunk-5UHIRI2A.js} +2 -2
  30. package/Build/Workers/{chunk-ACH67MPW.js → chunk-5W4ISZGQ.js} +14 -14
  31. package/Build/Workers/{chunk-KVDSJXRK.js → chunk-64VDO4BW.js} +6 -6
  32. package/Build/Workers/{chunk-5WAG5YKS.js → chunk-664SI23B.js} +12 -12
  33. package/Build/Workers/{chunk-TO7TWUET.js → chunk-6AUSOZOL.js} +7 -7
  34. package/Build/Workers/{chunk-SOR7PD4V.js → chunk-6GNLKYQO.js} +6 -6
  35. package/Build/Workers/{chunk-POY6ZE32.js → chunk-6ZF4QOFM.js} +6 -6
  36. package/Build/Workers/{chunk-4HXPSZRC.js → chunk-763Q2YKY.js} +14 -14
  37. package/Build/Workers/chunk-7MMYV5PM.js +288 -0
  38. package/Build/Workers/{chunk-TDI7UQBO.js → chunk-7QPQGSS3.js} +5 -5
  39. package/Build/Workers/{chunk-IELTSYPZ.js → chunk-7R74V5Z3.js} +8 -8
  40. package/Build/Workers/{chunk-PHB5MRHM.js → chunk-7X6CLAD2.js} +9 -9
  41. package/Build/Workers/{chunk-PV5B2YNB.js → chunk-ADQVXDEJ.js} +16 -16
  42. package/Build/Workers/{chunk-TWF4XRZ6.js → chunk-AEURJQ3B.js} +2 -2
  43. package/Build/Workers/{chunk-WLREXLZ7.js → chunk-AMJRLIO3.js} +11 -11
  44. package/Build/Workers/{chunk-7B23DD46.js → chunk-ATC2WXI4.js} +17 -17
  45. package/Build/Workers/{chunk-KVE5EAPO.js → chunk-B5ZUBUPB.js} +14 -14
  46. package/Build/Workers/{chunk-4Z26IS65.js → chunk-BCYABDWF.js} +18 -18
  47. package/Build/Workers/{chunk-E2CARZA7.js → chunk-BHTWF7UG.js} +2 -2
  48. package/Build/Workers/{chunk-UUJXSLQ2.js → chunk-BLZILZWF.js} +16 -16
  49. package/Build/Workers/{chunk-J4MIJCN5.js → chunk-CCPKBCZD.js} +6 -6
  50. package/Build/Workers/chunk-CMAG5O53.js +1483 -0
  51. package/Build/Workers/{chunk-KUAWPGSB.js → chunk-CTARL7CY.js} +13 -13
  52. package/Build/Workers/{chunk-FJREGHFG.js → chunk-D3FNWB3Q.js} +4 -4
  53. package/Build/Workers/{chunk-HI6X33GO.js → chunk-DAYNPAVN.js} +2 -2
  54. package/Build/Workers/{chunk-WMGESUDW.js → chunk-DIA4J2DB.js} +3 -3
  55. package/Build/Workers/{chunk-EISI2CR2.js → chunk-DKJMD2HX.js} +6 -6
  56. package/Build/Workers/{chunk-AL22JVIA.js → chunk-DVTKM7FF.js} +4 -4
  57. package/Build/Workers/{chunk-KBAGFNQ4.js → chunk-E5BSDIGY.js} +5 -5
  58. package/Build/Workers/{chunk-HU5P7PMU.js → chunk-EJVGOIOW.js} +7 -7
  59. package/Build/Workers/chunk-ERYOZBVC.js +171 -0
  60. package/Build/Workers/{chunk-UYT2PBMV.js → chunk-ET7LWDHA.js} +2 -2
  61. package/Build/Workers/{chunk-5BIQOSBV.js → chunk-FSYQE5XE.js} +1 -1
  62. package/Build/Workers/{chunk-ZV42SJKS.js → chunk-FTHCZAWE.js} +2 -2
  63. package/Build/Workers/{chunk-DSBEWMOQ.js → chunk-FTXEOX64.js} +17 -17
  64. package/Build/Workers/{chunk-R73BHGGI.js → chunk-FUFHIXPT.js} +4 -4
  65. package/Build/Workers/{chunk-I76SRIKN.js → chunk-G2KELS4I.js} +4 -4
  66. package/Build/Workers/{chunk-2CAIFJD5.js → chunk-G7PGTG3P.js} +13 -13
  67. package/Build/Workers/{chunk-KXB3AARU.js → chunk-GCZNJHST.js} +5 -5
  68. package/Build/Workers/{chunk-UTWLMOPM.js → chunk-GJFIEALZ.js} +13 -13
  69. package/Build/Workers/{chunk-VR2L2Y4Z.js → chunk-GZMTBQM2.js} +4 -4
  70. package/Build/Workers/{chunk-DBKYAGM6.js → chunk-HAR6Y2HP.js} +2 -2
  71. package/Build/Workers/{chunk-NOH3R3YY.js → chunk-HC6DDPFU.js} +7 -7
  72. package/Build/Workers/{chunk-ELXGXAYS.js → chunk-HHN2M3ES.js} +10 -10
  73. package/Build/Workers/chunk-HHUKBKWS.js +414 -0
  74. package/Build/Workers/chunk-HLIXASKN.js +476 -0
  75. package/Build/Workers/chunk-HM4MH5IG.js +138 -0
  76. package/Build/Workers/{chunk-2APW7KRS.js → chunk-IB2XQV6U.js} +2 -2
  77. package/Build/Workers/{chunk-6XJO625E.js → chunk-IEBTKCMB.js} +3 -3
  78. package/Build/Workers/{chunk-Z356SW7E.js → chunk-IXM65GBF.js} +4 -4
  79. package/Build/Workers/{chunk-LPM2FVDN.js → chunk-IYAZCFAC.js} +6 -6
  80. package/Build/Workers/{chunk-XJKMLTSH.js → chunk-IYXLSOLF.js} +10 -10
  81. package/Build/Workers/{chunk-6QVMKRJ4.js → chunk-JJD7S2CV.js} +18 -18
  82. package/Build/Workers/{chunk-D7TGILR3.js → chunk-JRPAFYGJ.js} +17 -17
  83. package/Build/Workers/{chunk-F5LAPCFC.js → chunk-K6PDZWHZ.js} +5 -5
  84. package/Build/Workers/{chunk-OAOREOSO.js → chunk-KWFCDTXS.js} +9 -9
  85. package/Build/Workers/{chunk-JURLMTV2.js → chunk-LENXRROQ.js} +14 -14
  86. package/Build/Workers/{chunk-BJ6WXQOW.js → chunk-LPJHTJDQ.js} +4 -4
  87. package/Build/Workers/{chunk-AIW5F22O.js → chunk-LRW2QXMW.js} +6 -6
  88. package/Build/Workers/{chunk-EKMWNF4U.js → chunk-MB2ZJQR3.js} +1 -1
  89. package/Build/Workers/{chunk-55IROWAX.js → chunk-MCNY7SPD.js} +5 -5
  90. package/Build/Workers/{chunk-S3AE3MZZ.js → chunk-MHEKNHOF.js} +13 -13
  91. package/Build/Workers/chunk-MRLJERN3.js +114 -0
  92. package/Build/Workers/{chunk-5CSRWY7L.js → chunk-MWN26ZEM.js} +1 -1
  93. package/Build/Workers/{chunk-PLLZB3R4.js → chunk-NIWB6UMY.js} +7 -7
  94. package/Build/Workers/{chunk-MLFVICFZ.js → chunk-NOJAQPXU.js} +4 -4
  95. package/Build/Workers/{chunk-5VZISKJF.js → chunk-O5QH7XD5.js} +1 -1
  96. package/Build/Workers/chunk-OAFZ26QL.js +837 -0
  97. package/Build/Workers/{chunk-AVSQILVI.js → chunk-OBM2JYMG.js} +1 -1
  98. package/Build/Workers/{chunk-245NZYCR.js → chunk-OBQVOEPZ.js} +5 -5
  99. package/Build/Workers/chunk-OC63Z35M.js +280 -0
  100. package/Build/Workers/{chunk-EDIUN7V3.js → chunk-ODZZZGXK.js} +7 -7
  101. package/Build/Workers/chunk-OEAC5XUG.js +73 -0
  102. package/Build/Workers/chunk-OQK27J4J.js +139 -0
  103. package/Build/Workers/{chunk-LN4NMLYY.js → chunk-OTDNJAYJ.js} +1 -1
  104. package/Build/Workers/{chunk-JFO3ELF3.js → chunk-PGYA2CMO.js} +6 -6
  105. package/Build/Workers/{chunk-64W2RXA4.js → chunk-PSDWIJMU.js} +7 -7
  106. package/Build/Workers/chunk-PW3GQAXA.js +3514 -0
  107. package/Build/Workers/chunk-Q2YRPH7V.js +1067 -0
  108. package/Build/Workers/{chunk-KKYQRQ57.js → chunk-QDNIPHD7.js} +12 -12
  109. package/Build/Workers/{chunk-WO5ZNC7S.js → chunk-QEGQDFX2.js} +10 -10
  110. package/Build/Workers/chunk-QY55DT53.js +97 -0
  111. package/Build/Workers/{chunk-BOV6T7FO.js → chunk-R3PTQZ6H.js} +2 -2
  112. package/Build/Workers/chunk-R5U3MYPS.js +198 -0
  113. package/Build/Workers/{chunk-IDVURFRN.js → chunk-RJIH4MDC.js} +8 -8
  114. package/Build/Workers/chunk-RO7SDGOD.js +352 -0
  115. package/Build/Workers/chunk-RT7PY6BH.js +2719 -0
  116. package/Build/Workers/{chunk-KH2OWUUA.js → chunk-RTJ6L5O4.js} +2 -2
  117. package/Build/Workers/{chunk-75UGCVME.js → chunk-SAD42JSM.js} +4 -4
  118. package/Build/Workers/chunk-SCNCHSTQ.js +642 -0
  119. package/Build/Workers/{chunk-U364CIW4.js → chunk-SFM3GNS2.js} +10 -10
  120. package/Build/Workers/{chunk-OFJRMGNX.js → chunk-SG56ZOPD.js} +11 -11
  121. package/Build/Workers/chunk-SHQEATE2.js +1045 -0
  122. package/Build/Workers/{chunk-FVYRV2T6.js → chunk-SLYUIIFB.js} +6 -6
  123. package/Build/Workers/chunk-SPL7JK6K.js +1054 -0
  124. package/Build/Workers/chunk-SQSWONTJ.js +241 -0
  125. package/Build/Workers/chunk-SRLJWNU2.js +368 -0
  126. package/Build/Workers/{chunk-QWV2DM66.js → chunk-SYCWSSRX.js} +4 -4
  127. package/Build/Workers/{chunk-HGIGANIQ.js → chunk-SZELHE7Q.js} +2 -2
  128. package/Build/Workers/{chunk-MQ62ZE2U.js → chunk-TBASKFFL.js} +5 -5
  129. package/Build/Workers/chunk-TDGGEIZE.js +398 -0
  130. package/Build/Workers/{chunk-HAWJ7FMN.js → chunk-TEZGNCXH.js} +8 -8
  131. package/Build/Workers/chunk-TIQZUI5N.js +44 -0
  132. package/Build/Workers/chunk-TKJHRY4V.js +511 -0
  133. package/Build/Workers/{chunk-KHKSE4WQ.js → chunk-TLXEQ5QY.js} +12 -12
  134. package/Build/Workers/chunk-U3VI26GL.js +162 -0
  135. package/Build/Workers/chunk-UIMHSWDJ.js +455 -0
  136. package/Build/Workers/chunk-UO3AWZR3.js +352 -0
  137. package/Build/Workers/{chunk-UOD5YNH3.js → chunk-UTXXZ7XH.js} +9 -9
  138. package/Build/Workers/{chunk-66YGZWBI.js → chunk-V2TRFTCU.js} +7 -7
  139. package/Build/Workers/chunk-V4I3IKAK.js +1460 -0
  140. package/Build/Workers/chunk-VLB25GGE.js +439 -0
  141. package/Build/Workers/{chunk-BN4WA7LX.js → chunk-W2EK42GB.js} +1 -1
  142. package/Build/Workers/chunk-W2OMUTYA.js +1800 -0
  143. package/Build/Workers/{chunk-KQIZ7AFF.js → chunk-W4DV7TAL.js} +8 -8
  144. package/Build/Workers/{chunk-P7M4VYFT.js → chunk-WFTPZ3ZX.js} +11 -11
  145. package/Build/Workers/chunk-WHOEQFL4.js +682 -0
  146. package/Build/Workers/{chunk-X65Y2JSA.js → chunk-WWLWTSMV.js} +1 -1
  147. package/Build/Workers/chunk-WX2ZANQC.js +940 -0
  148. package/Build/Workers/chunk-XFKTM6GN.js +2058 -0
  149. package/Build/Workers/chunk-XHNWVOIJ.js +219 -0
  150. package/Build/Workers/{chunk-DEIMB3B5.js → chunk-XNKQLSHI.js} +1 -1
  151. package/Build/Workers/chunk-XOXF37BU.js +1317 -0
  152. package/Build/Workers/chunk-YC6PFDXQ.js +8366 -0
  153. package/Build/Workers/chunk-YFJB3US4.js +102 -0
  154. package/Build/Workers/chunk-YMXATXRN.js +57 -0
  155. package/Build/Workers/chunk-YVRD2PO5.js +124 -0
  156. package/Build/Workers/chunk-Z24A5EMJ.js +387 -0
  157. package/Build/Workers/chunk-Z4IW5XUY.js +788 -0
  158. package/Build/Workers/chunk-Z5MHVJGN.js +778 -0
  159. package/Build/Workers/chunk-ZFHCP7RN.js +692 -0
  160. package/Build/Workers/{chunk-6H33B6OL.js → chunk-ZHHEFNHL.js} +1 -1
  161. package/Build/Workers/chunk-ZI5GDNEV.js +305 -0
  162. package/Build/Workers/chunk-ZYTMDBCR.js +1443 -0
  163. package/Build/Workers/combineGeometry.js +24 -24
  164. package/Build/Workers/createBoxGeometry.js +18 -18
  165. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  166. package/Build/Workers/createCircleGeometry.js +26 -26
  167. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  168. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  169. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  170. package/Build/Workers/createCorridorGeometry.js +29 -29
  171. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  172. package/Build/Workers/createCylinderGeometry.js +20 -20
  173. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  174. package/Build/Workers/createEllipseGeometry.js +26 -26
  175. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  176. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  177. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  178. package/Build/Workers/createFrustumGeometry.js +18 -18
  179. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  180. package/Build/Workers/createGeometry.js +24 -24
  181. package/Build/Workers/createGroundPolylineGeometry.js +22 -22
  182. package/Build/Workers/createPlaneGeometry.js +16 -16
  183. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  184. package/Build/Workers/createPolygonGeometry.js +32 -32
  185. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  186. package/Build/Workers/createPolylineGeometry.js +25 -25
  187. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  188. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  189. package/Build/Workers/createRectangleGeometry.js +27 -27
  190. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  191. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  192. package/Build/Workers/createSphereGeometry.js +19 -19
  193. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  194. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  195. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  196. package/Build/Workers/createVectorTileGeometries.js +24 -24
  197. package/Build/Workers/createVectorTilePoints.js +13 -13
  198. package/Build/Workers/createVectorTilePolygons.js +22 -22
  199. package/Build/Workers/createVectorTilePolylines.js +14 -14
  200. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  201. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  202. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  203. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  204. package/Build/Workers/createWallGeometry.js +24 -24
  205. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  206. package/Build/Workers/decodeDraco.js +10 -10
  207. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  208. package/Build/Workers/decodeI3S.js +10 -10
  209. package/Build/Workers/gaussianSplatSorter.js +4 -4
  210. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  211. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  212. package/Build/Workers/transcodeKTX2.js +6 -6
  213. package/Build/Workers/transferTypedArrayTest.js +1 -1
  214. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  215. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  216. package/Source/Scene/Cesium3DTileset.js +4121 -3932
  217. package/Source/Scene/Model/BarycentricWireframePipelineStage.js +355 -0
  218. package/Source/Scene/Model/Model.js +3584 -3340
  219. package/Source/Scene/Model/Model3DTileContent.js +568 -551
  220. package/Source/Scene/Model/ModelRuntimePrimitive.js +391 -380
  221. package/Source/Scene/Model/WireframePipelineStage.js +122 -118
  222. package/Source/Shaders/Model/ModelFS.glsl +14 -0
  223. package/Source/Shaders/Model/ModelFS.js +14 -0
  224. package/Source/Shaders/Model/ModelVS.glsl +4 -0
  225. package/Source/Shaders/Model/ModelVS.js +4 -0
  226. package/index.d.ts +891 -697
  227. package/index.js +3 -2
  228. package/package.json +1 -1
@@ -0,0 +1,355 @@
1
+ import Buffer from "../../Renderer/Buffer.js";
2
+ import BufferUsage from "../../Renderer/BufferUsage.js";
3
+ import Color from "../../Core/Color.js";
4
+ import ComponentDatatype from "../../Core/ComponentDatatype.js";
5
+ import defined from "../../Core/defined.js";
6
+ import IndexDatatype from "../../Core/IndexDatatype.js";
7
+ import ModelUtility from "./ModelUtility.js";
8
+ import PrimitiveType from "../../Core/PrimitiveType.js";
9
+ import ShaderDestination from "../../Renderer/ShaderDestination.js";
10
+ import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
11
+ import oneTimeWarning from "../../Core/oneTimeWarning.js";
12
+ import AttributeType from "../AttributeType.js";
13
+ import Pass from "../../Renderer/Pass.js";
14
+
15
+ const BarycentricWireframePipelineStage = {
16
+ name: "BarycentricWireframePipelineStage",
17
+ };
18
+
19
+ BarycentricWireframePipelineStage.process = function (
20
+ renderResources,
21
+ primitive,
22
+ frameState,
23
+ ) {
24
+ const shaderBuilder = renderResources.shaderBuilder;
25
+ const model = renderResources.model;
26
+ const webgl2 = frameState.context.webgl2;
27
+
28
+ if (!webgl2) {
29
+ oneTimeWarning(
30
+ "barycentric-wireframe-webgl1",
31
+ "Barycentric wireframe mode requires WebGL 2. Falling back to lines mode.",
32
+ );
33
+ return;
34
+ }
35
+
36
+ const barycentricAttributeLocation = shaderBuilder.addAttribute(
37
+ "vec3",
38
+ "a_barycentric",
39
+ );
40
+
41
+ shaderBuilder.addDefine(
42
+ "HAS_BARYCENTRIC_WIREFRAME",
43
+ undefined,
44
+ ShaderDestination.BOTH,
45
+ );
46
+
47
+ if (model.debugWireframeOverlay) {
48
+ shaderBuilder.addDefine(
49
+ "WIREFRAME_OVERLAY",
50
+ undefined,
51
+ ShaderDestination.FRAGMENT,
52
+ );
53
+ }
54
+
55
+ shaderBuilder.addVarying("vec3", "v_barycentric");
56
+
57
+ shaderBuilder.addUniform(
58
+ "float",
59
+ "u_wireframeWidth",
60
+ ShaderDestination.FRAGMENT,
61
+ );
62
+ shaderBuilder.addUniform(
63
+ "vec4",
64
+ "u_wireframeColor",
65
+ ShaderDestination.FRAGMENT,
66
+ );
67
+ shaderBuilder.addUniform(
68
+ "float",
69
+ "u_wireframeFillAlpha",
70
+ ShaderDestination.FRAGMENT,
71
+ );
72
+
73
+ const stageUniforms = renderResources.uniformMap;
74
+ stageUniforms.u_wireframeWidth = function () {
75
+ return model.debugWireframeLineWidth ?? 1.0;
76
+ };
77
+ stageUniforms.u_wireframeColor = function () {
78
+ return model.debugWireframeColor ?? Color.WHITE;
79
+ };
80
+ stageUniforms.u_wireframeFillAlpha = function () {
81
+ return defined(model._debugWireframeFillColor)
82
+ ? 1.0
83
+ : (model._debugWireframeFillAlpha ?? 1.0);
84
+ };
85
+
86
+ // Enable alpha blending when fillAlpha < 1.0 in preserve-original-color mode
87
+ if (!defined(model._debugWireframeFillColor) && (model._debugWireframeFillAlpha ?? 1.0) < 1.0) {
88
+ renderResources.alphaOptions.pass = Pass.TRANSLUCENT;
89
+ }
90
+
91
+ deindexGeometryAndAddBarycentric(
92
+ renderResources,
93
+ primitive,
94
+ barycentricAttributeLocation,
95
+ frameState,
96
+ );
97
+ };
98
+
99
+ function getAttributeIndex(shaderBuilder, semantic, setIndex) {
100
+ return shaderBuilder.attributeLocations[semantic + "_" + (setIndex ?? 0)];
101
+ }
102
+
103
+ function getComponentsFromType(type) {
104
+ return AttributeType.getNumberOfComponents(type);
105
+ }
106
+
107
+ function extractAttributeData(attribute) {
108
+ if (!defined(attribute)) {
109
+ return undefined;
110
+ }
111
+
112
+ const typedArray = attribute.typedArray;
113
+ if (!defined(typedArray)) {
114
+ return undefined;
115
+ }
116
+
117
+ const componentDatatype = attribute.componentDatatype;
118
+ const componentsPerAttribute = getComponentsFromType(attribute.type);
119
+ const count = attribute.count;
120
+ const byteOffset = attribute.byteOffset ?? 0;
121
+ const byteStride = attribute.byteStride;
122
+ const componentSize = ComponentDatatype.getSizeInBytes(componentDatatype);
123
+ const stride = defined(byteStride) && byteStride !== 0
124
+ ? byteStride
125
+ : componentsPerAttribute * componentSize;
126
+
127
+ const result = ComponentDatatype.createTypedArray(
128
+ componentDatatype,
129
+ count * componentsPerAttribute,
130
+ );
131
+
132
+ const baseOffset = byteOffset;
133
+ for (let i = 0; i < count; i++) {
134
+ const byteIndex = baseOffset + i * stride;
135
+ const elementIndex = byteIndex / componentSize;
136
+ for (let c = 0; c < componentsPerAttribute; c++) {
137
+ result[i * componentsPerAttribute + c] = typedArray[elementIndex + c];
138
+ }
139
+ }
140
+
141
+ return {
142
+ data: result,
143
+ count: count,
144
+ componentsPerAttribute: componentsPerAttribute,
145
+ componentDatatype: componentDatatype,
146
+ normalized: attribute.normalized,
147
+ };
148
+ }
149
+
150
+ function extractIndicesData(primitive) {
151
+ const indices = primitive.indices;
152
+ if (!defined(indices)) {
153
+ return undefined;
154
+ }
155
+
156
+ const typedArray = indices.typedArray;
157
+ if (defined(typedArray)) {
158
+ return typedArray;
159
+ }
160
+
161
+ return undefined;
162
+ }
163
+
164
+ function deindexAttributeData(
165
+ originalData,
166
+ originalIndices,
167
+ componentsPerAttribute,
168
+ componentDatatype,
169
+ ) {
170
+ const newVertexCount = originalIndices.length;
171
+ const totalComponents = newVertexCount * componentsPerAttribute;
172
+ const newData = ComponentDatatype.createTypedArray(componentDatatype, totalComponents);
173
+
174
+ for (let i = 0; i < newVertexCount; i++) {
175
+ const oldIndex = originalIndices[i];
176
+ const srcOffset = oldIndex * componentsPerAttribute;
177
+ const dstOffset = i * componentsPerAttribute;
178
+ for (let c = 0; c < componentsPerAttribute; c++) {
179
+ newData[dstOffset + c] = originalData[srcOffset + c];
180
+ }
181
+ }
182
+
183
+ return newData;
184
+ }
185
+
186
+ function createVertexBuffer(typedArray, frameState, model) {
187
+ const buffer = Buffer.createVertexBuffer({
188
+ context: frameState.context,
189
+ typedArray: typedArray,
190
+ usage: BufferUsage.STATIC_DRAW,
191
+ });
192
+ model._pipelineResources.push(buffer);
193
+ return buffer;
194
+ }
195
+
196
+ function deindexGeometryAndAddBarycentric(
197
+ renderResources,
198
+ primitive,
199
+ barycentricAttributeLocation,
200
+ frameState,
201
+ ) {
202
+ const model = renderResources.model;
203
+ const shaderBuilder = renderResources.shaderBuilder;
204
+ const originalIndices = extractIndicesData(primitive);
205
+ const positionAttr = ModelUtility.getAttributeBySemantic(
206
+ primitive,
207
+ VertexAttributeSemantic.POSITION,
208
+ );
209
+
210
+ if (!defined(positionAttr)) {
211
+ return;
212
+ }
213
+
214
+ const originalVertexCount = positionAttr.count;
215
+
216
+ if (!defined(originalIndices)) {
217
+ const barycentricValues = new Float32Array(originalVertexCount * 3);
218
+ for (let i = 0; i < originalVertexCount; i += 3) {
219
+ barycentricValues[i * 3] = 1.0;
220
+ barycentricValues[i * 3 + 1] = 0.0;
221
+ barycentricValues[i * 3 + 2] = 0.0;
222
+
223
+ barycentricValues[(i + 1) * 3] = 0.0;
224
+ barycentricValues[(i + 1) * 3 + 1] = 1.0;
225
+ barycentricValues[(i + 1) * 3 + 2] = 0.0;
226
+
227
+ barycentricValues[(i + 2) * 3] = 0.0;
228
+ barycentricValues[(i + 2) * 3 + 1] = 0.0;
229
+ barycentricValues[(i + 2) * 3 + 2] = 1.0;
230
+ }
231
+
232
+ const barycentricBuffer = createVertexBuffer(barycentricValues, frameState, model);
233
+
234
+ const barycentricAttribute = {
235
+ index: barycentricAttributeLocation,
236
+ vertexBuffer: barycentricBuffer,
237
+ count: originalVertexCount,
238
+ componentsPerAttribute: 3,
239
+ componentDatatype: ComponentDatatype.FLOAT,
240
+ offsetInBytes: 0,
241
+ strideInBytes: 0,
242
+ normalize: false,
243
+ };
244
+ renderResources.attributes.push(barycentricAttribute);
245
+ return;
246
+ }
247
+
248
+ const primitiveType = primitive.primitiveType;
249
+ if (!PrimitiveType.isTriangles(primitiveType)) {
250
+ return;
251
+ }
252
+
253
+ const newVertexCount = originalIndices.length;
254
+ const newAttributes = [];
255
+ const originalAttributes = primitive.attributes;
256
+
257
+ for (let i = 0; i < originalAttributes.length; i++) {
258
+ const attr = originalAttributes[i];
259
+ const semantic = attr.semantic;
260
+ const setIndex = attr.setIndex;
261
+
262
+ let attributeIndex;
263
+ if (semantic === VertexAttributeSemantic.POSITION) {
264
+ attributeIndex = shaderBuilder.attributeLocations.position;
265
+ } else if (semantic === VertexAttributeSemantic.NORMAL) {
266
+ attributeIndex = shaderBuilder.attributeLocations.normal;
267
+ } else if (semantic === VertexAttributeSemantic.TANGENT) {
268
+ attributeIndex = shaderBuilder.attributeLocations.tangent;
269
+ } else if (semantic === VertexAttributeSemantic.TEXCOORD) {
270
+ attributeIndex = shaderBuilder.attributeLocations["texCoord_" + setIndex];
271
+ } else if (semantic === VertexAttributeSemantic.COLOR) {
272
+ attributeIndex = shaderBuilder.attributeLocations["color_" + setIndex];
273
+ } else if (semantic === VertexAttributeSemantic.JOINTS) {
274
+ attributeIndex = shaderBuilder.attributeLocations["joints_" + setIndex];
275
+ } else if (semantic === VertexAttributeSemantic.WEIGHTS) {
276
+ attributeIndex = shaderBuilder.attributeLocations["weights_" + setIndex];
277
+ } else {
278
+ continue;
279
+ }
280
+
281
+ if (!defined(attributeIndex)) {
282
+ continue;
283
+ }
284
+
285
+ const extracted = extractAttributeData(attr);
286
+ if (!defined(extracted)) {
287
+ continue;
288
+ }
289
+
290
+ const newData = deindexAttributeData(
291
+ extracted.data,
292
+ originalIndices,
293
+ extracted.componentsPerAttribute,
294
+ extracted.componentDatatype,
295
+ );
296
+
297
+ const newBuffer = createVertexBuffer(newData, frameState, model);
298
+
299
+ newAttributes.push({
300
+ index: attributeIndex,
301
+ vertexBuffer: newBuffer,
302
+ count: newVertexCount,
303
+ componentsPerAttribute: extracted.componentsPerAttribute,
304
+ componentDatatype: extracted.componentDatatype,
305
+ offsetInBytes: 0,
306
+ strideInBytes: 0,
307
+ normalize: extracted.normalized,
308
+ });
309
+ }
310
+
311
+ const instanceAttributes = renderResources.attributes.filter(
312
+ function (attr) {
313
+ return attr.instanceDivisor === 1;
314
+ },
315
+ );
316
+ for (let i = 0; i < instanceAttributes.length; i++) {
317
+ newAttributes.push(instanceAttributes[i]);
318
+ }
319
+
320
+ const barycentricValues = new Float32Array(newVertexCount * 3);
321
+ for (let i = 0; i < newVertexCount; i += 3) {
322
+ barycentricValues[i * 3] = 1.0;
323
+ barycentricValues[i * 3 + 1] = 0.0;
324
+ barycentricValues[i * 3 + 2] = 0.0;
325
+
326
+ barycentricValues[(i + 1) * 3] = 0.0;
327
+ barycentricValues[(i + 1) * 3 + 1] = 1.0;
328
+ barycentricValues[(i + 1) * 3 + 2] = 0.0;
329
+
330
+ barycentricValues[(i + 2) * 3] = 0.0;
331
+ barycentricValues[(i + 2) * 3 + 1] = 0.0;
332
+ barycentricValues[(i + 2) * 3 + 2] = 1.0;
333
+ }
334
+
335
+ const barycentricBuffer = createVertexBuffer(barycentricValues, frameState, model);
336
+
337
+ newAttributes.push({
338
+ index: barycentricAttributeLocation,
339
+ vertexBuffer: barycentricBuffer,
340
+ count: newVertexCount,
341
+ componentsPerAttribute: 3,
342
+ componentDatatype: ComponentDatatype.FLOAT,
343
+ offsetInBytes: 0,
344
+ strideInBytes: 0,
345
+ normalize: false,
346
+ });
347
+
348
+ renderResources.attributes = newAttributes;
349
+ renderResources.indices = undefined;
350
+ renderResources.count = newVertexCount;
351
+ renderResources.primitiveType = PrimitiveType.TRIANGLES;
352
+ renderResources.wireframeIndexBuffer = undefined;
353
+ }
354
+
355
+ export default BarycentricWireframePipelineStage;