@woosh/meep-engine 3.58.0 → 3.59.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/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +450 -43
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +156 -25
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +26 -5
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +35 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +2 -1
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +2 -1
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +5 -3
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_render_cost.js +8 -7
- package/src/generation/foliage/asset/TreeAsset.d.ts +17 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +20 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +10 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +57 -29
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +4 -2
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -1
- package/src/generation/foliage/asset/tree_lod_plan.js +12 -14
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +6 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +7 -0
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +6 -6
- package/src/generation/foliage/material/foliage_tile.js +3 -3
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +2 -2
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -7
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +85 -40
- package/src/generation/foliage/mesh/tree_clusters.d.ts +26 -5
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_clusters.js +52 -39
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +32 -54
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +157 -3
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +19 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +41 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2034
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +27 -56
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/renderer/Renderer.d.ts +3 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +94 -38
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- 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 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
- 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 +14 -70
- 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 +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- 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 +15 -174
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +25 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +126 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +832 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +9 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +0 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +0 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +5 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +13 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +20 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +152 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +14 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +50 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +26 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +3 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +8 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +3 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- 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 +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +47 -5
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Render channels an emitter can bind to one of its effect's
|
|
2
|
+
* Render channels an emitter can bind to one of its effect's particle fields. The names
|
|
3
3
|
* match the `render_*` fields of {@link ../data/PARTICLE_EMITTER_STRUCT.js}.
|
|
4
4
|
*
|
|
5
5
|
* @type {string[]}
|
|
@@ -9,9 +9,9 @@ export const EMITTER_RENDER_CHANNELS: string[];
|
|
|
9
9
|
* How many record words the render pass reads for each channel.
|
|
10
10
|
*
|
|
11
11
|
* A channel is read at a fixed width — `chunk_particle_billboard_vertex.js` takes four words for
|
|
12
|
-
* colour and three for position, whatever the
|
|
13
|
-
* to a narrower
|
|
14
|
-
* next, and nothing downstream objects: the particles simply come out wrong.
|
|
12
|
+
* colour and three for position, whatever the particle field behind the offset happens to be.
|
|
13
|
+
* Binding one to a narrower particle field is therefore not a smaller read but a read into whatever
|
|
14
|
+
* the layout put next, and nothing downstream objects: the particles simply come out wrong.
|
|
15
15
|
*
|
|
16
16
|
* Binding is deliberately not made to enforce this — the offsets are the record's, and an author who
|
|
17
17
|
* knows what is packed where may mean it — but an editor has this table so it can say so.
|
|
@@ -38,10 +38,12 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS: {
|
|
|
38
38
|
* row in the emitter table is retired, and its particles with it within a frame, because they
|
|
39
39
|
* carry that row's generation. There is no transform of its own to keep in step with anything.
|
|
40
40
|
*
|
|
41
|
-
* The rest is a description of an effect and nothing else: the
|
|
42
|
-
* compiled {@link program}, the {@link
|
|
43
|
-
*
|
|
44
|
-
*
|
|
41
|
+
* The rest is a description of an effect and nothing else: the particle field {@link layout} and
|
|
42
|
+
* the compiled {@link program}, the {@link emitter_layout} and this emitter's
|
|
43
|
+
* {@link emitter_fields} values, the {@link texture} to draw with, spawn rate, pre-warm duration,
|
|
44
|
+
* blend / projection / feature flags, render-channel bindings and flipbook grid. Every one of those
|
|
45
|
+
* is the author's, means the same thing with no device present, and is what a saved effect is made
|
|
46
|
+
* of.
|
|
45
47
|
*
|
|
46
48
|
* There are no bounds among them, and there is nowhere here they could go. An emitter's particles
|
|
47
49
|
* are simulated in world space by arbitrary bytecode: they go where the program sends them, at
|
|
@@ -53,8 +55,9 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS: {
|
|
|
53
55
|
* emitter opts into culling at all: `EMITTER_FLAG.CULL` in {@link flags}.
|
|
54
56
|
*
|
|
55
57
|
* **Nothing here is the GPU's.** Which table row the emitter was given, which tenancy of it, where
|
|
56
|
-
* its program
|
|
57
|
-
*
|
|
58
|
+
* its program and its emitter fields were placed in the program heap, which transforms are bound to
|
|
59
|
+
* those fields, which `transforms` row it was registered at, where its texture was packed into the
|
|
60
|
+
* atlas — all of that is
|
|
58
61
|
* {@link ./GPUParticleEmitterContext.js GPUParticleEmitterContext}, held by the
|
|
59
62
|
* {@link ./EmitterRegistry.js} that registered the emitter and reachable through
|
|
60
63
|
* {@link ./EmitterRegistry.js#context}. An emitter no registry holds has none, which is also how
|
|
@@ -71,21 +74,27 @@ export class ParticleEmitter {
|
|
|
71
74
|
* Build an emitter from a plain description. Every parameter is optional except the compiled
|
|
72
75
|
* effect — an emitter with no program has nothing to run.
|
|
73
76
|
*
|
|
74
|
-
* `layout` and `
|
|
75
|
-
* so an effect goes in by spreading it:
|
|
77
|
+
* `layout`, `program`, `emitter_layout` and `emitter_fields` are what
|
|
78
|
+
* {@link ./create_particle_effect.js} returns, so an effect goes in by spreading it:
|
|
79
|
+
* `ParticleEmitter.from({ ...effect, spawn_rate: 100 })`.
|
|
76
80
|
*
|
|
77
81
|
* @param {object} config
|
|
78
|
-
* @param {import("../layout/ParticleLayout.js").ParticleLayout} config.layout
|
|
79
|
-
*
|
|
82
|
+
* @param {import("../layout/ParticleLayout.js").ParticleLayout} config.layout particle field
|
|
83
|
+
* schema
|
|
80
84
|
* @param {import("../isa/ParticleProgram.js").ParticleProgram} config.program compiled INIT /
|
|
81
85
|
* UPDATE bytecode
|
|
82
|
-
* @param {
|
|
86
|
+
* @param {import("../layout/ParticleLayout.js").ParticleLayout|null} [config.emitter_layout] the
|
|
87
|
+
* emitter field schema the program was compiled against
|
|
88
|
+
* @param {ArrayLike<number>} [config.emitter_fields] this emitter's values for them, as f32 bit
|
|
89
|
+
* patterns laid out by `emitter_layout`
|
|
90
|
+
* @param {undefined} [config.position] must be absent: an emitter is placed by the `transforms`
|
|
91
|
+
* row it is registered at, so place its entity instead
|
|
83
92
|
* @param {string|null} [config.texture] image URL to draw with
|
|
84
93
|
* @param {number} [config.seed]
|
|
85
94
|
* @param {number} [config.spawn_rate] particles/second
|
|
86
95
|
* @param {number} [config.prewarm] seconds of emission to run forward before the first frame
|
|
87
96
|
* @param {object} [config.flags] passed to {@link make_emitter_flags}
|
|
88
|
-
* @param {Object<string,string>} [config.render] render channel ->
|
|
97
|
+
* @param {Object<string,string>} [config.render] render channel -> particle field name
|
|
89
98
|
* @param {ArrayLike<number>} [config.flipbook] [cols, rows]
|
|
90
99
|
* @param {string} [config.name]
|
|
91
100
|
* @returns {ParticleEmitter}
|
|
@@ -93,7 +102,9 @@ export class ParticleEmitter {
|
|
|
93
102
|
static from(config: {
|
|
94
103
|
layout: import("../layout/ParticleLayout.js").ParticleLayout;
|
|
95
104
|
program: import("../isa/ParticleProgram.js").ParticleProgram;
|
|
96
|
-
|
|
105
|
+
emitter_layout?: import("../layout/ParticleLayout.js").ParticleLayout | null;
|
|
106
|
+
emitter_fields?: ArrayLike<number>;
|
|
107
|
+
position?: undefined;
|
|
97
108
|
texture?: string | null;
|
|
98
109
|
seed?: number;
|
|
99
110
|
spawn_rate?: number;
|
|
@@ -122,12 +133,30 @@ export class ParticleEmitter {
|
|
|
122
133
|
*/
|
|
123
134
|
set needsUpdate(value: boolean);
|
|
124
135
|
/**
|
|
125
|
-
* The
|
|
126
|
-
* wide each is, and what word of the record it sits at.
|
|
136
|
+
* The particle field schema: which named particle fields a particle of this emitter has,
|
|
137
|
+
* how wide each is, and what word of the record it sits at.
|
|
127
138
|
*
|
|
128
139
|
* @type {import("../layout/ParticleLayout.js").ParticleLayout}
|
|
129
140
|
*/
|
|
130
141
|
layout: import("../layout/ParticleLayout.js").ParticleLayout;
|
|
142
|
+
/**
|
|
143
|
+
* The emitter field schema the effect declares: which named fields each of its emitters
|
|
144
|
+
* carries, laid out from word zero ({@link ../layout/ParticleLayout.js ParticleLayout.emitter}).
|
|
145
|
+
* `null` for an effect that declares none. Part of the effect, like {@link layout} — the program
|
|
146
|
+
* is compiled against it.
|
|
147
|
+
*
|
|
148
|
+
* @type {import("../layout/ParticleLayout.js").ParticleLayout|null}
|
|
149
|
+
*/
|
|
150
|
+
emitter_layout: import("../layout/ParticleLayout.js").ParticleLayout | null;
|
|
151
|
+
/**
|
|
152
|
+
* This emitter's values for its emitter fields, as f32 bit patterns laid out by
|
|
153
|
+
* {@link emitter_layout}. The instance's own data: two emitters of one effect share the program
|
|
154
|
+
* and differ here, and a registry gives each of them a block of its own. Words the array is
|
|
155
|
+
* too short to give read zero.
|
|
156
|
+
*
|
|
157
|
+
* @type {Uint32Array}
|
|
158
|
+
*/
|
|
159
|
+
emitter_fields: Uint32Array;
|
|
131
160
|
/**
|
|
132
161
|
* The compiled INIT/UPDATE bytecode run for every particle of this emitter.
|
|
133
162
|
* Replace the immutable program to edit it; do not mutate its bytecode in place.
|
|
@@ -196,7 +225,7 @@ export class ParticleEmitter {
|
|
|
196
225
|
* @type {Float32Array}
|
|
197
226
|
*/
|
|
198
227
|
flipbook: Float32Array;
|
|
199
|
-
/** @type {number} record word offset of world position, or {@link
|
|
228
|
+
/** @type {number} record word offset of world position, or {@link PARTICLE_FIELD_ABSENT} */
|
|
200
229
|
render_position: number;
|
|
201
230
|
/** @type {number} record word offset of size */
|
|
202
231
|
render_size: number;
|
|
@@ -210,17 +239,17 @@ export class ParticleEmitter {
|
|
|
210
239
|
render_velocity: number;
|
|
211
240
|
get type(): string;
|
|
212
241
|
/**
|
|
213
|
-
* Bind render channels to
|
|
242
|
+
* Bind render channels to particle fields of this emitter's effect, by particle field name.
|
|
214
243
|
* Channels left out of `channels` keep whatever they had; a channel that was never bound stays
|
|
215
|
-
* at {@link
|
|
216
|
-
*
|
|
244
|
+
* at {@link PARTICLE_FIELD_ABSENT}, which the passes read as "this emitter has no such
|
|
245
|
+
* particle field" — the passes that draw substitute a default, and the bounds pass treats the
|
|
217
246
|
* particle as being at the origin.
|
|
218
247
|
*
|
|
219
248
|
* The record stores word offsets rather than names because that is what those passes index a
|
|
220
249
|
* particle record with; resolving here is the only place a name is involved.
|
|
221
250
|
*
|
|
222
251
|
* @param {Object<string,string>} channels channel name (see {@link EMITTER_RENDER_CHANNELS}) ->
|
|
223
|
-
*
|
|
252
|
+
* particle field name in the effect's layout
|
|
224
253
|
*/
|
|
225
254
|
bind_render(channels: {
|
|
226
255
|
[x: string]: string;
|
|
@@ -248,9 +277,10 @@ export class ParticleEmitter {
|
|
|
248
277
|
/**
|
|
249
278
|
* Make this emitter a copy of `other`: same effect, same settings.
|
|
250
279
|
*
|
|
251
|
-
* The
|
|
280
|
+
* The layouts and the compiled program are shared rather than duplicated — all are immutable
|
|
252
281
|
* once compiled, and sharing them is what puts two emitters of one effect on one program id in
|
|
253
|
-
* the program heap, hence in one simulation bucket.
|
|
282
|
+
* the program heap, hence in one simulation bucket. The emitter field values are copied: they
|
|
283
|
+
* are this instance's.
|
|
254
284
|
*
|
|
255
285
|
* What is not copied is anything a registry gave the original: a copy is a second emitter, not
|
|
256
286
|
* a second reference to the first one's table row.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleEmitter.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticleEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleEmitter.js"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,sCAFU,MAAM,EAAE,CAIf;AAEH;;;;;;;;;;;;GAYG;AACH;QAFiB,MAAM,GAAE,MAAM;EAS5B;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH;IAuUI;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH;QApBwE,MAAM,EAAnE,OAAO,6BAA6B,EAAE,cAAc;QAEQ,OAAO,EAAnE,OAAO,2BAA2B,EAAE,eAAe;QAEgB,cAAc,GAAjF,OAAO,6BAA6B,EAAE,cAAc,GAAC,IAAI;QAE9B,cAAc,GAAzC,UAAU,MAAM,CAAC;QAEE,QAAQ,GAA3B,SAAS;QAEY,OAAO,GAA5B,MAAM,GAAC,IAAI;QACK,IAAI,GAApB,MAAM;QACU,UAAU,GAA1B,MAAM;QACU,OAAO,GAAvB,MAAM;QACU,KAAK,GAArB,MAAM;QACyB,MAAM;gBAA9B,MAAM,GAAC,MAAM;;QACO,QAAQ,GAAnC,UAAU,MAAM,CAAC;QACD,IAAI,GAApB,MAAM;QACJ,eAAe,CAuD3B;IAxZD;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAUV;;OAEG;IACH,sBAEC;IAED;;;;OAIG;IACH,gCAIC;IAED;;;;;OAKG;IACH,QAFU,OAAO,6BAA6B,EAAE,cAAc,CAEvD;IAEP;;;;;;;OAOG;IACH,gBAFU,OAAO,6BAA6B,EAAE,cAAc,GAAC,IAAI,CAE7C;IAEtB;;;;;;;OAOG;IACH,gBAFU,WAAW,CAEe;IAEpC;;;;;OAKG;IACH,SAFU,OAAO,2BAA2B,EAAE,eAAe,CAErD;IAER;;;;;;;;;;;OAWG;IACH,SAFU,MAAM,GAAC,IAAI,CAEN;IAEf;;;;;;;;OAQG;IACH,MAFU,MAAM,CAEP;IAET;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,UAFU,YAAY,CAEc;IAEpC,4FAA4F;IAC5F,iBADW,MAAM,CACuB;IACxC,gDAAgD;IAChD,aADW,MAAM,CACmB;IACpC,uDAAuD;IACvD,cADW,MAAM,CACoB;IACrC,4IAA4I;IAC5I,oBADW,MAAM,CAC0B;IAC3C,gEAAgE;IAChE,cADW,MAAM,CACoB;IACrC,sFAAsF;IACtF,iBADW,MAAM,CACuB;IAExC,mBAEC;IAED;;;;;;;;;;;;OAYG;IACH;YAHkB,MAAM,GAAC,MAAM;aA2B9B;IAED;;;;;;;;;;OAUG;IACH,cAHW,eAAe,GACb,OAAO,CA0BnB;IAED;;;;;;OAMG;IACH,QAFa,MAAM,CA2BlB;IAED;;;;;;;;;;;;OAYG;IACH,YAFW,eAAe,QAqCzB;IAED;;;;OAIG;IACH,SAFa,eAAe,CAQ3B;IAuFL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
2
|
import { is_typed_array_equals } from "../../../../core/collection/array/typed/is_typed_array_equals.js";
|
|
3
3
|
import { float32_array_hash } from "../../../../core/collection/array/typed/float32_array_hash.js";
|
|
4
|
+
import { uint32_array_hash } from "../../../../core/collection/array/typed/uint32_array_hash.js";
|
|
4
5
|
import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
|
|
5
6
|
import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
|
|
6
7
|
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
7
8
|
import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
|
|
8
|
-
import {
|
|
9
|
+
import { PARTICLE_FIELD_ABSENT, make_emitter_flags } from "../data/PARTICLE_EMITTER_STRUCT.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
|
-
* Render channels an emitter can bind to one of its effect's
|
|
12
|
+
* Render channels an emitter can bind to one of its effect's particle fields. The names
|
|
12
13
|
* match the `render_*` fields of {@link ../data/PARTICLE_EMITTER_STRUCT.js}.
|
|
13
14
|
*
|
|
14
15
|
* @type {string[]}
|
|
@@ -21,9 +22,9 @@ export const EMITTER_RENDER_CHANNELS = Object.freeze([
|
|
|
21
22
|
* How many record words the render pass reads for each channel.
|
|
22
23
|
*
|
|
23
24
|
* A channel is read at a fixed width — `chunk_particle_billboard_vertex.js` takes four words for
|
|
24
|
-
* colour and three for position, whatever the
|
|
25
|
-
* to a narrower
|
|
26
|
-
* next, and nothing downstream objects: the particles simply come out wrong.
|
|
25
|
+
* colour and three for position, whatever the particle field behind the offset happens to be.
|
|
26
|
+
* Binding one to a narrower particle field is therefore not a smaller read but a read into whatever
|
|
27
|
+
* the layout put next, and nothing downstream objects: the particles simply come out wrong.
|
|
27
28
|
*
|
|
28
29
|
* Binding is deliberately not made to enforce this — the offsets are the record's, and an author who
|
|
29
30
|
* knows what is packed where may mean it — but an editor has this table so it can say so.
|
|
@@ -56,10 +57,12 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS = Object.freeze({
|
|
|
56
57
|
* row in the emitter table is retired, and its particles with it within a frame, because they
|
|
57
58
|
* carry that row's generation. There is no transform of its own to keep in step with anything.
|
|
58
59
|
*
|
|
59
|
-
* The rest is a description of an effect and nothing else: the
|
|
60
|
-
* compiled {@link program}, the {@link
|
|
61
|
-
*
|
|
62
|
-
*
|
|
60
|
+
* The rest is a description of an effect and nothing else: the particle field {@link layout} and
|
|
61
|
+
* the compiled {@link program}, the {@link emitter_layout} and this emitter's
|
|
62
|
+
* {@link emitter_fields} values, the {@link texture} to draw with, spawn rate, pre-warm duration,
|
|
63
|
+
* blend / projection / feature flags, render-channel bindings and flipbook grid. Every one of those
|
|
64
|
+
* is the author's, means the same thing with no device present, and is what a saved effect is made
|
|
65
|
+
* of.
|
|
63
66
|
*
|
|
64
67
|
* There are no bounds among them, and there is nowhere here they could go. An emitter's particles
|
|
65
68
|
* are simulated in world space by arbitrary bytecode: they go where the program sends them, at
|
|
@@ -71,8 +74,9 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS = Object.freeze({
|
|
|
71
74
|
* emitter opts into culling at all: `EMITTER_FLAG.CULL` in {@link flags}.
|
|
72
75
|
*
|
|
73
76
|
* **Nothing here is the GPU's.** Which table row the emitter was given, which tenancy of it, where
|
|
74
|
-
* its program
|
|
75
|
-
*
|
|
77
|
+
* its program and its emitter fields were placed in the program heap, which transforms are bound to
|
|
78
|
+
* those fields, which `transforms` row it was registered at, where its texture was packed into the
|
|
79
|
+
* atlas — all of that is
|
|
76
80
|
* {@link ./GPUParticleEmitterContext.js GPUParticleEmitterContext}, held by the
|
|
77
81
|
* {@link ./EmitterRegistry.js} that registered the emitter and reachable through
|
|
78
82
|
* {@link ./EmitterRegistry.js#context}. An emitter no registry holds has none, which is also how
|
|
@@ -119,13 +123,33 @@ export class ParticleEmitter {
|
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
/**
|
|
122
|
-
* The
|
|
123
|
-
* wide each is, and what word of the record it sits at.
|
|
126
|
+
* The particle field schema: which named particle fields a particle of this emitter has,
|
|
127
|
+
* how wide each is, and what word of the record it sits at.
|
|
124
128
|
*
|
|
125
129
|
* @type {import("../layout/ParticleLayout.js").ParticleLayout}
|
|
126
130
|
*/
|
|
127
131
|
layout;
|
|
128
132
|
|
|
133
|
+
/**
|
|
134
|
+
* The emitter field schema the effect declares: which named fields each of its emitters
|
|
135
|
+
* carries, laid out from word zero ({@link ../layout/ParticleLayout.js ParticleLayout.emitter}).
|
|
136
|
+
* `null` for an effect that declares none. Part of the effect, like {@link layout} — the program
|
|
137
|
+
* is compiled against it.
|
|
138
|
+
*
|
|
139
|
+
* @type {import("../layout/ParticleLayout.js").ParticleLayout|null}
|
|
140
|
+
*/
|
|
141
|
+
emitter_layout = null;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* This emitter's values for its emitter fields, as f32 bit patterns laid out by
|
|
145
|
+
* {@link emitter_layout}. The instance's own data: two emitters of one effect share the program
|
|
146
|
+
* and differ here, and a registry gives each of them a block of its own. Words the array is
|
|
147
|
+
* too short to give read zero.
|
|
148
|
+
*
|
|
149
|
+
* @type {Uint32Array}
|
|
150
|
+
*/
|
|
151
|
+
emitter_fields = new Uint32Array(0);
|
|
152
|
+
|
|
129
153
|
/**
|
|
130
154
|
* The compiled INIT/UPDATE bytecode run for every particle of this emitter.
|
|
131
155
|
* Replace the immutable program to edit it; do not mutate its bytecode in place.
|
|
@@ -201,35 +225,35 @@ export class ParticleEmitter {
|
|
|
201
225
|
*/
|
|
202
226
|
flipbook = new Float32Array([1, 1]);
|
|
203
227
|
|
|
204
|
-
/** @type {number} record word offset of world position, or {@link
|
|
205
|
-
render_position =
|
|
228
|
+
/** @type {number} record word offset of world position, or {@link PARTICLE_FIELD_ABSENT} */
|
|
229
|
+
render_position = PARTICLE_FIELD_ABSENT;
|
|
206
230
|
/** @type {number} record word offset of size */
|
|
207
|
-
render_size =
|
|
231
|
+
render_size = PARTICLE_FIELD_ABSENT;
|
|
208
232
|
/** @type {number} record word offset of rgba colour */
|
|
209
|
-
render_color =
|
|
233
|
+
render_color = PARTICLE_FIELD_ABSENT;
|
|
210
234
|
/** @type {number} record word offset of the orientation, a quaternion (x, y, z, w) turning the sprite inside its projection mode's frame */
|
|
211
|
-
render_orientation =
|
|
235
|
+
render_orientation = PARTICLE_FIELD_ABSENT;
|
|
212
236
|
/** @type {number} record word offset of flipbook frame index */
|
|
213
|
-
render_frame =
|
|
237
|
+
render_frame = PARTICLE_FIELD_ABSENT;
|
|
214
238
|
/** @type {number} record word offset of velocity, read by the STRETCHED projection */
|
|
215
|
-
render_velocity =
|
|
239
|
+
render_velocity = PARTICLE_FIELD_ABSENT;
|
|
216
240
|
|
|
217
241
|
get type() {
|
|
218
242
|
return "ParticleEmitter";
|
|
219
243
|
}
|
|
220
244
|
|
|
221
245
|
/**
|
|
222
|
-
* Bind render channels to
|
|
246
|
+
* Bind render channels to particle fields of this emitter's effect, by particle field name.
|
|
223
247
|
* Channels left out of `channels` keep whatever they had; a channel that was never bound stays
|
|
224
|
-
* at {@link
|
|
225
|
-
*
|
|
248
|
+
* at {@link PARTICLE_FIELD_ABSENT}, which the passes read as "this emitter has no such
|
|
249
|
+
* particle field" — the passes that draw substitute a default, and the bounds pass treats the
|
|
226
250
|
* particle as being at the origin.
|
|
227
251
|
*
|
|
228
252
|
* The record stores word offsets rather than names because that is what those passes index a
|
|
229
253
|
* particle record with; resolving here is the only place a name is involved.
|
|
230
254
|
*
|
|
231
255
|
* @param {Object<string,string>} channels channel name (see {@link EMITTER_RENDER_CHANNELS}) ->
|
|
232
|
-
*
|
|
256
|
+
* particle field name in the effect's layout
|
|
233
257
|
*/
|
|
234
258
|
bind_render(channels) {
|
|
235
259
|
assert.isObject(channels, 'channels');
|
|
@@ -286,6 +310,10 @@ export class ParticleEmitter {
|
|
|
286
310
|
&& this.render_frame === other.render_frame
|
|
287
311
|
&& this.render_velocity === other.render_velocity
|
|
288
312
|
&& is_typed_array_equals(this.flipbook, other.flipbook)
|
|
313
|
+
&& is_typed_array_equals(this.emitter_fields, other.emitter_fields)
|
|
314
|
+
&& (this.emitter_layout === other.emitter_layout
|
|
315
|
+
|| (this.emitter_layout !== null && other.emitter_layout !== null
|
|
316
|
+
&& this.emitter_layout.equals(other.emitter_layout)))
|
|
289
317
|
&& this.layout.equals(other.layout)
|
|
290
318
|
&& this.program.equals(other.program);
|
|
291
319
|
}
|
|
@@ -312,8 +340,13 @@ export class ParticleEmitter {
|
|
|
312
340
|
hash_mix3(this.seed, computeHashFloat(this.spawn_rate), computeHashFloat(this.prewarm))
|
|
313
341
|
);
|
|
314
342
|
|
|
343
|
+
const fields = hash_mix2(
|
|
344
|
+
this.emitter_layout === null ? 0 : this.emitter_layout.hash(),
|
|
345
|
+
uint32_array_hash(this.emitter_fields, 0, this.emitter_fields.length)
|
|
346
|
+
);
|
|
347
|
+
|
|
315
348
|
return hash_mix3(
|
|
316
|
-
|
|
349
|
+
hash_mix3(bindings, flipbook, fields),
|
|
317
350
|
appearance,
|
|
318
351
|
hash_mix2(this.layout.hash(), this.program.hash())
|
|
319
352
|
);
|
|
@@ -322,9 +355,10 @@ export class ParticleEmitter {
|
|
|
322
355
|
/**
|
|
323
356
|
* Make this emitter a copy of `other`: same effect, same settings.
|
|
324
357
|
*
|
|
325
|
-
* The
|
|
358
|
+
* The layouts and the compiled program are shared rather than duplicated — all are immutable
|
|
326
359
|
* once compiled, and sharing them is what puts two emitters of one effect on one program id in
|
|
327
|
-
* the program heap, hence in one simulation bucket.
|
|
360
|
+
* the program heap, hence in one simulation bucket. The emitter field values are copied: they
|
|
361
|
+
* are this instance's.
|
|
328
362
|
*
|
|
329
363
|
* What is not copied is anything a registry gave the original: a copy is a second emitter, not
|
|
330
364
|
* a second reference to the first one's table row.
|
|
@@ -352,6 +386,14 @@ export class ParticleEmitter {
|
|
|
352
386
|
this.render_frame = other.render_frame;
|
|
353
387
|
this.render_velocity = other.render_velocity;
|
|
354
388
|
|
|
389
|
+
this.emitter_layout = other.emitter_layout;
|
|
390
|
+
|
|
391
|
+
if (this.emitter_fields.length !== other.emitter_fields.length) {
|
|
392
|
+
this.emitter_fields = new Uint32Array(other.emitter_fields.length);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
this.emitter_fields.set(other.emitter_fields);
|
|
396
|
+
|
|
355
397
|
// That is every field `write_emitter_record` stages, so the row this emitter may already
|
|
356
398
|
// own is now wrong. The registry restages only what `is_stale` reports, and two emitters of
|
|
357
399
|
// one effect share the compiled program object — so the `set_program` escape hatch does not
|
|
@@ -377,21 +419,27 @@ export class ParticleEmitter {
|
|
|
377
419
|
* Build an emitter from a plain description. Every parameter is optional except the compiled
|
|
378
420
|
* effect — an emitter with no program has nothing to run.
|
|
379
421
|
*
|
|
380
|
-
* `layout` and `
|
|
381
|
-
* so an effect goes in by spreading it:
|
|
422
|
+
* `layout`, `program`, `emitter_layout` and `emitter_fields` are what
|
|
423
|
+
* {@link ./create_particle_effect.js} returns, so an effect goes in by spreading it:
|
|
424
|
+
* `ParticleEmitter.from({ ...effect, spawn_rate: 100 })`.
|
|
382
425
|
*
|
|
383
426
|
* @param {object} config
|
|
384
|
-
* @param {import("../layout/ParticleLayout.js").ParticleLayout} config.layout
|
|
385
|
-
*
|
|
427
|
+
* @param {import("../layout/ParticleLayout.js").ParticleLayout} config.layout particle field
|
|
428
|
+
* schema
|
|
386
429
|
* @param {import("../isa/ParticleProgram.js").ParticleProgram} config.program compiled INIT /
|
|
387
430
|
* UPDATE bytecode
|
|
388
|
-
* @param {
|
|
431
|
+
* @param {import("../layout/ParticleLayout.js").ParticleLayout|null} [config.emitter_layout] the
|
|
432
|
+
* emitter field schema the program was compiled against
|
|
433
|
+
* @param {ArrayLike<number>} [config.emitter_fields] this emitter's values for them, as f32 bit
|
|
434
|
+
* patterns laid out by `emitter_layout`
|
|
435
|
+
* @param {undefined} [config.position] must be absent: an emitter is placed by the `transforms`
|
|
436
|
+
* row it is registered at, so place its entity instead
|
|
389
437
|
* @param {string|null} [config.texture] image URL to draw with
|
|
390
438
|
* @param {number} [config.seed]
|
|
391
439
|
* @param {number} [config.spawn_rate] particles/second
|
|
392
440
|
* @param {number} [config.prewarm] seconds of emission to run forward before the first frame
|
|
393
441
|
* @param {object} [config.flags] passed to {@link make_emitter_flags}
|
|
394
|
-
* @param {Object<string,string>} [config.render] render channel ->
|
|
442
|
+
* @param {Object<string,string>} [config.render] render channel -> particle field name
|
|
395
443
|
* @param {ArrayLike<number>} [config.flipbook] [cols, rows]
|
|
396
444
|
* @param {string} [config.name]
|
|
397
445
|
* @returns {ParticleEmitter}
|
|
@@ -406,6 +454,14 @@ export class ParticleEmitter {
|
|
|
406
454
|
emitter.layout = config.layout;
|
|
407
455
|
emitter.program = config.program;
|
|
408
456
|
|
|
457
|
+
if (config.emitter_layout !== undefined) {
|
|
458
|
+
emitter.emitter_layout = config.emitter_layout;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
if (config.emitter_fields !== undefined) {
|
|
462
|
+
emitter.emitter_fields = Uint32Array.from(config.emitter_fields);
|
|
463
|
+
}
|
|
464
|
+
|
|
409
465
|
if (config.name !== undefined) {
|
|
410
466
|
emitter.name = config.name;
|
|
411
467
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The system's global fields: the static members every effect may read, by name.
|
|
3
|
+
*
|
|
4
|
+
* The layout is the union of what is loaded. A program names the globals it imports, and placing it
|
|
5
|
+
* declares any name the system does not have yet, zero-filled; game code may declare names up front
|
|
6
|
+
* and set their values whenever it likes. The layout is append-only — a field once declared keeps
|
|
7
|
+
* its offset — so linking a program never has to be redone because another one was placed.
|
|
8
|
+
*
|
|
9
|
+
* The words live at the top of the program heap's field section (see {@link ./ProgramHeap.js}), in
|
|
10
|
+
* the {@link PARTICLE_GLOBAL_FIELD_WORDS} reserved there, so a global field is addressed from zero.
|
|
11
|
+
* A global field nobody has set reads 0: missing data is zero, never a stand-in.
|
|
12
|
+
*/
|
|
13
|
+
export class ParticleGlobalFields {
|
|
14
|
+
/**
|
|
15
|
+
* @param {function(number, number):void} write_word `(index, bits)`: writes word `index` of the
|
|
16
|
+
* global region and marks it for upload
|
|
17
|
+
*/
|
|
18
|
+
constructor(write_word: (arg0: number, arg1: number) => void);
|
|
19
|
+
/**
|
|
20
|
+
* Words the declared fields take.
|
|
21
|
+
* @returns {number}
|
|
22
|
+
*/
|
|
23
|
+
get word_count(): number;
|
|
24
|
+
/**
|
|
25
|
+
* @param {string} name
|
|
26
|
+
* @returns {boolean}
|
|
27
|
+
*/
|
|
28
|
+
has(name: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* @param {string} name
|
|
31
|
+
* @returns {{name: string, offset: number, components: number}|undefined}
|
|
32
|
+
*/
|
|
33
|
+
get(name: string): {
|
|
34
|
+
name: string;
|
|
35
|
+
offset: number;
|
|
36
|
+
components: number;
|
|
37
|
+
} | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Whether a program importing these could be placed: every name either declared at least that
|
|
40
|
+
* wide, or new and fitting in what is left of the reservation — all of them together, as placing
|
|
41
|
+
* the program would declare them. Changes nothing, so a program that cannot be placed is
|
|
42
|
+
* refused before anything is claimed for it.
|
|
43
|
+
*
|
|
44
|
+
* @param {ReadonlyArray<{name: string, components: number}>} imports
|
|
45
|
+
* @throws exactly what {@link declare} would throw for the first import that cannot be declared
|
|
46
|
+
*/
|
|
47
|
+
check(imports: ReadonlyArray<{
|
|
48
|
+
name: string;
|
|
49
|
+
components: number;
|
|
50
|
+
}>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Declare a global field, or find the one already declared under that name.
|
|
53
|
+
*
|
|
54
|
+
* A name is one field however many programs import it, so a second declaration must not want
|
|
55
|
+
* more of it than the first gave it: reading three words of a one-word field would read the next
|
|
56
|
+
* field's words, which is somebody else's data and never the right answer.
|
|
57
|
+
*
|
|
58
|
+
* @param {string} name
|
|
59
|
+
* @param {number} components 1..4
|
|
60
|
+
* @returns {number} the field's word offset
|
|
61
|
+
* @throws if `components` is not 1..4, the name is declared narrower, or the reserved words are
|
|
62
|
+
* spent
|
|
63
|
+
*/
|
|
64
|
+
declare(name: string, components: number): number;
|
|
65
|
+
/**
|
|
66
|
+
* Set a global field's value, declaring it at that width if nothing has yet. Fewer values than
|
|
67
|
+
* the field has components set the leading ones.
|
|
68
|
+
*
|
|
69
|
+
* @param {string} name
|
|
70
|
+
* @param {ArrayLike<number>} values one per component
|
|
71
|
+
* @throws what {@link ParticleGlobalFields#declare} throws for `values.length` components
|
|
72
|
+
*/
|
|
73
|
+
set(name: string, values: ArrayLike<number>): void;
|
|
74
|
+
/**
|
|
75
|
+
* Visit every declared field, in declaration order.
|
|
76
|
+
* @param {function({name: string, offset: number, components: number}):void} visitor
|
|
77
|
+
*/
|
|
78
|
+
forEach(visitor: (arg0: {
|
|
79
|
+
name: string;
|
|
80
|
+
offset: number;
|
|
81
|
+
components: number;
|
|
82
|
+
}) => void): void;
|
|
83
|
+
#private;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=ParticleGlobalFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParticleGlobalFields.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleGlobalFields.js"],"names":[],"mappings":"AA8CA;;;;;;;;;;;GAWG;AACH;IAkBI;;;OAGG;IACH,+BAHoB,MAAM,QAAE,MAAM,KAAE,IAAI,EAKvC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,UAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,UAHW,MAAM,GACJ;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,GAAC,SAAS,CAIxE;IAED;;;;;;;;OAQG;IACH,eAHW,cAAc;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC,QAqC3D;IAED;;;;;;;;;;;;OAYG;IACH,cANW,MAAM,cACN,MAAM,GACJ,MAAM,CA2BlB;IAED;;;;;;;OAOG;IACH,UAJW,MAAM,UACN,UAAU,MAAM,CAAC,QAa3B;IAED;;;OAGG;IACH,wBAFoB;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,KAAE,IAAI,QAM3E;;CACJ"}
|