@woosh/meep-engine 3.41.0 → 3.42.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/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/selection/editor_pick.d.ts.map +1 -1
- package/editor/selection/editor_pick.js +2 -1
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +7 -1
- package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
- package/editor/tools/engine/ToolEngine.js +10 -0
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +7 -20
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
- package/editor/view/ecs/EntityEditor.js +3 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +28 -12
- package/package.json +1 -1
- package/samples/engine/first-scene/index.html +4 -1
- package/samples/engine/first-scene/main.js +14 -9
- package/src/core/binary/utf8/utf8_decode.js +3 -3
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
- package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
- package/src/core/collection/RingBuffer.d.ts.map +1 -1
- package/src/core/collection/RingBuffer.js +4 -0
- package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
- package/src/core/collection/array/array_contains_duplicates.js +2 -1
- package/src/core/collection/array/array_copy.d.ts.map +1 -1
- package/src/core/collection/array/array_copy.js +23 -0
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
- package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
- package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
- package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
- package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
- package/src/core/collection/array/weightedRandomFromArray.js +9 -1
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +4 -0
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +4 -2
- package/src/core/collection/set/ArraySet.js +1 -1
- package/src/core/collection/set/HashSet.d.ts +1 -1
- package/src/core/collection/set/HashSet.d.ts.map +1 -1
- package/src/core/collection/set/HashSet.js +4 -2
- package/src/core/debug/matchers/IsEqual.js +1 -1
- package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
- package/src/core/debug/matchers/IsIterableContaining.js +61 -74
- package/src/core/events/signal/SignalBinding.js +101 -101
- package/src/core/function/extractFunctionBody.js +13 -13
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +15 -14
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
- package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
- package/src/core/math/noise/curl_noise_3dt.js +20 -10
- package/src/core/math/noise/sdnoise.d.ts +16 -5
- package/src/core/math/noise/sdnoise.d.ts.map +1 -1
- package/src/core/math/noise/sdnoise.js +43 -9
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +6 -2
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
- package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/WallRun.js +13 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +18 -15
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
- package/src/engine/ecs/parent/EntityNode.js +3 -3
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
- package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +8 -0
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +17 -0
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
- package/src/engine/graphics3/WaterSystem.d.ts +12 -3
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +78 -46
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.js +29 -4
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
- package/src/engine/ui/DraggableAspect.d.ts +5 -1
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +61 -4
- package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
- package/src/format/image/avif/heif/ItemProperty.js +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
- package/src/shade/playground/water_refraction/README.md +10 -11
- package/src/shade/playground/water_refraction/main.js +9 -8
- package/src/shade/playground/water_refraction/world.js +1 -1
- package/src/shade/playground/water_surface/README.md +43 -0
- package/src/shade/playground/water_surface/index.html +30 -0
- package/src/shade/playground/water_surface/main.d.ts +2 -0
- package/src/shade/playground/water_surface/main.d.ts.map +1 -0
- package/src/shade/playground/water_surface/main.js +154 -0
- package/src/shade/playground/water_surface/world.d.ts +44 -0
- package/src/shade/playground/water_surface/world.d.ts.map +1 -0
- package/src/shade/playground/water_surface/world.js +160 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
- package/src/shade/renderer/binding/BufferBinding.js +2 -2
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
- package/src/shade/renderer/water/shader_water.d.ts +0 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +201 -72
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { v3_grid_limit8_at_indices } from "./v3_grid_limit8_at_indices.js";
|
|
2
2
|
import { assert } from "../../../../core/assert.js";
|
|
3
3
|
import { clamp } from "../../../../core/math/clamp.js";
|
|
4
|
-
import {
|
|
4
|
+
import { scs3d_sample_linear3_array } from "../../../graphics/texture/3d/scs3d_sample_linear3.js";
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* COLLOCATED VARIANT. FluidSimulator transports through the MAC (staggered-grid) kernels in the sibling
|
|
@@ -76,6 +76,7 @@ export function v3_grid_advect_maccormack_velocity(outputs, sources, carrier_x,
|
|
|
76
76
|
const last_y = res_y - 1;
|
|
77
77
|
const last_z = res_z - 1;
|
|
78
78
|
const sample = scratch_sample;
|
|
79
|
+
const position = scratch_position;
|
|
79
80
|
|
|
80
81
|
// ─── pass 1: forward SL step into the scratch trio ──────────────────────
|
|
81
82
|
for (let z = 0; z < res_z; z++) {
|
|
@@ -93,7 +94,10 @@ export function v3_grid_advect_maccormack_velocity(outputs, sources, carrier_x,
|
|
|
93
94
|
const s_x = x - carrier_x[c] * time_delta;
|
|
94
95
|
const s_y = y - carrier_y[c] * time_delta;
|
|
95
96
|
const s_z = z - carrier_z[c] * time_delta;
|
|
96
|
-
|
|
97
|
+
position[0] = s_x;
|
|
98
|
+
position[1] = s_y;
|
|
99
|
+
position[2] = s_z;
|
|
100
|
+
scs3d_sample_linear3_array(sample, src_x, src_y, src_z, res_x, res_y, res_z, position, 0);
|
|
97
101
|
fwd_x[c] = sample[0];
|
|
98
102
|
fwd_y[c] = sample[1];
|
|
99
103
|
fwd_z[c] = sample[2];
|
|
@@ -119,7 +123,10 @@ export function v3_grid_advect_maccormack_velocity(outputs, sources, carrier_x,
|
|
|
119
123
|
const vy = carrier_y[c] * time_delta;
|
|
120
124
|
const vz = carrier_z[c] * time_delta;
|
|
121
125
|
|
|
122
|
-
|
|
126
|
+
position[0] = x + vx;
|
|
127
|
+
position[1] = y + vy;
|
|
128
|
+
position[2] = z + vz;
|
|
129
|
+
scs3d_sample_linear3_array(sample, fwd_x, fwd_y, fwd_z, res_x, res_y, res_z, position, 0);
|
|
123
130
|
const corr_x = fwd_x[c] + 0.5 * (src_x[c] - sample[0]);
|
|
124
131
|
const corr_y = fwd_y[c] + 0.5 * (src_y[c] - sample[1]);
|
|
125
132
|
const corr_z = fwd_z[c] + 0.5 * (src_z[c] - sample[2]);
|
|
@@ -160,3 +167,5 @@ export function v3_grid_advect_maccormack_velocity(outputs, sources, carrier_x,
|
|
|
160
167
|
|
|
161
168
|
/** Module-static sample destination — avoids per-cell allocation. */
|
|
162
169
|
const scratch_sample = new Float32Array(3);
|
|
170
|
+
/** Continuous coordinates passed to the sampler during this synchronous typed-array sweep. */
|
|
171
|
+
const scratch_position = new Float64Array(3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_grid_advect_sl_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,oDAdW,YAAY,EAAE,WACd,YAAY,EAAE,aAEd,YAAY,aACZ,YAAY,aACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,
|
|
1
|
+
{"version":3,"file":"v3_grid_advect_sl_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,oDAdW,YAAY,EAAE,WACd,YAAY,EAAE,aAEd,YAAY,aACZ,YAAY,aACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QAmEpB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { scs3d_sample_linear3_array } from "../../../graphics/texture/3d/scs3d_sample_linear3.js";
|
|
3
3
|
|
|
4
4
|
/*
|
|
5
5
|
* COLLOCATED VARIANT. FluidSimulator transports through the MAC (staggered-grid) kernels in the sibling
|
|
@@ -72,6 +72,7 @@ export function v3_grid_advect_sl_velocity(outputs, sources, carrier_x, carrier_
|
|
|
72
72
|
|
|
73
73
|
const slice_size = res_x * res_y;
|
|
74
74
|
const sample = scratch_sample;
|
|
75
|
+
const position = scratch_position;
|
|
75
76
|
|
|
76
77
|
for (let z = 0; z < res_z; z++) {
|
|
77
78
|
const z_off = z * slice_size;
|
|
@@ -94,7 +95,10 @@ export function v3_grid_advect_sl_velocity(outputs, sources, carrier_x, carrier_
|
|
|
94
95
|
const s_y = y - carrier_y[c] * time_delta;
|
|
95
96
|
const s_z = z - carrier_z[c] * time_delta;
|
|
96
97
|
|
|
97
|
-
|
|
98
|
+
position[0] = s_x;
|
|
99
|
+
position[1] = s_y;
|
|
100
|
+
position[2] = s_z;
|
|
101
|
+
scs3d_sample_linear3_array(sample, src_x, src_y, src_z, res_x, res_y, res_z, position, 0);
|
|
98
102
|
out_x[c] = sample[0];
|
|
99
103
|
out_y[c] = sample[1];
|
|
100
104
|
out_z[c] = sample[2];
|
|
@@ -105,3 +109,5 @@ export function v3_grid_advect_sl_velocity(outputs, sources, carrier_x, carrier_
|
|
|
105
109
|
|
|
106
110
|
/** Module-static sample destination — avoids per-cell allocation. */
|
|
107
111
|
const scratch_sample = new Float32Array(3);
|
|
112
|
+
/** Continuous coordinates passed to the sampler during this synchronous typed-array sweep. */
|
|
113
|
+
const scratch_position = new Float64Array(3);
|
|
@@ -27,4 +27,23 @@
|
|
|
27
27
|
* @return {number}
|
|
28
28
|
*/
|
|
29
29
|
export function v3_grid_sample_scalar_masked(data: Float32Array, solid: Uint8Array, res_x: number, res_y: number, res_z: number, x: number, y: number, z: number, fallback: number): number;
|
|
30
|
+
/**
|
|
31
|
+
* {@link v3_grid_sample_scalar_masked} with `[x, y, z, fallback]` read from a reusable operand record
|
|
32
|
+
* and the sample written into `out`. No continuous number crosses the call boundary, including the
|
|
33
|
+
* result, so a per-cell caller does not need this sampler to be inlined to avoid numeric boxes.
|
|
34
|
+
*
|
|
35
|
+
* The operands are read before any output write; `out` may overlap `operands` or `data`. Float64
|
|
36
|
+
* operands preserve the scalar form's coordinate and fallback precision.
|
|
37
|
+
*
|
|
38
|
+
* @param {Float32Array|Float64Array|number[]} out
|
|
39
|
+
* @param {number} out_offset
|
|
40
|
+
* @param {Float32Array} data
|
|
41
|
+
* @param {Uint8Array} solid
|
|
42
|
+
* @param {number} res_x
|
|
43
|
+
* @param {number} res_y
|
|
44
|
+
* @param {number} res_z
|
|
45
|
+
* @param {Float64Array} operands `[x, y, z, fallback]`
|
|
46
|
+
* @param {number} operands_offset
|
|
47
|
+
*/
|
|
48
|
+
export function v3_grid_sample_scalar_masked_array(out: Float32Array | Float64Array | number[], out_offset: number, data: Float32Array, solid: Uint8Array, res_x: number, res_y: number, res_z: number, operands: Float64Array, operands_offset: number): void;
|
|
30
49
|
//# sourceMappingURL=v3_grid_sample_scalar_masked.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_grid_sample_scalar_masked.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"v3_grid_sample_scalar_masked.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,mDAXW,YAAY,SACZ,UAAU,SACV,MAAM,SACN,MAAM,SACN,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,YACN,MAAM,GACL,MAAM,CAYjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wDAVW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAClC,MAAM,QACN,YAAY,SACZ,UAAU,SACV,MAAM,SACN,MAAM,SACN,MAAM,YACN,YAAY,mBACZ,MAAM,QAqEhB"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { clamp } from "../../../../core/math/clamp.js";
|
|
2
2
|
|
|
3
|
+
const scratch_operands = new Float64Array(4);
|
|
4
|
+
const scratch_sample = new Float64Array(1);
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
7
|
* Trilinearly sample a cell-centered scalar at a fractional position,
|
|
5
8
|
* EXCLUDING solid cells from the interpolation: solid taps contribute zero
|
|
@@ -29,6 +32,41 @@ import { clamp } from "../../../../core/math/clamp.js";
|
|
|
29
32
|
* @return {number}
|
|
30
33
|
*/
|
|
31
34
|
export function v3_grid_sample_scalar_masked(data, solid, res_x, res_y, res_z, x, y, z, fallback) {
|
|
35
|
+
const operands = scratch_operands;
|
|
36
|
+
operands[0] = x;
|
|
37
|
+
operands[1] = y;
|
|
38
|
+
operands[2] = z;
|
|
39
|
+
operands[3] = fallback;
|
|
40
|
+
|
|
41
|
+
v3_grid_sample_scalar_masked_array(scratch_sample, 0, data, solid, res_x, res_y, res_z, operands, 0);
|
|
42
|
+
|
|
43
|
+
return scratch_sample[0];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* {@link v3_grid_sample_scalar_masked} with `[x, y, z, fallback]` read from a reusable operand record
|
|
48
|
+
* and the sample written into `out`. No continuous number crosses the call boundary, including the
|
|
49
|
+
* result, so a per-cell caller does not need this sampler to be inlined to avoid numeric boxes.
|
|
50
|
+
*
|
|
51
|
+
* The operands are read before any output write; `out` may overlap `operands` or `data`. Float64
|
|
52
|
+
* operands preserve the scalar form's coordinate and fallback precision.
|
|
53
|
+
*
|
|
54
|
+
* @param {Float32Array|Float64Array|number[]} out
|
|
55
|
+
* @param {number} out_offset
|
|
56
|
+
* @param {Float32Array} data
|
|
57
|
+
* @param {Uint8Array} solid
|
|
58
|
+
* @param {number} res_x
|
|
59
|
+
* @param {number} res_y
|
|
60
|
+
* @param {number} res_z
|
|
61
|
+
* @param {Float64Array} operands `[x, y, z, fallback]`
|
|
62
|
+
* @param {number} operands_offset
|
|
63
|
+
*/
|
|
64
|
+
export function v3_grid_sample_scalar_masked_array(out, out_offset, data, solid, res_x, res_y, res_z, operands, operands_offset) {
|
|
65
|
+
const x = operands[operands_offset];
|
|
66
|
+
const y = operands[operands_offset + 1];
|
|
67
|
+
const z = operands[operands_offset + 2];
|
|
68
|
+
const fallback = operands[operands_offset + 3];
|
|
69
|
+
|
|
32
70
|
const x_max = res_x - 1;
|
|
33
71
|
const y_max = res_y - 1;
|
|
34
72
|
const z_max = res_z - 1;
|
|
@@ -80,7 +118,8 @@ export function v3_grid_sample_scalar_masked(data, solid, res_x, res_y, res_z, x
|
|
|
80
118
|
|
|
81
119
|
const total = w000 + w100 + w010 + w110 + w001 + w101 + w011 + w111;
|
|
82
120
|
if (total <= 0) {
|
|
83
|
-
|
|
121
|
+
out[out_offset] = fallback;
|
|
122
|
+
return;
|
|
84
123
|
}
|
|
85
124
|
|
|
86
125
|
const sum = w000 * data[c000] + w100 * data[c100]
|
|
@@ -88,5 +127,5 @@ export function v3_grid_sample_scalar_masked(data, solid, res_x, res_y, res_z, x
|
|
|
88
127
|
+ w001 * data[c001] + w101 * data[c101]
|
|
89
128
|
+ w011 * data[c011] + w111 * data[c111];
|
|
90
129
|
|
|
91
|
-
|
|
130
|
+
out[out_offset] = sum / total;
|
|
92
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_mac_advect_scalar.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_advect_scalar.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"v3_mac_advect_scalar.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_advect_scalar.js"],"names":[],"mappings":"AAmCA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,gDAXW,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QAgDpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wDAZW,YAAY,SACZ,YAAY,mBACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QA8GpB"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
2
|
import { clamp } from "../../../../core/math/clamp.js";
|
|
3
|
-
import { v3_grid_sample_scalar_masked } from "./v3_grid_sample_scalar_masked.js";
|
|
3
|
+
import { v3_grid_sample_scalar_masked, v3_grid_sample_scalar_masked_array } from "./v3_grid_sample_scalar_masked.js";
|
|
4
4
|
import { v3_mac_clip_trace } from "./v3_mac_clip_trace.js";
|
|
5
5
|
|
|
6
6
|
const scratch_clip = new Float32Array(3);
|
|
7
|
+
// This synchronous typed-array kernel has no callbacks while a sample is in progress.
|
|
8
|
+
const scratch_sample_operands = new Float64Array(4);
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Straight-line (loop-free, inlinable) test: is the cell containing the
|
|
@@ -66,6 +68,7 @@ export function v3_mac_advect_sl_scalar(output, input, vel_u, vel_v, vel_w, res_
|
|
|
66
68
|
assert.greaterThanOrEqual(input.length, cell_count, "input covers grid");
|
|
67
69
|
|
|
68
70
|
const cell_slice = res_x * res_y;
|
|
71
|
+
const operands = scratch_sample_operands;
|
|
69
72
|
const sx = res_x + 1;
|
|
70
73
|
const v_slice = res_x * (res_y + 1);
|
|
71
74
|
|
|
@@ -96,8 +99,11 @@ export function v3_mac_advect_sl_scalar(output, input, vel_u, vel_v, vel_w, res_
|
|
|
96
99
|
bx = scratch_clip[0]; by = scratch_clip[1]; bz = scratch_clip[2];
|
|
97
100
|
}
|
|
98
101
|
|
|
99
|
-
|
|
100
|
-
|
|
102
|
+
operands[0] = bx;
|
|
103
|
+
operands[1] = by;
|
|
104
|
+
operands[2] = bz;
|
|
105
|
+
operands[3] = input[c];
|
|
106
|
+
v3_grid_sample_scalar_masked_array(output, c, input, solid, res_x, res_y, res_z, operands, 0);
|
|
101
107
|
}
|
|
102
108
|
}
|
|
103
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_mac_advect_sl_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"v3_mac_advect_sl_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,mDAZW,YAAY,EAAE,WACd,YAAY,EAAE,WACd,YAAY,EAAE,SACd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,gBACN,UAAU,gBACV,UAAU,gBACV,UAAU,SACV,UAAU,QAuLpB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { scs3d_sample_linear_array } from "../../../graphics/texture/3d/scs3d_sample_linear.js";
|
|
3
3
|
import { v3_mac_clip_trace } from "./v3_mac_clip_trace.js";
|
|
4
4
|
|
|
5
5
|
const scratch_clip = new Float32Array(3);
|
|
6
|
+
const scratch_position = new Float64Array(3);
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Semi-Lagrangian advection of a MAC (face-centered) velocity field along a
|
|
@@ -116,12 +117,17 @@ export function v3_mac_advect_sl_velocity(outputs, sources, carrier, res_x, res_
|
|
|
116
117
|
if (ecy < 0) ecy = 0; else if (ecy >= res_y) ecy = last_cy;
|
|
117
118
|
if (ecz < 0) ecz = 0; else if (ecz >= res_z) ecz = last_cz;
|
|
118
119
|
if (solid[ecz * cell_slice + ecy * res_x + ecx] === 0) {
|
|
119
|
-
|
|
120
|
+
scratch_position[0] = ex + 0.5;
|
|
121
|
+
scratch_position[1] = ey;
|
|
122
|
+
scratch_position[2] = ez;
|
|
123
|
+
scs3d_sample_linear_array(out_u, f, src_u, sx, res_y, res_z, scratch_position, 0);
|
|
120
124
|
} else {
|
|
121
125
|
v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z,
|
|
122
126
|
x - 0.5, y, z, ex, ey, ez);
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
scratch_position[0] = scratch_clip[0] + 0.5;
|
|
128
|
+
scratch_position[1] = scratch_clip[1];
|
|
129
|
+
scratch_position[2] = scratch_clip[2];
|
|
130
|
+
scs3d_sample_linear_array(out_u, f, src_u, sx, res_y, res_z, scratch_position, 0);
|
|
125
131
|
}
|
|
126
132
|
}
|
|
127
133
|
}
|
|
@@ -159,12 +165,17 @@ export function v3_mac_advect_sl_velocity(outputs, sources, carrier, res_x, res_
|
|
|
159
165
|
if (ecy < 0) ecy = 0; else if (ecy >= res_y) ecy = last_cy;
|
|
160
166
|
if (ecz < 0) ecz = 0; else if (ecz >= res_z) ecz = last_cz;
|
|
161
167
|
if (solid[ecz * cell_slice + ecy * res_x + ecx] === 0) {
|
|
162
|
-
|
|
168
|
+
scratch_position[0] = ex;
|
|
169
|
+
scratch_position[1] = ey + 0.5;
|
|
170
|
+
scratch_position[2] = ez;
|
|
171
|
+
scs3d_sample_linear_array(out_v, f, src_v, res_x, sy, res_z, scratch_position, 0);
|
|
163
172
|
} else {
|
|
164
173
|
v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z,
|
|
165
174
|
x, y - 0.5, z, ex, ey, ez);
|
|
166
|
-
|
|
167
|
-
|
|
175
|
+
scratch_position[0] = scratch_clip[0];
|
|
176
|
+
scratch_position[1] = scratch_clip[1] + 0.5;
|
|
177
|
+
scratch_position[2] = scratch_clip[2];
|
|
178
|
+
scs3d_sample_linear_array(out_v, f, src_v, res_x, sy, res_z, scratch_position, 0);
|
|
168
179
|
}
|
|
169
180
|
}
|
|
170
181
|
}
|
|
@@ -204,12 +215,17 @@ export function v3_mac_advect_sl_velocity(outputs, sources, carrier, res_x, res_
|
|
|
204
215
|
if (ecy < 0) ecy = 0; else if (ecy >= res_y) ecy = last_cy;
|
|
205
216
|
if (ecz < 0) ecz = 0; else if (ecz >= res_z) ecz = last_cz;
|
|
206
217
|
if (solid[ecz * cell_slice + ecy * res_x + ecx] === 0) {
|
|
207
|
-
|
|
218
|
+
scratch_position[0] = ex;
|
|
219
|
+
scratch_position[1] = ey;
|
|
220
|
+
scratch_position[2] = ez + 0.5;
|
|
221
|
+
scs3d_sample_linear_array(out_w, f, src_w, res_x, res_y, sz, scratch_position, 0);
|
|
208
222
|
} else {
|
|
209
223
|
v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z,
|
|
210
224
|
x, y, z - 0.5, ex, ey, ez);
|
|
211
|
-
|
|
212
|
-
|
|
225
|
+
scratch_position[0] = scratch_clip[0];
|
|
226
|
+
scratch_position[1] = scratch_clip[1];
|
|
227
|
+
scratch_position[2] = scratch_clip[2] + 0.5;
|
|
228
|
+
scs3d_sample_linear_array(out_w, f, src_w, res_x, res_y, sz, scratch_position, 0);
|
|
213
229
|
}
|
|
214
230
|
}
|
|
215
231
|
}
|
|
@@ -28,10 +28,7 @@ export class RandomContainerAudioClip extends ContainerAudioClip {
|
|
|
28
28
|
* container picks uniformly). A weight of `0` (or any non-positive value) means the child is
|
|
29
29
|
* NEVER picked.
|
|
30
30
|
*
|
|
31
|
-
*
|
|
32
|
-
* to a single child (there is simply nothing to weight, so the pick collapses to a fixed index).
|
|
33
|
-
* That is a content-authoring mistake, not an engine fault; the engine stays well-defined. In
|
|
34
|
-
* other words, ten children all weighted 0 will "work", but you get the dog food.
|
|
31
|
+
* If every child is disabled, the container resolves to an empty timeline.
|
|
35
32
|
* @type {number[]}
|
|
36
33
|
*/
|
|
37
34
|
weights: number[];
|
|
@@ -81,9 +78,9 @@ export class RandomContainerAudioClip extends ContainerAudioClip {
|
|
|
81
78
|
* this clip) rather than on this shared, immutable definition; this method owns both the selection
|
|
82
79
|
* algorithm and the maintenance of that history ring.
|
|
83
80
|
* @param {SopraPlaybackContext} playback
|
|
84
|
-
* @returns {number} chosen child index
|
|
81
|
+
* @returns {number|undefined} chosen child index, or undefined when no child has positive weight
|
|
85
82
|
*/
|
|
86
|
-
pickChildIndex(playback: SopraPlaybackContext): number;
|
|
83
|
+
pickChildIndex(playback: SopraPlaybackContext): number | undefined;
|
|
87
84
|
planTimeline(env: any, gainDb?: number, pitchCents?: number, offset?: number): {
|
|
88
85
|
plays: {
|
|
89
86
|
clip: import("./SampleAudioClip.js").SampleAudioClip;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RandomContainerAudioClip.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH;
|
|
1
|
+
{"version":3,"file":"RandomContainerAudioClip.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH;IAkEI;;;;;;OAMG;IACH,uBALW,mBAAmB,oCACnB;QAAC,kBAAkB,CAAC,EAAC,MAAM,CAAC;QAAC,OAAO,CAAC,EAAC,MAAM,EAAE,CAAA;KAAC,GAE7C,wBAAwB,CAapC;IAlFD;;;OAGG;IACH,sBAFU,MAAM,CAES;IAEzB;;;;;;;;;OASG;IACH,SAFU,MAAM,EAAE,CAEL;IAEb;;;;;OAKG;IACH,4CAFa,IAAI,CAQhB;IAWD;;;;;;OAMG;IACH,oBAHW,MAAM,EAAE,GACN,IAAI,CAgBhB;IAsBD;;;;OAIG;IACH,cAHW,wBAAwB,GACtB,OAAO,CAuBnB;IAcD,kCAaC;IAED;;;;;;;;;MAQC;IAED;;;;;;aAQC;IAED;;;;;;;;OAQG;IACH,gDAFa,MAAM,GAAC,SAAS,CAyC5B;IAED;;;;;;;;;MAYC;CACJ;;;;mCAzOkC,yBAAyB"}
|
|
@@ -25,10 +25,7 @@ export class RandomContainerAudioClip extends ContainerAudioClip {
|
|
|
25
25
|
* container picks uniformly). A weight of `0` (or any non-positive value) means the child is
|
|
26
26
|
* NEVER picked.
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
* to a single child (there is simply nothing to weight, so the pick collapses to a fixed index).
|
|
30
|
-
* That is a content-authoring mistake, not an engine fault; the engine stays well-defined. In
|
|
31
|
-
* other words, ten children all weighted 0 will "work", but you get the dog food.
|
|
28
|
+
* If every child is disabled, the container resolves to an empty timeline.
|
|
32
29
|
* @type {number[]}
|
|
33
30
|
*/
|
|
34
31
|
weights = [];
|
|
@@ -181,29 +178,41 @@ export class RandomContainerAudioClip extends ContainerAudioClip {
|
|
|
181
178
|
* this clip) rather than on this shared, immutable definition; this method owns both the selection
|
|
182
179
|
* algorithm and the maintenance of that history ring.
|
|
183
180
|
* @param {SopraPlaybackContext} playback
|
|
184
|
-
* @returns {number} chosen child index
|
|
181
|
+
* @returns {number|undefined} chosen child index, or undefined when no child has positive weight
|
|
185
182
|
*/
|
|
186
183
|
pickChildIndex(playback) {
|
|
187
184
|
const children = this.children;
|
|
188
185
|
const n = children.length;
|
|
189
186
|
|
|
190
|
-
|
|
191
|
-
|
|
187
|
+
const weights = this.weights;
|
|
188
|
+
let eligibleCount = 0;
|
|
189
|
+
for (let i = 0; i < n; i++) {
|
|
190
|
+
if (weights[i] > 0) eligibleCount++;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Disabled children cannot keep an enabled choice out of contention.
|
|
194
|
+
const avoid = Math.max(0, Math.min(this.avoid_repeating_last, eligibleCount - 1));
|
|
192
195
|
|
|
193
196
|
const recent = playback.getState(this, () => []);
|
|
197
|
+
while (recent.length > avoid) {
|
|
198
|
+
recent.shift();
|
|
199
|
+
}
|
|
194
200
|
|
|
195
201
|
const candidates = [];
|
|
196
202
|
for (let i = 0; i < n; i++) {
|
|
197
|
-
if (recent.indexOf(i) === -1) {
|
|
203
|
+
if (weights[i] > 0 && recent.indexOf(i) === -1) {
|
|
198
204
|
candidates.push(i);
|
|
199
205
|
}
|
|
200
206
|
}
|
|
201
207
|
|
|
202
208
|
// weighted pick among the surviving candidates (weight looked up by child index). With the
|
|
203
209
|
// default all-1 weights this is a uniform draw; a 0 weight removes that child from contention.
|
|
204
|
-
const weights = this.weights;
|
|
205
210
|
const index = weightedRandomFromArray(candidates, playback.random, i => weights[i]);
|
|
206
211
|
|
|
212
|
+
if (index === undefined) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
|
|
207
216
|
recent.push(index);
|
|
208
217
|
while (recent.length > avoid) {
|
|
209
218
|
recent.shift();
|
|
@@ -219,6 +228,10 @@ export class RandomContainerAudioClip extends ContainerAudioClip {
|
|
|
219
228
|
|
|
220
229
|
const index = this.pickChildIndex(env.playback);
|
|
221
230
|
|
|
231
|
+
if (index === undefined) {
|
|
232
|
+
return { plays: [], duration: 0 };
|
|
233
|
+
}
|
|
234
|
+
|
|
222
235
|
return this.children[index].planTimeline(env, gainDb + this.gain, pitchCents + this.pitch, offset);
|
|
223
236
|
}
|
|
224
237
|
}
|
|
@@ -20,13 +20,16 @@ export class DraggableAspect {
|
|
|
20
20
|
* @param {(position:Vector2, event:Event)=>*} [options.dragStart=noop]
|
|
21
21
|
* @param {(position:Vector2, origin:Vector2, delta:Vector2, event:Event)=>*} [options.drag=noop]
|
|
22
22
|
* @param {(position:Vector2, origin:Vector2, event:Event)=>*} [options.dragEnd=noop]
|
|
23
|
+
* @param {(event:Event|undefined)=>*} [options.dragCancel=noop] called for a cancelled press or drag;
|
|
24
|
+
* pointercancel/blur carries its event, while stop() carries undefined. Cancellation never commits dragEnd.
|
|
23
25
|
* @param {boolean} [options.stopPropagation=true] prevent propagation of pointer events up the DOM tree
|
|
24
26
|
*/
|
|
25
|
-
constructor({ el, dragStart, drag, dragEnd, stopPropagation }: {
|
|
27
|
+
constructor({ el, dragStart, drag, dragEnd, dragCancel, stopPropagation }: {
|
|
26
28
|
el: EventTarget;
|
|
27
29
|
dragStart?: (position: Vector2, event: Event) => any;
|
|
28
30
|
drag?: (position: Vector2, origin: Vector2, delta: Vector2, event: Event) => any;
|
|
29
31
|
dragEnd?: (position: Vector2, origin: Vector2, event: Event) => any;
|
|
32
|
+
dragCancel?: (event: Event | undefined) => any;
|
|
30
33
|
stopPropagation?: boolean;
|
|
31
34
|
});
|
|
32
35
|
/**
|
|
@@ -44,6 +47,7 @@ export class DraggableAspect {
|
|
|
44
47
|
getPointer(): PointerDevice;
|
|
45
48
|
start(): void;
|
|
46
49
|
stop(): void;
|
|
50
|
+
#private;
|
|
47
51
|
}
|
|
48
52
|
import { PointerDevice } from "../input/devices/PointerDevice.js";
|
|
49
53
|
import Vector2 from "../../core/geom/Vector2.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableAspect.d.ts","sourceRoot":"","sources":["../../../../src/engine/ui/DraggableAspect.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH;
|
|
1
|
+
{"version":3,"file":"DraggableAspect.d.ts","sourceRoot":"","sources":["../../../../src/engine/ui/DraggableAspect.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH;IAKI;;;;;;;;;;OAUG;IACH;QARgC,EAAE,EAAvB,WAAW;QACkC,SAAS,GAAtD,CAAC,QAAQ,EAAC,OAAO,EAAE,KAAK,EAAC,KAAK,QAAI;QAC0C,IAAI,GAAhF,CAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,EAAC,OAAO,EAAE,KAAK,EAAC,OAAO,EAAE,KAAK,EAAC,KAAK,QAAI;QACJ,OAAO,GAApE,CAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,EAAC,OAAO,EAAE,KAAK,EAAC,KAAK,QAAI;QACb,UAAU,GAA/C,CAAC,KAAK,EAAC,KAAK,GAAC,SAAS,QAAI;QAER,eAAe,GAAjC,OAAO;OAkHjB;IA/GG;;;;;OAKG;IACH,8BAAyC;IAQnB,+BAA8C;IAmGxE;;;OAGG;IACH,cAFa,aAAa,CAIzB;IAED,cAMC;IAED,aAOC;;CACJ;8BA1KyD,mCAAmC;oBADzE,4BAA4B"}
|
|
@@ -17,6 +17,10 @@ import { PointerDevice, readPositionFromMouseEvent } from "../input/devices/Poin
|
|
|
17
17
|
* @copyright Company Named Limited (c) 2026
|
|
18
18
|
*/
|
|
19
19
|
export class DraggableAspect {
|
|
20
|
+
#started = false;
|
|
21
|
+
#cancelGesture = noop;
|
|
22
|
+
#handleCancel = event => this.#cancelGesture(event);
|
|
23
|
+
|
|
20
24
|
/**
|
|
21
25
|
*
|
|
22
26
|
* @param {Object} options
|
|
@@ -24,9 +28,11 @@ export class DraggableAspect {
|
|
|
24
28
|
* @param {(position:Vector2, event:Event)=>*} [options.dragStart=noop]
|
|
25
29
|
* @param {(position:Vector2, origin:Vector2, delta:Vector2, event:Event)=>*} [options.drag=noop]
|
|
26
30
|
* @param {(position:Vector2, origin:Vector2, event:Event)=>*} [options.dragEnd=noop]
|
|
31
|
+
* @param {(event:Event|undefined)=>*} [options.dragCancel=noop] called for a cancelled press or drag;
|
|
32
|
+
* pointercancel/blur carries its event, while stop() carries undefined. Cancellation never commits dragEnd.
|
|
27
33
|
* @param {boolean} [options.stopPropagation=true] prevent propagation of pointer events up the DOM tree
|
|
28
34
|
*/
|
|
29
|
-
constructor({ el, dragStart = noop, drag = noop, dragEnd = noop, stopPropagation = true }) {
|
|
35
|
+
constructor({ el, dragStart = noop, drag = noop, dragEnd = noop, dragCancel = noop, stopPropagation = true }) {
|
|
30
36
|
/**
|
|
31
37
|
*
|
|
32
38
|
* @type {PointerDevice}
|
|
@@ -48,6 +54,41 @@ export class DraggableAspect {
|
|
|
48
54
|
|
|
49
55
|
// top-left corner of `el` in client space, sampled when a drag gesture begins
|
|
50
56
|
const frameOrigin = new Vector2();
|
|
57
|
+
let pressed = false;
|
|
58
|
+
let dragging = false;
|
|
59
|
+
let pointerId = null;
|
|
60
|
+
let stopDrag = null;
|
|
61
|
+
|
|
62
|
+
this.#cancelGesture = event => {
|
|
63
|
+
if (event?.type === 'pointercancel' && event.pointerId !== pointerId) return;
|
|
64
|
+
const pending = pressed || dragging;
|
|
65
|
+
pressed = dragging = false;
|
|
66
|
+
pointerId = null;
|
|
67
|
+
if (stopDrag !== null) {
|
|
68
|
+
pointerGlobal.on.up.remove(stopDrag);
|
|
69
|
+
stopDrag = null;
|
|
70
|
+
}
|
|
71
|
+
pointerGlobal.stop();
|
|
72
|
+
// An uncaptured pointer can be cancelled outside the local element. Clear its
|
|
73
|
+
// pending detector before the caller can stop the aspect in dragCancel.
|
|
74
|
+
if (pending && event?.type === 'pointercancel' && this.#started) {
|
|
75
|
+
this.pointerLocal.stop();
|
|
76
|
+
if (this.#started) this.pointerLocal.start();
|
|
77
|
+
}
|
|
78
|
+
if (pending) dragCancel(event);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
this.pointerLocal.on.down.add((p, event) => {
|
|
82
|
+
if (pressed || dragging) return;
|
|
83
|
+
pressed = true;
|
|
84
|
+
pointerId = event.pointerId;
|
|
85
|
+
});
|
|
86
|
+
this.pointerLocal.on.globalUp.add((p, event) => {
|
|
87
|
+
if (!dragging && event.pointerId === pointerId) {
|
|
88
|
+
pressed = false;
|
|
89
|
+
pointerId = null;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
51
92
|
|
|
52
93
|
if (stopPropagation) {
|
|
53
94
|
this.pointerLocal.on.down.add((p, e) => {
|
|
@@ -56,6 +97,8 @@ export class DraggableAspect {
|
|
|
56
97
|
}
|
|
57
98
|
|
|
58
99
|
this.pointerLocal.on.dragStart.add((p, event) => {
|
|
100
|
+
if (!pressed || dragging || event.pointerId !== pointerId) return;
|
|
101
|
+
dragging = true;
|
|
59
102
|
// freeze the coordinate frame of `el` for the duration of the gesture
|
|
60
103
|
if (typeof el.getBoundingClientRect === "function") {
|
|
61
104
|
const rect = el.getBoundingClientRect();
|
|
@@ -70,9 +113,14 @@ export class DraggableAspect {
|
|
|
70
113
|
pointerGlobal.start();
|
|
71
114
|
|
|
72
115
|
dragStart(p, event);
|
|
116
|
+
if (!dragging) return;
|
|
73
117
|
|
|
74
|
-
|
|
118
|
+
stopDrag = (endClientPosition, endEvent) => {
|
|
119
|
+
if (endEvent.pointerId !== pointerId) return;
|
|
75
120
|
pointerGlobal.on.up.remove(stopDrag);
|
|
121
|
+
stopDrag = null;
|
|
122
|
+
pressed = dragging = false;
|
|
123
|
+
pointerId = null;
|
|
76
124
|
pointerGlobal.stop();
|
|
77
125
|
|
|
78
126
|
position.set(
|
|
@@ -81,12 +129,13 @@ export class DraggableAspect {
|
|
|
81
129
|
);
|
|
82
130
|
|
|
83
131
|
dragEnd(position, dragOriginalPosition, endEvent);
|
|
84
|
-
}
|
|
132
|
+
};
|
|
85
133
|
|
|
86
134
|
pointerGlobal.on.up.add(stopDrag);
|
|
87
135
|
});
|
|
88
136
|
|
|
89
137
|
this.pointerGlobal.on.move.add((clientPosition, event, delta) => {
|
|
138
|
+
if (!dragging || event.pointerId !== pointerId) return;
|
|
90
139
|
// the global device reports client coordinates, convert into the frozen frame of `el`
|
|
91
140
|
position.set(
|
|
92
141
|
clientPosition.x - frameOrigin.x,
|
|
@@ -106,11 +155,19 @@ export class DraggableAspect {
|
|
|
106
155
|
}
|
|
107
156
|
|
|
108
157
|
start() {
|
|
158
|
+
this.#started = true;
|
|
109
159
|
this.pointerLocal.start();
|
|
160
|
+
this.pointerLocal.domElement.addEventListener('pointercancel', this.#handleCancel);
|
|
161
|
+
window.addEventListener('pointercancel', this.#handleCancel);
|
|
162
|
+
window.addEventListener('blur', this.#handleCancel);
|
|
110
163
|
}
|
|
111
164
|
|
|
112
165
|
stop() {
|
|
166
|
+
this.#started = false;
|
|
167
|
+
this.pointerLocal.domElement.removeEventListener('pointercancel', this.#handleCancel);
|
|
168
|
+
window.removeEventListener('pointercancel', this.#handleCancel);
|
|
169
|
+
window.removeEventListener('blur', this.#handleCancel);
|
|
113
170
|
this.pointerLocal.stop();
|
|
114
|
-
this
|
|
171
|
+
this.#cancelGesture();
|
|
115
172
|
}
|
|
116
173
|
}
|
|
@@ -137,7 +137,7 @@ export class ImageRotation {
|
|
|
137
137
|
angle: number;
|
|
138
138
|
}
|
|
139
139
|
/**
|
|
140
|
-
* `imir` — mirroring, applied after `clap` and
|
|
140
|
+
* `imir` — mirroring, applied after `clap` and `irot` in MIAF.
|
|
141
141
|
*/
|
|
142
142
|
export class ImageMirror {
|
|
143
143
|
static TYPE: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"png_chunk_decode_iTXt.d.ts","sourceRoot":"","sources":["../../../../../../src/format/image/png/chunk/png_chunk_decode_iTXt.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"png_chunk_decode_iTXt.d.ts","sourceRoot":"","sources":["../../../../../../src/format/image/png/chunk/png_chunk_decode_iTXt.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,6CAHW,UAAU,GACR,QAAQ;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAC,CAwDtG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BinaryBuffer } from "../../../../core/binary/BinaryBuffer.js";
|
|
2
|
+
import { utf8_decode } from "../../../../core/binary/utf8/utf8_decode.js";
|
|
2
3
|
import { png_inflate } from "../png_inflate.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -16,20 +17,32 @@ export async function png_chunk_decode_iTXt(chunk) {
|
|
|
16
17
|
const buffer = BinaryBuffer.fromArrayBuffer(chunk_buffer);
|
|
17
18
|
buffer.position = chunk_byte_offset;
|
|
18
19
|
|
|
19
|
-
const keyword = buffer.readASCIICharacters(
|
|
20
|
+
const keyword = buffer.readASCIICharacters(80, true);
|
|
21
|
+
if (keyword.length > 79) {
|
|
22
|
+
throw new Error('iTXt keyword exceeds 79 bytes');
|
|
23
|
+
}
|
|
20
24
|
const compression_flag = buffer.readUint8();
|
|
21
25
|
const compression_method = buffer.readUint8();
|
|
22
26
|
|
|
23
27
|
|
|
24
28
|
const language_tag = buffer.readASCIICharacters(Number.MAX_SAFE_INTEGER, true);
|
|
25
|
-
const
|
|
29
|
+
const translated_start = buffer.position - chunk_byte_offset;
|
|
30
|
+
let translated_end = translated_start;
|
|
31
|
+
while (translated_end < chunk_size && chunk[translated_end] !== 0) {
|
|
32
|
+
translated_end++;
|
|
33
|
+
}
|
|
34
|
+
if (translated_end >= chunk_size) {
|
|
35
|
+
throw new Error('iTXt translated keyword is not terminated');
|
|
36
|
+
}
|
|
37
|
+
const translated_keyword = utf8_decode(chunk, translated_start, translated_end);
|
|
38
|
+
buffer.position = chunk_byte_offset + translated_end + 1;
|
|
26
39
|
|
|
27
40
|
const remaining_bytes = chunk_byte_end - buffer.position;
|
|
28
41
|
|
|
29
42
|
let text;
|
|
30
43
|
|
|
31
44
|
if (compression_flag === 0) {
|
|
32
|
-
text = buffer.
|
|
45
|
+
text = utf8_decode(chunk, buffer.position - chunk_byte_offset, chunk_size);
|
|
33
46
|
} else if (compression_flag === 1) {
|
|
34
47
|
|
|
35
48
|
if (compression_method !== 0) {
|
|
@@ -38,9 +51,7 @@ export async function png_chunk_decode_iTXt(chunk) {
|
|
|
38
51
|
|
|
39
52
|
const decoded = await png_inflate([new Uint8Array(buffer.data, buffer.position, remaining_bytes)]);
|
|
40
53
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
text = buffer.readASCIICharacters(decoded.byteLength);
|
|
54
|
+
text = utf8_decode(decoded);
|
|
44
55
|
} else {
|
|
45
56
|
throw new Error(`Invalid compression flag value '${compression_flag}'`);
|
|
46
57
|
}
|