@woosh/meep-engine 3.44.0 → 3.46.0

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 (447) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/assert.d.ts.map +1 -1
  4. package/src/core/assert.js +5 -1
  5. package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
  6. package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
  7. package/src/core/binary/hash/XXH128Hash.js +4 -55
  8. package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
  9. package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
  10. package/src/core/binary/hash/XXH3_SECRET.js +4 -25
  11. package/src/core/binary/hash/crc32.d.ts +1 -15
  12. package/src/core/binary/hash/crc32.d.ts.map +1 -1
  13. package/src/core/binary/hash/crc32.js +4 -96
  14. package/src/core/binary/hash/xxh3_128.d.ts +1 -9
  15. package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
  16. package/src/core/binary/hash/xxh3_128.js +4 -341
  17. package/src/core/binary/hash/xxh3_64.d.ts +1 -8
  18. package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
  19. package/src/core/binary/hash/xxh3_64.js +4 -241
  20. package/src/core/binary/hash/xxh3_common.d.ts +1 -223
  21. package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
  22. package/src/core/binary/hash/xxh3_common.js +90 -476
  23. package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
  24. package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
  25. package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
  26. package/src/core/collection/array/combine_hash.d.ts +6 -0
  27. package/src/core/collection/array/combine_hash.d.ts.map +1 -1
  28. package/src/core/collection/array/combine_hash.js +6 -0
  29. package/src/core/function/FunctionCompiler.js +2 -2
  30. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
  31. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
  32. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
  33. package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
  34. package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
  35. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
  36. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
  37. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
  38. package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
  39. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  40. package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
  41. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
  42. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
  43. package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
  44. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
  45. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
  46. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
  47. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
  48. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
  49. package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
  50. package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
  51. package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
  52. package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
  53. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
  54. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
  55. package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
  56. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
  57. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
  58. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
  59. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
  60. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
  61. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
  62. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
  63. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
  64. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
  65. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
  66. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
  67. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
  68. package/src/core/geom/ConicRay.js +2 -2
  69. package/src/core/geom/Vector4.d.ts.map +1 -1
  70. package/src/core/geom/Vector4.js +8 -5
  71. package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
  72. package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
  73. package/src/core/geom/vec3/v3_distance_array.js +19 -0
  74. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
  75. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
  76. package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
  77. package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
  78. package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
  79. package/src/core/geom/vec3/v3_reject_array.js +32 -0
  80. package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
  81. package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
  82. package/src/core/graph/csr/csr_build_incidence.js +71 -0
  83. package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
  84. package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
  85. package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
  86. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
  87. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
  88. package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
  89. package/src/core/math/hash/XXH128Hash.d.ts +38 -0
  90. package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
  91. package/src/core/math/hash/XXH128Hash.js +55 -0
  92. package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
  93. package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
  94. package/src/core/math/hash/XXH3_SECRET.js +25 -0
  95. package/src/core/math/hash/crc32.d.ts +16 -0
  96. package/src/core/math/hash/crc32.d.ts.map +1 -0
  97. package/src/core/math/hash/crc32.js +96 -0
  98. package/src/core/math/hash/xxh3_128.d.ts +10 -0
  99. package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
  100. package/src/core/math/hash/xxh3_128.js +341 -0
  101. package/src/core/math/hash/xxh3_64.d.ts +9 -0
  102. package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
  103. package/src/core/math/hash/xxh3_64.js +241 -0
  104. package/src/core/math/hash/xxh3_common.d.ts +224 -0
  105. package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
  106. package/src/core/math/hash/xxh3_common.js +476 -0
  107. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
  108. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
  109. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
  110. package/src/core/math/lookup/ParameterLookupTable.js +2 -2
  111. package/src/core/math/max2_exact.d.ts +15 -0
  112. package/src/core/math/max2_exact.d.ts.map +1 -0
  113. package/src/core/math/max2_exact.js +30 -0
  114. package/src/core/math/min2_exact.d.ts +20 -0
  115. package/src/core/math/min2_exact.d.ts.map +1 -0
  116. package/src/core/math/min2_exact.js +35 -0
  117. package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
  118. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
  119. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
  120. package/src/engine/asset/AssetDescription.js +2 -2
  121. package/src/engine/ecs/animation/Animation.js +2 -2
  122. package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
  123. package/src/engine/ecs/animation/AnimationClip.js +7 -5
  124. package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
  125. package/src/engine/ecs/gui/GUIElement.js +7 -5
  126. package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
  127. package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
  128. package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
  129. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  130. package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
  131. package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
  132. package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
  133. package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
  134. package/src/engine/ecs/transform/Transform64.d.ts +1 -1
  135. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  136. package/src/engine/ecs/transform/Transform64.js +5 -4
  137. package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
  138. package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
  139. package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
  140. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  141. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
  142. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
  143. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
  144. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
  145. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
  146. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
  147. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  148. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
  149. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  150. package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
  151. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
  152. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
  153. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
  154. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
  155. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
  156. package/src/engine/graphics3/AnimationGraphSystem.d.ts +5 -0
  157. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  158. package/src/engine/graphics3/AnimationGraphSystem.js +48 -2
  159. package/src/engine/graphics3/AnimationSystem.d.ts +5 -0
  160. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  161. package/src/engine/graphics3/AnimationSystem.js +47 -2
  162. package/src/engine/graphics3/ParticipatingMedia.js +204 -204
  163. package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
  164. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  165. package/src/engine/graphics3/animation/AnimationClips.js +5 -0
  166. package/src/engine/graphics3/register_clips.d.ts +29 -0
  167. package/src/engine/graphics3/register_clips.d.ts.map +1 -1
  168. package/src/engine/graphics3/register_clips.js +52 -0
  169. package/src/engine/grid/obstacle/GridObstacle.js +2 -2
  170. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  171. package/src/engine/interpolation/Interpolated.js +2 -2
  172. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
  173. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  174. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
  175. package/src/engine/physics/cloth/PLAN.md +10 -8
  176. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
  177. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -1
  178. package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +51 -19
  179. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  180. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +16 -2
  181. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -1
  182. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +19 -24
  183. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
  184. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  185. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
  186. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
  187. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
  188. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
  189. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
  190. package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
  191. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
  192. package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +16 -61
  193. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  194. package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
  195. package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
  196. package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
  197. package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
  198. package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
  199. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
  200. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  201. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
  202. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  203. package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
  204. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  205. package/src/engine/physics/cloth/ecs/ClothWorld.js +40 -130
  206. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  207. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +17 -58
  208. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  209. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +3 -3
  210. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  211. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +44 -104
  212. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -1
  213. package/src/engine/physics/cloth/ecs/cloth_geodesic.js +6 -13
  214. package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -1
  215. package/src/engine/physics/cloth/ecs/cloth_holds.js +15 -40
  216. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
  217. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +45 -79
  218. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  219. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +7 -27
  220. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  221. package/src/engine/physics/cloth/ecs/cloth_write_back.js +30 -62
  222. package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
  223. package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
  224. package/src/engine/physics/cloth/playground/collide_main.js +2 -28
  225. package/src/engine/physics/cloth/playground/garment_main.js +4 -19
  226. package/src/engine/physics/cloth/playground/main.js +6 -48
  227. package/src/engine/physics/cloth/playground/rig_main.js +947 -955
  228. package/src/engine/physics/cloth/playground/wind_main.js +8 -7
  229. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  230. package/src/engine/physics/cloth/solver/ClothState.js +16 -76
  231. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
  232. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
  233. package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
  234. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  235. package/src/engine/physics/cloth/solver/cloth_contact_find.js +3 -2
  236. package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -1
  237. package/src/engine/physics/cloth/solver/cloth_hold_line.js +2 -14
  238. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
  239. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
  240. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
  241. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
  242. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
  243. package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
  244. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
  245. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
  246. package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
  247. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
  248. package/src/engine/physics/cloth/solver/cloth_self_find.js +6 -55
  249. package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
  250. package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
  251. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  252. package/src/engine/physics/cloth/solver/cloth_step.js +6 -28
  253. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
  254. package/src/engine/physics/cloth/solver/cloth_step_instance.js +2 -3
  255. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
  256. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
  257. package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
  258. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
  259. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
  260. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
  261. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
  262. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
  263. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
  264. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  265. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
  266. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
  267. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  268. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
  269. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +3 -1
  270. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
  271. package/src/engine/physics/cloth/wind/cloth_sample_air.js +40 -62
  272. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  273. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
  274. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  275. package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
  276. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  277. package/src/engine/physics/fluid/FluidField.js +7 -5
  278. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  279. package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
  280. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
  281. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
  282. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
  283. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
  284. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
  285. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
  286. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
  287. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
  288. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  289. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
  290. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  291. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
  292. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  293. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
  294. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
  295. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
  296. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  297. package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
  298. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  299. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
  300. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
  301. package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
  302. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  303. package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
  304. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  305. package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
  306. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  307. package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
  308. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  309. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
  310. package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
  311. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
  312. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  313. package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
  314. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
  315. package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
  316. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
  317. package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
  318. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  319. package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
  320. package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
  321. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
  322. package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
  323. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
  324. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  325. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
  326. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
  327. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
  328. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
  329. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
  330. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
  331. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
  332. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  333. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
  334. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  335. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
  336. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  337. package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
  338. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
  339. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
  340. package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
  341. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
  342. package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
  343. package/src/format/image/png/PNGReader.js +644 -644
  344. package/src/format/image/png/crc32.d.ts +1 -1
  345. package/src/format/image/png/crc32.js +7 -8
  346. package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
  347. package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
  348. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
  349. package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
  350. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
  351. package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
  352. package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
  353. package/src/shade/descriptor/blend/BlendComponent.js +2 -2
  354. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
  355. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
  356. package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
  357. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
  358. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
  359. package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
  360. package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
  361. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  362. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
  363. package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
  364. package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
  365. package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
  366. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  367. package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
  368. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  369. package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
  370. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  371. package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
  372. package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
  373. package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
  374. package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
  375. package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
  376. package/src/shade/playground/image_decode_bench/main.js +2 -1
  377. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
  378. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
  379. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  380. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
  381. package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
  382. package/src/shade/playground/ssr_variance/statistics.js +2 -1
  383. package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
  384. package/src/shade/playground/texture_encode/main.js +2 -1
  385. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  386. package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
  387. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  388. package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
  389. package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
  390. package/src/shade/renderer/camera/Camera.js +2 -2
  391. package/src/shade/renderer/geometry/Attribute.js +2 -2
  392. package/src/shade/renderer/geometry/Geometry.js +2 -2
  393. package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
  394. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
  395. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
  396. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
  397. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
  398. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
  399. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
  400. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
  401. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
  402. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
  403. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
  404. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
  405. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
  406. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
  407. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
  408. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
  409. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
  410. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
  411. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
  412. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
  413. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  414. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
  415. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  416. package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
  417. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
  418. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
  419. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
  420. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
  421. package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
  422. package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
  423. package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
  424. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
  426. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  427. package/src/shade/renderer/texture/ShadeTexture.js +17 -10
  428. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
  429. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
  430. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
  431. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  432. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
  433. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
  434. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  435. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
  436. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
  437. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  438. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
  439. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
  440. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  441. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
  442. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
  443. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  444. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
  445. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  446. package/src/view/common/HTMLElementCacheKey.js +4 -3
  447. package/src/view/minimap/MinimapMarker.js +2 -2
@@ -2,7 +2,7 @@ import { assert } from "../../../../core/assert.js";
2
2
  import { BinaryBuffer } from "../../../../core/binary/BinaryBuffer.js";
3
3
  import { platform_compute_endianness } from "../../../../core/binary/platform_compute_endianness.js";
4
4
  import { BinaryDataType } from "../../../../core/binary/type/BinaryDataType.js";
5
- import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
5
+ import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
6
6
  import { array_buffer_hash } from "../../../../core/collection/array/typed/array_buffer_hash.js";
7
7
  import { is_array_buffer_equals } from "../../../../core/collection/array/typed/is_array_buffer_equals.js";
8
8
  import { RowFirstTable } from "../../../../core/collection/table/RowFirstTable.js";
@@ -119,7 +119,7 @@ export class MeshletBatch {
119
119
  hash() {
120
120
  const meta = this.#metadata;
121
121
 
122
- return combine_hash(
122
+ return hash_mix2(
123
123
  this.#count,
124
124
  array_buffer_hash(meta, 0, meta.byteLength)
125
125
  );
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_build_group_step.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js"],"names":[],"mappings":"AAsEA;;;;;;;;;;;;;;GAcG;AACH,8EAXW,MAAM,EAAE,iBACR,UAAU,eACV,MAAM,SACN,MAAM,8BAEJ,aAAa,GAAC,SAAS,CA0dnC;8BA9gB6B,oBAAoB"}
1
+ {"version":3,"file":"vgeo_build_group_step.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js"],"names":[],"mappings":"AAuEA;;;;;;;;;;;;;;GAcG;AACH,8EAXW,MAAM,EAAE,iBACR,UAAU,eACV,MAAM,SACN,MAAM,8BAEJ,aAAa,GAAC,SAAS,CA0dnC;8BA/gB6B,oBAAoB"}
@@ -26,6 +26,7 @@ import { vgeo_extract_submesh } from "../submesh/vgeo_extract_submesh.js";
26
26
  import { vgeo_build_cluster } from "./vgeo_build_cluster.js";
27
27
  import { vgeo_compute_group_boundary } from "./vgeo_compute_group_boundary.js";
28
28
  import { VGeoGroupStep } from "./VGeoGroupStep.js";
29
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
29
30
 
30
31
  /**
31
32
  * The defects a simplified group carries, as one line, or `''` when it carries none.
@@ -103,7 +104,7 @@ export function vgeo_build_group_step(
103
104
  }
104
105
  }
105
106
 
106
- face_ids.sort((a, b) => a - b);
107
+ face_ids.sort(number_compare_ascending);
107
108
 
108
109
  const child_clusters = group_clusters.map((cluster) => frontier.clusters[cluster]);
109
110
 
@@ -503,7 +504,7 @@ export function vgeo_build_group_step(
503
504
  for (const part of parts) {
504
505
  const part_face_ids = part.map((dense) => submesh_face_graph.vertex_face_ids[dense]);
505
506
 
506
- part_face_ids.sort((a, b) => a - b);
507
+ part_face_ids.sort(number_compare_ascending);
507
508
 
508
509
  const built = vgeo_build_cluster(submesh.mesh, part_face_ids, level, submesh.wedges);
509
510
 
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_build_leaf_frontier.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;GAYG;AACH,wFATW,YAAY,GAIV,YAAY,CAoFxB;6BA9F4B,mBAAmB"}
1
+ {"version":3,"file":"vgeo_build_leaf_frontier.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;GAYG;AACH,wFATW,YAAY,GAIV,YAAY,CAoFxB;6BA/F4B,mBAAmB"}
@@ -18,6 +18,7 @@ import { VGeoFaceGraph } from "../partition/VGeoFaceGraph.js";
18
18
  import { vgeo_split_face_set } from "../partition/vgeo_split_face_set.js";
19
19
  import { vgeo_build_cluster } from "./vgeo_build_cluster.js";
20
20
  import { VGeoFrontier } from "./VGeoFrontier.js";
21
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
21
22
 
22
23
  /**
23
24
  * Cut a mesh into leaf clusters — the frontier every round starts from.
@@ -98,7 +99,7 @@ export function vgeo_build_leaf_frontier(
98
99
  for (const part of parts) {
99
100
  const face_ids = part.map((dense) => face_graph.vertex_face_ids[dense]);
100
101
 
101
- face_ids.sort((a, b) => a - b);
102
+ face_ids.sort(number_compare_ascending);
102
103
 
103
104
  const built = vgeo_build_cluster(mesh, face_ids, 0, frontier.wedges);
104
105
 
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_partition_into_groups.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js"],"names":[],"mappings":"AA0MA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,yEARW,MAAM,EAAE,iBACR,MAAM,cACN,MAAM,GACJ,MAAM,EAAE,EAAE,CAqHtB"}
1
+ {"version":3,"file":"vgeo_partition_into_groups.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js"],"names":[],"mappings":"AA2MA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,yEARW,MAAM,EAAE,iBACR,MAAM,cACN,MAAM,GACJ,MAAM,EAAE,EAAE,CAqHtB"}
@@ -6,6 +6,7 @@ import { VGEO_MAX_CLUSTER_VERTEX_COUNT } from "../../format/cluster/VGEO_MAX_CLU
6
6
  import { VGEO_MAX_GROUP_CLUSTER_COUNT } from "../../format/page/VGEO_MAX_GROUP_CLUSTER_COUNT.js";
7
7
  import { vgeo_graph_components } from "../partition/vgeo_graph_components.js";
8
8
  import { vgeo_partition_subgraph } from "../partition/vgeo_partition_subgraph.js";
9
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
9
10
 
10
11
  /**
11
12
  * Fixed so that the same frontier always groups the same way.
@@ -190,7 +191,7 @@ function absorb_singleton_pieces(pieces, cluster_graph) {
190
191
  );
191
192
 
192
193
  alive[best].push(cluster);
193
- alive[best].sort((a, b) => a - b);
194
+ alive[best].sort(number_compare_ascending);
194
195
 
195
196
  piece_of.set(cluster, best);
196
197
 
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_run_round.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,8DATW,MAAM,8BAEJ;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,IAAI,MAAM,CAAC,CAAA;CAAC,GAAC,SAAS,CAyG/F"}
1
+ {"version":3,"file":"vgeo_run_round.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,8DATW,MAAM,8BAEJ;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,IAAI,MAAM,CAAC,CAAA;CAAC,GAAC,SAAS,CAyG/F"}
@@ -5,6 +5,7 @@ import { vgeo_build_group_step } from "./vgeo_build_group_step.js";
5
5
  import { vgeo_error_bands } from "./vgeo_error_bands.js";
6
6
  import { vgeo_partition_into_groups } from "./vgeo_partition_into_groups.js";
7
7
  import { vgeo_try_repack } from "./vgeo_try_repack.js";
8
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
8
9
 
9
10
  /**
10
11
  * The frontier's clusters ordered by error, which is what a band is a slice of.
@@ -65,7 +66,7 @@ export function vgeo_run_round(frontier, level, options) {
65
66
  for (const range of bands) {
66
67
  const band = ordered.order.slice(range.start, range.end);
67
68
 
68
- band.sort((a, b) => a - b);
69
+ band.sort(number_compare_ascending);
69
70
 
70
71
  const groups = vgeo_partition_into_groups(frontier, band, cluster_graph, group_size);
71
72
 
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_try_repack.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wEAPW,MAAM,EAAE,iBACR,MAAM,GACJ,eAAe,GAAC,SAAS,CAsFrC;gCA7G+B,sBAAsB"}
1
+ {"version":3,"file":"vgeo_try_repack.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wEAPW,MAAM,EAAE,iBACR,MAAM,GACJ,eAAe,GAAC,SAAS,CAsFrC;gCA9G+B,sBAAsB"}
@@ -6,6 +6,7 @@ import { vgeo_split_face_set_packed } from "../partition/vgeo_split_face_set_pac
6
6
  import { vgeo_extract_submesh } from "../submesh/vgeo_extract_submesh.js";
7
7
  import { vgeo_build_cluster } from "./vgeo_build_cluster.js";
8
8
  import { VGeoGroupRepack } from "./VGeoGroupRepack.js";
9
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
9
10
 
10
11
  /**
11
12
  * Leaves with room to spare between them, re-cut into fewer and fuller leaves.
@@ -53,7 +54,7 @@ export function vgeo_try_repack(frontier, group_clusters, parent_target) {
53
54
  return undefined;
54
55
  }
55
56
 
56
- face_ids.sort((a, b) => a - b);
57
+ face_ids.sort(number_compare_ascending);
57
58
 
58
59
  const submesh = vgeo_extract_submesh(frontier.mesh, face_ids, frontier.wedges);
59
60
 
@@ -88,7 +89,7 @@ export function vgeo_try_repack(frontier, group_clusters, parent_target) {
88
89
  for (const part of parts) {
89
90
  const part_face_ids = part.map((dense) => face_graph.vertex_face_ids[dense]);
90
91
 
91
- part_face_ids.sort((a, b) => a - b);
92
+ part_face_ids.sort(number_compare_ascending);
92
93
 
93
94
  const built = vgeo_build_cluster(submesh.mesh, part_face_ids, 0, submesh.wedges);
94
95
 
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_graph_components.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js"],"names":[],"mappings":"AA6CA;;;;;;;;;;;GAWG;AACH,sDARW,WAAW,aACX,WAAW,WACX,MAAM,EAAE,cACR,UAAU,SAEV,MAAM,GACJ,MAAM,EAAE,EAAE,CAmEtB"}
1
+ {"version":3,"file":"vgeo_graph_components.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js"],"names":[],"mappings":"AA8CA;;;;;;;;;;;GAWG;AACH,sDARW,WAAW,aACX,WAAW,WACX,MAAM,EAAE,cACR,UAAU,SAEV,MAAM,GACJ,MAAM,EAAE,EAAE,CAmEtB"}
@@ -1,3 +1,4 @@
1
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
1
2
  /**
2
3
  * Connected components of the subgraph a CSR induces on a member set.
3
4
  *
@@ -112,7 +113,7 @@ export function vgeo_graph_components(
112
113
  }
113
114
  }
114
115
 
115
- component.sort((a, b) => a - b);
116
+ component.sort(number_compare_ascending);
116
117
 
117
118
  result.push(component);
118
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_split_face_set_packed.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js"],"names":[],"mappings":"AAmVA;;;;;;;;;;;;GAYG;AACH,+EALW,MAAM,EAAE,aACR,MAAM,gBACN,MAAM,GACJ,MAAM,EAAE,EAAE,CAoBtB"}
1
+ {"version":3,"file":"vgeo_split_face_set_packed.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js"],"names":[],"mappings":"AAoVA;;;;;;;;;;;;GAYG;AACH,+EALW,MAAM,EAAE,aACR,MAAM,gBACN,MAAM,GACJ,MAAM,EAAE,EAAE,CAoBtB"}
@@ -4,6 +4,7 @@ import {
4
4
  bt_face_read_triangle_vertices
5
5
  } from "../../../../../../core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.js";
6
6
  import { vgeo_split_face_set } from "./vgeo_split_face_set.js";
7
+ import { number_compare_ascending } from "../../../../../../core/primitives/numbers/number_compare_ascending.js";
7
8
 
8
9
  /**
9
10
  * {@link vgeo_split_face_set}, then merge the under-filled pieces it left behind.
@@ -331,7 +332,7 @@ function pack_pieces(face_graph, pieces, max_faces, max_vertices, floor) {
331
332
  }
332
333
  }
333
334
 
334
- packed.sort((a, b) => a - b);
335
+ packed.sort(number_compare_ascending);
335
336
 
336
337
  return packed;
337
338
  });
@@ -1,13 +1,13 @@
1
- import { xxh3_128 } from "../../../../../../core/binary/hash/xxh3_128.js";
2
- import { vgeo_asset_id_preimage } from "./vgeo_asset_id_preimage.js";
3
-
4
- /**
5
- * @param {BinaryBuffer} buffer whole file
6
- * @returns {XXH128Hash} the asset's identity
7
- *
8
- * @author Alex Goldring
9
- * @copyright Company Named Limited (c) 2026
10
- */
11
- export function vgeo_compute_asset_id(buffer) {
12
- return xxh3_128(vgeo_asset_id_preimage(buffer).raw_bytes);
13
- }
1
+ import { xxh3_128 } from "../../../../../../core/math/hash/xxh3_128.js";
2
+ import { vgeo_asset_id_preimage } from "./vgeo_asset_id_preimage.js";
3
+
4
+ /**
5
+ * @param {BinaryBuffer} buffer whole file
6
+ * @returns {XXH128Hash} the asset's identity
7
+ *
8
+ * @author Alex Goldring
9
+ * @copyright Company Named Limited (c) 2026
10
+ */
11
+ export function vgeo_compute_asset_id(buffer) {
12
+ return xxh3_128(vgeo_asset_id_preimage(buffer).raw_bytes);
13
+ }
@@ -1,41 +1,41 @@
1
- import { xxh3_64 } from "../../../../../../core/binary/hash/xxh3_64.js";
2
- import { VGEO_DIRECTORY_BLOCK_RECORDS } from "../directory/VGEO_DIRECTORY_BLOCK_RECORDS.js";
3
- import { VGEO_DIRECTORY_RECORD_SIZE } from "../directory/VGEO_DIRECTORY_RECORD_SIZE.js";
4
-
5
- /**
6
- * The checksum of one 4 KB directory block. The final block is short whenever the record count is
7
- * not a multiple of {@link VGEO_DIRECTORY_BLOCK_RECORDS}, and covers only the records that exist.
8
- *
9
- * The seed is taken from `asset_id`, which is why {@link vgeo_asset_id_preimage} zeroes this region
10
- * before hashing: the two would otherwise be defined in terms of each other.
11
- *
12
- * @param {BinaryBuffer} buffer whole file
13
- * @param {number} directory_offset
14
- * @param {number} total_pages
15
- * @param {number} block_index
16
- * @param {bigint} asset_id_high64
17
- * @returns {bigint}
18
- *
19
- * @author Alex Goldring
20
- * @copyright Company Named Limited (c) 2026
21
- */
22
- export function vgeo_compute_directory_block_checksum(
23
- buffer,
24
- directory_offset,
25
- total_pages,
26
- block_index,
27
- asset_id_high64
28
- ) {
29
- const first_record = block_index * VGEO_DIRECTORY_BLOCK_RECORDS;
30
-
31
- const record_count = Math.min(VGEO_DIRECTORY_BLOCK_RECORDS, total_pages - first_record);
32
-
33
- const start = directory_offset + first_record * VGEO_DIRECTORY_RECORD_SIZE;
34
-
35
- const seed = asset_id_high64 ^ BigInt(block_index);
36
-
37
- return xxh3_64(
38
- buffer.raw_bytes.subarray(start, start + record_count * VGEO_DIRECTORY_RECORD_SIZE),
39
- seed
40
- );
41
- }
1
+ import { xxh3_64 } from "../../../../../../core/math/hash/xxh3_64.js";
2
+ import { VGEO_DIRECTORY_BLOCK_RECORDS } from "../directory/VGEO_DIRECTORY_BLOCK_RECORDS.js";
3
+ import { VGEO_DIRECTORY_RECORD_SIZE } from "../directory/VGEO_DIRECTORY_RECORD_SIZE.js";
4
+
5
+ /**
6
+ * The checksum of one 4 KB directory block. The final block is short whenever the record count is
7
+ * not a multiple of {@link VGEO_DIRECTORY_BLOCK_RECORDS}, and covers only the records that exist.
8
+ *
9
+ * The seed is taken from `asset_id`, which is why {@link vgeo_asset_id_preimage} zeroes this region
10
+ * before hashing: the two would otherwise be defined in terms of each other.
11
+ *
12
+ * @param {BinaryBuffer} buffer whole file
13
+ * @param {number} directory_offset
14
+ * @param {number} total_pages
15
+ * @param {number} block_index
16
+ * @param {bigint} asset_id_high64
17
+ * @returns {bigint}
18
+ *
19
+ * @author Alex Goldring
20
+ * @copyright Company Named Limited (c) 2026
21
+ */
22
+ export function vgeo_compute_directory_block_checksum(
23
+ buffer,
24
+ directory_offset,
25
+ total_pages,
26
+ block_index,
27
+ asset_id_high64
28
+ ) {
29
+ const first_record = block_index * VGEO_DIRECTORY_BLOCK_RECORDS;
30
+
31
+ const record_count = Math.min(VGEO_DIRECTORY_BLOCK_RECORDS, total_pages - first_record);
32
+
33
+ const start = directory_offset + first_record * VGEO_DIRECTORY_RECORD_SIZE;
34
+
35
+ const seed = asset_id_high64 ^ BigInt(block_index);
36
+
37
+ return xxh3_64(
38
+ buffer.raw_bytes.subarray(start, start + record_count * VGEO_DIRECTORY_RECORD_SIZE),
39
+ seed
40
+ );
41
+ }
@@ -1,41 +1,41 @@
1
- import { xxh3_64 } from "../../../../../../core/binary/hash/xxh3_64.js";
2
- import { VGEO_FRAME_HEADER_SIZE } from "../frame/VGEO_FRAME_HEADER_SIZE.js";
3
- import { VGEO_FRAME_OFFSET } from "../frame/VGEO_FRAME_OFFSET.js";
4
-
5
- /**
6
- * The identity-seeded checksum of one frame: xxh3-64 over the frame's bytes with its own `checksum`
7
- * field cut out, seeded so that a well-formed frame of the wrong page or the wrong asset fails to
8
- * verify rather than installing silently.
9
- *
10
- * The seed is taken from `asset_id`, which is why {@link vgeo_asset_id_preimage} zeroes this field
11
- * before hashing: the two would otherwise be defined in terms of each other.
12
- *
13
- * @param {BinaryBuffer} buffer whole file
14
- * @param {VGeoFrameExtent} frame
15
- * @param {bigint} asset_id_low64
16
- * @returns {bigint}
17
- *
18
- * @author Alex Goldring
19
- * @copyright Company Named Limited (c) 2026
20
- */
21
- export function vgeo_compute_frame_checksum(buffer, frame, asset_id_low64) {
22
- const seed = asset_id_low64 ^ BigInt(frame.page_index);
23
-
24
- const bytes = buffer.raw_bytes;
25
-
26
- const covered = new Uint8Array(frame.extent - 8);
27
-
28
- // frame bytes [0, 16)
29
- covered.set(
30
- bytes.subarray(frame.frame_offset, frame.frame_offset + VGEO_FRAME_OFFSET.CHECKSUM),
31
- 0
32
- );
33
-
34
- // frame bytes [24, extent)
35
- covered.set(
36
- bytes.subarray(frame.frame_offset + VGEO_FRAME_HEADER_SIZE, frame.frame_offset + frame.extent),
37
- VGEO_FRAME_OFFSET.CHECKSUM
38
- );
39
-
40
- return xxh3_64(covered, seed);
41
- }
1
+ import { xxh3_64 } from "../../../../../../core/math/hash/xxh3_64.js";
2
+ import { VGEO_FRAME_HEADER_SIZE } from "../frame/VGEO_FRAME_HEADER_SIZE.js";
3
+ import { VGEO_FRAME_OFFSET } from "../frame/VGEO_FRAME_OFFSET.js";
4
+
5
+ /**
6
+ * The identity-seeded checksum of one frame: xxh3-64 over the frame's bytes with its own `checksum`
7
+ * field cut out, seeded so that a well-formed frame of the wrong page or the wrong asset fails to
8
+ * verify rather than installing silently.
9
+ *
10
+ * The seed is taken from `asset_id`, which is why {@link vgeo_asset_id_preimage} zeroes this field
11
+ * before hashing: the two would otherwise be defined in terms of each other.
12
+ *
13
+ * @param {BinaryBuffer} buffer whole file
14
+ * @param {VGeoFrameExtent} frame
15
+ * @param {bigint} asset_id_low64
16
+ * @returns {bigint}
17
+ *
18
+ * @author Alex Goldring
19
+ * @copyright Company Named Limited (c) 2026
20
+ */
21
+ export function vgeo_compute_frame_checksum(buffer, frame, asset_id_low64) {
22
+ const seed = asset_id_low64 ^ BigInt(frame.page_index);
23
+
24
+ const bytes = buffer.raw_bytes;
25
+
26
+ const covered = new Uint8Array(frame.extent - 8);
27
+
28
+ // frame bytes [0, 16)
29
+ covered.set(
30
+ bytes.subarray(frame.frame_offset, frame.frame_offset + VGEO_FRAME_OFFSET.CHECKSUM),
31
+ 0
32
+ );
33
+
34
+ // frame bytes [24, extent)
35
+ covered.set(
36
+ bytes.subarray(frame.frame_offset + VGEO_FRAME_HEADER_SIZE, frame.frame_offset + frame.extent),
37
+ VGEO_FRAME_OFFSET.CHECKSUM
38
+ );
39
+
40
+ return xxh3_64(covered, seed);
41
+ }
@@ -1,25 +1,25 @@
1
- import { BinaryBuffer } from "../../../../../../core/binary/BinaryBuffer.js";
2
- import { xxh3_64 } from "../../../../../../core/binary/hash/xxh3_64.js";
3
- import { VGEO_HEADER_OFFSET } from "../header/VGEO_HEADER_OFFSET.js";
4
- import { VGEO_HEADER_SIZE } from "../header/VGEO_HEADER_SIZE.js";
5
-
6
- /**
7
- * xxh3-64 of the header with `header_checksum` zeroed. `asset_id` must already be final: the
8
- * ordering is what keeps the two non-circular.
9
- *
10
- * @param {BinaryBuffer} buffer whole file
11
- * @returns {bigint}
12
- *
13
- * @author Alex Goldring
14
- * @copyright Company Named Limited (c) 2026
15
- */
16
- export function vgeo_compute_header_checksum(buffer) {
17
- const header = new BinaryBuffer();
18
-
19
- header.fromArrayBuffer(buffer.raw_bytes.slice(0, VGEO_HEADER_SIZE).buffer);
20
-
21
- header.position = VGEO_HEADER_OFFSET.HEADER_CHECKSUM;
22
- header.writeUint64(0n);
23
-
24
- return xxh3_64(header.raw_bytes);
25
- }
1
+ import { BinaryBuffer } from "../../../../../../core/binary/BinaryBuffer.js";
2
+ import { xxh3_64 } from "../../../../../../core/math/hash/xxh3_64.js";
3
+ import { VGEO_HEADER_OFFSET } from "../header/VGEO_HEADER_OFFSET.js";
4
+ import { VGEO_HEADER_SIZE } from "../header/VGEO_HEADER_SIZE.js";
5
+
6
+ /**
7
+ * xxh3-64 of the header with `header_checksum` zeroed. `asset_id` must already be final: the
8
+ * ordering is what keeps the two non-circular.
9
+ *
10
+ * @param {BinaryBuffer} buffer whole file
11
+ * @returns {bigint}
12
+ *
13
+ * @author Alex Goldring
14
+ * @copyright Company Named Limited (c) 2026
15
+ */
16
+ export function vgeo_compute_header_checksum(buffer) {
17
+ const header = new BinaryBuffer();
18
+
19
+ header.fromArrayBuffer(buffer.raw_bytes.slice(0, VGEO_HEADER_SIZE).buffer);
20
+
21
+ header.position = VGEO_HEADER_OFFSET.HEADER_CHECKSUM;
22
+ header.writeUint64(0n);
23
+
24
+ return xxh3_64(header.raw_bytes);
25
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_write_container.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/format/vgeo_write_container.js"],"names":[],"mappings":"AAkfA;;;;;;;;GAQG;AACH,4CANW,qBAAqB,8BAGnB,QAAQ,YAAY,CAAC,CAmOjC;6BA1tB4B,4CAA4C"}
1
+ {"version":3,"file":"vgeo_write_container.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/format/vgeo_write_container.js"],"names":[],"mappings":"AAmfA;;;;;;;;GAQG;AACH,4CANW,qBAAqB,8BAGnB,QAAQ,YAAY,CAAC,CAmOjC;6BA3tB4B,4CAA4C"}
@@ -41,6 +41,7 @@ import { VGEO_PARENT_PAGE_ENTRY_SIZE } from "./page/VGEO_PARENT_PAGE_ENTRY_SIZE.
41
41
  import { VGEO_PAYLOAD_ENCODING_SHADE_MESHLET_V1 } from "./header/VGEO_PAYLOAD_ENCODING_SHADE_MESHLET_V1.js";
42
42
  import { VGEO_SAME_PAGE } from "./cluster/VGEO_SAME_PAGE.js";
43
43
  import { vgeo_scan_frames } from "./frame/vgeo_scan_frames.js";
44
+ import { number_compare_ascending } from "../../../../../core/primitives/numbers/number_compare_ascending.js";
44
45
 
45
46
  /**
46
47
  * Serialize an assembled page list into `.vgeo` bytes.
@@ -182,7 +183,7 @@ function collect_parent_pages(page, parents) {
182
183
  }
183
184
  }
184
185
 
185
- return Array.from(seen).sort((a, b) => a - b);
186
+ return Array.from(seen).sort(number_compare_ascending);
186
187
  }
187
188
 
188
189
  /**
@@ -206,7 +207,7 @@ function collect_child_pages(page) {
206
207
  }
207
208
  }
208
209
 
209
- return Array.from(seen).sort((a, b) => a - b);
210
+ return Array.from(seen).sort(number_compare_ascending);
210
211
  }
211
212
 
212
213
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"StandardShadeMaterial.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/StandardShadeMaterial.js"],"names":[],"mappings":"AAOA;;;;GAIG;AAEH;IACI;;;OAGG;IACH,gBAFU,YAAY,CAEP;IAEf;;;OAGG;IACH,eAFU,KAAK,CAEsB;IAErC;;OAEG;IACH,gBAFU,YAAY,CAEP;IAEf;;;;;;OAMG;IACH,aAFU,YAAY,CAEV;IAEZ;;OAEG;IACH,kBAFU,YAAY,CAEL;IAEjB;;;;;;;;OAQG;IACH,UAFU,mBAAmB,GAAC,SAAS,CAE9B;IAET;;;OAGG;IACH,kBAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB;;;;;;;;OAQG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;;;;OAMG;IACH,YAFU,MAAM,CAEC;IAEjB;;;;;;;;;;;OAWG;IACH,QAFU,mBAAmB,GAAC,IAAI,CAEpB;IAEd;;;OAGG;IACH,iBAFU,KAAK,CAE4B;IAE3C;;;OAGG;IACH,iBAFU,cAAc,CAEmB;IAW3C;;;;;OAKG;IACH,YAFW,qBAAqB,QAoB/B;IAED;;;OAGG;IACH,SAFa,qBAAqB,CAQjC;IAaD;;;;OAIG;IACH,cAHW,qBAAqB,GACnB,OAAO,CA+BnB;IAGL;;;OAGG;IACH,kCAFU,OAAO,CAEsC;CANtD;2BAvMY,OAAO,4BAA4B,EAAE,YAAY;kCACjD,OAAO,2CAA2C,EAAE,mBAAmB;kCACvE,OAAO,kCAAkC,EAAE,mBAAmB;8BAL7C,oBAAoB;sBAJ5B,8BAA8B;2BACzB,4CAA4C"}
1
+ {"version":3,"file":"StandardShadeMaterial.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/StandardShadeMaterial.js"],"names":[],"mappings":"AAQA;;;;GAIG;AAEH;IACI;;;OAGG;IACH,gBAFU,YAAY,CAEP;IAEf;;;OAGG;IACH,eAFU,KAAK,CAEsB;IAErC;;OAEG;IACH,gBAFU,YAAY,CAEP;IAEf;;;;;;OAMG;IACH,aAFU,YAAY,CAEV;IAEZ;;OAEG;IACH,kBAFU,YAAY,CAEL;IAEjB;;;;;;;;OAQG;IACH,UAFU,mBAAmB,GAAC,SAAS,CAE9B;IAET;;;OAGG;IACH,kBAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB;;;;;;;;OAQG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;;;;OAMG;IACH,YAFU,MAAM,CAEC;IAEjB;;;;;;;;;;;OAWG;IACH,QAFU,mBAAmB,GAAC,IAAI,CAEpB;IAEd;;;OAGG;IACH,iBAFU,KAAK,CAE4B;IAE3C;;;OAGG;IACH,iBAFU,cAAc,CAEmB;IAW3C;;;;;OAKG;IACH,YAFW,qBAAqB,QAoB/B;IAED;;;OAGG;IACH,SAFa,qBAAqB,CAQjC;IAiBD;;;;OAIG;IACH,cAHW,qBAAqB,GACnB,OAAO,CA+BnB;IAGL;;;OAGG;IACH,kCAFU,OAAO,CAEsC;CANtD;2BA3MY,OAAO,4BAA4B,EAAE,YAAY;kCACjD,OAAO,2CAA2C,EAAE,mBAAmB;kCACvE,OAAO,kCAAkC,EAAE,mBAAmB;8BAL7C,oBAAoB;sBAJ5B,8BAA8B;2BACzB,4CAA4C"}
@@ -1,4 +1,5 @@
1
- import { combine_hash } from "../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
2
+ import { hash_mix3 } from "../../../core/math/hash/hash_mix3.js";
2
3
  import { Color } from "../../../core/color/Color.js";
3
4
  import LinearModifier from "../../../core/model/stat/LinearModifier.js";
4
5
  import { optional_equality } from "../../../core/model/object/optional_equality.js";
@@ -160,13 +161,17 @@ export class StandardShadeMaterial extends ShadeMaterial {
160
161
  }
161
162
 
162
163
  hash() {
163
- return combine_hash(
164
- super.hash(),
165
- this.diffuse_color.hash(),
166
- optional_hash(this.texture_albedo),
167
- optional_hash(this.texture_normal),
168
- optional_hash(this.texture_orm),
169
- optional_hash(this.texture_emissive),
164
+ return hash_mix2(
165
+ hash_mix3(
166
+ hash_mix3(
167
+ super.hash(),
168
+ this.diffuse_color.hash(),
169
+ optional_hash(this.texture_albedo)
170
+ ),
171
+ optional_hash(this.texture_normal),
172
+ optional_hash(this.texture_orm)
173
+ ),
174
+ optional_hash(this.texture_emissive)
170
175
  );
171
176
  }
172
177
 
@@ -1 +1 @@
1
- {"version":3,"file":"particle_vector_extract.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;;;;;GAOG;AACH,gDAHW,OAAO,4BAA4B,EAAE,kBAAkB,GACrD,MAAM,CAIlB;AAED;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,+CATW,OAAO,4BAA4B,EAAE,mBAAmB,SACxD,MAAM,EAAE;IAE4E,SAAS,UAApF,OAAO,4BAA4B,EAAE,kBAAkB,KAAG,MAAM;IACxD,UAAU,GAA3B,MAAM;IACW,eAAe,GAAhC,MAAM;IAEJ,uBAAuB,CA0DnC;;;;;YAvEa,IAAI,MAAM,EAAE,MAAM,CAAC;;;;WACnB,MAAM,EAAE;;;;UACR,MAAM"}
1
+ {"version":3,"file":"particle_vector_extract.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;;;;;GAOG;AACH,gDAHW,OAAO,4BAA4B,EAAE,kBAAkB,GACrD,MAAM,CAIlB;AAED;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,+CATW,OAAO,4BAA4B,EAAE,mBAAmB,SACxD,MAAM,EAAE;IAE4E,SAAS,UAApF,OAAO,4BAA4B,EAAE,kBAAkB,KAAG,MAAM;IACxD,UAAU,GAA3B,MAAM;IACW,eAAe,GAAhC,MAAM;IAEJ,uBAAuB,CA0DnC;;;;;YAvEa,IAAI,MAAM,EAAE,MAAM,CAAC;;;;WACnB,MAAM,EAAE;;;;UACR,MAAM"}
@@ -1,5 +1,6 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
2
  import { PV } from "./particle_vector_graph.js";
3
+ import { number_compare_ascending } from "../../../../../core/primitives/numbers/number_compare_ascending.js";
3
4
 
4
5
  /**
5
6
  * Choose one node per class — the instruction-count half of the optimizer.
@@ -86,7 +87,7 @@ export function extract_particle_values(graph, roots, {
86
87
 
87
88
  // Only the classes that are both reachable and hold more than one node are a decision; with
88
89
  // one alternative-generating rule that is a handful of products per program.
89
- for (const id of [...reached].sort((a, b) => a - b)) {
90
+ for (const id of [...reached].sort(number_compare_ascending)) {
90
91
  const members = graph.members(id);
91
92
 
92
93
  if (members.length < 2 || evaluations >= max_evaluations) {
@@ -247,7 +248,7 @@ function topological(graph, reached, choice) {
247
248
  const order = [];
248
249
  const done = new Set();
249
250
 
250
- for (const root of [...reached].sort((a, b) => a - b)) {
251
+ for (const root of [...reached].sort(number_compare_ascending)) {
251
252
  if (done.has(root)) {
252
253
  continue;
253
254
  }
@@ -1 +1 @@
1
- {"version":3,"file":"triangle_fingerprint_stream.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js"],"names":[],"mappings":"AA6DA;;;;;;;;;;;;;;GAcG;AACH,iEAFa,WAAW,CA2EvB"}
1
+ {"version":3,"file":"triangle_fingerprint_stream.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;;;;;GAcG;AACH,iEAFa,WAAW,CAmFvB"}
@@ -1,5 +1,6 @@
1
1
  import { reinterpret_float32_as_int32 } from "../../../../../../core/binary/reinterpret_float32_as_int32.js";
2
- import { combine_hash } from "../../../../../../core/collection/array/combine_hash.js";
2
+ import { hash_mix2 } from "../../../../../../core/math/hash/hash_mix2.js";
3
+ import { hash_mix3 } from "../../../../../../core/math/hash/hash_mix3.js";
3
4
  import { v3_distance } from "../../../../../../core/geom/vec3/v3_distance.js";
4
5
  import { StandardAttributes } from "../../../../geometry/StandardAttributes.js";
5
6
 
@@ -15,7 +16,7 @@ function fold_strided(h, data, stride, vertex_index) {
15
16
  if (data === null) return h;
16
17
  const base = vertex_index * stride;
17
18
  for (let i = 0; i < stride; i++) {
18
- h = combine_hash(h, reinterpret_float32_as_int32(data[base + i]));
19
+ h = hash_mix2(h, reinterpret_float32_as_int32(data[base + i]));
19
20
  }
20
21
  return h;
21
22
  }
@@ -140,9 +141,17 @@ export function triangle_fingerprint_stream(geometry) {
140
141
 
141
142
  sort_three(keys_scratch, attrs_scratch);
142
143
 
143
- result[t] = combine_hash(
144
- keys_scratch[0], keys_scratch[1], keys_scratch[2],
145
- attrs_scratch[0], attrs_scratch[1], attrs_scratch[2]
144
+ result[t] = hash_mix2(
145
+ hash_mix3(
146
+ hash_mix3(
147
+ keys_scratch[0],
148
+ keys_scratch[1],
149
+ keys_scratch[2]
150
+ ),
151
+ attrs_scratch[0],
152
+ attrs_scratch[1]
153
+ ),
154
+ attrs_scratch[2]
146
155
  ) | 0;
147
156
  }
148
157
 
@@ -8,7 +8,7 @@ import html_canvas_to_sampler2d from "../../../../engine/graphics/texture/html_c
8
8
  export function sampler2d_from_image_bitmap(bitmap) {
9
9
  // 1. Draw the bitmap to a canvas
10
10
  const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
11
- const ctx = canvas.getContext('2d');
11
+ const ctx = canvas.getContext('2d', { willReadFrequently: true });
12
12
  ctx.drawImage(bitmap, 0, 0);
13
13
 
14
14
  return html_canvas_to_sampler2d(canvas);
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
2
+ import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
3
3
  import { isArrayEqual } from "../../../../core/collection/array/isArrayEqual.js";
4
4
  import { isPowerOfTwo } from "../../../../core/math/isPowerOfTwo.js";
5
5
  import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
@@ -181,7 +181,7 @@ export class WGSLStructField {
181
181
  }
182
182
 
183
183
  hash() {
184
- return combine_hash(
184
+ return hash_mix3(
185
185
  computeStringHash(this.name),
186
186
  this.offset,
187
187
  this.type.hash()