@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
@@ -1,174 +1,179 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { array_copy } from "../../../core/collection/array/array_copy.js";
3
- import { combine_hash } from "../../../core/collection/array/combine_hash.js";
4
- import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
5
- import { computeHashFloatArray } from "../../../core/math/hash/computeHashFloatArray.js";
6
- import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
7
- import {
8
- ResourceDescriptor
9
- } from "../../../engine/graphics/render/frame_graph/resource/ResourceDescriptor.js";
10
- import { texture_mip_level_count } from "../../util/texture_mip_extent.js";
11
- import { decode_bitmask_enum } from "../decode_bitmask_enum.js";
12
- import { GPUTextureUsage } from "../../descriptor/GPUTextureUsage.js";
13
-
14
- /**
15
- * **Vestigial.** Nothing branches on it — see {@link TextureResourceDescriptor.resolution_domain}.
16
- *
17
- * @enum {number}
18
- */
19
- export const TextureResolutionDomain = {
20
- Absolute: 0,
21
- PresentationRelative: 1
22
- }
23
-
24
- export class TextureResourceDescriptor extends ResourceDescriptor {
25
- /**
26
- * **Vestigial. Do not read this to decide how to interpret {@link resolution}.**
27
- *
28
- * No code branches on it; only {@link hash} folds it in. {@link from} stores whatever
29
- * resolution it is given without touching this field, and every caller gives it pixels — so a
30
- * descriptor's resolution is absolute pixels whatever this says, including on the default
31
- * `PresentationRelative` that {@link from} leaves in place.
32
- *
33
- * @type {TextureResolutionDomain|number}
34
- */
35
- resolution_domain = TextureResolutionDomain.PresentationRelative;
36
-
37
- // TODO use Uint32 instead
38
- resolution = new Float64Array([1, 1, 1]);
39
- sampleCount = 1;
40
-
41
- mipLevelCount = 1;
42
-
43
- /**
44
- *
45
- * @type {GPUTextureDimension|string}
46
- */
47
- dimension = "2d"
48
-
49
- /**
50
- * @type {string|GPUTextureFormat}
51
- */
52
- format = "rgba8unorm";
53
-
54
- /**
55
- * @type {number|GPUTextureUsageFlags}
56
- */
57
- usage = GPUTextureUsage.TEXTURE_BINDING;
58
-
59
- /**
60
- *
61
- * @param {Object} options
62
- * @param {number[]} options.resolution
63
- * @param {GPUTextureDimension|string} [options.dimension]
64
- * @param {GPUTextureFormat|string} options.format
65
- * @param {GPUTextureUsageFlags|number} [options.usage]
66
- * @param {boolean} [options.enableMips]
67
- * @returns {TextureResourceDescriptor}
68
- */
69
- static from({
70
- resolution,
71
- dimension = "2d",
72
- format,
73
- usage = GPUTextureUsage.TEXTURE_BINDING,
74
- enableMips = false
75
- }) {
76
-
77
- assert.isString(format, 'format');
78
- assert.defined(resolution, 'resolution');
79
- assert.isArrayLike(resolution, 'resolution');
80
- assert.isBoolean(enableMips, 'enableMips');
81
-
82
- const r = new TextureResourceDescriptor();
83
-
84
- array_copy(resolution, 0, r.resolution, 0, Math.min(r.resolution.length, resolution.length));
85
- r.dimension = dimension;
86
- r.format = format;
87
- r.usage = usage;
88
-
89
- if (enableMips === true) {
90
-
91
- // `r.resolution` rather than the argument: it has already been padded to three, so a
92
- // caller that gave two axes reads as depth 1 instead of `undefined`
93
- r.mipLevelCount = texture_mip_level_count(
94
- r.resolution[0], r.resolution[1], r.resolution[2], r.dimension
95
- );
96
-
97
- }
98
-
99
- return r;
100
-
101
- }
102
-
103
- /**
104
- *
105
- * @param {GPUTexture} texture
106
- * @returns {TextureResourceDescriptor}
107
- */
108
- static fromTexture(texture) {
109
- const r = new TextureResourceDescriptor();
110
-
111
- r.format = texture.format;
112
- r.dimension = texture.dimension;
113
-
114
- r.usage = texture.usage;
115
- r.sampleCount = texture.sampleCount;
116
- r.resolution_domain = TextureResolutionDomain.Absolute;
117
-
118
- r.resolution[0] = texture.width;
119
- r.resolution[1] = texture.height;
120
- r.resolution[2] = texture.depthOrArrayLayers;
121
-
122
-
123
- r.mipLevelCount = texture.mipLevelCount;
124
-
125
- return r;
126
- }
127
-
128
- get type() {
129
- return "texture";
130
- }
131
-
132
- hash() {
133
- return combine_hash(
134
- this.resolution_domain,
135
- this.mipLevelCount,
136
- computeHashFloatArray(this.resolution),
137
- this.sampleCount,
138
- this.usage,
139
- computeStringHash(this.format)
140
- );
141
- }
142
-
143
- /**
144
- *
145
- * @param {TextureResourceDescriptor} other
146
- * @returns {boolean}
147
- */
148
- equals(other) {
149
- if (this === other) {
150
- return true;
151
- }
152
-
153
- // A texture and a buffer descriptor share one `ImmutableObjectPool` in
154
- // `RenderResourceManager`, so a hash collision puts a buffer in front of this method. The
155
- // type check has to come first: without it the very next line reads `other.resolution.length`
156
- // on undefined and the probe throws instead of missing the cache.
157
- if (!super.equals(other)) {
158
- return false;
159
- }
160
-
161
- return isArrayEqualStrict(this.resolution, other.resolution)
162
- && this.mipLevelCount === other.mipLevelCount
163
- && this.resolution_domain === other.resolution_domain
164
- && this.sampleCount === other.sampleCount
165
- && this.dimension === other.dimension
166
- && this.format === other.format
167
- && this.usage === other.usage
168
- ;
169
- }
170
-
171
- toString() {
172
- return `Texture{ resolution = [${this.resolution.join(",")}], mipLevelCount = ${this.mipLevelCount}, dimension = ${this.dimension}, format = ${this.format}, usage = ${decode_bitmask_enum(this.usage, GPUTextureUsage).join(' | ')}, sampleCount = ${this.sampleCount} }`;
173
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { array_copy } from "../../../core/collection/array/array_copy.js";
3
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
4
+ import { hash_mix3 } from "../../../core/math/hash/hash_mix3.js";
5
+ import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
6
+ import { computeHashFloatArray } from "../../../core/math/hash/computeHashFloatArray.js";
7
+ import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
8
+ import {
9
+ ResourceDescriptor
10
+ } from "../../../engine/graphics/render/frame_graph/resource/ResourceDescriptor.js";
11
+ import { texture_mip_level_count } from "../../util/texture_mip_extent.js";
12
+ import { decode_bitmask_enum } from "../decode_bitmask_enum.js";
13
+ import { GPUTextureUsage } from "../../descriptor/GPUTextureUsage.js";
14
+
15
+ /**
16
+ * **Vestigial.** Nothing branches on it — see {@link TextureResourceDescriptor.resolution_domain}.
17
+ *
18
+ * @enum {number}
19
+ */
20
+ export const TextureResolutionDomain = {
21
+ Absolute: 0,
22
+ PresentationRelative: 1
23
+ }
24
+
25
+ export class TextureResourceDescriptor extends ResourceDescriptor {
26
+ /**
27
+ * **Vestigial. Do not read this to decide how to interpret {@link resolution}.**
28
+ *
29
+ * No code branches on it; only {@link hash} folds it in. {@link from} stores whatever
30
+ * resolution it is given without touching this field, and every caller gives it pixels — so a
31
+ * descriptor's resolution is absolute pixels whatever this says, including on the default
32
+ * `PresentationRelative` that {@link from} leaves in place.
33
+ *
34
+ * @type {TextureResolutionDomain|number}
35
+ */
36
+ resolution_domain = TextureResolutionDomain.PresentationRelative;
37
+
38
+ // TODO use Uint32 instead
39
+ resolution = new Float64Array([1, 1, 1]);
40
+ sampleCount = 1;
41
+
42
+ mipLevelCount = 1;
43
+
44
+ /**
45
+ *
46
+ * @type {GPUTextureDimension|string}
47
+ */
48
+ dimension = "2d"
49
+
50
+ /**
51
+ * @type {string|GPUTextureFormat}
52
+ */
53
+ format = "rgba8unorm";
54
+
55
+ /**
56
+ * @type {number|GPUTextureUsageFlags}
57
+ */
58
+ usage = GPUTextureUsage.TEXTURE_BINDING;
59
+
60
+ /**
61
+ *
62
+ * @param {Object} options
63
+ * @param {number[]} options.resolution
64
+ * @param {GPUTextureDimension|string} [options.dimension]
65
+ * @param {GPUTextureFormat|string} options.format
66
+ * @param {GPUTextureUsageFlags|number} [options.usage]
67
+ * @param {boolean} [options.enableMips]
68
+ * @returns {TextureResourceDescriptor}
69
+ */
70
+ static from({
71
+ resolution,
72
+ dimension = "2d",
73
+ format,
74
+ usage = GPUTextureUsage.TEXTURE_BINDING,
75
+ enableMips = false
76
+ }) {
77
+
78
+ assert.isString(format, 'format');
79
+ assert.defined(resolution, 'resolution');
80
+ assert.isArrayLike(resolution, 'resolution');
81
+ assert.isBoolean(enableMips, 'enableMips');
82
+
83
+ const r = new TextureResourceDescriptor();
84
+
85
+ array_copy(resolution, 0, r.resolution, 0, Math.min(r.resolution.length, resolution.length));
86
+ r.dimension = dimension;
87
+ r.format = format;
88
+ r.usage = usage;
89
+
90
+ if (enableMips === true) {
91
+
92
+ // `r.resolution` rather than the argument: it has already been padded to three, so a
93
+ // caller that gave two axes reads as depth 1 instead of `undefined`
94
+ r.mipLevelCount = texture_mip_level_count(
95
+ r.resolution[0], r.resolution[1], r.resolution[2], r.dimension
96
+ );
97
+
98
+ }
99
+
100
+ return r;
101
+
102
+ }
103
+
104
+ /**
105
+ *
106
+ * @param {GPUTexture} texture
107
+ * @returns {TextureResourceDescriptor}
108
+ */
109
+ static fromTexture(texture) {
110
+ const r = new TextureResourceDescriptor();
111
+
112
+ r.format = texture.format;
113
+ r.dimension = texture.dimension;
114
+
115
+ r.usage = texture.usage;
116
+ r.sampleCount = texture.sampleCount;
117
+ r.resolution_domain = TextureResolutionDomain.Absolute;
118
+
119
+ r.resolution[0] = texture.width;
120
+ r.resolution[1] = texture.height;
121
+ r.resolution[2] = texture.depthOrArrayLayers;
122
+
123
+
124
+ r.mipLevelCount = texture.mipLevelCount;
125
+
126
+ return r;
127
+ }
128
+
129
+ get type() {
130
+ return "texture";
131
+ }
132
+
133
+ hash() {
134
+ return hash_mix2(
135
+ hash_mix3(
136
+ hash_mix3(
137
+ this.resolution_domain,
138
+ this.mipLevelCount,
139
+ computeHashFloatArray(this.resolution)
140
+ ),
141
+ this.sampleCount,
142
+ this.usage
143
+ ),
144
+ computeStringHash(this.format)
145
+ );
146
+ }
147
+
148
+ /**
149
+ *
150
+ * @param {TextureResourceDescriptor} other
151
+ * @returns {boolean}
152
+ */
153
+ equals(other) {
154
+ if (this === other) {
155
+ return true;
156
+ }
157
+
158
+ // A texture and a buffer descriptor share one `ImmutableObjectPool` in
159
+ // `RenderResourceManager`, so a hash collision puts a buffer in front of this method. The
160
+ // type check has to come first: without it the very next line reads `other.resolution.length`
161
+ // on undefined and the probe throws instead of missing the cache.
162
+ if (!super.equals(other)) {
163
+ return false;
164
+ }
165
+
166
+ return isArrayEqualStrict(this.resolution, other.resolution)
167
+ && this.mipLevelCount === other.mipLevelCount
168
+ && this.resolution_domain === other.resolution_domain
169
+ && this.sampleCount === other.sampleCount
170
+ && this.dimension === other.dimension
171
+ && this.format === other.format
172
+ && this.usage === other.usage
173
+ ;
174
+ }
175
+
176
+ toString() {
177
+ return `Texture{ resolution = [${this.resolution.join(",")}], mipLevelCount = ${this.mipLevelCount}, dimension = ${this.dimension}, format = ${this.format}, usage = ${decode_bitmask_enum(this.usage, GPUTextureUsage).join(' | ')}, sampleCount = ${this.sampleCount} }`;
178
+ }
174
179
  }
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { crc32 } from "../../../../core/binary/hash/crc32.js";
2
+ import { crc32 } from "../../../../core/math/hash/crc32.js";
3
3
  import { SGPT_DEFECT } from "./SGPT_DEFECT.js";
4
4
  import { SGPTDefect } from "./SGPTDefect.js";
5
5
  import { SGPT_FORMAT_VERSION } from "./SGPT_FORMAT_VERSION.js";
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { crc32 } from "../../../../core/binary/hash/crc32.js";
2
+ import { crc32 } from "../../../../core/math/hash/crc32.js";
3
3
  import { SGPT_DEFECT } from "./SGPT_DEFECT.js";
4
4
  import { SGPTDefect } from "./SGPTDefect.js";
5
5
  import { SGPT_HEADER_SIZE } from "./SGPT_HEADER_SIZE.js";
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { crc32 } from "../../../../core/binary/hash/crc32.js";
2
+ import { crc32 } from "../../../../core/math/hash/crc32.js";
3
3
  import { SGPT_FORMAT_VERSION } from "./SGPT_FORMAT_VERSION.js";
4
4
  import { SGPT_HEADER_CHECKSUM_COVERAGE } from "./SGPT_HEADER_CHECKSUM_COVERAGE.js";
5
5
  import { SGPT_HEADER_OFFSET } from "./SGPT_HEADER_OFFSET.js";
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { crc32 } from "../../../../core/binary/hash/crc32.js";
2
+ import { crc32 } from "../../../../core/math/hash/crc32.js";
3
3
  import { SGPT_RECORD_HEADER_SIZE } from "./SGPT_RECORD_HEADER_SIZE.js";
4
4
  import { SGPT_RECORD_SYNC } from "./SGPT_RECORD_SYNC.js";
5
5
 
@@ -1,4 +1,5 @@
1
1
  import { jpeg_decode } from "../../../format/image/jpeg/jpeg_decode.js";
2
+ import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
2
3
 
3
4
  /**
4
5
  * Measures the trade `ImageRGBADataLoader`'s codec chain makes for a JPEG.
@@ -37,7 +38,7 @@ const table = document.getElementById("results");
37
38
  * @returns {number} the median, which a single GC pause cannot move
38
39
  */
39
40
  function median(values) {
40
- const sorted = [...values].sort((a, b) => a - b);
41
+ const sorted = [...values].sort(number_compare_ascending);
41
42
  return sorted[sorted.length >> 1];
42
43
  }
43
44
 
@@ -1 +1 @@
1
- {"version":3,"file":"diff_traced_against_rasterized.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js"],"names":[],"mappings":"AAsaA;;GAEG;AACH,2CAEC;AAoED;;;;;;;;;;;;;;;GAeG;AACH;IAT6B,QAAQ;IACC,MAAM;IAClB,KAAK;IACc,OAAO,UAAhC,OAAO,KAAG,IAAI;IAEN,OAAO,GAAxB,MAAM;IAEJ,QAAQ,MAAM,CAAC,CA2O3B"}
1
+ {"version":3,"file":"diff_traced_against_rasterized.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js"],"names":[],"mappings":"AAuaA;;GAEG;AACH,2CAEC;AAoED;;;;;;;;;;;;;;;GAeG;AACH;IAT6B,QAAQ;IACC,MAAM;IAClB,KAAK;IACc,OAAO,UAAhC,OAAO,KAAG,IAAI;IAEN,OAAO,GAAxB,MAAM;IAEJ,QAAQ,MAAM,CAAC,CA2O3B"}
@@ -1,4 +1,5 @@
1
1
  import { use_flat_environment } from "./flat_environment.js";
2
+ import { number_compare_descending } from "../../../core/primitives/numbers/number_compare_descending.js";
2
3
 
3
4
  /**
4
5
  * Render the current view both ways and show, pixel by pixel, where they disagree.
@@ -415,7 +416,7 @@ function component_sizes(mask, width, height) {
415
416
  sizes.push(size);
416
417
  }
417
418
 
418
- sizes.sort((a, b) => b - a);
419
+ sizes.sort(number_compare_descending);
419
420
 
420
421
  return sizes;
421
422
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verify_clone_vertices.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js"],"names":[],"mappings":"AA0JA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAb6B,QAAQ;IACX,KAAK;IACJ,MAAM,EAAtB,MAAM;IACW,SAAS,GAA1B,MAAM;IAQJ,QAAQ,MAAM,CAAC,CAsQ3B"}
1
+ {"version":3,"file":"verify_clone_vertices.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js"],"names":[],"mappings":"AA2JA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAb6B,QAAQ;IACX,KAAK;IACJ,MAAM,EAAtB,MAAM;IACW,SAAS,GAA1B,MAAM;IAQJ,QAAQ,MAAM,CAAC,CAsQ3B"}
@@ -37,6 +37,7 @@ import {
37
37
  import {
38
38
  SKINNING_WORKGROUP_SIZE
39
39
  } from "../../renderer/animation/skinning/shader_meshlet_apply_skinning.js";
40
+ import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
40
41
 
41
42
  /**
42
43
  * Copy a slice of a GPU buffer back to the CPU.
@@ -408,7 +409,7 @@ export async function verify_clone_vertices({ renderer, scene, entity, tolerance
408
409
  // The two shapes worth telling apart, named rather than left to be read out of the runs: a
409
410
  // stride-loop bug wrongs every slot at or past the workgroup size and nothing below it, and an
410
411
  // addressing bug wrongs whole meshlets.
411
- const slots = [...wrong_by_slot.keys()].sort((a, b) => a - b);
412
+ const slots = [...wrong_by_slot.keys()].sort(number_compare_ascending);
412
413
 
413
414
  const lowest_wrong_slot = slots.length > 0 ? slots[0] : null;
414
415
 
@@ -1 +1 @@
1
- {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ssr_variance/statistics.js"],"names":[],"mappings":"AAAA,kGAAkG;AAClG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDC"}
1
+ {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ssr_variance/statistics.js"],"names":[],"mappings":"AACA,kGAAkG;AAClG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDC"}
@@ -1,3 +1,4 @@
1
+ import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
1
2
  /** Per-pixel temporal moments of linear Rec.709 luminance. No spatial pooling before variance. */
2
3
  export function measure_variance(samples, mask, width, height) {
3
4
  if (samples.length < 2) { throw new Error('At least two samples are required'); }
@@ -30,7 +31,7 @@ export function measure_variance(samples, mask, width, height) {
30
31
  sigmas.push(Math.sqrt(variance[p])); variance_sum += variance[p]; mean_sum += mean[p];
31
32
  const range = maximum[p] - minimum[p]; range_sum += range; max_range = Math.max(max_range, range);
32
33
  }
33
- sigmas.sort((a, b) => a - b);
34
+ sigmas.sort(number_compare_ascending);
34
35
  const count = sigmas.length;
35
36
  if (!count) { throw new Error('Empty measurement region'); }
36
37
  return { pixels: count, mean_luminance: mean_sum / count,
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/texture_encode/main.js"],"names":[],"mappings":"AA+xBA;;;;GAIG;AACH,yBAFa,QAAQ,IAAI,CAAC,CAmnBzB;;;;;WAhyCa,MAAM;YACN,MAAM;;;;;;UACN,UAAU;;;;UAGV,YAAY"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/texture_encode/main.js"],"names":[],"mappings":"AAgyBA;;;;GAIG;AACH,yBAFa,QAAQ,IAAI,CAAC,CAmnBzB;;;;;WAhyCa,MAAM;YACN,MAAM;;;;;;UACN,UAAU;;;;UAGV,YAAY"}
@@ -44,6 +44,7 @@ import { texture_write_level } from "../../renderer/texture/texture_write_level.
44
44
  import { texture_mip_level_count } from "../../util/texture_mip_extent.js";
45
45
  import { ComputeShaderEmulator } from "../../wgsl/emulator/ComputeShaderEmulator.js";
46
46
  import { create_panel_group } from "./panel_view.js";
47
+ import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
47
48
 
48
49
  /**
49
50
  * The GPU block encoder on a real device.
@@ -1379,7 +1380,7 @@ export async function start() {
1379
1380
  lines.push('');
1380
1381
  lines.push(' hardware, rounded to eight bits, minus the CPU decoder, over every pair and index:');
1381
1382
 
1382
- for (const delta of [...histogram.keys()].sort((a, b) => a - b)) {
1383
+ for (const delta of [...histogram.keys()].sort(number_compare_ascending)) {
1383
1384
  lines.push(` ${String(delta).padStart(3)}: ${String(histogram.get(delta)).padStart(7)} (${(100 * histogram.get(delta) / total).toFixed(2)}%)`);
1384
1385
  }
1385
1386
 
@@ -1 +1 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/volumetrics_froxel/measure.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH;;;;;;GAMG;AACH;IAL8B,QAAQ;IACX,KAAK;IACO,MAAM;IACA,UAAU;;;;;;;;;;UAuLtC,QAAQ,YAAY,CAAC;;;;;gCA5DvB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4MV,QAAQ,MAAM,EAAE,CAAC;;;;;;;;;;;;;QAsGF,MAAM,GAAvB,MAAM;QACW,MAAM,GAAvB,MAAM;UACJ;YAAe,MAAM,GAAE,MAAM;MAAE;;GAoF/C"}
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/volumetrics_froxel/measure.js"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH;;;;;;GAMG;AACH;IAL8B,QAAQ;IACX,KAAK;IACO,MAAM;IACA,UAAU;;;;;;;;;;UAuLtC,QAAQ,YAAY,CAAC;;;;;gCA5DvB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4MV,QAAQ,MAAM,EAAE,CAAC;;;;;;;;;;;;;QAsGF,MAAM,GAAvB,MAAM;QACW,MAAM,GAAvB,MAAM;UACJ;YAAe,MAAM,GAAE,MAAM;MAAE;;GAoF/C"}
@@ -1,3 +1,4 @@
1
+ import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
1
2
  /**
2
3
  * The measurement protocol from this page's README, as code.
3
4
  *
@@ -527,7 +528,7 @@ export async function attach({
527
528
  const out = { __frames: capture.frames.length, __defects: capture.defects.length };
528
529
 
529
530
  for (const [label, values] of per_frame) {
530
- values.sort((a, b) => a - b);
531
+ values.sort(number_compare_ascending);
531
532
  out[label] = values[values.length >> 1];
532
533
  }
533
534
 
@@ -1,4 +1,4 @@
1
- import { combine_hash } from "../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix3 } from "../../../core/math/hash/hash_mix3.js";
2
2
  import { BindingResource } from "./BindingResource.js";
3
3
 
4
4
  /**
@@ -35,7 +35,7 @@ export class BufferBinding extends BindingResource {
35
35
  * @returns {number}
36
36
  */
37
37
  hash() {
38
- return combine_hash(
38
+ return hash_mix3(
39
39
  this.offset,
40
40
  this.actual_size,
41
41
  this.buffer.id
@@ -1 +1 @@
1
- {"version":3,"file":"gpu_database_check_links.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/buffer/table/gpu_database_check_links.js"],"names":[],"mappings":"AAiFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,oDAHW,WAAW,EAAE,GACX,wBAAwB,EAAE,CA2VtC;0BAlcY,OAAO,kBAAkB,EAAE,WAAW;oCACtC,OAAO,4BAA4B,EAAE,qBAAqB;;2BAE1D,OAAO,mBAAmB,EAAE,YAAY;4BACxC,OAAO,oBAAoB,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;YAyBzC,UAAU,GAAC,kBAAkB,GAAC,iBAAiB,GAAC,YAAY,GAAC,QAAQ,GAAC,aAAa;;;;cACnF,MAAM;WACN,MAAM;SACN,MAAM;;;;;WACN,MAAM;WAEN,MAAM;;;;;yBAMP;IAAC,IAAI,EAAE,YAAY,GAAC,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,GAAC,IAAI,CAAC;IAAC,MAAM,kDAAe;CAAC"}
1
+ {"version":3,"file":"gpu_database_check_links.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/buffer/table/gpu_database_check_links.js"],"names":[],"mappings":"AAkFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,oDAHW,WAAW,EAAE,GACX,wBAAwB,EAAE,CA2VtC;0BAlcY,OAAO,kBAAkB,EAAE,WAAW;oCACtC,OAAO,4BAA4B,EAAE,qBAAqB;;2BAE1D,OAAO,mBAAmB,EAAE,YAAY;4BACxC,OAAO,oBAAoB,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;YAyBzC,UAAU,GAAC,kBAAkB,GAAC,iBAAiB,GAAC,YAAY,GAAC,QAAQ,GAAC,aAAa;;;;cACnF,MAAM;WACN,MAAM;SACN,MAAM;;;;;WACN,MAAM;WAEN,MAAM;;;;;yBAMP;IAAC,IAAI,EAAE,YAAY,GAAC,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,GAAC,IAAI,CAAC;IAAC,MAAM,kDAAe;CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
2
  import { GPU_DATABASE_NULL } from "./GPU_DATABASE_NULL.js";
3
3
  import { gpu_table_range_well_formed } from "./gpu_table_range_well_formed.js";
4
+ import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
4
5
 
5
6
  /**
6
7
  * @typedef {import("./GPUDatabase.js").GPUDatabase} GPUDatabase
@@ -412,7 +413,7 @@ export function gpu_database_check_links(databases) {
412
413
  const counts = owner_counts.get(table);
413
414
 
414
415
  if (counts !== undefined) {
415
- const rows = Array.from(counts.keys()).sort((a, b) => a - b);
416
+ const rows = Array.from(counts.keys()).sort(number_compare_ascending);
416
417
 
417
418
  for (let i = 0; i < rows.length; i++) {
418
419
  const count = counts.get(rows[i]);
@@ -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 { m4_allocate } from "../../../core/geom/3d/mat4/m4_allocate.js";
4
4
  import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
5
5
  import { plane3_normalize } from "../../../core/geom/3d/plane/plane3_normalize.js";
@@ -189,7 +189,7 @@ export class Camera {
189
189
  }
190
190
 
191
191
  hash() {
192
- return combine_hash(
192
+ return hash_mix3(
193
193
  computeHashFloat(this.#near),
194
194
  computeHashFloat(this.#far),
195
195
  computeHashFloat(this.#aspect),
@@ -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 {
4
4
  compute_binary_data_type_from_typed_array
5
5
  } from "../../../core/collection/array/typed/compute_binary_data_type_from_typed_array.js";
@@ -89,7 +89,7 @@ export class Attribute {
89
89
  }
90
90
 
91
91
  hash() {
92
- return combine_hash(
92
+ return hash_mix3(
93
93
  this.spec.hash(),
94
94
  this.count,
95
95
  sparse_typed_array_hash(this.data, 0, this.data.length)
@@ -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 { computeHashArray } from "../../../core/collection/array/computeHashArray.js";
4
4
  import { isArrayEqual } from "../../../core/collection/array/isArrayEqual.js";
5
5
  import { aabb3_from_v3_array } from "../../../core/geom/3d/aabb/aabb3_from_v3_array.js";
@@ -178,7 +178,7 @@ export class Geometry {
178
178
 
179
179
  hash() {
180
180
 
181
- return combine_hash(
181
+ return hash_mix3(
182
182
  computeStringHash(this.name),
183
183
  optional_hash(this.index),
184
184
  computeHashArray(this.attributes, invokeObjectHash)
@@ -1,5 +1,5 @@
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
3
  import { Attribute } from "./Attribute.js";
4
4
  import { Geometry } from "./Geometry.js";
5
5
  import { StandardAttributes } from "./StandardAttributes.js";
@@ -125,7 +125,7 @@ function vertex_hash(datas, strides, num_attrs, vertex_index) {
125
125
  // canonicalize -0 to +0: they compare `===` in vertices_equal but have
126
126
  // different bit patterns, which would scatter equal vertices across buckets
127
127
  const value = data[base + s];
128
- h = combine_hash(h, reinterpret_float32_as_int32(value === 0 ? 0 : value));
128
+ h = hash_mix2(h, reinterpret_float32_as_int32(value === 0 ? 0 : value));
129
129
  }
130
130
  }
131
131
  return h | 0;