@woosh/meep-engine 3.53.0 → 3.55.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 (249) hide show
  1. package/package.json +1 -1
  2. package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
  3. package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
  4. package/src/core/math/noise/worley_noise_2d.js +74 -0
  5. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
  6. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
  7. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
  8. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
  9. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
  10. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
  11. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
  12. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
  13. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
  14. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
  15. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
  16. package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
  17. package/src/engine/{graphics3/decal/DecalAtlasFill.d.ts → graphics/texture/atlas/SpriteAtlasFill.d.ts} +4 -4
  18. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
  19. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
  20. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
  21. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  22. package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
  23. package/src/engine/{graphics3/decal/decal_atlas_border.d.ts → graphics/texture/atlas/sprite_atlas_border.d.ts} +12 -12
  24. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
  25. package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
  26. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  27. package/src/engine/graphics3/DecalSystem.js +447 -450
  28. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -22
  29. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  30. package/src/engine/graphics3/GPUParticleEmitterSystem.js +892 -951
  31. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  32. package/src/generation/foliage/FOLIAGE_DESIGN.md +2 -1
  33. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +4 -3
  34. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -1
  35. package/src/generation/foliage/config/BarkMaterialConfig.js +6 -6
  36. package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
  37. package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
  38. package/src/generation/foliage/config/FoliageBarkType.js +16 -0
  39. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +58 -5
  40. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
  41. package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -181
  42. package/src/generation/foliage/index.d.ts +2 -1
  43. package/src/generation/foliage/index.js +44 -43
  44. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -1
  45. package/src/generation/foliage/material/make_bark_material.js +23 -95
  46. package/src/generation/foliage/material/make_foliage_material.d.ts +29 -3
  47. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
  48. package/src/generation/foliage/material/make_foliage_material.js +605 -359
  49. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -1
  50. package/src/generation/foliage/mesh/branch_collar_project.js +205 -203
  51. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +15 -0
  52. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
  53. package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -502
  54. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  55. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -1047
  56. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +2 -1
  57. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
  58. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -415
  59. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
  60. package/src/generation/foliage/presets/make_tree_species_preset.js +870 -837
  61. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -121
  62. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +10 -7
  63. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
  64. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -179
  65. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
  66. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -1104
  67. package/src/shade/RENDERER_CONTRACT.md +5 -2
  68. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -1
  69. package/src/shade/device/SHADE_DEVICE_FLOOR.js +2 -0
  70. package/src/shade/playground/foliage_wind/foliage_world.d.ts +6 -0
  71. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  72. package/src/shade/playground/foliage_wind/foliage_world.js +602 -593
  73. package/src/shade/playground/foliage_wind/index.html +260 -254
  74. package/src/shade/playground/foliage_wind/main.js +275 -263
  75. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  76. package/src/shade/renderer/Renderer.js +1 -1
  77. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  78. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  79. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  80. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  81. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  82. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
  83. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
  84. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  85. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
  86. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
  87. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
  88. package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
  89. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
  90. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
  91. package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
  92. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
  93. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
  94. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
  95. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
  96. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  97. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
  98. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
  99. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  100. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
  101. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
  102. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
  103. package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
  104. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  105. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  106. package/src/shade/renderer/light/GPULightCollection.js +67 -0
  107. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
  108. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
  109. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
  110. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
  111. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
  112. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
  113. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
  114. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
  115. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
  116. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
  117. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
  118. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
  119. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
  120. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
  121. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
  122. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
  123. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
  124. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
  125. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
  126. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
  127. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
  128. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  129. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  130. package/src/shade/renderer/particles/GPUParticleSystem.js +4 -3
  131. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
  132. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  133. package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
  134. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
  135. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  136. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
  137. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  138. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +21 -38
  139. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.d.ts.map +1 -1
  140. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +154 -147
  141. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +2 -1
  142. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  143. package/src/shade/renderer/postprocess/gtao/GTAO.js +5 -1
  144. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +8 -0
  145. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
  146. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +10 -1
  147. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  148. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +5 -0
  149. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts +22 -0
  150. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts.map +1 -0
  151. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.js +33 -0
  152. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts +22 -0
  153. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts.map +1 -0
  154. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.js +56 -0
  155. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts +13 -0
  156. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts.map +1 -0
  157. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.js +42 -0
  158. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +2 -1
  159. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +382 -357
  161. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +414 -410
  163. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  164. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -7
  165. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
  166. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
  167. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
  168. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
  169. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
  170. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
  171. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
  172. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
  173. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
  174. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
  175. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
  176. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
  177. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
  178. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
  179. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  180. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
  181. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
  182. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
  183. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
  184. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
  185. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
  186. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
  187. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
  188. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
  189. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
  190. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
  191. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
  192. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
  193. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
  194. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
  195. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
  196. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
  197. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
  198. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +36 -0
  199. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
  200. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +129 -0
  201. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
  202. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
  203. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +370 -0
  204. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
  205. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
  206. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
  207. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  208. package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
  209. package/src/engine/graphics3/decal/DecalAtlas.d.ts +0 -43
  210. package/src/engine/graphics3/decal/DecalAtlas.d.ts.map +0 -1
  211. package/src/engine/graphics3/decal/DecalAtlasFill.d.ts.map +0 -1
  212. package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
  213. package/src/engine/graphics3/decal/decal_atlas_border.d.ts.map +0 -1
  214. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts +0 -26
  215. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts.map +0 -1
  216. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.js +0 -268
  217. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts +0 -3
  218. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts.map +0 -1
  219. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.js +0 -32
  220. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +0 -17
  221. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +0 -1
  222. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +0 -98
  223. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +0 -23
  224. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +0 -1
  225. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +0 -118
  226. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +0 -15
  227. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +0 -1
  228. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
  229. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +0 -17
  230. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +0 -1
  231. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
  232. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts +0 -35
  233. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +0 -1
  234. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
  235. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +0 -35
  236. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +0 -1
  237. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
  238. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts +0 -10
  239. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts.map +0 -1
  240. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
  241. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +0 -28
  242. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +0 -1
  243. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
  244. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +0 -48
  245. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +0 -1
  246. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
  247. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +0 -28
  248. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +0 -1
  249. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
@@ -1,31 +1,110 @@
1
+ /**
2
+ * @typedef {object} ManagedAtlasRecord
3
+ * @property {string} key
4
+ * @property {number} references
5
+ * @property {import("../sampler/Sampler2D.js").Sampler2D|null} sampler
6
+ * @property {import("./AtlasPatch.js").AtlasPatch|null} patch
7
+ * @property {boolean} loading
8
+ */
9
+ /**
10
+ * Synchronous reference handle to an asynchronously loaded {@link AtlasPatch} in a
11
+ * {@link ManagedAtlas}.
12
+ *
13
+ * {@link getValue} is `null` while the texture is still in flight (or if loading failed or the
14
+ * handle was released) and returns the packed {@link AtlasPatch} once ready — or immediately on
15
+ * the same tick when the key hits a live or graveyard entry.
16
+ */
17
+ export class ManagedAtlasReference {
18
+ /**
19
+ * @param {ManagedAtlas} owner
20
+ * @param {ManagedAtlasRecord} record
21
+ */
22
+ constructor(owner: ManagedAtlas, record: ManagedAtlasRecord);
23
+ /**
24
+ * @returns {import("./AtlasPatch.js").AtlasPatch|null}
25
+ */
26
+ getValue(): import("./AtlasPatch.js").AtlasPatch | null;
27
+ /**
28
+ * @returns {boolean}
29
+ */
30
+ get is_bound(): boolean;
31
+ /**
32
+ * Release this caller's claim on the patch. Idempotent.
33
+ */
34
+ release(): void;
35
+ #private;
36
+ }
37
+ /**
38
+ * Reference-counted, graveyard-cached texture atlas manager.
39
+ *
40
+ * Coordinates asynchronous key loading, in-memory sampler retention while a patch sits in
41
+ * {@link CachingTextureAtlas}'s graveyard, synchronous graveyard resurrection on re-acquire, and
42
+ * eviction cleanup when the underlying {@link TextureAtlas} reaps a graveyard slot.
43
+ */
1
44
  export class ManagedAtlas {
2
45
  /**
3
- *
4
- * @param {AssetManager} assetManager
5
- * @constructor
46
+ * @param {object} [params]
47
+ * @param {import("../../../asset/AssetManager.js").AssetManager|null} [params.assetManager]
48
+ * @param {import("./TextureAtlas.js").TextureAtlas} [params.atlas]
49
+ * @param {((key: string) => Promise<import("../sampler/Sampler2D.js").Sampler2D>)|null} [params.load]
50
+ */
51
+ constructor({ assetManager, atlas, load }?: {
52
+ assetManager?: import("../../../asset/AssetManager.js").AssetManager<any> | null;
53
+ atlas?: import("./TextureAtlas.js").TextureAtlas;
54
+ load?: ((key: string) => Promise<import("../sampler/Sampler2D.js").Sampler2D>) | null;
55
+ });
56
+ /**
57
+ * @type {import("./TextureAtlas.js").TextureAtlas}
58
+ */
59
+ atlas: import("./TextureAtlas.js").TextureAtlas;
60
+ /**
61
+ * @type {CachingTextureAtlas}
6
62
  */
7
- constructor(assetManager: AssetManager);
8
63
  __caching_atlas: CachingTextureAtlas;
9
64
  /**
10
- *
11
- * @type {TextureAtlas}
65
+ * @returns {import("../sampler/Sampler2D.js").Sampler2D}
12
66
  */
13
- atlas: TextureAtlas;
14
- reset(): void;
67
+ get sampler(): import("../sampler/Sampler2D.js").Sampler2D;
15
68
  /**
69
+ * @param {ManagedAtlasRecord} record
70
+ */
71
+ _release_record(record: ManagedAtlasRecord): void;
72
+ /**
73
+ * Acquire a reference-counted handle for an asynchronous texture key.
16
74
  *
17
75
  * @param {string} key
18
- * @returns {Promise<Reference<AtlasPatch>>}
76
+ * @returns {ManagedAtlasReference}
19
77
  */
20
- acquire(url: any): Promise<Reference<AtlasPatch>>;
78
+ acquire(key: string): ManagedAtlasReference;
21
79
  /**
80
+ * Acquire a reference-counted handle for an already-constructed {@link Sampler2D} (such as a
81
+ * shared 1x1 identity normal or ORM sampler).
22
82
  *
23
- * @param {string} key
83
+ * @param {import("../sampler/Sampler2D.js").Sampler2D} sampler
84
+ * @returns {import("../../../reference/v2/Reference.js").Reference<import("./AtlasPatch.js").AtlasPatch>}
85
+ */
86
+ acquire_sampler(sampler: import("../sampler/Sampler2D.js").Sampler2D): import("../../../reference/v2/Reference.js").Reference<import("./AtlasPatch.js").AtlasPatch>;
87
+ /**
88
+ * Pack and paint any pending changes in the underlying atlas, evicting graveyard patches first
89
+ * if needed.
90
+ */
91
+ update(): void;
92
+ /**
93
+ * Drop all active and cached patches, invalidating any in-flight loads.
94
+ */
95
+ reset(): void;
96
+ /**
97
+ * @param {string} _key
24
98
  */
25
- release(key: string): void;
99
+ release(_key: string): void;
26
100
  #private;
27
101
  }
102
+ export type ManagedAtlasRecord = {
103
+ key: string;
104
+ references: number;
105
+ sampler: import("../sampler/Sampler2D.js").Sampler2D | null;
106
+ patch: import("./AtlasPatch.js").AtlasPatch | null;
107
+ loading: boolean;
108
+ };
28
109
  import { CachingTextureAtlas } from "./CachingTextureAtlas.js";
29
- import { TextureAtlas } from "./TextureAtlas.js";
30
- import { Reference } from "../../../reference/v2/Reference.js";
31
110
  //# sourceMappingURL=ManagedTextureAtlas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedTextureAtlas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/ManagedTextureAtlas.js"],"names":[],"mappings":"AAUA;IAoCI;;;;OAIG;IACH,wCAiCC;IAvBG,qCAAyD;IAEzD;;;OAGG;IACH,OAFU,YAAY,CAEJ;IAwEtB,cAcC;IAED;;;;OAIG;IACH,mBAFa,QAAQ,qBAAqB,CAAC,CAe1C;IAED;;;OAGG;IACH,aAFW,MAAM,QAIhB;;CACJ;oCA/KmC,0BAA0B;6BACjC,mBAAmB;0BAJtB,oCAAoC"}
1
+ {"version":3,"file":"ManagedTextureAtlas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/ManagedTextureAtlas.js"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH;IAgBI;;;OAGG;IACH,mBAHW,YAAY,UACZ,kBAAkB,EAK5B;IAED;;OAEG;IACH,YAFa,OAAO,iBAAiB,EAAE,UAAU,GAAC,IAAI,CAQrD;IAED;;OAEG;IACH,wBAEC;IAED;;OAEG;IACH,gBAOC;;CACJ;AAED;;;;;;GAMG;AACH;IA0BI;;;;;OAKG;IACH;QAJ+E,YAAY,GAAhF,6DAAsD,IAAI;QACR,KAAK,GAAvD,OAAO,mBAAmB,EAAE,YAAY;QAC8C,IAAI,GAA1F,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,OAAO,yBAAyB,EAAE,SAAS,CAAC,CAAC,GAAC,IAAI;OAwBtF;IAfG;;OAEG;IACH,OAFU,OAAO,mBAAmB,EAAE,YAAY,CAEhC;IAElB;;OAEG;IACH,iBAFU,mBAAmB,CAE4B;IAS7D;;OAEG;IACH,2DAEC;IA6ED;;OAEG;IACH,wBAFW,kBAAkB,QAkB5B;IAED;;;;;OAKG;IACH,aAHW,MAAM,GACJ,qBAAqB,CA6BjC;IAED;;;;;;OAMG;IACH,yBAHW,OAAO,yBAAyB,EAAE,SAAS,GACzC,OAAO,oCAAoC,EAAE,SAAS,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAIxG;IAED;;;OAGG;IACH,eAEC;IAED;;OAEG;IACH,cAUC;IAED;;OAEG;IACH,cAFW,MAAM,QAIhB;;CACJ;;SAxTa,MAAM;gBACN,MAAM;aACN,OAAO,yBAAyB,EAAE,SAAS,GAAC,IAAI;WAChD,OAAO,iBAAiB,EAAE,UAAU,GAAC,IAAI;aACzC,OAAO;;oCAXe,0BAA0B"}
@@ -1,183 +1,322 @@
1
- import { LoadingCache } from "../../../../core/cache/LoadingCache.js";
2
- import { strictEquals } from "../../../../core/function/strictEquals.js";
3
- import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
4
- import { GameAssetType } from "../../../asset/GameAssetType.js";
5
- import { Reference } from "../../../reference/v2/Reference.js";
6
- import { Sampler2D } from "../sampler/Sampler2D.js";
7
- import { sampler2d_ensure_uint8_RGBA } from "../sampler/sampler2d_ensure_uint8_RGBA.js";
8
- import { CachingTextureAtlas } from "./CachingTextureAtlas.js";
9
- import { TextureAtlas } from "./TextureAtlas.js";
10
-
11
- export class ManagedAtlas {
12
-
13
- /**
14
- *
15
- * @type {AssetManager|null}
16
- */
17
- #assets = null;
18
-
19
- /**
20
- *
21
- * @type {Map<string, Reference>}
22
- */
23
- #references = new Map();
24
-
25
- /**
26
- * Pixel padding
27
- * @type {number}
28
- */
29
- #padding = 4;
30
-
31
- /**
32
- * @type {LoadingCache<string, AtlasPatch>}
33
- */
34
- #patch_loader;
35
-
36
- /**
37
- *
38
- * @type {Map<string, AtlasPatch>}
39
- */
40
- #url_patch_lookup = new Map();
41
- /**
42
- *
43
- * @type {Map<AtlasPatch,string[]>}
44
- */
45
- #patch_url_lookup = new Map();
46
-
47
- /**
48
- *
49
- * @param {AssetManager} assetManager
50
- * @constructor
51
- */
52
- constructor(assetManager) {
53
- this.#assets = assetManager;
54
-
55
- /**
56
- * pre-allocate space on the atlas to avoid some initial re-sizing
57
- * @type {TextureAtlas}
58
- */
59
- const atlas = new TextureAtlas(64);
60
-
61
-
62
- this.__caching_atlas = new CachingTextureAtlas({ atlas });
63
-
64
- /**
65
- *
66
- * @type {TextureAtlas}
67
- */
68
- this.atlas = atlas;
69
-
70
- atlas.on.removed.add(this.#remove_from_lookup, this);
71
-
72
- this.#patch_loader = new LoadingCache({
73
- keyHashFunction: computeStringHash,
74
- keyEqualityFunction: strictEquals,
75
- load: async (url) => {
76
- const sampler = await this.#resolve_texture(url);
77
-
78
- const patch = this.__caching_atlas.add(sampler, this.#padding);
79
-
80
- this.#add_to_lookup(url, patch);
81
-
82
- return patch;
83
- }
84
- });
85
- }
86
-
87
- /**
88
- *
89
- * @param {AtlasPatch} patch
90
- */
91
- #remove_from_lookup(patch) {
92
- const urls = this.#patch_url_lookup.get(patch);
93
-
94
- if (urls === undefined) {
95
- return;
96
- }
97
-
98
- for (let i = 0; i < urls.length; i++) {
99
- const url = urls[i];
100
-
101
- this.#url_patch_lookup.delete(url);
102
-
103
- // and the memoized loader, which would otherwise hand this patch
104
- // back for that url after the atlas has stopped holding it
105
- this.#patch_loader.invalidate(url);
106
- }
107
-
108
- this.#patch_url_lookup.delete(patch);
109
- }
110
-
111
- /**
112
- *
113
- * @param {string} url
114
- * @param {AtlasPatch} patch
115
- */
116
- #add_to_lookup(url, patch) {
117
-
118
- this.#url_patch_lookup.set(url, patch);
119
-
120
- let urls = this.#patch_url_lookup.get(patch);
121
- if (urls === undefined) {
122
- urls = [];
123
- this.#patch_url_lookup.set(patch, urls);
124
- }
125
- urls.push(url);
126
- }
127
-
128
- /**
129
- *
130
- * @param {string} url
131
- * @returns {Promise<Sampler2D>}
132
- */
133
- async #resolve_texture(url) {
134
- const asset = await this.#assets.promise(url, GameAssetType.Image);
135
- const source = asset.create();
136
-
137
- return sampler2d_ensure_uint8_RGBA(source);
138
- }
139
-
140
- reset() {
141
- this.#references.clear();
142
- this.__caching_atlas.reset();
143
- this.#url_patch_lookup.clear();
144
-
145
- // The loader is memoized with no time-to-live and no weigher, so
146
- // nothing evicts it: a url loaded before the reset would miss the
147
- // lookup cleared above, fall through to the loader and be handed back
148
- // the SAME AtlasPatch — one the reset atlas no longer holds, still
149
- // flagged Attached and Packed, with a uv rectangle pointing at the
150
- // pre-reset packing, and never repainted. Everything drawn with it
151
- // samples whatever now occupies that region.
152
- this.#patch_loader.clear();
153
- this.#patch_url_lookup.clear();
154
- }
155
-
156
- /**
157
- *
158
- * @param {string} key
159
- * @returns {Promise<Reference<AtlasPatch>>}
160
- */
161
- async acquire(url) {
162
- const reference = new Reference();
163
-
164
- let patch = this.#url_patch_lookup.get(url);
165
-
166
- if (patch === undefined) {
167
- // patch is not active, need to load it
168
- patch = await this.#patch_loader.get(url);
169
- }
170
-
171
- reference.bind(patch);
172
-
173
- return reference;
174
- }
175
-
176
- /**
177
- *
178
- * @param {string} key
179
- */
180
- release(key) {
181
- throw new Error('Method is deprecated, use "Reference.release" instead');
182
- }
183
- }
1
+ import { GameAssetType } from "../../../asset/GameAssetType.js";
2
+ import { sampler2d_ensure_uint8_RGBA } from "../sampler/sampler2d_ensure_uint8_RGBA.js";
3
+ import { CachingTextureAtlas } from "./CachingTextureAtlas.js";
4
+ import { ReferencedTextureAtlas } from "./ReferencedTextureAtlas.js";
5
+ import { SpriteAtlas } from "./SpriteAtlas.js";
6
+ import { SpriteAtlasFill } from "./SpriteAtlasFill.js";
7
+
8
+ /**
9
+ * @typedef {object} ManagedAtlasRecord
10
+ * @property {string} key
11
+ * @property {number} references
12
+ * @property {import("../sampler/Sampler2D.js").Sampler2D|null} sampler
13
+ * @property {import("./AtlasPatch.js").AtlasPatch|null} patch
14
+ * @property {boolean} loading
15
+ */
16
+
17
+ /**
18
+ * Synchronous reference handle to an asynchronously loaded {@link AtlasPatch} in a
19
+ * {@link ManagedAtlas}.
20
+ *
21
+ * {@link getValue} is `null` while the texture is still in flight (or if loading failed or the
22
+ * handle was released) and returns the packed {@link AtlasPatch} once ready — or immediately on
23
+ * the same tick when the key hits a live or graveyard entry.
24
+ */
25
+ export class ManagedAtlasReference {
26
+ /**
27
+ * @type {ManagedAtlas}
28
+ */
29
+ #owner;
30
+
31
+ /**
32
+ * @type {ManagedAtlasRecord}
33
+ */
34
+ #record;
35
+
36
+ /**
37
+ * @type {boolean}
38
+ */
39
+ #released = false;
40
+
41
+ /**
42
+ * @param {ManagedAtlas} owner
43
+ * @param {ManagedAtlasRecord} record
44
+ */
45
+ constructor(owner, record) {
46
+ this.#owner = owner;
47
+ this.#record = record;
48
+ }
49
+
50
+ /**
51
+ * @returns {import("./AtlasPatch.js").AtlasPatch|null}
52
+ */
53
+ getValue() {
54
+ if (this.#released) {
55
+ return null;
56
+ }
57
+
58
+ return this.#record.patch;
59
+ }
60
+
61
+ /**
62
+ * @returns {boolean}
63
+ */
64
+ get is_bound() {
65
+ return !this.#released && this.#record.patch !== null;
66
+ }
67
+
68
+ /**
69
+ * Release this caller's claim on the patch. Idempotent.
70
+ */
71
+ release() {
72
+ if (this.#released) {
73
+ return;
74
+ }
75
+
76
+ this.#released = true;
77
+ this.#owner._release_record(this.#record);
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Reference-counted, graveyard-cached texture atlas manager.
83
+ *
84
+ * Coordinates asynchronous key loading, in-memory sampler retention while a patch sits in
85
+ * {@link CachingTextureAtlas}'s graveyard, synchronous graveyard resurrection on re-acquire, and
86
+ * eviction cleanup when the underlying {@link TextureAtlas} reaps a graveyard slot.
87
+ */
88
+ export class ManagedAtlas {
89
+ /**
90
+ * @type {import("../../../asset/AssetManager.js").AssetManager|null}
91
+ */
92
+ #assets = null;
93
+
94
+ /**
95
+ * @type {(key: string) => Promise<import("../sampler/Sampler2D.js").Sampler2D>}
96
+ */
97
+ #load;
98
+
99
+ /**
100
+ * @type {Map<string, ManagedAtlasRecord>}
101
+ */
102
+ #records = new Map();
103
+
104
+ /**
105
+ * @type {Map<import("./AtlasPatch.js").AtlasPatch, ManagedAtlasRecord>}
106
+ */
107
+ #patch_records = new Map();
108
+
109
+ /**
110
+ * @type {ReferencedTextureAtlas}
111
+ */
112
+ #referenced_samplers;
113
+
114
+ /**
115
+ * @param {object} [params]
116
+ * @param {import("../../../asset/AssetManager.js").AssetManager|null} [params.assetManager]
117
+ * @param {import("./TextureAtlas.js").TextureAtlas} [params.atlas]
118
+ * @param {((key: string) => Promise<import("../sampler/Sampler2D.js").Sampler2D>)|null} [params.load]
119
+ */
120
+ constructor({
121
+ assetManager = null,
122
+ atlas = new SpriteAtlas(SpriteAtlasFill.EdgeExtend, 64),
123
+ load = null
124
+ } = {}) {
125
+ this.#assets = assetManager;
126
+
127
+ /**
128
+ * @type {import("./TextureAtlas.js").TextureAtlas}
129
+ */
130
+ this.atlas = atlas;
131
+
132
+ /**
133
+ * @type {CachingTextureAtlas}
134
+ */
135
+ this.__caching_atlas = new CachingTextureAtlas({ atlas });
136
+
137
+ this.#referenced_samplers = new ReferencedTextureAtlas(this.__caching_atlas);
138
+
139
+ this.#load = load ?? (url => this.#resolve_texture(url));
140
+
141
+ atlas.on.removed.add(this.#handle_patch_removed, this);
142
+ }
143
+
144
+ /**
145
+ * @returns {import("../sampler/Sampler2D.js").Sampler2D}
146
+ */
147
+ get sampler() {
148
+ return this.atlas.sampler;
149
+ }
150
+
151
+ /**
152
+ * @param {string} url
153
+ * @returns {Promise<import("../sampler/Sampler2D.js").Sampler2D>}
154
+ */
155
+ async #resolve_texture(url) {
156
+ const asset = await this.#assets.promise(url, GameAssetType.Image);
157
+ const source = asset.create();
158
+
159
+ return sampler2d_ensure_uint8_RGBA(source);
160
+ }
161
+
162
+ /**
163
+ * @param { import("./AtlasPatch.js").AtlasPatch } patch
164
+ */
165
+ #handle_patch_removed(patch) {
166
+ const record = this.#patch_records.get(patch);
167
+
168
+ if (record === undefined) {
169
+ return;
170
+ }
171
+
172
+ this.#patch_records.delete(patch);
173
+
174
+ if (record.patch === patch) {
175
+ record.patch = null;
176
+ }
177
+
178
+ if (record.references === 0 && this.#records.get(record.key) === record) {
179
+ this.#records.delete(record.key);
180
+ }
181
+ }
182
+
183
+ /**
184
+ * @param {ManagedAtlasRecord} record
185
+ */
186
+ #start_load(record) {
187
+ Promise.resolve()
188
+ .then(() => this.#load(record.key))
189
+ .then(sampler => {
190
+ if (this.#records.get(record.key) !== record) {
191
+ return;
192
+ }
193
+
194
+ record.loading = false;
195
+ record.sampler = sampler;
196
+
197
+ if (record.references <= 0) {
198
+ // Every caller released while the load was in flight; do not touch the atlas.
199
+ this.#records.delete(record.key);
200
+
201
+ return;
202
+ }
203
+
204
+ const patch = this.__caching_atlas.add(sampler);
205
+
206
+ record.patch = patch;
207
+ this.#patch_records.set(patch, record);
208
+ })
209
+ .catch(error => {
210
+ if (this.#records.get(record.key) !== record) {
211
+ return;
212
+ }
213
+
214
+ record.loading = false;
215
+
216
+ if (record.references <= 0) {
217
+ this.#records.delete(record.key);
218
+
219
+ return;
220
+ }
221
+
222
+ console.warn(`ManagedAtlas: failed to load '${record.key}'`, error);
223
+ });
224
+ }
225
+
226
+ /**
227
+ * @param {ManagedAtlasRecord} record
228
+ */
229
+ _release_record(record) {
230
+ if (this.#records.get(record.key) !== record || record.references <= 0) {
231
+ return;
232
+ }
233
+
234
+ record.references--;
235
+
236
+ if (record.references === 0) {
237
+ if (record.patch !== null) {
238
+ // Move patch to the graveyard in CachingTextureAtlas rather than erasing it from the
239
+ // underlying TextureAtlas immediately.
240
+ this.__caching_atlas.remove(record.patch);
241
+ } else if (!record.loading) {
242
+ this.#records.delete(record.key);
243
+ }
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Acquire a reference-counted handle for an asynchronous texture key.
249
+ *
250
+ * @param {string} key
251
+ * @returns {ManagedAtlasReference}
252
+ */
253
+ acquire(key) {
254
+ let record = this.#records.get(key);
255
+
256
+ if (record !== undefined) {
257
+ if (record.references === 0 && record.patch !== null) {
258
+ // Graveyard hit: resurrect synchronously without reloading or repainting.
259
+ record.patch = this.__caching_atlas.add(record.sampler);
260
+ this.#patch_records.set(record.patch, record);
261
+ }
262
+
263
+ record.references++;
264
+
265
+ return new ManagedAtlasReference(this, record);
266
+ }
267
+
268
+ record = {
269
+ key,
270
+ references: 1,
271
+ sampler: null,
272
+ patch: null,
273
+ loading: true
274
+ };
275
+
276
+ this.#records.set(key, record);
277
+ this.#start_load(record);
278
+
279
+ return new ManagedAtlasReference(this, record);
280
+ }
281
+
282
+ /**
283
+ * Acquire a reference-counted handle for an already-constructed {@link Sampler2D} (such as a
284
+ * shared 1x1 identity normal or ORM sampler).
285
+ *
286
+ * @param {import("../sampler/Sampler2D.js").Sampler2D} sampler
287
+ * @returns {import("../../../reference/v2/Reference.js").Reference<import("./AtlasPatch.js").AtlasPatch>}
288
+ */
289
+ acquire_sampler(sampler) {
290
+ return this.#referenced_samplers.acquire(sampler);
291
+ }
292
+
293
+ /**
294
+ * Pack and paint any pending changes in the underlying atlas, evicting graveyard patches first
295
+ * if needed.
296
+ */
297
+ update() {
298
+ this.__caching_atlas.update();
299
+ }
300
+
301
+ /**
302
+ * Drop all active and cached patches, invalidating any in-flight loads.
303
+ */
304
+ reset() {
305
+ for (const record of this.#records.values()) {
306
+ record.references = 0;
307
+ record.patch = null;
308
+ record.loading = false;
309
+ }
310
+
311
+ this.#records.clear();
312
+ this.#patch_records.clear();
313
+ this.#referenced_samplers.reset();
314
+ }
315
+
316
+ /**
317
+ * @param {string} _key
318
+ */
319
+ release(_key) {
320
+ throw new Error('Method is deprecated, use "Reference.release" instead');
321
+ }
322
+ }
@@ -17,6 +17,15 @@ export class ReferencedTextureAtlas extends AbstractTextureAtlas {
17
17
  */
18
18
  private __ref_counts;
19
19
  __atlas: AbstractTextureAtlas;
20
+ /**
21
+ * @returns {AbstractTextureAtlas}
22
+ */
23
+ get atlas(): AbstractTextureAtlas;
24
+ /**
25
+ * @returns {Sampler2D}
26
+ */
27
+ get sampler(): Sampler2D;
28
+ reset(): void;
20
29
  /**
21
30
  *
22
31
  * @param {Reference} ref
@@ -1 +1 @@
1
- {"version":3,"file":"ReferencedTextureAtlas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js"],"names":[],"mappings":"AAGA;IAeI;;;OAGG;IACH,mBAFW,oBAAoB,EAM9B;IAtBD;;;;OAIG;IACH,kBAAsB;IAEtB;;;;OAIG;IACH,qBAAyB;IASrB,8BAAoB;IAOxB;;;;;OAKG;IACH,6BAYC;IAGD;;;;OAIG;IACH,6BAFa,qBAAqB,CAyBjC;CACJ;qCAlFoC,2BAA2B;0BACtC,oCAAoC"}
1
+ {"version":3,"file":"ReferencedTextureAtlas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js"],"names":[],"mappings":"AAGA;IAeI;;;OAGG;IACH,mBAFW,oBAAoB,EAM9B;IAtBD;;;;OAIG;IACH,kBAAsB;IAEtB;;;;OAIG;IACH,qBAAyB;IASrB,8BAAoB;IAGxB;;OAEG;IACH,kCAEC;IAED;;OAEG;IACH,yBAEC;IAMD,cAOC;IAED;;;;;OAKG;IACH,6BAgBC;IAGD;;;;OAIG;IACH,6BAFa,qBAAqB,CAyBjC;CACJ;qCA7GoC,2BAA2B;0BACtC,oCAAoC"}