@woosh/meep-engine 3.60.6 → 3.60.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/BitSet.d.ts.map +1 -1
  4. package/src/core/binary/BitSet.js +2 -1
  5. package/src/{format/image/avif/av1/util → core/binary/operations}/ceil_log2.d.ts +2 -2
  6. package/src/core/binary/operations/ceil_log2.d.ts.map +1 -0
  7. package/src/{format/image/avif/av1/util → core/binary/operations}/ceil_log2.js +18 -18
  8. package/src/core/binary/zstd/ZstdReverseBitReader.d.ts.map +1 -1
  9. package/src/core/binary/zstd/ZstdReverseBitReader.js +225 -223
  10. package/src/core/binary/zstd/zstd_fse.d.ts.map +1 -1
  11. package/src/core/binary/zstd/zstd_fse.js +267 -265
  12. package/src/core/binary/zstd/zstd_huffman.d.ts.map +1 -1
  13. package/src/core/binary/zstd/zstd_huffman.js +246 -244
  14. package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts.map +1 -1
  15. package/src/core/bvh2/binary/2/BinaryUint32BVH.js +8 -2
  16. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
  17. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +8 -7
  18. package/src/core/collection/PairUint32Map.d.ts.map +1 -1
  19. package/src/core/collection/PairUint32Map.js +2 -2
  20. package/src/core/collection/Uint32Map.d.ts.map +1 -1
  21. package/src/core/collection/Uint32Map.js +2 -4
  22. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -1
  23. package/src/core/collection/heap/FibonacciHeap.js +2 -1
  24. package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
  25. package/src/core/geom/2d/r-tree/StaticR2Tree.js +8 -2
  26. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -1
  27. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +2 -3
  28. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  29. package/src/engine/graphics/texture/atlas/TextureAtlas.js +13 -14
  30. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -1
  31. package/src/engine/graphics/texture/atlas/sprite_atlas_border.js +70 -69
  32. package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.d.ts.map +1 -1
  33. package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.js +2 -1
  34. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  35. package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -1
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +2 -1
  38. package/src/engine/graphics3/decal/chunk_decal_record.d.ts +14 -0
  39. package/src/engine/graphics3/decal/chunk_decal_record.d.ts.map +1 -0
  40. package/src/engine/graphics3/decal/chunk_decal_record.js +44 -0
  41. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  42. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +2 -15
  43. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  44. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +3 -16
  45. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  46. package/src/engine/graphics3/decal/shader_decal_composite.js +3 -23
  47. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts.map +1 -1
  48. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js +2 -1
  49. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  50. package/src/engine/physics/queries/shape_cast.js +2 -2
  51. package/src/format/image/avif/av1/decode/decode_palette.js +442 -442
  52. package/src/format/image/avif/av1/entropy/SymbolWriter.d.ts.map +1 -1
  53. package/src/format/image/avif/av1/entropy/SymbolWriter.js +2 -1
  54. package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -1
  55. package/src/generation/foliage/material/foliage_tile.js +2 -1
  56. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  57. package/src/shade/device/mock/SoftwareGPUDevice.js +6 -13
  58. package/src/shade/playground/caldera/main.js +3 -2
  59. package/src/shade/playground/probe_clipmap/README.md +2 -1
  60. package/src/shade/playground/probe_clipmap/index.html +7 -2
  61. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  62. package/src/shade/playground/probe_clipmap/main.js +17 -7
  63. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
  64. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +7 -13
  65. package/src/shade/playground/vgeo_scene/main.js +2 -1
  66. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -1
  67. package/src/shade/playground/vsm/VSMDebugOverlay.js +3 -1
  68. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  69. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  70. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  71. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  72. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_coarsest.d.ts.map +1 -1
  73. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_coarsest.js +5 -4
  74. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts.map +1 -1
  75. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.js +168 -166
  76. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts.map +1 -1
  77. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.js +221 -219
  78. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  79. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  80. package/src/shade/renderer/fow/shader_fog_of_war.js +8 -19
  81. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  82. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +6 -6
  83. package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/sdf/MeshSDFLayout.js +2 -1
  85. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +2 -1
  87. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +2 -1
  89. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.d.ts.map +1 -1
  90. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.js +10 -31
  91. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.d.ts.map +1 -1
  92. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.js +9 -15
  93. package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.d.ts +2 -1
  94. package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.js +6 -5
  96. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +2 -1
  98. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +15 -3
  99. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +168 -18
  101. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +98 -57
  102. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +168 -77
  104. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +4 -2
  105. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  106. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +27 -12
  107. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  108. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +12 -7
  109. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  110. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +8 -2
  111. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
  112. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +5 -2
  113. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +1 -1
  114. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +5 -3
  116. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +1 -1
  117. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
  118. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +1 -1
  119. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts.map +1 -1
  120. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.js +4 -2
  121. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts.map +1 -1
  122. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.js +1 -1
  123. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
  124. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +1 -1
  125. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
  126. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +3 -1
  127. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.js +2 -2
  128. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +114 -41
  129. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  130. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +424 -207
  131. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +34 -25
  132. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  133. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +41 -31
  134. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +7 -5
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -1
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +7 -5
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.d.ts +47 -0
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.d.ts.map +1 -0
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.js +84 -0
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts +48 -0
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts.map +1 -0
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.js +101 -0
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +58 -4
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +127 -30
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +18 -7
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -1
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +39 -13
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +29 -8
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +112 -56
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.d.ts +19 -0
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.d.ts.map +1 -0
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.js +35 -0
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  156. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +9 -3
  157. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +3 -3
  158. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +5 -5
  159. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +8 -12
  160. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  161. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +23 -56
  162. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +0 -3
  163. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  164. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +11 -15
  165. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +26 -0
  166. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts.map +1 -0
  167. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +173 -0
  168. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts +32 -0
  169. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts.map +1 -0
  170. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.js +166 -0
  171. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +3 -4
  172. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
  173. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +3 -4
  174. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -1
  175. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +3 -1
  176. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +6 -12
  177. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  178. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +15 -65
  179. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -1
  180. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +7 -2
  181. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +4 -4
  182. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  183. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +24 -17
  184. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts +7 -5
  185. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts.map +1 -1
  186. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.js +18 -10
  187. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +2 -2
  188. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -1
  189. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +9 -5
  190. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts +3 -0
  191. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts.map +1 -1
  192. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +9 -6
  193. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +1 -1
  194. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -1
  195. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +16 -16
  196. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.d.ts +36 -0
  197. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.d.ts.map +1 -0
  198. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.js +233 -0
  199. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
  200. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +7 -5
  201. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  202. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -3
  203. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  204. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +10 -4
  205. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +2 -1
  206. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
  207. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +12 -6
  208. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +1 -2
  209. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
  210. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +5 -6
  211. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +14 -18
  212. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
  213. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +25 -35
  214. package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.d.ts +13 -0
  215. package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.d.ts.map +1 -0
  216. package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.js +12 -0
  217. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +27 -2
  218. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
  219. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +62 -6
  220. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
  221. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +10 -19
  222. package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts.map +1 -1
  223. package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.js +6 -3
  224. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -1
  225. package/src/shade/renderer/hiz/hzb_pick_alignment.js +149 -148
  226. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
  227. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +4 -2
  228. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -1
  229. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +6 -5
  230. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -1
  231. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +3 -1
  232. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -1
  233. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +3 -1
  234. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -1
  235. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +3 -1
  236. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +0 -5
  237. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -1
  238. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +0 -7
  239. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +15 -2
  240. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
  241. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +51 -16
  242. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
  243. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +3 -2
  244. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  245. package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.d.ts +17 -0
  246. package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.d.ts.map +1 -0
  247. package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.js +81 -0
  248. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  249. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +5 -48
  250. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  251. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -44
  252. package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.d.ts.map +1 -1
  253. package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.js +4 -1
  254. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  255. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +8 -7
  256. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  257. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.d.ts.map +1 -1
  258. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.js +5 -7
  259. package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.d.ts +17 -0
  260. package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.d.ts.map +1 -0
  261. package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.js +56 -0
  262. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  263. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +2 -22
  264. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  265. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +2 -13
  266. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  267. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +10 -13
  268. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
  269. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +39 -38
  270. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
  271. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +7 -12
  272. package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.d.ts +8 -6
  273. package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.d.ts.map +1 -1
  274. package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js +10 -7
  275. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.d.ts +16 -0
  276. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.d.ts.map +1 -0
  277. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.js +35 -0
  278. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.d.ts +5 -2
  279. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.d.ts.map +1 -1
  280. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.js +27 -18
  281. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.d.ts.map +1 -1
  282. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.js +5 -15
  283. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.d.ts.map +1 -1
  284. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.js +5 -19
  285. package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.d.ts.map +1 -1
  286. package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.js +3 -22
  287. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -1
  288. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +2 -1
  289. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts.map +1 -1
  290. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.js +154 -152
  291. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
  292. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +2 -1
  293. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +3 -1
  294. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -1
  295. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +4 -3
  296. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +7 -1
  297. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -1
  298. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +54 -47
  299. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -1
  300. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +371 -370
  301. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  302. package/src/shade/renderer/water/GPUWaterRenderer.js +2 -1
  303. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  304. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -1
  305. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +12 -14
  306. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  307. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +2 -9
  308. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  309. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +2 -1
  310. package/src/shade/renderer/wind/WIND_FIELD.d.ts +3 -1
  311. package/src/shade/renderer/wind/WIND_FIELD.d.ts.map +1 -1
  312. package/src/shade/renderer/wind/WIND_FIELD.js +4 -3
  313. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +8 -2
  314. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  315. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +11 -4
  316. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +2 -2
  317. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  318. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +13 -4
  319. package/src/shade/util/texture_mip_extent.d.ts.map +1 -1
  320. package/src/shade/util/texture_mip_extent.js +88 -87
  321. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  322. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +9 -7
  323. package/src/format/image/avif/av1/util/ceil_log2.d.ts.map +0 -1
  324. package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.d.ts +0 -1
  325. package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.d.ts.map +0 -1
  326. package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.js +0 -0
@@ -1,5 +1,6 @@
1
1
  import { assert } from "../../assert.js";
2
2
  import { BinaryElementPool } from "../../geom/3d/topology/struct/binary/BinaryElementPool.js";
3
+ import { msb_32 } from "../../binary/msb_32.js";
3
4
 
4
5
  const UINT32_MAX = 4294967295;
5
6
 
@@ -310,7 +311,7 @@ export class FibonacciHeap {
310
311
 
311
312
  // upper bound on max degree D(n) <= floor(log_phi(n)).
312
313
  // log_phi(n) = log2(n) / log2(phi) ~= log2(n) * 1.4404; pad generously.
313
- const D = Math.floor(Math.log2(this.__size)) * 2 + 8;
314
+ const D = msb_32(this.__size) * 2 + 8;
314
315
  const A = new Array(D);
315
316
  for (let i = 0; i < D; i++) {
316
317
  A[i] = NULL_HANDLE;
@@ -1 +1 @@
1
- {"version":3,"file":"StaticR2Tree.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/r-tree/StaticR2Tree.js"],"names":[],"mappings":"AAoEA;;;GAGG;AACH;IAEI;;;OAGG;IACH,sBAAc;IAEd;;;;OAIG;IACH,+BAAc;IAEd;;;;OAIG;IACH,4BAAwB;IAExB;;;;OAIG;IACH,0BAAsB;IAOtB;;;OAGG;IACH,kBAFW,WAAW,QASrB;IAFG,6BAA0D;IAK9D,6BASC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAchB;IAGD;;;;;;;;OAQG;IACH,mBAPW,MAAM,WACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAwBhB;IAED;;;OAGG;IACH,uBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,MAAM,CAQlB;IAGD;;;OAGG;IACH,oBAFW,MAAM,EAAE,QAoFlB;IAED;;;;;OAKG;IACH,sBAYC;IAED;;OAEG;IACH,cAuEC;CACJ"}
1
+ {"version":3,"file":"StaticR2Tree.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/r-tree/StaticR2Tree.js"],"names":[],"mappings":"AAqEA;;;GAGG;AACH;IAEI;;;OAGG;IACH,sBAAc;IAEd;;;;OAIG;IACH,+BAAc;IAEd;;;;OAIG;IACH,4BAAwB;IAExB;;;;OAIG;IACH,0BAAsB;IAOtB;;;OAGG;IACH,kBAFW,WAAW,QASrB;IAFG,6BAA0D;IAK9D,6BASC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAchB;IAGD;;;;;;;;OAQG;IACH,mBAPW,MAAM,WACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAwBhB;IAED;;;OAGG;IACH,uBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,MAAM,CAQlB;IAGD;;;OAGG;IACH,oBAFW,MAAM,EAAE,QAoFlB;IAED;;;;;OAKG;IACH,sBAYC;IAED;;OAEG;IACH,cA4EC;CACJ"}
@@ -5,6 +5,7 @@ import { array_copy } from "../../../collection/array/array_copy.js";
5
5
  import { array_swap } from "../../../collection/array/array_swap.js";
6
6
  import { SCRATCH_UINT32_TRAVERSAL_STACK } from "../../../collection/SCRATCH_UINT32_TRAVERSAL_STACK.js";
7
7
  import { aabb2_union_array } from "../aabb/aabb2_union_array.js";
8
+ import { msb_32 } from "../../../binary/msb_32.js";
8
9
 
9
10
  const BINARY_NODE_SIZE = 4;
10
11
  const LEAF_NODE_SIZE = 5;
@@ -319,12 +320,17 @@ export class StaticR2Tree {
319
320
 
320
321
  const leaf_node_block_address = binary_node_count * BINARY_NODE_SIZE;
321
322
 
322
- let level = Math.floor(Math.log(binary_node_count) / Math.log(2));
323
+ if (binary_node_count === 0) {
324
+ // no leaves, nothing to build
325
+ return;
326
+ }
327
+
328
+ let level = msb_32(binary_node_count);
323
329
 
324
330
  let i, offset, level_node_count;
325
331
  //NOTE: building first level separately allows to avoid some switching logic needed to determine what is the type of lower level node
326
332
  //build one level above leaf nodes
327
- level_node_count = Math.pow(2, level);
333
+ level_node_count = 1 << level;
328
334
  offset = (level_node_count - 1) * BINARY_NODE_SIZE;
329
335
 
330
336
  let parentIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"mesh_compute_triangle_edge_flags.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js"],"names":[],"mappings":"AAyNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,4DAJW,UAAU,MAAM,CAAC,WACjB,UAAU,MAAM,CAAC,GACf,WAAW,CA2JvB"}
1
+ {"version":3,"file":"mesh_compute_triangle_edge_flags.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js"],"names":[],"mappings":"AAwNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,4DAJW,UAAU,MAAM,CAAC,WACjB,UAAU,MAAM,CAAC,GACf,WAAW,CA2JvB"}
@@ -1,6 +1,7 @@
1
1
  import { lowbias32 } from "../../../../math/hash/lowbias32.js";
2
2
  import { tri3_classify_shared_edge } from "../../triangle/tri3_classify_shared_edge.js";
3
3
  import { TriangleEdgeFlags } from "../../triangle/TriangleEdgeFlags.js";
4
+ import { ceilPowerOfTwo } from "../../../../binary/operations/ceilPowerOfTwo.js";
4
5
 
5
6
  /**
6
7
  * Vertices of a mesh closer than this fraction of its scale — the largest coordinate, in absolute
@@ -85,9 +86,7 @@ function weld_tolerance(positions, indices, tri_count) {
85
86
  * @returns {number} the smallest power of two ≥ 2n (at least 2)
86
87
  */
87
88
  function table_size(n) {
88
- let size = 2;
89
- while (size < 2 * n) size *= 2;
90
- return size;
89
+ return Math.max(2, ceilPowerOfTwo(2 * n));
91
90
  }
92
91
 
93
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TextureAtlas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/TextureAtlas.js"],"names":[],"mappings":"AAkBA;IAcI;;;;;;OAMG;IACH,mBALW,MAAM,cACN,cAAc,kBACd,MAAM,EA6ChB;IA9DD;;;OAGG;IACH,gBAAa;IAEb;;;;OAIG;IACH,sBAAsB;IAgBlB;;;;OAIG;IACH,eAA0B;IAE1B;;;OAGG;IACH,eAFU,OAAO,CAEkB;IAInC;;;;OAIG;IACH,2BAAgH;IAEhH;;;OAGG;IACH,eAAiD;IAEjD;;QAEI;;WAEG;;MAEN;IAGL;;;OAGG;IACH,yBAEC;IAED;;;;OAIG;IACH,kBAHW,SAAS,GACP,UAAU,GAAC,SAAS,CAYhC;IAED;;;OAGG;IACH,eAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,UAAU,GACR,OAAO,CAQnB;IAED;;OAEG;IACH,cAqBC;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,GACJ,OAAO,CA0CnB;IAED;;;;OAIG;IACH,mBAqBC;IAED;;;;OAIG;IACH,mBAaC;IAED;;;;;;OAMG;IACH,kBAIC;IAED;;;;;OAKG;IACH,yCAHW,MAAM,GACL,UAAU,CAIrB;IAED;;;;;OAKG;IACH,aAJW,SAAS,YACT,MAAM,GACL,UAAU,CAgCrB;IAED;;;;;OAKG;IACH,YAJW,MAAM,KACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,cAHW,UAAU,GACT,OAAO,CAiClB;IAED;;;OAGG;IACH,UAFa,OAAO,CAyBnB;IAED;;;;OAIG;IACH,aAqGC;IAED;;OAEG;IACH,cAsCC;IAyED;;OAEG;IACH,cASC;;CACJ;qCAlmBoC,2BAA2B;oBAN5C,kCAAkC;mBAFnC,0CAA0C;0BAMnC,yBAAyB;2BAGxB,iBAAiB;+BAbb,gDAAgD"}
1
+ {"version":3,"file":"TextureAtlas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/TextureAtlas.js"],"names":[],"mappings":"AAiBA;IAcI;;;;;;OAMG;IACH,mBALW,MAAM,cACN,cAAc,kBACd,MAAM,EA6ChB;IA9DD;;;OAGG;IACH,gBAAa;IAEb;;;;OAIG;IACH,sBAAsB;IAgBlB;;;;OAIG;IACH,eAA0B;IAE1B;;;OAGG;IACH,eAFU,OAAO,CAEkB;IAInC;;;;OAIG;IACH,2BAAgH;IAEhH;;;OAGG;IACH,eAAiD;IAEjD;;QAEI;;WAEG;;MAEN;IAGL;;;OAGG;IACH,yBAEC;IAED;;;;OAIG;IACH,kBAHW,SAAS,GACP,UAAU,GAAC,SAAS,CAYhC;IAED;;;OAGG;IACH,eAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,UAAU,GACR,OAAO,CAQnB;IAED;;OAEG;IACH,cAqBC;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,GACJ,OAAO,CA0CnB;IAED;;;;OAIG;IACH,mBAqBC;IAED;;;;OAIG;IACH,mBAaC;IAED;;;;;;OAMG;IACH,kBAIC;IAED;;;;;OAKG;IACH,yCAHW,MAAM,GACL,UAAU,CAIrB;IAED;;;;;OAKG;IACH,aAJW,SAAS,YACT,MAAM,GACL,UAAU,CAgCrB;IAED;;;;;OAKG;IACH,YAJW,MAAM,KACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,cAHW,UAAU,GACT,OAAO,CAiClB;IAED;;;OAGG;IACH,UAFa,OAAO,CAyBnB;IAED;;;;OAIG;IACH,aAqGC;IAED;;OAEG;IACH,cAsCC;IAyED;;OAEG;IACH,cASC;;CACJ;qCAnmBoC,2BAA2B;oBAL5C,kCAAkC;mBAFnC,0CAA0C;0BAKnC,yBAAyB;2BAGxB,iBAAiB;+BAZb,gDAAgD"}
@@ -1,5 +1,4 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { ceilPowerOfTwo } from "../../../../core/binary/operations/ceilPowerOfTwo.js";
3
2
  import { BinaryDataType } from "../../../../core/binary/type/BinaryDataType.js";
4
3
  import {
5
4
  DataType2TypedArrayConstructorMapping
@@ -8,13 +7,13 @@ import Signal from "../../../../core/events/signal/Signal.js";
8
7
  import { MaxRectanglesPacker } from "../../../../core/geom/packing/max-rect/MaxRectanglesPacker.js";
9
8
  import Vector2 from "../../../../core/geom/Vector2.js";
10
9
  import IdPool from "../../../../core/IdPool.js";
11
- import { max2 } from "../../../../core/math/max2.js";
12
10
  import { invokeObjectClone } from "../../../../core/model/object/invokeObjectClone.js";
13
11
  import { Sampler2D } from "../sampler/Sampler2D.js";
14
12
  import { sampler2d_sub_copy_same_item_size } from "../sampler/sampler2d_sub_copy_same_item_size.js";
15
13
  import { AbstractTextureAtlas } from "./AbstractTextureAtlas.js";
16
14
  import { AtlasPatch } from "./AtlasPatch.js";
17
15
  import { AtlasPatchFlag } from "./AtlasPatchFlag.js";
16
+ import { ceil_log2 } from "../../../../core/binary/operations/ceil_log2.js";
18
17
 
19
18
  export class TextureAtlas extends AbstractTextureAtlas {
20
19
  /**
@@ -268,16 +267,16 @@ export class TextureAtlas extends AbstractTextureAtlas {
268
267
  * @param {number} [padding]
269
268
  * @return {AtlasPatch}
270
269
  */
271
- compute_padding(_sampler, padding = 4) {
272
- return padding;
273
- }
274
-
275
- /**
276
- *
277
- * @param {Sampler2D} sampler
278
- * @param {number} [padding]
279
- * @return {AtlasPatch}
280
- */
270
+ compute_padding(_sampler, padding = 4) {
271
+ return padding;
272
+ }
273
+
274
+ /**
275
+ *
276
+ * @param {Sampler2D} sampler
277
+ * @param {number} [padding]
278
+ * @return {AtlasPatch}
279
+ */
281
280
  add(sampler, padding = 4) {
282
281
 
283
282
  assert.notNull(sampler, 'sampler');
@@ -573,8 +572,8 @@ export class TextureAtlas extends AbstractTextureAtlas {
573
572
 
574
573
  const maxPower = 14;
575
574
 
576
- const initial_p_x = max2(0, Math.log2(ceilPowerOfTwo(this.size.x)));
577
- const initial_p_y = max2(0, Math.log2(ceilPowerOfTwo(this.size.y)));
575
+ const initial_p_x = ceil_log2(this.size.x);
576
+ const initial_p_y = ceil_log2(this.size.y);
578
577
 
579
578
  let power_x = initial_p_x;
580
579
  let power_y = initial_p_y;
@@ -1 +1 @@
1
- {"version":3,"file":"sprite_atlas_border.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/sprite_atlas_border.js"],"names":[],"mappings":"AA2BA;;;;;;;;;GASG;AACH,2CAJW,MAAM,UACN,MAAM,GACJ,MAAM,CAUlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6CAHW,MAAM,GACJ,MAAM,CAOlB;AAlED;;;;;;;;;;;GAWG;AACH,wCAFU,MAAM,CAEgC;AAEhD;;;;;;;;GAQG;AACH,0CAFU,MAAM,CAE6B"}
1
+ {"version":3,"file":"sprite_atlas_border.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/sprite_atlas_border.js"],"names":[],"mappings":"AA4BA;;;;;;;;;GASG;AACH,2CAJW,MAAM,UACN,MAAM,GACJ,MAAM,CAUlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6CAHW,MAAM,GACJ,MAAM,CAOlB;AAlED;;;;;;;;;;;GAWG;AACH,wCAFU,MAAM,CAEgC;AAEhD;;;;;;;;GAQG;AACH,0CAFU,MAAM,CAE6B"}
@@ -1,69 +1,70 @@
1
- import { assert } from "../../../../core/assert.js";
2
-
3
- /**
4
- * How much of a patch's own size is spent on its border.
5
- *
6
- * A **proportional** border rather than a fixed one, and that is the point of it: the border is what
7
- * decides how far a patch can be minified before its neighbours bleed into it, so sizing it in
8
- * proportion makes that limit the same for every sprite whatever its resolution. At 1/64 every patch
9
- * stops minifying at roughly the same ~64 px screen footprint, for a flat ~6.3% of atlas area.
10
- *
11
- * A fixed border does the opposite: generous for small patches and useless for large ones.
12
- *
13
- * @type {number}
14
- */
15
- export const SPRITE_ATLAS_BORDER_RATIO = 1 / 64;
16
-
17
- /**
18
- * The smallest border a patch may have, in texels.
19
- *
20
- * One, not more. A 64x64 sprite is common and needs four texels at the very most; eight would spend a
21
- * tenth of the texture on gutter to protect mip levels at which the sprite is a handful of pixels on
22
- * screen. One texel is also not really one — see {@link sprite_atlas_max_lod}.
23
- *
24
- * @type {number}
25
- */
26
- export const SPRITE_ATLAS_BORDER_MINIMUM = 1;
27
-
28
- /**
29
- * Border, in texels, for a patch of this size.
30
- *
31
- * Driven by the longer side, because one border value protects both axes and the atlas halves both
32
- * together when it builds its mip chain.
33
- *
34
- * @param {number} width
35
- * @param {number} height
36
- * @returns {number}
37
- */
38
- export function sprite_atlas_border(width, height) {
39
- assert.isNonNegativeInteger(width, 'width');
40
- assert.isNonNegativeInteger(height, 'height');
41
-
42
- return Math.max(
43
- SPRITE_ATLAS_BORDER_MINIMUM,
44
- Math.ceil(Math.max(width, height) * SPRITE_ATLAS_BORDER_RATIO)
45
- );
46
- }
47
-
48
- /**
49
- * The deepest mip level a patch with this border can be sampled at without reading a neighbour.
50
- *
51
- * **A patch's own border is not the whole guard.** Every patch in the atlas has a border of at least
52
- * {@link SPRITE_ATLAS_BORDER_MINIMUM}, so whatever sits next to this one contributes at least one
53
- * more texel of separation: content is `border + 1` texels apart at worst. At mip level `L` that
54
- * separation is `(border + 1) / 2^L` texels, and it has to survive down to one — which is also what
55
- * pays for patches not landing on power-of-two boundaries, so alignment is not claimed on top of it.
56
- *
57
- * Past this level the sampler is clamped rather than allowed to keep minifying, so a sprite seen from
58
- * very far away aliases instead of bleeding. That is the trade, and it is the right way round: a
59
- * shimmering sprite is still that sprite, a bleeding one is somebody else's texture.
60
- *
61
- * @param {number} border
62
- * @returns {number}
63
- */
64
- export function sprite_atlas_max_lod(border) {
65
- assert.isNonNegativeInteger(border, 'border');
66
- assert.greaterThanOrEqual(border, SPRITE_ATLAS_BORDER_MINIMUM, 'border');
67
-
68
- return Math.floor(Math.log2(border + 1));
69
- }
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { msb_32 } from "../../../../core/binary/msb_32.js";
3
+
4
+ /**
5
+ * How much of a patch's own size is spent on its border.
6
+ *
7
+ * A **proportional** border rather than a fixed one, and that is the point of it: the border is what
8
+ * decides how far a patch can be minified before its neighbours bleed into it, so sizing it in
9
+ * proportion makes that limit the same for every sprite whatever its resolution. At 1/64 every patch
10
+ * stops minifying at roughly the same ~64 px screen footprint, for a flat ~6.3% of atlas area.
11
+ *
12
+ * A fixed border does the opposite: generous for small patches and useless for large ones.
13
+ *
14
+ * @type {number}
15
+ */
16
+ export const SPRITE_ATLAS_BORDER_RATIO = 1 / 64;
17
+
18
+ /**
19
+ * The smallest border a patch may have, in texels.
20
+ *
21
+ * One, not more. A 64x64 sprite is common and needs four texels at the very most; eight would spend a
22
+ * tenth of the texture on gutter to protect mip levels at which the sprite is a handful of pixels on
23
+ * screen. One texel is also not really one — see {@link sprite_atlas_max_lod}.
24
+ *
25
+ * @type {number}
26
+ */
27
+ export const SPRITE_ATLAS_BORDER_MINIMUM = 1;
28
+
29
+ /**
30
+ * Border, in texels, for a patch of this size.
31
+ *
32
+ * Driven by the longer side, because one border value protects both axes and the atlas halves both
33
+ * together when it builds its mip chain.
34
+ *
35
+ * @param {number} width
36
+ * @param {number} height
37
+ * @returns {number}
38
+ */
39
+ export function sprite_atlas_border(width, height) {
40
+ assert.isNonNegativeInteger(width, 'width');
41
+ assert.isNonNegativeInteger(height, 'height');
42
+
43
+ return Math.max(
44
+ SPRITE_ATLAS_BORDER_MINIMUM,
45
+ Math.ceil(Math.max(width, height) * SPRITE_ATLAS_BORDER_RATIO)
46
+ );
47
+ }
48
+
49
+ /**
50
+ * The deepest mip level a patch with this border can be sampled at without reading a neighbour.
51
+ *
52
+ * **A patch's own border is not the whole guard.** Every patch in the atlas has a border of at least
53
+ * {@link SPRITE_ATLAS_BORDER_MINIMUM}, so whatever sits next to this one contributes at least one
54
+ * more texel of separation: content is `border + 1` texels apart at worst. At mip level `L` that
55
+ * separation is `(border + 1) / 2^L` texels, and it has to survive down to one — which is also what
56
+ * pays for patches not landing on power-of-two boundaries, so alignment is not claimed on top of it.
57
+ *
58
+ * Past this level the sampler is clamped rather than allowed to keep minifying, so a sprite seen from
59
+ * very far away aliases instead of bleeding. That is the trade, and it is the right way round: a
60
+ * shimmering sprite is still that sprite, a bleeding one is somebody else's texture.
61
+ *
62
+ * @param {number} border
63
+ * @returns {number}
64
+ */
65
+ export function sprite_atlas_max_lod(border) {
66
+ assert.isNonNegativeInteger(border, 'border');
67
+ assert.greaterThanOrEqual(border, SPRITE_ATLAS_BORDER_MINIMUM, 'border');
68
+
69
+ return msb_32(border + 1);
70
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"convolve_equirectangular_reflection.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.js"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;GAaG;AACH,qEATW,SAAS,SACT,MAAM,SACN,MAAM,SACN,MAAM,aACN,MAAM,gBACN,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,QAiEhB;AAED;;;;;;;GAOG;AACH,iEALW,SAAS,UACT,SAAS,aACT,MAAM,gBACN,MAAM,QA6BhB;AAED;;;;;;;;;;;;GAYG;AACH,iEAPW,SAAS;IAEQ,YAAY,GAA7B,MAAM;IACW,UAAU,GAA3B,MAAM;IACW,aAAa,GAA9B,MAAM;IACJ,SAAS,EAAE,CAoCvB;0BArLyB,yBAAyB"}
1
+ {"version":3,"file":"convolve_equirectangular_reflection.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;GAaG;AACH,qEATW,SAAS,SACT,MAAM,SACN,MAAM,SACN,MAAM,aACN,MAAM,gBACN,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,QAiEhB;AAED;;;;;;;GAOG;AACH,iEALW,SAAS,UACT,SAAS,aACT,MAAM,gBACN,MAAM,QA6BhB;AAED;;;;;;;;;;;;GAYG;AACH,iEAPW,SAAS;IAEQ,YAAY,GAA7B,MAAM;IACW,UAAU,GAA3B,MAAM;IACW,aAAa,GAA9B,MAAM;IACJ,SAAS,EAAE,CAoCvB;0BAtLyB,yBAAyB"}
@@ -10,6 +10,7 @@ import {
10
10
  equirectangular_reflection_lod_to_roughness,
11
11
  roughness_from_relative_mip
12
12
  } from "./equirectangular_reflection_roughness.js";
13
+ import { msb_32 } from "../../../../core/binary/msb_32.js";
13
14
 
14
15
  /**
15
16
  * Below this we treat the surface as a perfect mirror.
@@ -159,7 +160,7 @@ export function build_equirectangular_reflection_mip_chain(base, options = {}) {
159
160
  max_roughness = 0.7
160
161
  } = options;
161
162
 
162
- const full_levels = Math.floor(Math.log2(Math.max(1, Math.min(base.width, base.height)))) + 1;
163
+ const full_levels = msb_32(Math.max(1, Math.min(base.width, base.height))) + 1;
163
164
  const levels = mip_levels !== undefined ? Math.min(mip_levels, full_levels) : full_levels;
164
165
 
165
166
  const mips = [base];
@@ -1 +1 @@
1
- {"version":3,"file":"GPUParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GPUParticleEmitterSystem.js"],"names":[],"mappings":"AAopCA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+CAJW,eAAe,UACf,cAAc,GACZ,OAAO,CAyGnB;AAtvCD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH;IAgFI;;;;;OAKG;IACH,sBALW,OAAO,qBAAqB,EAAE,cAAc,SAC5C,OAAO,qCAAqC,EAAE,KAAK,gEAoB7D;IArGD,6DAA6C;IAE7C;;;OAGG;IACH,OAFU,WAAW,CAEmC;IAiGxD;;;;;;OAMG;IACH,iEAEC;IAED;;;;;OAKG;IACH,kCAEC;IAED;;;;;;;;;;OAUG;IACH,mBAJW,MAAM,GACJ,eAAe,GAAC,IAAI,CAWhC;IAED;;;;;;;;;;;OAWG;IACH,cAHW,MAAM,SACN,MAAM,QA4BhB;IAED;;;;;;;;;;;;OAYG;IACH,uBAHW,MAAM,UACN,UAAU,MAAM,CAAC,QA8B3B;IAED;;;;;;;;;;;;;OAaG;IACH,wBAJW,MAAM,UACN,MAAM,WACN,MAAM,QAOhB;IAED;;;;;OAKG;IACH,0BAFW,MAAM,QAIhB;IAyQD,+BAA+B;IAC/B,YADc,QAAQ,IAAI,CAAC,CA0C1B;IAED;;;;OAIG;IACH,aAJW,cAAc,aACd,WAAW,UACX,MAAM,QAuChB;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,WAAW,UACX,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,4BAHW,MAAM,GACJ,IAAI,CAgBhB;IAoCD;;;;;;;;;;;;OAYG;IACH,eAHW,OAAO,gDAAgD,EAAE,YAAY,GACnE,IAAI,CA4ChB;;CA0UJ;;YAnnCa,MAAM;;;;YACN,cAAc;;;;eACd,WAAW;;;;aACX,eAAe,GAAC,IAAI;;;;;aACpB,OAAO,+CAA+C,EAAE,eAAe,GAAC,IAAI;gCAGjE,IAAI;;;;SACf,MAAM,GAAC,IAAI;;;;aACX,OAAO,kDAAkD,EAAE,qBAAqB,GAAC,IAAI;;;;;;;WACrF,IAAI,MAAM,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,WAAS,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,yDAAyD,EAAE,cAAc,GAAC,IAAI,CAAA;KAAC,CAAC;;;;qBAKvL,OAAO,uDAAuD,EAAE,eAAe,GAAC,IAAI;;gCA1ClE,2DAA2D;+BAU5D,6CAA6C;uBARrD,kBAAkB;4BAEb,iCAAiC;4BAQjC,0CAA0C"}
1
+ {"version":3,"file":"GPUParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GPUParticleEmitterSystem.js"],"names":[],"mappings":"AAqpCA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+CAJW,eAAe,UACf,cAAc,GACZ,OAAO,CAyGnB;AAtvCD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH;IAgFI;;;;;OAKG;IACH,sBALW,OAAO,qBAAqB,EAAE,cAAc,SAC5C,OAAO,qCAAqC,EAAE,KAAK,gEAoB7D;IArGD,6DAA6C;IAE7C;;;OAGG;IACH,OAFU,WAAW,CAEmC;IAiGxD;;;;;;OAMG;IACH,iEAEC;IAED;;;;;OAKG;IACH,kCAEC;IAED;;;;;;;;;;OAUG;IACH,mBAJW,MAAM,GACJ,eAAe,GAAC,IAAI,CAWhC;IAED;;;;;;;;;;;OAWG;IACH,cAHW,MAAM,SACN,MAAM,QA4BhB;IAED;;;;;;;;;;;;OAYG;IACH,uBAHW,MAAM,UACN,UAAU,MAAM,CAAC,QA8B3B;IAED;;;;;;;;;;;;;OAaG;IACH,wBAJW,MAAM,UACN,MAAM,WACN,MAAM,QAOhB;IAED;;;;;OAKG;IACH,0BAFW,MAAM,QAIhB;IAyQD,+BAA+B;IAC/B,YADc,QAAQ,IAAI,CAAC,CA0C1B;IAED;;;;OAIG;IACH,aAJW,cAAc,aACd,WAAW,UACX,MAAM,QAuChB;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,WAAW,UACX,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,4BAHW,MAAM,GACJ,IAAI,CAgBhB;IAoCD;;;;;;;;;;;;OAYG;IACH,eAHW,OAAO,gDAAgD,EAAE,YAAY,GACnE,IAAI,CA4ChB;;CA0UJ;;YAnnCa,MAAM;;;;YACN,cAAc;;;;eACd,WAAW;;;;aACX,eAAe,GAAC,IAAI;;;;;aACpB,OAAO,+CAA+C,EAAE,eAAe,GAAC,IAAI;gCAGjE,IAAI;;;;SACf,MAAM,GAAC,IAAI;;;;aACX,OAAO,kDAAkD,EAAE,qBAAqB,GAAC,IAAI;;;;;;;WACrF,IAAI,MAAM,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,WAAS,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,yDAAyD,EAAE,cAAc,GAAC,IAAI,CAAA;KAAC,CAAC;;;;qBAKvL,OAAO,uDAAuD,EAAE,eAAe,GAAC,IAAI;;gCA3ClE,2DAA2D;+BAU5D,6CAA6C;uBARrD,kBAAkB;4BAEb,iCAAiC;4BAQjC,0CAA0C"}
@@ -18,6 +18,7 @@ import { SpriteAtlas } from "../graphics/texture/atlas/SpriteAtlas.js";
18
18
  import { SpriteAtlasFill } from "../graphics/texture/atlas/SpriteAtlasFill.js";
19
19
  import { TextureFilterType } from "../../shade/renderer/texture/TextureFilterType.js";
20
20
  import { Sampler2D } from "../graphics/texture/sampler/Sampler2D.js";
21
+ import { texture_mip_level_count } from "../../shade/util/texture_mip_extent.js";
21
22
 
22
23
  /**
23
24
  * Bursts {@link GPUParticleEmitterSystem#burst} will hold before it starts dropping them. Reached
@@ -1129,7 +1130,7 @@ export class GPUParticleEmitterSystem extends System {
1129
1130
  const texture = this.#texture;
1130
1131
 
1131
1132
  if (texture.width !== source.width || texture.height !== source.height) {
1132
- texture.descriptor.mipLevelCount = 1 + Math.floor(Math.log2(Math.max(source.width, source.height)));
1133
+ texture.descriptor.mipLevelCount = texture_mip_level_count(source.width, source.height, 1, "2d");
1133
1134
  texture.resize(source.width, source.height);
1134
1135
 
1135
1136
  this.#uploaded_version = -1;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUDecalRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/GPUDecalRenderer.js"],"names":[],"mappings":"AA6EA;;;;;;;;;;;;;GAaG;AACH;IA6BI;;;;;;;;;;;OAWG;IACH;QAP8B,KAAK;QACL,OAAO,EAA1B,YAAY;QACC,YAAY,EAAzB,MAAM;QACU,YAAY;QACZ,YAAY;QACZ,SAAS;aA+BnC;IA4SD,gBAoBC;;CACJ"}
1
+ {"version":3,"file":"GPUDecalRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/GPUDecalRenderer.js"],"names":[],"mappings":"AA8EA;;;;;;;;;;;;;GAaG;AACH;IA6BI;;;;;;;;;;;OAWG;IACH;QAP8B,KAAK;QACL,OAAO,EAA1B,YAAY;QACC,YAAY,EAAzB,MAAM;QACU,YAAY;QACZ,YAAY;QACZ,SAAS;aA+BnC;IA4SD,gBAoBC;;CACJ"}
@@ -15,6 +15,7 @@ import { shader_decal_tile_copy } from "./shader_decal_tile_copy.js";
15
15
  import { graph_gather_decal_tiles } from "./graph_gather_decal_tiles.js";
16
16
  import { build_light_cluster_parameters } from "../../../shade/renderer/light/cluster/build_light_cluster_parameters.js";
17
17
  import { DECAL_CLUSTER_RESOLUTION_Z } from "./DECAL_CLUSTER.js";
18
+ import { texture_mip_level_count } from "../../../shade/util/texture_mip_extent.js";
18
19
 
19
20
  /**
20
21
  * Buffers grow with headroom and never shrink — decal counts move every frame as combat spawns and
@@ -416,7 +417,7 @@ export class GPUDecalRenderer {
416
417
  existing.destroy();
417
418
  }
418
419
 
419
- const mip_levels = 1 + Math.floor(Math.log2(Math.max(width, height)));
420
+ const mip_levels = texture_mip_level_count(width, height, 1, "2d");
420
421
 
421
422
  residency.texture = graphics.textures.contextFromDescriptor(TextureDescriptor.from({
422
423
  size: [width, height],
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared WGSL accessors for reading packed decal records (`array<f32>`) from a `decal_data` storage buffer.
3
+ *
4
+ * ```wgsl
5
+ * fn decal_vec4(index: u32, field: u32) -> vec4<f32>
6
+ * fn decal_matrix(index: u32, field: u32) -> mat4x4<f32>
7
+ * fn decal_transform(index: u32) -> mat4x4<f32>
8
+ * ```
9
+ *
10
+ * @type {CodeChunk}
11
+ */
12
+ export const chunk_decal_record: CodeChunk;
13
+ import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
14
+ //# sourceMappingURL=chunk_decal_record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_decal_record.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/chunk_decal_record.js"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,iCAFU,SAAS,CA+BjB;0BA3CwB,sDAAsD"}
@@ -0,0 +1,44 @@
1
+ import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
2
+ import { DECAL_RECORD_OFFSET_TRANSFORM, DECAL_RECORD_WORD_COUNT } from "./DECAL_GPU_RECORD.js";
3
+
4
+ /**
5
+ * Shared WGSL accessors for reading packed decal records (`array<f32>`) from a `decal_data` storage buffer.
6
+ *
7
+ * ```wgsl
8
+ * fn decal_vec4(index: u32, field: u32) -> vec4<f32>
9
+ * fn decal_matrix(index: u32, field: u32) -> mat4x4<f32>
10
+ * fn decal_transform(index: u32) -> mat4x4<f32>
11
+ * ```
12
+ *
13
+ * @type {CodeChunk}
14
+ */
15
+ export const chunk_decal_record = CodeChunk.from(
16
+ //language=WGSL
17
+ `
18
+ const DECAL_RECORD_WORD_COUNT : u32 = ${DECAL_RECORD_WORD_COUNT}u;
19
+ const DECAL_RECORD_OFFSET_TRANSFORM : u32 = ${DECAL_RECORD_OFFSET_TRANSFORM}u;
20
+
21
+ fn decal_vec4(index: u32, field: u32) -> vec4<f32> {
22
+ let base = index * DECAL_RECORD_WORD_COUNT + field;
23
+
24
+ return vec4<f32>(
25
+ decal_data[base], decal_data[base + 1u], decal_data[base + 2u], decal_data[base + 3u]
26
+ );
27
+ }
28
+
29
+ fn decal_matrix(index: u32, field: u32) -> mat4x4<f32> {
30
+ let base = index * DECAL_RECORD_WORD_COUNT + field;
31
+
32
+ return mat4x4<f32>(
33
+ vec4<f32>(decal_data[base + 0u], decal_data[base + 1u], decal_data[base + 2u], decal_data[base + 3u]),
34
+ vec4<f32>(decal_data[base + 4u], decal_data[base + 5u], decal_data[base + 6u], decal_data[base + 7u]),
35
+ vec4<f32>(decal_data[base + 8u], decal_data[base + 9u], decal_data[base + 10u], decal_data[base + 11u]),
36
+ vec4<f32>(decal_data[base + 12u], decal_data[base + 13u], decal_data[base + 14u], decal_data[base + 15u])
37
+ );
38
+ }
39
+
40
+ fn decal_transform(index: u32) -> mat4x4<f32> {
41
+ return decal_matrix(index, DECAL_RECORD_OFFSET_TRANSFORM);
42
+ }
43
+ `
44
+ );
@@ -1 +1 @@
1
- {"version":3,"file":"shader_cluster_assign_decals.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_cluster_assign_decals.js"],"names":[],"mappings":"AAuCA,6DAMG;AAiBH,sDAAoF;AA0JpF;;;;;;;;GAQG;AACH,2CAFU,aAAa,CAMpB;6BAxM0B,qDAAqD;4BADtD,oDAAoD;8BALlD,iDAAiD"}
1
+ {"version":3,"file":"shader_cluster_assign_decals.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_cluster_assign_decals.js"],"names":[],"mappings":"AAuCA,6DAMG;AAiBH,sDAAoF;AA6IpF;;;;;;;;GAQG;AACH,2CAFU,aAAa,CAMpB;6BA3L0B,qDAAqD;4BADtD,oDAAoD;8BALlD,iDAAiD"}
@@ -29,13 +29,13 @@ import { atomic_u32, f32, vec2u, vec3f, vec4f } from "../../../shade/renderer/sh
29
29
  import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
30
30
  import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
31
31
  import { chunk_decal_intersects_frustum } from "./chunk_decal_intersects_frustum.js";
32
+ import { chunk_decal_record } from "./chunk_decal_record.js";
32
33
  import {
33
34
  DECAL_CLUSTER_LOCAL_LIMIT,
34
35
  DECAL_CLUSTER_METADATA,
35
36
  DECAL_CLUSTER_RESOLUTION_Z,
36
37
  DECAL_CLUSTER_TILE_RESOLUTION
37
38
  } from "./DECAL_CLUSTER.js";
38
- import { DECAL_RECORD_OFFSET_TRANSFORM, DECAL_RECORD_WORD_COUNT } from "./DECAL_GPU_RECORD.js";
39
39
 
40
40
  export const DECAL_CLUSTER_ASSIGNMENT_SETTINGS = WebGPUStruct.from({
41
41
  cluster_params: vec3f,
@@ -77,20 +77,6 @@ const DECAL_CLUSTER_WORKGROUP_SIZE = [4, 4, 4];
77
77
  const body = CodeChunk.from(
78
78
  //language=WGSL
79
79
  `
80
- const DECAL_RECORD_WORD_COUNT : u32 = ${DECAL_RECORD_WORD_COUNT}u;
81
- const DECAL_RECORD_OFFSET_TRANSFORM : u32 = ${DECAL_RECORD_OFFSET_TRANSFORM}u;
82
-
83
- fn decal_transform(index: u32) -> mat4x4<f32> {
84
- let base = index * DECAL_RECORD_WORD_COUNT + DECAL_RECORD_OFFSET_TRANSFORM;
85
-
86
- return mat4x4<f32>(
87
- vec4<f32>(decal_data[base + 0u], decal_data[base + 1u], decal_data[base + 2u], decal_data[base + 3u]),
88
- vec4<f32>(decal_data[base + 4u], decal_data[base + 5u], decal_data[base + 6u], decal_data[base + 7u]),
89
- vec4<f32>(decal_data[base + 8u], decal_data[base + 9u], decal_data[base + 10u], decal_data[base + 11u]),
90
- vec4<f32>(decal_data[base + 12u], decal_data[base + 13u], decal_data[base + 14u], decal_data[base + 15u])
91
- );
92
- }
93
-
94
80
  @compute @workgroup_size(${DECAL_CLUSTER_WORKGROUP_SIZE.join(', ')})
95
81
  fn main(
96
82
  @builtin(global_invocation_id) voxel_position : vec3<u32>
@@ -208,6 +194,7 @@ fn main(
208
194
  chunk_frustum_from_corners,
209
195
  chunk_frustum_slice,
210
196
  chunk_decal_intersects_frustum,
197
+ chunk_decal_record,
211
198
  chunk_cluster_depth_from_z_slice,
212
199
  chunk_light_cluster_resolution_xy_from_screen,
213
200
  chunk_inverse_lerp
@@ -1 +1 @@
1
- {"version":3,"file":"shader_cull_decals_frustum.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_cull_decals_frustum.js"],"names":[],"mappings":"AAyFA;;;;;;;;GAQG;AACH,yCAFU,aAAa,CAMpB;AAEH;;GAEG;AACH,kCAFU,YAAY,CAE6B;8BAtGrB,iDAAiD;6BAMlD,qDAAqD"}
1
+ {"version":3,"file":"shader_cull_decals_frustum.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_cull_decals_frustum.js"],"names":[],"mappings":"AA4EA;;;;;;;;GAQG;AACH,yCAFU,aAAa,CAMpB;AAEH;;GAEG;AACH,kCAFU,YAAY,CAE6B;8BAzFrB,iDAAiD;6BAMlD,qDAAqD"}
@@ -11,7 +11,7 @@ import { atomic_u32, u32, vec4f } from "../../../shade/renderer/shader/type/WEBG
11
11
  import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
12
12
  import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
13
13
  import { chunk_decal_intersects_frustum } from "./chunk_decal_intersects_frustum.js";
14
- import { DECAL_RECORD_OFFSET_TRANSFORM, DECAL_RECORD_WORD_COUNT } from "./DECAL_GPU_RECORD.js";
14
+ import { chunk_decal_record } from "./chunk_decal_record.js";
15
15
 
16
16
  /**
17
17
  * @type {number}
@@ -42,20 +42,6 @@ resources.createGroup()
42
42
  const body = CodeChunk.from(
43
43
  //language=WGSL
44
44
  `
45
- const DECAL_RECORD_WORD_COUNT : u32 = ${DECAL_RECORD_WORD_COUNT}u;
46
- const DECAL_RECORD_OFFSET_TRANSFORM : u32 = ${DECAL_RECORD_OFFSET_TRANSFORM}u;
47
-
48
- fn decal_transform(index: u32) -> mat4x4<f32> {
49
- let base = index * DECAL_RECORD_WORD_COUNT + DECAL_RECORD_OFFSET_TRANSFORM;
50
-
51
- return mat4x4<f32>(
52
- vec4<f32>(decal_data[base + 0u], decal_data[base + 1u], decal_data[base + 2u], decal_data[base + 3u]),
53
- vec4<f32>(decal_data[base + 4u], decal_data[base + 5u], decal_data[base + 6u], decal_data[base + 7u]),
54
- vec4<f32>(decal_data[base + 8u], decal_data[base + 9u], decal_data[base + 10u], decal_data[base + 11u]),
55
- vec4<f32>(decal_data[base + 12u], decal_data[base + 13u], decal_data[base + 14u], decal_data[base + 15u])
56
- );
57
- }
58
-
59
45
  @compute @workgroup_size(${SHADER_CULL_DECALS_WORKGROUP_SIZE}, 1, 1)
60
46
  fn main(
61
47
  @builtin(global_invocation_id) global_id : vec3<u32>
@@ -83,7 +69,8 @@ fn main(
83
69
  }
84
70
  }
85
71
  `, [
86
- chunk_decal_intersects_frustum
72
+ chunk_decal_intersects_frustum,
73
+ chunk_decal_record,
87
74
  ]
88
75
  );
89
76
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AAgEA,oDAKG;AA2SH;;;;;;;;;;;;;;GAcG;AACH,qCAFU,eAAe,CActB;6BA9V0B,qDAAqD;gCARlD,sBAAsB"}
1
+ {"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AAgEA,oDAKG;AAuRH;;;;;;;;;;;;;;GAcG;AACH,qCAFU,eAAe,CActB;6BAzU0B,qDAAqD;gCARlD,sBAAsB"}
@@ -33,6 +33,7 @@ import {
33
33
  import {
34
34
  GRADIENT_SAMPLING_INFO_STRUCT
35
35
  } from "../../../shade/renderer/shader/chunk/texture/GRADIENT_SAMPLING_INFO_STRUCT.js";
36
+ import { chunk_decal_record } from "./chunk_decal_record.js";
36
37
  import { chunk_decal_sampling_info } from "./chunk_decal_sampling_info.js";
37
38
  import { chunk_decal_surface_frame } from "./chunk_decal_surface_frame.js";
38
39
  import { DecalTileShader } from "./DecalTileShader.js";
@@ -58,8 +59,7 @@ import {
58
59
  DECAL_RECORD_OFFSET_TRANSFORM_INVERSE,
59
60
  DECAL_RECORD_OFFSET_UV_ALBEDO,
60
61
  DECAL_RECORD_OFFSET_UV_NORMAL,
61
- DECAL_RECORD_OFFSET_UV_ORM,
62
- DECAL_RECORD_WORD_COUNT
62
+ DECAL_RECORD_OFFSET_UV_ORM
63
63
  } from "./DECAL_GPU_RECORD.js";
64
64
 
65
65
  export const DECAL_COMPOSITE_SETTINGS = WebGPUStruct.from({
@@ -113,27 +113,6 @@ resources.createGroup()
113
113
  const body = CodeChunk.from(
114
114
  //language=WGSL
115
115
  `
116
- const DECAL_RECORD_WORD_COUNT : u32 = ${DECAL_RECORD_WORD_COUNT}u;
117
-
118
- fn decal_vec4(index: u32, field: u32) -> vec4<f32> {
119
- let base = index * DECAL_RECORD_WORD_COUNT + field;
120
-
121
- return vec4<f32>(
122
- decal_data[base], decal_data[base + 1u], decal_data[base + 2u], decal_data[base + 3u]
123
- );
124
- }
125
-
126
- fn decal_matrix(index: u32, field: u32) -> mat4x4<f32> {
127
- let base = index * DECAL_RECORD_WORD_COUNT + field;
128
-
129
- return mat4x4<f32>(
130
- vec4<f32>(decal_data[base + 0u], decal_data[base + 1u], decal_data[base + 2u], decal_data[base + 3u]),
131
- vec4<f32>(decal_data[base + 4u], decal_data[base + 5u], decal_data[base + 6u], decal_data[base + 7u]),
132
- vec4<f32>(decal_data[base + 8u], decal_data[base + 9u], decal_data[base + 10u], decal_data[base + 11u]),
133
- vec4<f32>(decal_data[base + 12u], decal_data[base + 13u], decal_data[base + 14u], decal_data[base + 15u])
134
- );
135
- }
136
-
137
116
  struct DecalCompositeOut {
138
117
  @location(0) pbr : vec2<f32>,
139
118
  @location(1) normal : vec4<u32>,
@@ -349,6 +328,7 @@ fn main(
349
328
  GRADIENT_SAMPLING_INFO_STRUCT.declaration_chunk,
350
329
  DECAL_CLUSTER_METADATA.declaration_chunk,
351
330
  chunk_textureSampleBarycentric,
331
+ chunk_decal_record,
352
332
  chunk_decal_sampling_info,
353
333
  chunk_decal_surface_frame,
354
334
  chunk_project_position_from_depth,
@@ -1 +1 @@
1
- {"version":3,"file":"TERRAIN_MATERIAL_TEMPLATE.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js"],"names":[],"mappings":"AAiBA;;;;;GAKG;AAEH;;;GAGG;AACH,kDAkBqB;AAErB;;;;;;;;;GASG;AACH,8CAFU,6BAA6B,CAE4C;AA2FnF;;GAEG;AACH;IACI,0BAAiC;IACjC,yBAAgC;IAChC,0BAAiC;IACjC,yBAAgC;IAEhC;;;;OAIG;IACH,QAFU,YAAU,IAAI,CAEV;IAEd;;OAEG;IACH,iBAFU,MAAM,CAEI;IAEpB;;OAEG;IACH,gBAFU,MAAM,CAEI;CACvB;AA6SD;;GAEG;AACH,wCAFU,qBAAqB,CAQ5B;iCAldU,OAAO,wDAAwD,EAAE,kBAAkB;kCACnF,OAAO,kEAAkE,EAAE,mBAAmB;gCAC9F,OAAO,sDAAsD,EAAE,iBAAiB;mCAChF,OAAO,2BAA2B,EAAE,oBAAoB;6BARxC,qDAAqD;8CAH3E,0EAA0E;AA4GjF;;;GAGG;AACH;IACI;;OAEG;IACH,SAFU,iBAAiB,GAAC,IAAI,CAEjB;IAEf;;OAEG;IACH,SAFU,MAAM,CAEH;IAEb;;OAEG;IACH,YAAc;IAEd,gBAQC;CACJ;sCA5IqC,oEAAoE"}
1
+ {"version":3,"file":"TERRAIN_MATERIAL_TEMPLATE.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js"],"names":[],"mappings":"AAkBA;;;;;GAKG;AAEH;;;GAGG;AACH,kDAkBqB;AAErB;;;;;;;;;GASG;AACH,8CAFU,6BAA6B,CAE4C;AA2FnF;;GAEG;AACH;IACI,0BAAiC;IACjC,yBAAgC;IAChC,0BAAiC;IACjC,yBAAgC;IAEhC;;;;OAIG;IACH,QAFU,YAAU,IAAI,CAEV;IAEd;;OAEG;IACH,iBAFU,MAAM,CAEI;IAEpB;;OAEG;IACH,gBAFU,MAAM,CAEI;CACvB;AA6SD;;GAEG;AACH,wCAFU,qBAAqB,CAQ5B;iCAldU,OAAO,wDAAwD,EAAE,kBAAkB;kCACnF,OAAO,kEAAkE,EAAE,mBAAmB;gCAC9F,OAAO,sDAAsD,EAAE,iBAAiB;mCAChF,OAAO,2BAA2B,EAAE,oBAAoB;6BATxC,qDAAqD;8CAH3E,0EAA0E;AA6GjF;;;GAGG;AACH;IACI;;OAEG;IACH,SAFU,iBAAiB,GAAC,IAAI,CAEjB;IAEf;;OAEG;IACH,SAFU,MAAM,CAEH;IAEb;;OAEG;IACH,YAAc;IAEd,gBAQC;CACJ;sCA7IqC,oEAAoE"}
@@ -14,6 +14,7 @@ import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js"
14
14
  import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
15
15
  import { TextureFilterType } from "../../../shade/renderer/texture/TextureFilterType.js";
16
16
  import { chunk_terrain_material_surface } from "./chunk_terrain_material_surface.js";
17
+ import { texture_mip_level_count } from "../../../shade/util/texture_mip_extent.js";
17
18
 
18
19
  /**
19
20
  * @typedef {import("../../../shade/renderer/material/GPUMaterialContext.js").GPUMaterialContext} GPUMaterialContext
@@ -208,7 +209,7 @@ function upload_texture(services, residency, image, depth, format, bytes_per_pix
208
209
  existing.destroy();
209
210
  }
210
211
 
211
- const mip_levels = mips ? 1 + Math.floor(Math.log2(Math.max(image.width, image.height))) : 1;
212
+ const mip_levels = mips ? texture_mip_level_count(image.width, image.height, 1, "2d") : 1;
212
213
 
213
214
  residency.texture = services.textures.contextFromDescriptor(TextureDescriptor.from({
214
215
  label,