@woosh/meep-engine 3.33.0 → 3.35.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.
- package/editor/Editor.d.ts.map +1 -1
- package/editor/Editor.js +0 -3
- package/editor/ecs/component/prototypeObjectEditor.js +1 -165
- package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -1
- package/editor/ecs/component/registerBasicTypeEditors.js +0 -5
- package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -1
- package/editor/ecs/component/registerEngineComponentEditors.js +0 -20
- package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -1
- package/editor/process/SymbolicDisplayProcess.js +100 -106
- package/editor/prototypeEditorShell.d.ts.map +1 -1
- package/editor/prototypeEditorShell.js +190 -186
- package/editor/templates/entity_templates.d.ts.map +1 -1
- package/editor/templates/entity_templates.js +10 -27
- package/editor/view/makeEntityDecorators.js +2 -2
- package/package.json +1 -1
- package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.d.ts +3 -3
- package/src/core/geom/3d/aabb/MovingBoundingBox.d.ts.map +1 -0
- package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.js +5 -5
- package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts +3 -0
- package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts.map +1 -0
- package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGBA_LUT_HEATMAP_IR.js +1 -1
- package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts +6 -0
- package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts.map +1 -0
- package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_INFERNO.js +1 -1
- package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.d.ts +1 -1
- package/src/core/math/lookup/RGB_LUT_TURBO.d.ts.map +1 -0
- package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.js +1 -1
- package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.d.ts +1 -1
- package/src/core/math/lookup/RGB_LUT_VIRIDIS.d.ts.map +1 -0
- package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.js +1 -1
- package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
- package/src/engine/animation/AnimatedActions.js +2 -4
- package/src/engine/animation/AnimationUtils.d.ts +1 -17
- package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
- package/src/engine/animation/AnimationUtils.js +138 -246
- package/src/engine/ecs/EntityManager.d.ts +1 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +2 -2
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +268 -275
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +0 -10
- package/src/engine/graphics/geometry/distribute_points_on_indexed_triangles.d.ts.map +1 -0
- package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.js +3 -3
- package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/lut_to_sampler.d.ts.map +1 -0
- package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.js +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -3
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +0 -3
- package/src/engine/network/NetworkSession.d.ts +1 -1
- package/src/engine/network/NetworkSession.js +1 -1
- package/src/engine/physics/cloth/MEASUREMENTS.md +115 -0
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +2 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +9 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +30 -7
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +12 -2
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +11 -2
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +14 -7
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +6 -15
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +161 -174
- package/src/shade/device/mock/SoftwareGPUBuffer.d.ts +5 -3
- package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUBuffer.js +32 -3
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts +25 -11
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts.map +1 -1
- package/src/shade/device/timing/profile/GPUProfileSession.js +553 -474
- package/src/shade/playground/avboit/main.d.ts.map +1 -1
- package/src/shade/playground/avboit/main.js +888 -916
- package/src/shade/playground/caldera/main.js +73 -60
- package/src/shade/playground/particle_ecs/README.md +13 -7
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +5 -5
- package/src/shade/playground/particle_ecs/bonfire_effects.js +5 -5
- package/src/shade/playground/particle_ecs/effects/smoke.json +1859 -1859
- package/src/shade/playground/particle_ecs/effects/soot.json +1605 -1605
- package/src/shade/playground/particle_system/README.md +1 -2
- package/src/shade/playground/profile_hotkey.d.ts.map +1 -1
- package/src/shade/playground/profile_hotkey.js +4 -40
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +4 -39
- package/src/shade/playground/vgeo_runtime/main.js +25 -77
- package/src/shade/playground/vgeo_scene/main.js +2231 -2217
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +4 -39
- package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/measure.js +2 -4
- package/src/shade/renderer/GraphicsContext.d.ts +7 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +11 -2
- package/src/shade/renderer/Renderer.d.ts +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +41 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +8 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +21 -0
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +9 -10
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +5 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +25 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +115 -101
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +282 -140
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +30 -0
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +4 -1
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +536 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +68 -19
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +2 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +17 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +4 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +42 -12
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +93 -12
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +166 -20
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -7
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +12 -5
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +23 -13
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +1 -2
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +1 -2
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +10 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +45 -17
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +61 -19
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +8 -11
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +9 -16
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +25 -10
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +10 -8
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +19 -7
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +4 -2
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +4 -2
- package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts +4 -0
- package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.js +7 -0
- package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +1 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts +9 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +41 -0
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +37 -0
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_project_environment_sh.js +105 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +2 -0
- package/src/shade/renderer/particles/DESIGN.md +69 -18
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +7 -1
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +1247 -1244
- package/src/shade/renderer/particles/ParticleConstants.d.ts +1 -3
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +1 -3
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +7 -1
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +9 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +3 -4
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +7 -6
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +15 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +29 -11
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts +24 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.js +45 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +190 -185
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +45 -0
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +99 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +4 -4
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -36
- package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts +15 -0
- package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.js +103 -0
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts +3 -0
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +6 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +26 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +91 -0
- package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts +22 -0
- package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.js +102 -0
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts +2 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -24
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +5 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +9 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +32 -28
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +9 -105
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +5 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +11 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +11 -3
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +93 -21
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +4 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +5 -23
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +63 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts +12 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.js +11 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +15 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +17 -0
- package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts +25 -0
- package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.js +22 -0
- package/src/shade/renderer/shadow/map/shadowmap_update_score.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shadowmap_update_score.js +5 -2
- package/src/shade/renderer/texture/TextureManager.d.ts +2 -1
- package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/TextureManager.js +4 -1
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +1 -1
- package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +9 -1
- package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
- package/src/shade/renderer/util/Uint32BufferSamplingStats.js +55 -5
- package/src/shade/renderer/view/ViewManager.d.ts +7 -1
- package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
- package/src/shade/renderer/view/ViewManager.js +17 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -0
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +13 -3
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +9 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +39 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +107 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +15 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +44 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +19 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +48 -0
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +29 -0
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +90 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts +10 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.js +55 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts +10 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.js +47 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts +10 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.js +63 -0
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +17 -0
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +26 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +8 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +50 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +488 -436
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +254 -63
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +0 -35
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +0 -17
- package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
- package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
- package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +0 -18
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +0 -58
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +0 -58
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +0 -21
- package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
- package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
- package/editor/particles/rebuildParticleEmitter.js +0 -31
- package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
- package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
- package/editor/process/ParticleEmitterRebuildProcess.js +0 -217
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +0 -18
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +0 -1
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +0 -140
- package/src/engine/animation/removeEntityGenericEffect.d.ts +0 -18
- package/src/engine/animation/removeEntityGenericEffect.d.ts.map +0 -1
- package/src/engine/animation/removeEntityGenericEffect.js +0 -160
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +0 -16
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +0 -1
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +0 -194
- package/src/engine/graphics/ecs/sprite/Sprite.d.ts +0 -15
- package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +0 -1
- package/src/engine/graphics/ecs/sprite/Sprite.js +0 -14
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +0 -11
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +0 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +0 -144
- package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +0 -61
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +0 -229
- package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts +0 -6
- package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.js +0 -8
- package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts +0 -7
- package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.js +0 -9
- package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts +0 -13
- package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +0 -12
- package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts +0 -3
- package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +0 -84
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +0 -285
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +0 -1201
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts +0 -19
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +0 -67
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +0 -197
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +0 -398
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts +0 -5
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js +0 -4
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +0 -162
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -472
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +0 -10
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +0 -37
- package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts +0 -9
- package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +0 -25
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts +0 -19
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +0 -28
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts +0 -19
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +0 -162
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts +0 -5
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +0 -103
- package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts +0 -8
- package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.js +0 -28
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts +0 -2
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +0 -2
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +0 -2
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +0 -2
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts +0 -60
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +0 -128
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts +0 -47
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +0 -77
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts +0 -45
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +0 -93
- package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts +0 -95
- package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +0 -239
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts +0 -3
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +0 -6
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts +0 -13
- package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +0 -28
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts +0 -9
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +0 -24
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts +0 -13
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +0 -27
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts +0 -33
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +0 -80
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +0 -49
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +0 -135
- package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts +0 -7
- package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.js +0 -14
- package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts +0 -41
- package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +0 -59
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts +0 -4
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +0 -56
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts +0 -4
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +0 -84
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -4
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +0 -80
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts +0 -29
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +0 -43
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts +0 -5
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +0 -104
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts +0 -9
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.js +0 -11
- package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts +0 -9
- package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +0 -64
- package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts +0 -9
- package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +0 -172
- package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +0 -20
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +0 -84
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +0 -81
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +0 -200
- package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts +0 -6
- package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.js +0 -8
- package/src/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/Operation.d.ts +0 -20
- package/src/engine/graphics/particles/particular/group/Operation.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/Operation.js +0 -20
- package/src/engine/graphics/particles/particular/group/OperationType.d.ts +0 -7
- package/src/engine/graphics/particles/particular/group/OperationType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/OperationType.js +0 -9
- package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts +0 -27
- package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/ParticleAttribute.js +0 -27
- package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts +0 -8
- package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/ParticleAttributeType.js +0 -11
- package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts +0 -7
- package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/ParticleDataType.js +0 -10
- package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts +0 -24
- package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +0 -48
- package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +0 -7
- package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +0 -20
- package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts +0 -6
- package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +0 -162
- package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts +0 -8
- package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +0 -19
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +0 -77
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +0 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +0 -307
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +0 -10
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +0 -10
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +0 -61
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +0 -1
- package/src/engine/graphics3/particles/GPUParticularRenderer.js +0 -627
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts +0 -85
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +0 -1
- package/src/engine/graphics3/particles/particle_gpu_records.js +0 -227
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts +0 -35
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +0 -135
- /package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.d.ts +0 -0
|
@@ -1,474 +1,553 @@
|
|
|
1
|
-
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import { Signal } from "../../../../core/events/signal/Signal.js";
|
|
3
|
-
import { GPUFrameRecorder } from "./GPUFrameRecorder.js";
|
|
4
|
-
import { GPUProfileLevel, gpu_profile_level_name } from "./GPUProfileLevel.js";
|
|
5
|
-
import { GPUProfileMeta } from "./GPUProfileMeta.js";
|
|
6
|
-
import { SGPT_RECORD_TYPE } from "./SGPT_RECORD_TYPE.js";
|
|
7
|
-
import { SGPTWriteStream } from "./SGPTWriteStream.js";
|
|
8
|
-
import { sgpt_write_frame } from "./sgpt_frame_codec.js";
|
|
9
|
-
import { sgpt_write_meta } from "./sgpt_meta_codec.js";
|
|
10
|
-
import {
|
|
11
|
-
sgpt_intern_topology_symbols,
|
|
12
|
-
sgpt_topology_hash,
|
|
13
|
-
sgpt_write_topology
|
|
14
|
-
} from "./sgpt_topology_codec.js";
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @typedef {import("./GPUProfileFrame.js").GPUProfileFrame} GPUProfileFrame
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Default point at which an uncapped session starts saying how much it has accumulated. Does not
|
|
22
|
-
* stop anything — see {@link GPUProfileSession#byte_budget}.
|
|
23
|
-
*
|
|
24
|
-
* @type {number}
|
|
25
|
-
*/
|
|
26
|
-
const DEFAULT_BYTE_BUDGET = 512 * 1024 * 1024;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* A GPU profile recording, from `start` to `stop`.
|
|
30
|
-
*
|
|
31
|
-
* **The engine never constructs one of these.** The caller builds it and hands it over:
|
|
32
|
-
*
|
|
33
|
-
* ```js
|
|
34
|
-
* const session = new GPUProfileSession({ level: GPUProfileLevel.TIMING });
|
|
35
|
-
*
|
|
36
|
-
* renderer.profile_session = session;
|
|
37
|
-
*
|
|
38
|
-
* await session.start(graphics);
|
|
39
|
-
* // ... frames run, for as long as you like ...
|
|
40
|
-
* const bytes = await session.stop();
|
|
41
|
-
*
|
|
42
|
-
* renderer.profile_session = null;
|
|
43
|
-
* ```
|
|
44
|
-
*
|
|
45
|
-
* That ownership is the point rather than a style choice. **Nothing in the engine imports this file
|
|
46
|
-
* or anything it reaches** — the write stream, the format codecs, the topology extractor — so an
|
|
47
|
-
* application that never mentions the profiler does not carry any of it. The feature ships without
|
|
48
|
-
* a build flag, a strip-plugin interaction, or a dead branch anyone has to keep honest.
|
|
49
|
-
*
|
|
50
|
-
* Nothing under this directory is linked unconditionally. The pass encoders count dispatches into a
|
|
51
|
-
* {@link GPUProfileWork} when handed one, but they hold it as a bag of counters and never name the
|
|
52
|
-
* type; the workgroup size they record comes off {@link ComputePipelineDescriptor}, which reads it
|
|
53
|
-
* as its code is set. What remains in the engine is a nullable field and the null checks around it.
|
|
54
|
-
*
|
|
55
|
-
* Recording is an **open-ended forward stream**: `frame_limit` defaults to `Infinity` and
|
|
56
|
-
* everything captured is kept. There is no ring buffer. Uncapped means a per-frame cost is also a
|
|
57
|
-
* per-second one, so the session reports what it is accumulating rather than letting an
|
|
58
|
-
* application find out when the tab dies.
|
|
59
|
-
*
|
|
60
|
-
* @author Alex Goldring
|
|
61
|
-
* @copyright Company Named Limited (c) 2026
|
|
62
|
-
*/
|
|
63
|
-
export class GPUProfileSession {
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* @type {number}
|
|
67
|
-
*/
|
|
68
|
-
#level = GPUProfileLevel.TIMING;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* @type {number}
|
|
72
|
-
*/
|
|
73
|
-
#frame_limit = Infinity;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @type {string}
|
|
77
|
-
*/
|
|
78
|
-
#note = "";
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* @type {SGPTWriteStream|null}
|
|
82
|
-
*/
|
|
83
|
-
#stream = null;
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* @type {GPUProfileMeta}
|
|
87
|
-
*/
|
|
88
|
-
#meta = new GPUProfileMeta();
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* @type {number}
|
|
92
|
-
*/
|
|
93
|
-
#frames_recorded = 0;
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* @
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* is
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
*
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
*
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
* @
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
* @returns {
|
|
222
|
-
*/
|
|
223
|
-
get
|
|
224
|
-
return this.#
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
*
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
this.#running
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
this.
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { Signal } from "../../../../core/events/signal/Signal.js";
|
|
3
|
+
import { GPUFrameRecorder } from "./GPUFrameRecorder.js";
|
|
4
|
+
import { GPUProfileLevel, gpu_profile_level_name } from "./GPUProfileLevel.js";
|
|
5
|
+
import { GPUProfileMeta } from "./GPUProfileMeta.js";
|
|
6
|
+
import { SGPT_RECORD_TYPE } from "./SGPT_RECORD_TYPE.js";
|
|
7
|
+
import { SGPTWriteStream } from "./SGPTWriteStream.js";
|
|
8
|
+
import { sgpt_write_frame } from "./sgpt_frame_codec.js";
|
|
9
|
+
import { sgpt_write_meta } from "./sgpt_meta_codec.js";
|
|
10
|
+
import {
|
|
11
|
+
sgpt_intern_topology_symbols,
|
|
12
|
+
sgpt_topology_hash,
|
|
13
|
+
sgpt_write_topology
|
|
14
|
+
} from "./sgpt_topology_codec.js";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {import("./GPUProfileFrame.js").GPUProfileFrame} GPUProfileFrame
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Default point at which an uncapped session starts saying how much it has accumulated. Does not
|
|
22
|
+
* stop anything — see {@link GPUProfileSession#byte_budget}.
|
|
23
|
+
*
|
|
24
|
+
* @type {number}
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_BYTE_BUDGET = 512 * 1024 * 1024;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A GPU profile recording, from `start` to `stop`.
|
|
30
|
+
*
|
|
31
|
+
* **The engine never constructs one of these.** The caller builds it and hands it over:
|
|
32
|
+
*
|
|
33
|
+
* ```js
|
|
34
|
+
* const session = new GPUProfileSession({ level: GPUProfileLevel.TIMING });
|
|
35
|
+
*
|
|
36
|
+
* renderer.profile_session = session;
|
|
37
|
+
*
|
|
38
|
+
* await session.start(graphics);
|
|
39
|
+
* // ... frames run, for as long as you like ...
|
|
40
|
+
* const bytes = await session.stop();
|
|
41
|
+
*
|
|
42
|
+
* renderer.profile_session = null;
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* That ownership is the point rather than a style choice. **Nothing in the engine imports this file
|
|
46
|
+
* or anything it reaches** — the write stream, the format codecs, the topology extractor — so an
|
|
47
|
+
* application that never mentions the profiler does not carry any of it. The feature ships without
|
|
48
|
+
* a build flag, a strip-plugin interaction, or a dead branch anyone has to keep honest.
|
|
49
|
+
*
|
|
50
|
+
* Nothing under this directory is linked unconditionally. The pass encoders count dispatches into a
|
|
51
|
+
* {@link GPUProfileWork} when handed one, but they hold it as a bag of counters and never name the
|
|
52
|
+
* type; the workgroup size they record comes off {@link ComputePipelineDescriptor}, which reads it
|
|
53
|
+
* as its code is set. What remains in the engine is a nullable field and the null checks around it.
|
|
54
|
+
*
|
|
55
|
+
* Recording is an **open-ended forward stream**: `frame_limit` defaults to `Infinity` and
|
|
56
|
+
* everything captured is kept. There is no ring buffer. Uncapped means a per-frame cost is also a
|
|
57
|
+
* per-second one, so the session reports what it is accumulating rather than letting an
|
|
58
|
+
* application find out when the tab dies.
|
|
59
|
+
*
|
|
60
|
+
* @author Alex Goldring
|
|
61
|
+
* @copyright Company Named Limited (c) 2026
|
|
62
|
+
*/
|
|
63
|
+
export class GPUProfileSession {
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @type {number}
|
|
67
|
+
*/
|
|
68
|
+
#level = GPUProfileLevel.TIMING;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @type {number}
|
|
72
|
+
*/
|
|
73
|
+
#frame_limit = Infinity;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @type {string}
|
|
77
|
+
*/
|
|
78
|
+
#note = "";
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @type {SGPTWriteStream|null}
|
|
82
|
+
*/
|
|
83
|
+
#stream = null;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @type {GPUProfileMeta}
|
|
87
|
+
*/
|
|
88
|
+
#meta = new GPUProfileMeta();
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @type {number}
|
|
92
|
+
*/
|
|
93
|
+
#frames_recorded = 0;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The frames of recorders {@link begin_frame} has handed out that have not come back through
|
|
97
|
+
* {@link record_frame} yet — the ones whose timings are still on their way. {@link stop} waits
|
|
98
|
+
* for this to empty.
|
|
99
|
+
*
|
|
100
|
+
* @type {Set<GPUProfileFrame>}
|
|
101
|
+
*/
|
|
102
|
+
#outstanding = new Set();
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @type {boolean}
|
|
106
|
+
*/
|
|
107
|
+
#running = false;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Whether `stop()` has been called, or the frame limit reached. The capture is finished once
|
|
111
|
+
* this is set and nothing is outstanding.
|
|
112
|
+
*
|
|
113
|
+
* @type {boolean}
|
|
114
|
+
*/
|
|
115
|
+
#stopped = false;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @type {boolean}
|
|
119
|
+
*/
|
|
120
|
+
#budget_warned = false;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Content hash of every topology already written, to the id it was given.
|
|
124
|
+
*
|
|
125
|
+
* The whole of the deduplication. A Shade frame graph is nearly identical frame to frame, so
|
|
126
|
+
* this map stays tiny and hundreds of frames share one entry — the difference between a capture
|
|
127
|
+
* of tens of megabytes and one of a couple.
|
|
128
|
+
*
|
|
129
|
+
* @type {Map<number, number>}
|
|
130
|
+
*/
|
|
131
|
+
#topology_ids = new Map();
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @type {number}
|
|
135
|
+
*/
|
|
136
|
+
#topology_count = 0;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* How many distinct frame graph structures this capture has needed.
|
|
140
|
+
*
|
|
141
|
+
* Worth watching: if this climbs with the frame count, the graph is changing shape every frame
|
|
142
|
+
* and the size estimates for a long capture do not hold.
|
|
143
|
+
*
|
|
144
|
+
* @returns {number}
|
|
145
|
+
*/
|
|
146
|
+
get topology_count() {
|
|
147
|
+
return this.#topology_count;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Bytes at which the session warns — once — that it is getting large. It does **not** stop:
|
|
152
|
+
* full uncapped history is the behaviour that was asked for, and silently truncating a capture
|
|
153
|
+
* is worse than a large one.
|
|
154
|
+
*
|
|
155
|
+
* @type {number}
|
|
156
|
+
*/
|
|
157
|
+
byte_budget = DEFAULT_BYTE_BUDGET;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Fires per frame with the running byte total.
|
|
161
|
+
*
|
|
162
|
+
* @readonly
|
|
163
|
+
* @type {Signal<number>}
|
|
164
|
+
*/
|
|
165
|
+
onBytesWritten = new Signal();
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Fires once, with the finished capture, however the session ended — `stop()` or the frame
|
|
169
|
+
* limit running out — once the frames begun before that have landed. Both paths land here so a
|
|
170
|
+
* caller can await one thing.
|
|
171
|
+
*
|
|
172
|
+
* @readonly
|
|
173
|
+
* @type {Signal<ArrayBuffer>}
|
|
174
|
+
*/
|
|
175
|
+
onComplete = new Signal();
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @param {object} [options]
|
|
179
|
+
* @param {number} [options.level] one of {@link GPUProfileLevel}
|
|
180
|
+
* @param {number} [options.frame_limit] frames to record before stopping on its own. `Infinity`
|
|
181
|
+
* by default — a session runs until `stop()`.
|
|
182
|
+
* @param {string} [options.note] whatever you want the capture to say about itself
|
|
183
|
+
*/
|
|
184
|
+
constructor({
|
|
185
|
+
level = GPUProfileLevel.TIMING,
|
|
186
|
+
frame_limit = Infinity,
|
|
187
|
+
note = ""
|
|
188
|
+
} = {}) {
|
|
189
|
+
|
|
190
|
+
assert.isInteger(level, 'level');
|
|
191
|
+
assert.isString(note, 'note');
|
|
192
|
+
assert.ok(
|
|
193
|
+
frame_limit === Infinity || (Number.isInteger(frame_limit) && frame_limit > 0),
|
|
194
|
+
`frame_limit must be a positive integer or Infinity, was ${frame_limit}`
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
this.#level = level;
|
|
198
|
+
this.#frame_limit = frame_limit;
|
|
199
|
+
this.#note = note;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @returns {number} one of {@link GPUProfileLevel}
|
|
204
|
+
*/
|
|
205
|
+
get level() {
|
|
206
|
+
return this.#level;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Whether new frames are being taken: from `start()` until `stop()` or the frame limit. A session
|
|
211
|
+
* that is no longer running can still be waiting on frames begun before that; {@link done} says
|
|
212
|
+
* when it has them.
|
|
213
|
+
*
|
|
214
|
+
* @returns {boolean}
|
|
215
|
+
*/
|
|
216
|
+
get is_running() {
|
|
217
|
+
return this.#running;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @returns {number}
|
|
222
|
+
*/
|
|
223
|
+
get frames_recorded() {
|
|
224
|
+
return this.#frames_recorded;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* @returns {number}
|
|
229
|
+
*/
|
|
230
|
+
get bytes_written() {
|
|
231
|
+
return this.#stream === null ? 0 : this.#stream.bytes_written;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* The metadata this capture will carry. Populate before {@link start}; it is written into the
|
|
236
|
+
* stream at that point and not read again.
|
|
237
|
+
*
|
|
238
|
+
* @returns {GPUProfileMeta}
|
|
239
|
+
*/
|
|
240
|
+
get meta() {
|
|
241
|
+
return this.#meta;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Begin recording.
|
|
246
|
+
*
|
|
247
|
+
* {@link meta} is written into the stream here and not read again, so populate it first.
|
|
248
|
+
*
|
|
249
|
+
* @returns {void}
|
|
250
|
+
*/
|
|
251
|
+
start() {
|
|
252
|
+
assert.notOk(this.#running, 'session already started');
|
|
253
|
+
assert.notOk(this.#stopped, 'a stopped session cannot be restarted; construct a new one');
|
|
254
|
+
|
|
255
|
+
const meta = this.#meta;
|
|
256
|
+
|
|
257
|
+
meta.level = this.#level;
|
|
258
|
+
meta.note = this.#note;
|
|
259
|
+
|
|
260
|
+
if (meta.wall_clock_start_ms === 0) {
|
|
261
|
+
meta.wall_clock_start_ms = Date.now();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const stream = new SGPTWriteStream();
|
|
265
|
+
|
|
266
|
+
stream.write_record(SGPT_RECORD_TYPE.META, sgpt_write_meta, meta);
|
|
267
|
+
|
|
268
|
+
this.#stream = stream;
|
|
269
|
+
this.#running = true;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Open a recorder for a frame about to be encoded, or null when nothing should be recorded.
|
|
274
|
+
*
|
|
275
|
+
* **This is why the renderer imports nothing from the profiler.** It holds a nullable session
|
|
276
|
+
* and calls methods on it; the recorder type never appears in its module graph, so the whole
|
|
277
|
+
* profiler stays unreachable from any engine entry point and drops out of a bundle that does
|
|
278
|
+
* not ask for it. A `new GPUFrameRecorder(...)` in the renderer would have quietly undone that.
|
|
279
|
+
*
|
|
280
|
+
* @param {number} frame_index the renderer's own frame counter
|
|
281
|
+
* @param {number} cpu_begin_ms
|
|
282
|
+
* @returns {GPUFrameRecorder|null}
|
|
283
|
+
*/
|
|
284
|
+
begin_frame(frame_index, cpu_begin_ms) {
|
|
285
|
+
if (!this.#running) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const recorder = new GPUFrameRecorder(frame_index, cpu_begin_ms);
|
|
290
|
+
|
|
291
|
+
if (this.#level >= GPUProfileLevel.STRUCTURE) {
|
|
292
|
+
recorder.enable_structure_capture();
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (this.#level >= GPUProfileLevel.WORKLOAD) {
|
|
296
|
+
recorder.enable_work_capture();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
this.#outstanding.add(recorder.frame);
|
|
300
|
+
|
|
301
|
+
return recorder;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Close a recorder opened by {@link begin_frame} and commit what it collected — after `stop()`
|
|
306
|
+
* too, which is waiting for exactly this.
|
|
307
|
+
*
|
|
308
|
+
* @param {GPUFrameRecorder} recorder
|
|
309
|
+
* @param {number} cpu_submit_ms
|
|
310
|
+
* @returns {void}
|
|
311
|
+
*/
|
|
312
|
+
end_frame(recorder, cpu_submit_ms) {
|
|
313
|
+
assert.defined(recorder, 'recorder');
|
|
314
|
+
|
|
315
|
+
let frame;
|
|
316
|
+
|
|
317
|
+
try {
|
|
318
|
+
frame = recorder.close(cpu_submit_ms);
|
|
319
|
+
} catch (error) {
|
|
320
|
+
// `stop()` is waiting on this frame, and a capture missing it beats a caller hung for good
|
|
321
|
+
this.#settle(recorder.frame);
|
|
322
|
+
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
this.record_frame(frame);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* A frame is back, whether or not it was written. Finishes the capture if `stop()` was waiting
|
|
331
|
+
* for it and it was the last.
|
|
332
|
+
*
|
|
333
|
+
* @param {GPUProfileFrame} frame
|
|
334
|
+
* @returns {void}
|
|
335
|
+
*/
|
|
336
|
+
#settle(frame) {
|
|
337
|
+
if (
|
|
338
|
+
this.#outstanding.delete(frame)
|
|
339
|
+
&& this.#stopped
|
|
340
|
+
&& this.#outstanding.size === 0
|
|
341
|
+
&& this.#result === null
|
|
342
|
+
) {
|
|
343
|
+
this.#finish();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Write a topology if this shape has not been seen, and return the id either way.
|
|
349
|
+
*
|
|
350
|
+
* @param {GPUProfileTopology} topology
|
|
351
|
+
* @returns {number}
|
|
352
|
+
*/
|
|
353
|
+
#write_topology(topology) {
|
|
354
|
+
const hash = sgpt_topology_hash(topology);
|
|
355
|
+
|
|
356
|
+
const existing = this.#topology_ids.get(hash);
|
|
357
|
+
|
|
358
|
+
if (existing !== undefined) {
|
|
359
|
+
return existing;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const id = this.#topology_count++;
|
|
363
|
+
|
|
364
|
+
topology.id = id;
|
|
365
|
+
|
|
366
|
+
this.#topology_ids.set(hash, id);
|
|
367
|
+
|
|
368
|
+
const stream = this.#stream;
|
|
369
|
+
|
|
370
|
+
// Ahead of the record, for the same reason frame span labels are — a `SYMS` block must
|
|
371
|
+
// precede whatever references it, or a capture truncated in between resolves no names.
|
|
372
|
+
sgpt_intern_topology_symbols(topology, value => stream.intern(value));
|
|
373
|
+
|
|
374
|
+
stream.write_record(
|
|
375
|
+
SGPT_RECORD_TYPE.TOPO,
|
|
376
|
+
(buffer, t) => sgpt_write_topology(buffer, t, value => stream.intern(value)),
|
|
377
|
+
topology
|
|
378
|
+
);
|
|
379
|
+
|
|
380
|
+
return id;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Commit one frame.
|
|
385
|
+
*
|
|
386
|
+
* Taken for as long as the stream is open: from `start()` until the capture is finished, which
|
|
387
|
+
* `stop()` holds off until every frame already begun has landed. Ignored before `start()`, once
|
|
388
|
+
* the capture is finished, and past the frame limit — frames begun before the limit was reached
|
|
389
|
+
* still land after it — rather than throwing inside somebody's render loop.
|
|
390
|
+
*
|
|
391
|
+
* @param {GPUProfileFrame} frame
|
|
392
|
+
* @returns {void}
|
|
393
|
+
*/
|
|
394
|
+
record_frame(frame) {
|
|
395
|
+
assert.defined(frame, 'frame');
|
|
396
|
+
|
|
397
|
+
try {
|
|
398
|
+
this.#write_frame(frame);
|
|
399
|
+
} finally {
|
|
400
|
+
// written, refused or thrown, it is no longer on its way
|
|
401
|
+
this.#settle(frame);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* @param {GPUProfileFrame} frame
|
|
407
|
+
* @returns {void}
|
|
408
|
+
*/
|
|
409
|
+
#write_frame(frame) {
|
|
410
|
+
if (this.#stream === null || this.#result !== null || this.#frames_recorded >= this.#frame_limit) {
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
const stream = this.#stream;
|
|
415
|
+
|
|
416
|
+
// Reserve before writing, so the buffer's growth — an allocation and a copy — happens here
|
|
417
|
+
// at the boundary rather than part-way through encoding a frame.
|
|
418
|
+
stream.reserve_frame();
|
|
419
|
+
|
|
420
|
+
if (frame.topology !== null && frame.topology !== undefined) {
|
|
421
|
+
frame.topology_id = this.#write_topology(frame.topology);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/*
|
|
425
|
+
Intern every name this frame uses *before* the record is opened.
|
|
426
|
+
|
|
427
|
+
`write_record` flushes pending symbols ahead of the record it is about to write, and
|
|
428
|
+
interning from inside the payload writer is too late for that — the symbols would land in
|
|
429
|
+
the *next* flush, behind the record referencing them. A reader of a capture truncated in
|
|
430
|
+
between then resolves none of them, which is the failure this format exists to avoid.
|
|
431
|
+
|
|
432
|
+
Doing it here rather than inside the stream keeps the stream ignorant of the frame model.
|
|
433
|
+
*/
|
|
434
|
+
for (const span of frame.spans) {
|
|
435
|
+
stream.intern(span.label);
|
|
436
|
+
|
|
437
|
+
if (span.work !== null && span.work !== undefined) {
|
|
438
|
+
stream.intern(span.work.pipeline);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
stream.write_record(
|
|
443
|
+
SGPT_RECORD_TYPE.FRAM,
|
|
444
|
+
(buffer, f) => sgpt_write_frame(buffer, f, value => stream.intern(value)),
|
|
445
|
+
frame
|
|
446
|
+
);
|
|
447
|
+
|
|
448
|
+
this.#frames_recorded++;
|
|
449
|
+
|
|
450
|
+
const bytes = stream.bytes_written;
|
|
451
|
+
|
|
452
|
+
if (this.onBytesWritten.hasHandlers()) {
|
|
453
|
+
this.onBytesWritten.send1(bytes);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
if (!this.#budget_warned && bytes >= this.byte_budget) {
|
|
457
|
+
this.#budget_warned = true;
|
|
458
|
+
|
|
459
|
+
const per_frame = Math.round(bytes / this.#frames_recorded);
|
|
460
|
+
|
|
461
|
+
console.warn(
|
|
462
|
+
`GPUProfileSession: ${(bytes / (1024 * 1024)).toFixed(0)} MiB after `
|
|
463
|
+
+ `${this.#frames_recorded} frames at level ${gpu_profile_level_name(this.#level)} `
|
|
464
|
+
+ `(~${per_frame} bytes/frame). Recording continues — call stop() when you have enough.`
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if (this.#frames_recorded >= this.#frame_limit) {
|
|
469
|
+
this.stop();
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* The capture as it stands, without ending the session.
|
|
475
|
+
*
|
|
476
|
+
* Reads back as a capture that was cut short — no directory, not marked closed — because that
|
|
477
|
+
* is precisely what it is. Recording continues afterwards.
|
|
478
|
+
*
|
|
479
|
+
* @returns {ArrayBuffer}
|
|
480
|
+
*/
|
|
481
|
+
snapshot() {
|
|
482
|
+
assert.ok(this.#running, 'session is not running');
|
|
483
|
+
|
|
484
|
+
return this.#stream.snapshot();
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* End the recording, and resolve with the capture once every frame already begun has landed.
|
|
489
|
+
*
|
|
490
|
+
* No frame is begun after this — {@link begin_frame} hands out nothing — but the ones that were
|
|
491
|
+
* are kept. A frame is committed when its timestamp readback resolves, a `mapAsync` behind its
|
|
492
|
+
* submit, so when `stop()` is called the last frame or two are always still on their way; behind
|
|
493
|
+
* a first-use pipeline compile, which holds the queue for seconds, every frame of a short capture
|
|
494
|
+
* can be. Finishing the stream on the spot threw all of those away without a word.
|
|
495
|
+
*
|
|
496
|
+
* Calling it again resolves with the same capture rather than complaining; a session that hit
|
|
497
|
+
* its frame limit has already stopped itself, and the caller awaiting `stop()` should still get
|
|
498
|
+
* the capture.
|
|
499
|
+
*
|
|
500
|
+
* @returns {Promise<ArrayBuffer>}
|
|
501
|
+
*/
|
|
502
|
+
stop() {
|
|
503
|
+
if (!this.#stopped) {
|
|
504
|
+
assert.ok(this.#running, 'session was never started');
|
|
505
|
+
|
|
506
|
+
this.#running = false;
|
|
507
|
+
this.#stopped = true;
|
|
508
|
+
|
|
509
|
+
if (this.#outstanding.size === 0) {
|
|
510
|
+
this.#finish();
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
return this.done;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Close the stream and hand the capture to whoever is waiting for it.
|
|
519
|
+
*
|
|
520
|
+
* @returns {void}
|
|
521
|
+
*/
|
|
522
|
+
#finish() {
|
|
523
|
+
this.#result = this.#stream.finish();
|
|
524
|
+
|
|
525
|
+
this.onComplete.send1(this.#result);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* @type {ArrayBuffer|null}
|
|
530
|
+
*/
|
|
531
|
+
#result = null;
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Resolves with the capture when the session ends, whichever way it ends — after the frames
|
|
535
|
+
* begun before the end have landed.
|
|
536
|
+
*
|
|
537
|
+
* @returns {Promise<ArrayBuffer>}
|
|
538
|
+
*/
|
|
539
|
+
get done() {
|
|
540
|
+
if (this.#result !== null) {
|
|
541
|
+
return Promise.resolve(this.#result);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
return new Promise(resolve => {
|
|
545
|
+
this.onComplete.addOne(resolve);
|
|
546
|
+
|
|
547
|
+
if (this.#result !== null) {
|
|
548
|
+
// guard against the session ending between the check above and the subscription
|
|
549
|
+
resolve(this.#result);
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
}
|