@woosh/meep-engine 3.33.0 → 3.34.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 (419) hide show
  1. package/editor/Editor.d.ts.map +1 -1
  2. package/editor/Editor.js +0 -3
  3. package/editor/ecs/component/prototypeObjectEditor.js +1 -165
  4. package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -1
  5. package/editor/ecs/component/registerBasicTypeEditors.js +0 -5
  6. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -1
  7. package/editor/ecs/component/registerEngineComponentEditors.js +0 -20
  8. package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -1
  9. package/editor/process/SymbolicDisplayProcess.js +100 -106
  10. package/editor/prototypeEditorShell.d.ts.map +1 -1
  11. package/editor/prototypeEditorShell.js +190 -186
  12. package/editor/templates/entity_templates.d.ts.map +1 -1
  13. package/editor/templates/entity_templates.js +10 -27
  14. package/editor/view/makeEntityDecorators.js +2 -2
  15. package/package.json +1 -1
  16. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.d.ts +3 -3
  17. package/src/core/geom/3d/aabb/MovingBoundingBox.d.ts.map +1 -0
  18. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.js +5 -5
  19. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts +3 -0
  20. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts.map +1 -0
  21. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGBA_LUT_HEATMAP_IR.js +1 -1
  22. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts +6 -0
  23. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts.map +1 -0
  24. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_INFERNO.js +1 -1
  25. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.d.ts +1 -1
  26. package/src/core/math/lookup/RGB_LUT_TURBO.d.ts.map +1 -0
  27. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.js +1 -1
  28. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.d.ts +1 -1
  29. package/src/core/math/lookup/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  30. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.js +1 -1
  31. package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
  32. package/src/engine/animation/AnimatedActions.js +2 -4
  33. package/src/engine/animation/AnimationUtils.d.ts +1 -17
  34. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  35. package/src/engine/animation/AnimationUtils.js +138 -246
  36. package/src/engine/ecs/EntityManager.d.ts +1 -1
  37. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  38. package/src/engine/ecs/EntityManager.js +2 -2
  39. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +268 -275
  40. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  41. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +0 -10
  42. package/src/engine/graphics/geometry/distribute_points_on_indexed_triangles.d.ts.map +1 -0
  43. package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.js +3 -3
  44. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.d.ts +1 -1
  45. package/src/engine/graphics/texture/sampler/lut_to_sampler.d.ts.map +1 -0
  46. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.js +1 -1
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -3
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.js +0 -3
  50. package/src/engine/network/NetworkSession.d.ts +1 -1
  51. package/src/engine/network/NetworkSession.js +1 -1
  52. package/src/engine/physics/cloth/MEASUREMENTS.md +115 -0
  53. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  54. package/src/engine/physics/cloth/solver/cloth_contact_find.js +2 -0
  55. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +9 -0
  56. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +30 -7
  58. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  59. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  60. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +12 -2
  61. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +11 -2
  62. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  63. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +14 -7
  64. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +6 -15
  65. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  66. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +161 -174
  67. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts +5 -3
  68. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
  69. package/src/shade/device/mock/SoftwareGPUBuffer.js +32 -3
  70. package/src/shade/playground/caldera/main.js +73 -60
  71. package/src/shade/playground/vgeo_runtime/main.js +25 -77
  72. package/src/shade/playground/vgeo_scene/main.js +2231 -2217
  73. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  74. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  75. package/src/shade/renderer/GraphicsContext.js +11 -2
  76. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  77. package/src/shade/renderer/Renderer.js +38 -0
  78. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +8 -0
  79. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  80. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +21 -0
  81. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -1
  82. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  83. package/src/shade/renderer/geometry/GPUGeometryManager.js +9 -10
  84. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +5 -0
  85. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +11 -0
  87. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +12 -0
  88. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  89. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +25 -0
  90. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +115 -101
  91. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  92. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +282 -140
  93. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +30 -0
  94. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +4 -1
  95. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +536 -0
  96. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +6 -2
  97. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  98. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +68 -19
  99. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +2 -1
  100. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  101. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +17 -1
  102. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +4 -0
  103. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  104. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +42 -12
  105. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +93 -12
  106. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  107. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +166 -20
  108. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  109. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -7
  110. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  111. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +12 -5
  112. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  113. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -2
  114. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  115. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +23 -13
  116. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -1
  117. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +1 -2
  118. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  119. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +1 -2
  120. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  121. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +10 -6
  122. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +45 -17
  123. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  124. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +61 -19
  125. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +8 -11
  126. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -1
  127. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +9 -16
  128. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  129. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +25 -10
  130. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +10 -8
  131. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +1 -0
  132. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +19 -7
  133. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +4 -2
  134. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -1
  135. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +4 -2
  136. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts +4 -0
  137. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts.map +1 -1
  138. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.js +7 -0
  139. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
  140. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +1 -0
  141. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  142. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  143. package/src/shade/renderer/material/GPUMaterialManager.js +2 -0
  144. package/src/shade/renderer/particles/DESIGN.md +4 -10
  145. package/src/shade/renderer/particles/ParticleConstants.d.ts +1 -3
  146. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/ParticleConstants.js +1 -3
  148. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +3 -4
  149. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +3 -4
  151. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +45 -0
  152. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -0
  153. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +99 -0
  154. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +4 -4
  155. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -36
  156. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts +15 -0
  157. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts.map +1 -0
  158. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.js +103 -0
  159. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts +3 -0
  160. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
  161. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +6 -1
  162. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +26 -0
  163. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -0
  164. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +91 -0
  165. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts +22 -0
  166. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts.map +1 -0
  167. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.js +102 -0
  168. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts +2 -1
  169. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  170. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -24
  171. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  172. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +32 -28
  173. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  174. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +9 -105
  175. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +5 -0
  176. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  177. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +11 -0
  178. package/src/shade/renderer/scene/GPUSceneContext.d.ts +11 -3
  179. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  180. package/src/shade/renderer/scene/GPUSceneContext.js +93 -21
  181. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +4 -1
  182. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  183. package/src/shade/renderer/scene/rows/GPUSceneRows.js +5 -23
  184. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  185. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +63 -0
  186. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts +12 -0
  187. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts.map +1 -0
  188. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.js +11 -0
  189. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +15 -0
  190. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  191. package/src/shade/renderer/shadow/map/Shadowmap.js +17 -0
  192. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts +25 -0
  193. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts.map +1 -0
  194. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.js +22 -0
  195. package/src/shade/renderer/shadow/map/shadowmap_update_score.d.ts.map +1 -1
  196. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +5 -2
  197. package/src/shade/renderer/texture/TextureManager.d.ts +2 -1
  198. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  199. package/src/shade/renderer/texture/TextureManager.js +4 -1
  200. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +1 -1
  201. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +9 -1
  202. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
  203. package/src/shade/renderer/util/Uint32BufferSamplingStats.js +55 -5
  204. package/src/shade/renderer/view/ViewManager.d.ts +7 -1
  205. package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
  206. package/src/shade/renderer/view/ViewManager.js +17 -1
  207. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  208. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -0
  209. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
  210. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
  211. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +0 -35
  212. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
  213. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
  214. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +0 -17
  215. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
  216. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
  217. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +0 -18
  218. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
  219. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
  220. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +0 -58
  221. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
  222. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
  223. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +0 -58
  224. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
  225. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
  226. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +0 -21
  227. package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
  228. package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
  229. package/editor/particles/rebuildParticleEmitter.js +0 -31
  230. package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
  231. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
  232. package/editor/process/ParticleEmitterRebuildProcess.js +0 -217
  233. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +0 -18
  234. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +0 -1
  235. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +0 -140
  236. package/src/engine/animation/removeEntityGenericEffect.d.ts +0 -18
  237. package/src/engine/animation/removeEntityGenericEffect.d.ts.map +0 -1
  238. package/src/engine/animation/removeEntityGenericEffect.js +0 -160
  239. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +0 -16
  240. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +0 -1
  241. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +0 -194
  242. package/src/engine/graphics/ecs/sprite/Sprite.d.ts +0 -15
  243. package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +0 -1
  244. package/src/engine/graphics/ecs/sprite/Sprite.js +0 -14
  245. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +0 -11
  246. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +0 -1
  247. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +0 -144
  248. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +0 -1
  249. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +0 -61
  250. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +0 -1
  251. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +0 -229
  252. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts +0 -6
  253. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts.map +0 -1
  254. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.js +0 -8
  255. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts +0 -7
  256. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts.map +0 -1
  257. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.js +0 -9
  258. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts +0 -13
  259. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts.map +0 -1
  260. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +0 -12
  261. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts +0 -3
  262. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  263. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +0 -84
  264. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +0 -285
  265. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +0 -1
  266. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +0 -1201
  267. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts +0 -19
  268. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts.map +0 -1
  269. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +0 -67
  270. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +0 -197
  271. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +0 -1
  272. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +0 -398
  273. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts +0 -5
  274. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts.map +0 -1
  275. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js +0 -4
  276. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +0 -162
  277. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +0 -1
  278. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -472
  279. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +0 -10
  280. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +0 -1
  281. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +0 -37
  282. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts +0 -9
  283. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts.map +0 -1
  284. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +0 -25
  285. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts +0 -19
  286. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +0 -1
  287. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +0 -28
  288. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts +0 -19
  289. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts.map +0 -1
  290. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +0 -162
  291. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts +0 -5
  292. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +0 -1
  293. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +0 -103
  294. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts +0 -8
  295. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts.map +0 -1
  296. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.js +0 -28
  297. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts +0 -2
  298. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +0 -1
  299. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +0 -2
  300. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +0 -2
  301. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +0 -1
  302. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +0 -2
  303. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts +0 -60
  304. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +0 -1
  305. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +0 -128
  306. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts +0 -47
  307. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts.map +0 -1
  308. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +0 -77
  309. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts +0 -45
  310. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts.map +0 -1
  311. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +0 -93
  312. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts +0 -95
  313. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts.map +0 -1
  314. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +0 -239
  315. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts +0 -3
  316. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts.map +0 -1
  317. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +0 -6
  318. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +0 -1
  319. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +0 -1
  320. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +0 -1
  321. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts +0 -13
  322. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts.map +0 -1
  323. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +0 -28
  324. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts +0 -9
  325. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  326. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +0 -24
  327. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts +0 -13
  328. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts.map +0 -1
  329. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +0 -27
  330. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts +0 -33
  331. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts.map +0 -1
  332. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +0 -80
  333. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +0 -49
  334. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +0 -1
  335. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +0 -135
  336. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts +0 -7
  337. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts.map +0 -1
  338. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.js +0 -14
  339. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts +0 -41
  340. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +0 -1
  341. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +0 -59
  342. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts +0 -4
  343. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts.map +0 -1
  344. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +0 -56
  345. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts +0 -4
  346. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts.map +0 -1
  347. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +0 -84
  348. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -4
  349. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +0 -1
  350. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +0 -80
  351. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts +0 -29
  352. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +0 -1
  353. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +0 -43
  354. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts +0 -5
  355. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts.map +0 -1
  356. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +0 -104
  357. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts +0 -9
  358. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts.map +0 -1
  359. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.js +0 -11
  360. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts +0 -9
  361. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +0 -1
  362. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +0 -64
  363. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts +0 -9
  364. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +0 -1
  365. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +0 -172
  366. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +0 -1
  367. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +0 -20
  368. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +0 -1
  369. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +0 -84
  370. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +0 -81
  371. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +0 -1
  372. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +0 -200
  373. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts +0 -6
  374. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts.map +0 -1
  375. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.js +0 -8
  376. package/src/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.d.ts.map +0 -1
  377. package/src/engine/graphics/particles/particular/group/Operation.d.ts +0 -20
  378. package/src/engine/graphics/particles/particular/group/Operation.d.ts.map +0 -1
  379. package/src/engine/graphics/particles/particular/group/Operation.js +0 -20
  380. package/src/engine/graphics/particles/particular/group/OperationType.d.ts +0 -7
  381. package/src/engine/graphics/particles/particular/group/OperationType.d.ts.map +0 -1
  382. package/src/engine/graphics/particles/particular/group/OperationType.js +0 -9
  383. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts +0 -27
  384. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts.map +0 -1
  385. package/src/engine/graphics/particles/particular/group/ParticleAttribute.js +0 -27
  386. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts +0 -8
  387. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts.map +0 -1
  388. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.js +0 -11
  389. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts +0 -7
  390. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts.map +0 -1
  391. package/src/engine/graphics/particles/particular/group/ParticleDataType.js +0 -10
  392. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts +0 -24
  393. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +0 -1
  394. package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +0 -48
  395. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +0 -7
  396. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts.map +0 -1
  397. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +0 -20
  398. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts +0 -6
  399. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts.map +0 -1
  400. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +0 -162
  401. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts +0 -8
  402. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts.map +0 -1
  403. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +0 -19
  404. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +0 -77
  405. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +0 -1
  406. package/src/engine/graphics3/ParticleEmitterSystem.js +0 -307
  407. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +0 -10
  408. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +0 -1
  409. package/src/engine/graphics3/ParticleEmitterSystem3.js +0 -10
  410. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +0 -61
  411. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +0 -1
  412. package/src/engine/graphics3/particles/GPUParticularRenderer.js +0 -627
  413. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +0 -85
  414. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +0 -1
  415. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -227
  416. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts +0 -35
  417. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +0 -1
  418. package/src/shade/renderer/particles/shaders/shader_particle_render.js +0 -135
  419. /package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.d.ts +0 -0
@@ -0,0 +1,102 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
3
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
4
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
5
+ import {
6
+ build_indirect_compute_dispatch_command,
7
+ INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
8
+ } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
9
+ import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
10
+ import { shader_gather_bucket } from "../bucket/shader_gather_bucket.js";
11
+
12
+ /**
13
+ * Several buckets' mesh indices out of a bucket-sorted mesh buffer, into one flat
14
+ * {@link COLLECTION_U32_STRUCT_READ} buffer, end to end in bucket order.
15
+ *
16
+ * What lets the fast path expand and cut a view once rather than once per opaque bucket
17
+ * (CUT_PLAN_2026_09_14 §7 6b): the opaque buckets are not neighbours in the sorted buffer — the
18
+ * transparency mode is the low bits of a bucket id — so they cannot be read out as one range.
19
+ *
20
+ * @param {Object} options
21
+ * @param {FrameGraph} options.graph
22
+ * @param {number} options.buckets bucket-sorted meshes resource ID
23
+ * @param {number[]} options.bucket_ids the buckets to gather, ascending
24
+ * @param {GPUCollectionLimits} options.limits
25
+ * @returns {number} resource ID of the gathered mesh list
26
+ */
27
+ export function graph_gather_meshes_from_buckets({
28
+ graph,
29
+ buckets,
30
+ bucket_ids,
31
+ limits,
32
+ }) {
33
+ assert.isArray(bucket_ids, 'bucket_ids');
34
+
35
+ let gathered = 0;
36
+
37
+ for (let i = 0; i < bucket_ids.length; i++) {
38
+ const bucket_id = bucket_ids[i];
39
+
40
+ assert.isNonNegativeInteger(bucket_id, 'bucket_id');
41
+ assert.lessThan(bucket_id, 32, 'bucket_id');
42
+
43
+ // the count the last dispatch writes is the total only if the last is the highest
44
+ assert.ok(i === 0 || bucket_ids[i - 1] < bucket_id, 'bucket_ids must be ascending');
45
+
46
+ gathered |= 1 << bucket_id;
47
+ }
48
+
49
+ gathered >>>= 0;
50
+
51
+ /**
52
+ *
53
+ * @param data
54
+ * @param {FramePassResources} resources
55
+ * @param {GraphicsExecutionContext} context
56
+ */
57
+ function execute(data, resources, context) {
58
+ const encoder = context.encoder;
59
+
60
+ const buckets = resources.get(data.buckets);
61
+ const output = resources.get(data.output);
62
+
63
+ for (let i = 0; i < bucket_ids.length; i++) {
64
+ const bucket_id = bucket_ids[i];
65
+ const command = resources.get(data.commands[i]);
66
+
67
+ build_indirect_compute_dispatch_command(
68
+ COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
69
+ encoder,
70
+ buckets,
71
+ // the bucketed buffer header consists of pairs of u32 values (count,offset)
72
+ bucket_id * (u32.size * 2),
73
+ command,
74
+ 0
75
+ );
76
+
77
+ shader_gather_bucket.dispatchIndirect({
78
+ encoder,
79
+ command,
80
+ bindings: {
81
+ settings: { bucket_id, gathered },
82
+ input: buckets,
83
+ output,
84
+ }
85
+ });
86
+ }
87
+ }
88
+
89
+ const data = {};
90
+
91
+ const pass = graph.add("gather meshes from buckets", data, execute);
92
+
93
+ data.buckets = pass.read(buckets);
94
+ data.commands = bucket_ids.map(() => pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR));
95
+ data.output = pass.create("output", BufferResourceDescriptor.from(
96
+ limits.compute_buffer_size(RasterizationCollectionType.Meshes),
97
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
98
+ 0, 16 // clear count
99
+ ));
100
+
101
+ return data.output;
102
+ }
@@ -32,7 +32,8 @@ export function graph_rasterize_scene_fast_raw({ graph, meshes, limits, target_d
32
32
  * Flow:
33
33
  * 1. Frustum cull the scene meshes
34
34
  * 2. Sort culled meshes into rasterization buckets
35
- * 3. For each active opaque bucket: extract -> expand to meshlets -> rasterize
35
+ * 3. Gather every active opaque bucket -> expand to meshlets and cut, once -> rasterize a bucket
36
+ * at a time
36
37
  * 4. If an alpha-tested pass is configured, rasterize it without HZB filtering
37
38
  *
38
39
  * @param {Object} options
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_scene_fast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;GAUG;AACH;;;;;;;IAFa;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAC,CAkK3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAJ+B,KAAK;IACC,GAAG;IACA,MAAM;SA8C7C"}
1
+ {"version":3,"file":"graph_rasterize_scene_fast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;GAUG;AACH;;;;;;;IAFa;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAC,CAwK3D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAJ+B,KAAK;IACC,GAAG;IACA,MAAM;SA8C7C"}
@@ -1,22 +1,19 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
3
2
  import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
4
- import { TransparencyMode } from "../../material/TransparencyMode.js";
5
3
  import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
6
4
  import { graph_import_texture } from "../../shader/graph/graph_import_texture.js";
7
5
  import { graph_record_stat } from "../../util/graph_record_stat.js";
8
6
  import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
9
7
  import { graph_meshes_classify_buckets } from "../expand/bucket/mesh/graph_meshes_classify_buckets.js";
10
- import { graph_meshlets_rasterize } from "../expand/graph_meshlets_rasterize.js";
11
8
  import { graph_expand_meshes_to_meshlets } from "../expand/mesh/graph_expand_meshes_to_meshlets.js";
12
9
  import { graph_vgeo_expand_if_enabled } from "../../geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js";
13
10
  import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
14
- import { construct_primitive_state } from "../bucket/construct_primitive_state.js";
11
+ import { graph_meshlets_rasterize_by_bucket } from "../bucket/graph_meshlets_rasterize_by_bucket.js";
15
12
  import { rasterization_opaque_buckets } from "../bucket/rasterization_opaque_buckets.js";
16
13
  import { graph_mesh_frustum_cull } from "../compute/graph_mesh_frustum_cull.js";
17
14
  import { graph_clear_raster_targets } from "../graph_clear_raster_targets.js";
18
15
  import { graph_rasterize_meshes_alpha_tested } from "../native/graph_rasterize_meshes_alpha_tested.js";
19
- import { graph_extract_meshes_from_bucket } from "./graph_extract_meshes_from_bucket.js";
16
+ import { graph_gather_meshes_from_buckets } from "./graph_gather_meshes_from_buckets.js";
20
17
 
21
18
  /**
22
19
  *
@@ -74,49 +71,55 @@ export function graph_rasterize_scene_fast_raw({
74
71
  active_buckets.add(bucket_id);
75
72
  }
76
73
 
77
- // rasterize each active opaque bucket in a single pass, with no occlusion filtering
74
+ const opaque = Array.from(rasterization_opaque_buckets(active_buckets));
75
+
78
76
  let is_first_draw = true;
79
77
 
80
- for (const { draw_mode, side, bucket_id } of rasterization_opaque_buckets(active_buckets)) {
81
- const gr_bucket_meshes = graph_extract_meshes_from_bucket({
78
+ if (opaque.length > 0) {
79
+ /*
80
+ Every opaque bucket's meshes in one collection, expanded and cut once, then drawn a bucket at
81
+ a time with no occlusion filtering. The cut is the one per view (CUT_PLAN_2026_09_14 §7 6b),
82
+ and the ids are ascending, which is what the gather's count needs.
83
+ */
84
+ const gr_opaque_meshes = graph_gather_meshes_from_buckets({
82
85
  graph,
83
86
  buckets: gr_render_buckets,
84
- bucket_id,
87
+ bucket_ids: opaque.map(bucket => bucket.bucket_id),
85
88
  limits,
86
89
  });
87
90
 
88
- let gr_bucket_meshlets = graph_expand_meshes_to_meshlets({
91
+ let gr_meshlets = graph_expand_meshes_to_meshlets({
89
92
  graph,
90
- input_meshes: gr_bucket_meshes,
93
+ input_meshes: gr_opaque_meshes,
91
94
  scene: scene_ctx,
92
95
  expected_output_size: limits.compute_buffer_size(RasterizationCollectionType.Meshlets),
93
96
  limits,
94
97
  });
95
98
 
96
- // the seam: this bucket's virtual-geometry instances select their cut and append it to
97
- // the same collection, which is the whole of what the rest of this function is told
98
- gr_bucket_meshlets = graph_vgeo_expand_if_enabled({
99
+ // the seam: the view's virtual-geometry instances select their cut and append it to the
100
+ // same collection, which is the whole of what the rest of this function is told
101
+ gr_meshlets = graph_vgeo_expand_if_enabled({
99
102
  graph,
100
- input_meshes: gr_bucket_meshes,
101
- output_meshlets: gr_bucket_meshlets,
103
+ input_meshes: gr_opaque_meshes,
104
+ output_meshlets: gr_meshlets,
102
105
  view: view_ctx,
103
106
  limits,
104
107
  });
105
108
 
106
- graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshlets, gr_bucket_meshlets);
109
+ graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshlets, gr_meshlets);
107
110
 
108
- const primitive_state = construct_primitive_state(draw_mode, side, job.cull_policy);
109
-
110
- [target_depth, targets_color] = graph_meshlets_rasterize({
111
+ [target_depth, targets_color] = graph_meshlets_rasterize_by_bucket({
111
112
  graph,
112
113
  view: view_ctx,
113
- input_meshlets: gr_bucket_meshlets,
114
+ input_meshlets: gr_meshlets,
115
+ buckets: opaque,
114
116
  depth: target_depth,
115
117
  color_targets: targets_color,
116
118
  pass_descriptor: job.opaque_pass,
117
- clear_targets: is_first_draw,
118
- primitive_state,
119
+ clear_targets: true,
120
+ cull_policy: job.cull_policy,
119
121
  viewport,
122
+ limits,
120
123
  });
121
124
 
122
125
  is_first_draw = false;
@@ -203,7 +206,8 @@ export function graph_rasterize_scene_fast_raw({
203
206
  * Flow:
204
207
  * 1. Frustum cull the scene meshes
205
208
  * 2. Sort culled meshes into rasterization buckets
206
- * 3. For each active opaque bucket: extract -> expand to meshlets -> rasterize
209
+ * 3. Gather every active opaque bucket -> expand to meshlets and cut, once -> rasterize a bucket
210
+ * at a time
207
211
  * 4. If an alpha-tested pass is configured, rasterize it without HZB filtering
208
212
  *
209
213
  * @param {Object} options
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_partial_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;GAeG;AACH,gMAFa;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CAmNjG"}
1
+ {"version":3,"file":"graph_rasterize_partial_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;;;GAeG;AACH,gMAFa;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CA0NjG"}
@@ -3,9 +3,6 @@ import { noop } from "../../../../core/function/noop.js";
3
3
  import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
4
4
  import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
5
  import { shader_hzb_mesh_filter_2way } from "../cull/hzb/shader_hzb_mesh_filter_2way.js";
6
- import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
7
- import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
8
- import { TransparencyMode } from "../../material/TransparencyMode.js";
9
6
  import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
10
7
  import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
11
8
  import { graph_record_stat } from "../../util/graph_record_stat.js";
@@ -14,12 +11,12 @@ import {
14
11
  graph_build_indirect_dispatch_command,
15
12
  INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
16
13
  } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
17
- import { graph_meshlets_rasterize } from "../expand/graph_meshlets_rasterize.js";
18
14
  import { graph_expand_meshes_to_meshlets } from "../expand/mesh/graph_expand_meshes_to_meshlets.js";
19
15
  import { graph_vgeo_expand_if_enabled } from "../../geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js";
20
16
  import { MeshletFilter2WayPassData, pass_filter_meshlets_2way } from "../expand/pass1/pass_filter_meshlets_2way.js";
21
17
  import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
22
- import { construct_primitive_state, CullPolicy } from "../bucket/construct_primitive_state.js";
18
+ import { CullPolicy } from "../bucket/construct_primitive_state.js";
19
+ import { graph_meshlets_rasterize_by_bucket } from "../bucket/graph_meshlets_rasterize_by_bucket.js";
23
20
  import { rasterization_opaque_buckets } from "../bucket/rasterization_opaque_buckets.js";
24
21
  import { graph_clear_raster_targets } from "../graph_clear_raster_targets.js";
25
22
 
@@ -110,9 +107,6 @@ export function graph_rasterize_partial_opaque({
110
107
  },
111
108
  command
112
109
  });
113
-
114
- limits.stats.record(encoder, RasterizationCollectionType.Meshes, instances_positive);
115
-
116
110
  }
117
111
 
118
112
 
@@ -122,6 +116,17 @@ export function graph_rasterize_partial_opaque({
122
116
  // create a dummy pass to spawn persistent resources
123
117
  const dummy_pass = graph.add('dummy/spawn', {}, noop);
124
118
 
119
+ /*
120
+ One positive set for every bucket, as the maybe set always was. The filter appends, so each
121
+ bucket's pass adds its instances to what the buckets before it left, and what comes out of the
122
+ loop is every instance the view draws in this phase — which is what gets expanded and cut, once
123
+ (CUT_PLAN_2026_09_14 §7 6b).
124
+ */
125
+ let gr_instances_positive = dummy_pass.create("positive meshes", BufferResourceDescriptor.from(
126
+ collection_size_meshes,
127
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
128
+ 0, 16
129
+ ));
125
130
  let gr_instances_maybe = dummy_pass.create("maybe meshes", BufferResourceDescriptor.from(
126
131
  collection_size_meshes,
127
132
  GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
@@ -136,10 +141,9 @@ export function graph_rasterize_partial_opaque({
136
141
 
137
142
  let viz_depth = depth;
138
143
 
144
+ const opaque = Array.from(rasterization_opaque_buckets(active_buckets));
139
145
 
140
- let is_first_draw = true;
141
-
142
- for (const { draw_mode, side, bucket_id } of rasterization_opaque_buckets(active_buckets)) {
146
+ for (const { bucket_id } of opaque) {
143
147
  const pass_data_instances_0 = {};
144
148
 
145
149
  const pass_instances_0 = graph.add("HZB mesh filter", pass_data_instances_0, execute);
@@ -151,33 +155,34 @@ export function graph_rasterize_partial_opaque({
151
155
  pass_data_instances_0.camera_previous = pass_instances_0.read(camera_previous);
152
156
  pass_data_instances_0.hzb = pass_instances_0.read(hzb);
153
157
 
154
- pass_data_instances_0.instances_positive = pass_instances_0.create("positive meshes", BufferResourceDescriptor.from(
155
- collection_size_meshes,
156
- GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
157
- 0, 16
158
- ));
159
-
158
+ gr_instances_positive = pass_data_instances_0.instances_positive = pass_instances_0.write(gr_instances_positive);
160
159
  gr_instances_maybe = pass_data_instances_0.instances_maybe = pass_instances_0.write(gr_instances_maybe);
160
+ }
161
+
162
+ let is_first_draw = true;
163
+
164
+ if (opaque.length > 0) {
165
+ graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshes, gr_instances_positive);
161
166
 
162
167
  let meshlet_expansion_0 = graph_expand_meshes_to_meshlets({
163
168
  graph,
164
- input_meshes: pass_data_instances_0.instances_positive,
169
+ input_meshes: gr_instances_positive,
165
170
  scene: scene_ctx,
166
171
  expected_output_size: collection_size_meshlets,
167
172
  limits,
168
173
  });
169
174
 
170
- // the seam. The instance sets of the two HZB passes are disjoint, so cutting each of
171
- // them costs one cut per view in total and no instance is ever cut twice
175
+ // the seam, over every opaque bucket at once. The instance sets of the two HZB passes are
176
+ // disjoint, so this and the second phase's are one cut per view in total, and no instance
177
+ // is ever cut twice
172
178
  meshlet_expansion_0 = graph_vgeo_expand_if_enabled({
173
179
  graph,
174
- input_meshes: pass_data_instances_0.instances_positive,
180
+ input_meshes: gr_instances_positive,
175
181
  output_meshlets: meshlet_expansion_0,
176
182
  view,
177
183
  limits,
178
184
  });
179
185
 
180
-
181
186
  graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshlets, meshlet_expansion_0);
182
187
 
183
188
  // ----------
@@ -201,22 +206,21 @@ export function graph_rasterize_partial_opaque({
201
206
  ));
202
207
  gr_meshlets_maybe = pass_data_meshlets_1.out_meshlets_maybe = pass_meshlets_1.write(gr_meshlets_maybe);
203
208
 
204
- const primitive_state = construct_primitive_state(draw_mode, side, cull_policy);
205
-
206
209
  // ----------
207
- [viz_depth, raster_color_targets] = graph_meshlets_rasterize({
210
+ [viz_depth, raster_color_targets] = graph_meshlets_rasterize_by_bucket({
208
211
  graph,
209
212
  view,
210
213
  input_meshlets: pass_data_meshlets_1.out_meshlets_positive,
214
+ buckets: opaque,
211
215
  depth: viz_depth,
212
216
  color_targets: raster_color_targets,
213
217
  pass_descriptor: render_pass_descriptor,
214
- clear_targets: is_first_draw,
215
- primitive_state,
218
+ clear_targets: true,
219
+ cull_policy,
216
220
  viewport,
221
+ limits,
217
222
  });
218
223
 
219
- //
220
224
  is_first_draw = false;
221
225
  }
222
226
 
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_remaining_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js"],"names":[],"mappings":"AA6FA;;;;;;;;;;;;;;;;;GAiBG;AACH,kOAFa;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CAkGlD"}
1
+ {"version":3,"file":"graph_rasterize_remaining_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;GAiBG;AACH,kOAFa;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CAqFlD"}
@@ -1,96 +1,13 @@
1
- import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
- import { STRUCT_DISPATCH_COMPUTE_COMMAND } from "../../gpu_primitive/indirect/STRUCT_DISPATCH_COMPUTE_COMMAND.js";
4
- import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
5
- import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
6
- import { TransparencyMode } from "../../material/TransparencyMode.js";
7
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
8
1
  import { graph_record_stat } from "../../util/graph_record_stat.js";
9
- import { build_indirect_compute_dispatch_command } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
10
- import { graph_sort_meshlets_by_bucket_id } from "../expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js";
11
- import { shader_meshlets_extract_bucket } from "../expand/bucket/meshlet/shader_meshlets_extract_bucket.js";
12
2
  import { graph_mesh_filter_one_way } from "../expand/graph_mesh_filter_one_way.js";
13
3
  import { graph_meshlets_filter_one_way } from "../expand/graph_meshlets_filter_one_way.js";
14
- import { graph_meshlets_rasterize } from "../expand/graph_meshlets_rasterize.js";
15
4
  import { graph_expand_meshes_to_meshlets } from "../expand/mesh/graph_expand_meshes_to_meshlets.js";
16
5
  import { graph_vgeo_expand_if_enabled } from "../../geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js";
17
6
  import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
18
- import { construct_primitive_state, CullPolicy } from "../bucket/construct_primitive_state.js";
7
+ import { CullPolicy } from "../bucket/construct_primitive_state.js";
8
+ import { graph_meshlets_rasterize_by_bucket } from "../bucket/graph_meshlets_rasterize_by_bucket.js";
19
9
  import { rasterization_opaque_buckets } from "../bucket/rasterization_opaque_buckets.js";
20
10
 
21
- /**
22
- *
23
- * @param {Object} options
24
- * @param {FrameGraph} options.graph
25
- * @param {number} options.buckets
26
- * @param {number} options.bucket_id
27
- * @param {GPUCollectionLimits} options.limits
28
- */
29
- function graph_extract_meshlets_from_bucket({
30
- graph,
31
- buckets,
32
- bucket_id,
33
- limits,
34
- }) {
35
-
36
- /**
37
- *
38
- * @param data
39
- * @param {FramePassResources} resources
40
- * @param {GraphicsExecutionContext} context
41
- */
42
- function execute(data, resources, context) {
43
- const encoder = context.encoder;
44
-
45
- const buckets = resources.get(data.buckets);
46
- const output = resources.get(data.output);
47
- const command = resources.get(data.command);
48
-
49
- const bucket_id = data.bucket_id;
50
-
51
- // folded: a meshlet collection is past what one dispatch dimension reaches — see
52
- // IndirectComputeCommandBuildPass
53
- build_indirect_compute_dispatch_command(
54
- COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
55
- encoder,
56
- buckets,
57
- // the bucketed buffer header consists of pairs of u32 values (count,offset)
58
- bucket_id * (u32.size * 2),
59
- command,
60
- 0,
61
- true,
62
- );
63
-
64
- shader_meshlets_extract_bucket.dispatchIndirect({
65
- encoder,
66
- command,
67
- bindings: {
68
- bucket_index: { value: bucket_id },
69
- bucket_data: buckets,
70
- output: output,
71
- }
72
- });
73
- }
74
-
75
- const data = {};
76
-
77
- const pass = graph.add("extract meshlets from bucket", data, execute);
78
-
79
- data.buckets = pass.read(buckets);
80
- data.bucket_id = bucket_id;
81
- data.command = pass.create("command", BufferResourceDescriptor.from(
82
- STRUCT_DISPATCH_COMPUTE_COMMAND.aligned_size,
83
- GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT,
84
- ));
85
- data.output = pass.create("output", BufferResourceDescriptor.from(
86
- limits.compute_buffer_size(RasterizationCollectionType.Meshlets),
87
- GPUBufferUsage.STORAGE,
88
- 0, 16 // clear count
89
- ));
90
-
91
- return data.output;
92
- }
93
-
94
11
  /**
95
12
  *
96
13
  * @param {FrameGraph} graph
@@ -170,34 +87,21 @@ export function graph_rasterize_remaining_opaque({
170
87
  });
171
88
 
172
89
 
173
- const meshlet_buckets = graph_sort_meshlets_by_bucket_id({
174
- graph,
175
- input_meshlets: gr_live_meshlets,
176
- scene_ctx: view.scene,
177
- limits,
178
- });
179
-
180
- for (const { draw_mode, side, bucket_id } of rasterization_opaque_buckets(active_buckets)) {
181
- const primitive_state = construct_primitive_state(draw_mode, side, cull_policy);
182
-
183
- // copy out a meshlet set
184
- const meshlets = graph_extract_meshlets_from_bucket({
185
- graph,
186
- buckets: meshlet_buckets,
187
- bucket_id,
188
- limits,
189
- });
90
+ const opaque = Array.from(rasterization_opaque_buckets(active_buckets));
190
91
 
191
- [gr_depth_texture, raster_color_targets] = graph_meshlets_rasterize({
92
+ if (opaque.length > 0) {
93
+ [gr_depth_texture, raster_color_targets] = graph_meshlets_rasterize_by_bucket({
192
94
  graph,
193
95
  view,
194
- input_meshlets: meshlets,
96
+ input_meshlets: gr_live_meshlets,
97
+ buckets: opaque,
195
98
  depth: gr_depth_texture,
196
99
  color_targets: raster_color_targets,
197
100
  pass_descriptor: render_pass_descriptor,
198
101
  clear_targets: false,
199
- primitive_state,
102
+ cull_policy,
200
103
  viewport,
104
+ limits,
201
105
  });
202
106
  }
203
107
 
@@ -69,6 +69,11 @@ export class GPUInstancesAccelerationStructure {
69
69
  * on its own — what a frame does, so the build follows the bounds pass it reads
70
70
  */
71
71
  update(scene_database_buffer: GPUBuffer, cmd_ctx?: ShadeGPUCommandContext): void;
72
+ /**
73
+ * Release the tree and the list of rows it was built over. For the scene context's own
74
+ * teardown: nothing builds or reads the tree afterwards. Safe to call twice.
75
+ */
76
+ destroy(): void;
72
77
  #private;
73
78
  }
74
79
  export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAmCA;;GAEG;AACH;IA8DI;;;OAGG;IACH,sBAFW,eAAe,EAqBzB;IAzED,cAIC;IAOD;;;OAGG;IACH,wBAEC;IAmED;;;;OAIG;IACH,oBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAFW,MAAM,QAUhB;IAED;;;;OAIG;IACH,uBAFW,MAAM,QAOhB;IA8CD;;;;OAIG;IACH;;;OAGG;IACH,mBAEC;IAiGD;;;;;;;;;;;;OAYG;IACH,0BAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,QAAQ,OAAO,CAAC,CA0C5B;IAED;;;OAGG;IACH,wDAFW,sBAAsB,QAMhC;IAED;;;;;;OAMG;IACH,mDAHW,sBAAsB,QAShC;;CACJ;8BA7YY,OAAO,uBAAuB,EAAE,eAAe;uCARrB,wCAAwC"}
1
+ {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAmCA;;GAEG;AACH;IA8DI;;;OAGG;IACH,sBAFW,eAAe,EAqBzB;IAzED,cAIC;IAOD;;;OAGG;IACH,wBAEC;IAmED;;;;OAIG;IACH,oBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAFW,MAAM,QAUhB;IAED;;;;OAIG;IACH,uBAFW,MAAM,QAOhB;IA8CD;;;;OAIG;IACH;;;OAGG;IACH,mBAEC;IAiGD;;;;;;;;;;;;OAYG;IACH,0BAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,QAAQ,OAAO,CAAC,CA0C5B;IAED;;;OAGG;IACH,wDAFW,sBAAsB,QAMhC;IAED;;;;;;OAMG;IACH,mDAHW,sBAAsB,QAShC;IAED;;;OAGG;IACH,gBAKC;;CACJ;8BAxZY,OAAO,uBAAuB,EAAE,eAAe;uCARrB,wCAAwC"}
@@ -406,6 +406,17 @@ export class GPUInstancesAccelerationStructure {
406
406
 
407
407
  this.push_to_gpu(scene_database_buffer, cmd_ctx);
408
408
  }
409
+
410
+ /**
411
+ * Release the tree and the list of rows it was built over. For the scene context's own
412
+ * teardown: nothing builds or reads the tree afterwards. Safe to call twice.
413
+ */
414
+ destroy() {
415
+ this.#buffer.destroy();
416
+ this.#rows_buffer?.destroy();
417
+
418
+ this.#live.clear();
419
+ }
409
420
  }
410
421
 
411
422
  /**
@@ -75,9 +75,10 @@ export class GPUSceneContext {
75
75
  *
76
76
  * And the residency and the feedback loop with it, so that an engine host gets the whole
77
77
  * streaming loop by enabling virtual geometry rather than by wiring four objects itself
78
- * (REVIEW_LEDGER U1): `register` a container with {@link virtual_geometry_residency}, call
79
- * {@link virtual_geometry_feedback}'s `read` once a frame after the last rasterization path,
80
- * and every page after the root arrives because the cut asked for it.
78
+ * (REVIEW_LEDGER U1): `register` a container with {@link virtual_geometry_residency}, and every
79
+ * page after the root arrives because a cut asked for it. The renderer opens and closes each
80
+ * frame and schedules each reading, and {@link destroy} releases all of it; a host touches none
81
+ * of it.
81
82
  *
82
83
  * @param {Object} [options] passed to {@link GPUVirtualGeometryPool} and
83
84
  * {@link GPUVirtualGeometryRuntime}, except for `residency`
@@ -181,6 +182,13 @@ export class GPUSceneContext {
181
182
  * @param {number} dt_seconds wall-clock seconds since last call
182
183
  */
183
184
  tick(cmd_ctx: ShadeGPUCommandContext, dt_seconds: number): void;
185
+ /**
186
+ * Release this context's virtual geometry — everything {@link enable_virtual_geometry} built,
187
+ * so that a host tears a scene down by destroying the renderer and nothing of the streaming loop
188
+ * is left for it to find — then its rows, its database, its TLAS, its lights, its probe volume,
189
+ * its volumetrics, its volumetric light map, its animation and its skinning: every buffer the
190
+ * context made. Safe to call twice, and on a context that never enabled virtual geometry.
191
+ */
184
192
  destroy(): void;
185
193
  /**
186
194
  * @readonly
@@ -1 +1 @@
1
- {"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AAqEA;;;;;;;;;GASG;AACH;IA0II;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IA5KD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IAoHD;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,kDAEC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH;QAH0C,SAAS,GAAxC,oBAAoB;QAClB,yBAAyB,CAmCrC;IAED;;OAEG;IACH,6CAEC;IAYD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA0BD;;;;;OAKG;IACH,cAsEC;IAED;;;OAGG;IACH,YAFW,eAAe,QA0BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAoCD,gBAYC;IAIL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BA9pBY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;+BAtBvD,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;0CAfhD,0DAA0D;8BAItE,8CAA8C;iCAF3C,iDAAiD;qCAG7C,qDAAqD;oCAGtD,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;6BAM3D,wBAAwB;wCADb,mCAAmC;uCAdpC,wCAAwC"}
1
+ {"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AAqEA;;;;;;;;;GASG;AACH;IA0II;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IA5KD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IA2HD;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,kDAEC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAH0C,SAAS,GAAxC,oBAAoB;QAClB,yBAAyB,CAuDrC;IAED;;OAEG;IACH,6CAEC;IAYD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA0BD;;;;;OAKG;IACH,cAsEC;IAED;;;OAGG;IACH,YAFW,eAAe,QA0BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAoCD;;;;;;OAMG;IACH,gBAiBC;IAoCL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BAtuBY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;+BAtBvD,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;0CAfhD,0DAA0D;8BAItE,8CAA8C;iCAF3C,iDAAiD;qCAG7C,qDAAqD;oCAGtD,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;6BAM3D,wBAAwB;wCADb,mCAAmC;uCAdpC,wCAAwC"}