@woosh/meep-engine 3.41.0 → 3.43.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 +91 -96
- 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/vgeo_runtime/README.md +5 -4
- 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/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +6 -5
- 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/atmosphere/GPUSky.d.ts +12 -0
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +162 -147
- 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/lightmap/bake/shader_lightmap_denoise_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +10 -3
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +13 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +9 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +23 -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/volumetrics/GPUViewVolumetrics.d.ts +4 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +74 -3
- package/src/shade/renderer/volumetrics/NOTES.md +1023 -957
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +5 -4
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +5 -4
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +1 -1
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +1 -1
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +1 -1
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +41 -0
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +112 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +9 -23
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +18 -126
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +22 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +228 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +0 -53
- 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 +23 -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 +227 -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 +274 -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 +57 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +43 -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 +268 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +20 -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 +239 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +153 -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 +874 -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 +29 -9
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +14 -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,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
|
}
|
|
@@ -38,10 +38,8 @@ export class SoftwareGPUDevice extends SoftwareGPUObjectBase implements GPUDevic
|
|
|
38
38
|
* @param {GPUFeatureName[]} [descriptor.requiredFeatures] optional features to enable, from
|
|
39
39
|
* {@link SUPPORTED_OPTIONAL_FEATURES}. Asking for one this device cannot emulate throws, as
|
|
40
40
|
* `requestDevice` rejects for one the adapter does not have.
|
|
41
|
-
* @param {Partial<GPUSupportedLimits>} [descriptor.requiredLimits] limits
|
|
42
|
-
* the defaults
|
|
43
|
-
* a test reaches the clamping paths the renderer takes on a small device without allocating
|
|
44
|
-
* anything large.
|
|
41
|
+
* @param {Partial<GPUSupportedLimits>} [descriptor.requiredLimits] requested limits; worse-than-default
|
|
42
|
+
* requests preserve the defaults, and unsupported better requests are refused
|
|
45
43
|
*/
|
|
46
44
|
constructor(descriptor?: {
|
|
47
45
|
label?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoftwareGPUDevice.d.ts","sourceRoot":"","sources":["../../../../../src/shade/device/mock/SoftwareGPUDevice.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SoftwareGPUDevice.d.ts","sourceRoot":"","sources":["../../../../../src/shade/device/mock/SoftwareGPUDevice.js"],"names":[],"mappings":"AA+QA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wEAFgB,SAAS;IAkCrB;;;;;;;;OAQG;IACH;QAP+B,KAAK,GAAzB,MAAM;QACwB,gBAAgB,GAA9C,gBAAgB;QAGyB,cAAc,GAAvD,2BAA2B;OAuBrC;IAvDD;;;;;OAKG;IACH,qCAEC;IAOD;;;;;;OAMG;IACH,iCAEC;IAiCD;;OAEG;IACH,kCAEC;IAID;;OAEG;IACH,sBAEC;IAaD;;;;;;;;OAQG;IACH,iEAUC;IAwBD;;;;;OAKG;IACH,uCAEC;IAID;;;;OAIG;IACH,2BAEC;IAED;;;;;;;OAOG;IACH,gBAcC;IAID;;;;;;;;;OASG;IACH,uBALW,MAAM,YACN,kCAAkC,YAClC,OAAO,GAAC,uBAAuB,GAC7B,IAAI,CAIhB;IAED;;;;;OAKG;IACH,0BALW,MAAM,YACN,kCAAkC,YAClC,OAAO,GAAC,oBAAoB,GAC1B,IAAI,CAIhB;IAED;;;OAGG;IACH,qBAHW,KAAK,GACH,OAAO,CAInB;IASD;;;;;;;OAOG;IACH,wCAFa,IAAI,CAUhB;IAED;;;;;;;;;OASG;IACH,iBAHa,QAAQ,mBAAiB,IAAI,CAAC,CAc1C;IAED;;;;;;;;;;;;;;OAcG;IACH,yCAFa,IAAI,CA4BhB;IAED;;;;;;;;;OASG;IACH,yDAcC;IAmJD;;;;;;OAMG;IACH,4DAcC;IAED;;;;;;OAMG;IACH,6DAEC;IAED;;;OAGG;IACH,oFAEC;IAED;;;;;;;OAOG;IACH,kEAUC;IAkCD;;;OAGG;IACH,iFAcC;IAED;;;;;;;OAOG;IACH,2EAEC;IAED;;;;;;OAMG;IACH,iFAEC;IAED;;;;;OAKG;IACH,oFAEC;IAUD;;;;;OAKG;IACH,kBAFa,MAAM,CAMlB;IAED;;;OAGG;IACH,+DAQC;IA4BD;;;OAGG;IACH,kFAEC;IAGL;;;OAGG;IACH,8BAFU,OAAO,CAE8B;;CAN9C;;;;;;;;;;;;WA7sBa,mBAAiB,IAAI;;sCA9QG,4BAA4B;kCAHhC,wBAAwB;mCASvB,yBAAyB"}
|
|
@@ -87,11 +87,11 @@ const LIMIT_NAMES = Object.keys(DEFAULT_LIMITS);
|
|
|
87
87
|
/**
|
|
88
88
|
* Build the limits one device reports.
|
|
89
89
|
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
90
|
+
* Like `requestDevice`, requests worse than the defaults leave those defaults in place.
|
|
91
|
+
* This software device supports the default capabilities, so a better request is refused.
|
|
92
|
+
* "Better" means larger for maximum limits and smaller for minimum alignment limits.
|
|
93
|
+
*
|
|
94
|
+
* @see https://gpuweb.github.io/gpuweb/#dom-gpuadapter-requestdevice
|
|
95
95
|
*
|
|
96
96
|
* @param {Partial<GPUSupportedLimits>} [overrides]
|
|
97
97
|
* @returns {GPUSupportedLimits} frozen, as a real one is read-only
|
|
@@ -100,13 +100,23 @@ function build_limits(overrides = {}) {
|
|
|
100
100
|
const limits = { ...DEFAULT_LIMITS };
|
|
101
101
|
|
|
102
102
|
for (const [name, value] of Object.entries(overrides)) {
|
|
103
|
+
if (value === undefined) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
103
106
|
if (!LIMIT_NAMES.includes(name)) {
|
|
104
|
-
throw new
|
|
105
|
-
`SoftwareGPUDevice: '${name}' is not a GPUSupportedLimits member
|
|
107
|
+
throw new DOMException(
|
|
108
|
+
`SoftwareGPUDevice: '${name}' is not a GPUSupportedLimits member`,
|
|
109
|
+
'OperationError'
|
|
106
110
|
);
|
|
107
111
|
}
|
|
108
112
|
|
|
109
113
|
const is_minimum = name.startsWith('min');
|
|
114
|
+
if (is_minimum && (!Number.isInteger(Math.log2(value)) || value >= 2 ** 32)) {
|
|
115
|
+
throw new DOMException(
|
|
116
|
+
`SoftwareGPUDevice: required alignment limit ${name}=${value} must be a power of two less than 2^32`,
|
|
117
|
+
'OperationError'
|
|
118
|
+
);
|
|
119
|
+
}
|
|
110
120
|
const better = is_minimum
|
|
111
121
|
? value < DEFAULT_LIMITS[name]
|
|
112
122
|
: value > DEFAULT_LIMITS[name];
|
|
@@ -118,7 +128,6 @@ function build_limits(overrides = {}) {
|
|
|
118
128
|
);
|
|
119
129
|
}
|
|
120
130
|
|
|
121
|
-
limits[name] = value;
|
|
122
131
|
}
|
|
123
132
|
|
|
124
133
|
return Object.freeze(limits);
|
|
@@ -332,10 +341,8 @@ export class SoftwareGPUDevice extends SoftwareGPUObjectBase {
|
|
|
332
341
|
* @param {GPUFeatureName[]} [descriptor.requiredFeatures] optional features to enable, from
|
|
333
342
|
* {@link SUPPORTED_OPTIONAL_FEATURES}. Asking for one this device cannot emulate throws, as
|
|
334
343
|
* `requestDevice` rejects for one the adapter does not have.
|
|
335
|
-
* @param {Partial<GPUSupportedLimits>} [descriptor.requiredLimits] limits
|
|
336
|
-
* the defaults
|
|
337
|
-
* a test reaches the clamping paths the renderer takes on a small device without allocating
|
|
338
|
-
* anything large.
|
|
344
|
+
* @param {Partial<GPUSupportedLimits>} [descriptor.requiredLimits] requested limits; worse-than-default
|
|
345
|
+
* requests preserve the defaults, and unsupported better requests are refused
|
|
339
346
|
*/
|
|
340
347
|
constructor(descriptor = {}) {
|
|
341
348
|
super(descriptor);
|
|
@@ -990,4 +997,4 @@ export class SoftwareGPUDevice extends SoftwareGPUObjectBase {
|
|
|
990
997
|
* @readonly
|
|
991
998
|
* @type {boolean}
|
|
992
999
|
*/
|
|
993
|
-
SoftwareGPUDevice.prototype.isSoftwareGPUDevice = true;
|
|
1000
|
+
SoftwareGPUDevice.prototype.isSoftwareGPUDevice = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sweep_views.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/sweep_views.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;GAYG;AACH;IAX6B,QAAQ;IACC,MAAM;IAClB,KAAK;IACJ,MAAM,EAAtB,MAAM;IAC4B,OAAO,UAAhC,OAAO,KAAG,IAAI;IACN,QAAQ,GAAzB,MAAM;IACa,UAAU,GAA7B,MAAM,EAAE;IACS,QAAQ,GAAzB,MAAM;IACW,OAAO,GAAxB,MAAM;IACJ,QAAQ,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"sweep_views.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/sweep_views.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;GAYG;AACH;IAX6B,QAAQ;IACC,MAAM;IAClB,KAAK;IACJ,MAAM,EAAtB,MAAM;IAC4B,OAAO,UAAhC,OAAO,KAAG,IAAI;IACN,QAAQ,GAAzB,MAAM;IACa,UAAU,GAA7B,MAAM,EAAE;IACS,QAAQ,GAAzB,MAAM;IACW,OAAO,GAAxB,MAAM;IACJ,QAAQ,MAAM,CAAC,CAyG3B"}
|
|
@@ -61,6 +61,7 @@ export async function sweep_views({
|
|
|
61
61
|
|
|
62
62
|
const kept = {
|
|
63
63
|
position: [...camera.transform.translation],
|
|
64
|
+
rotation: [...camera.transform.rotation],
|
|
64
65
|
near: camera.near,
|
|
65
66
|
far: camera.far,
|
|
66
67
|
};
|
|
@@ -108,7 +109,7 @@ export async function sweep_views({
|
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
camera.transform.setTranslation(...kept.position);
|
|
111
|
-
camera.transform.
|
|
112
|
+
camera.transform.setRotation(...kept.rotation);
|
|
112
113
|
camera.near = kept.near;
|
|
113
114
|
camera.far = kept.far;
|
|
114
115
|
|
|
@@ -46,10 +46,11 @@ and drawn, and its sub-pixel jitter does not move the cut: the τ table below is
|
|
|
46
46
|
and off. The environment is not awaited — `test_assets/` is gitignored, so a checkout without it
|
|
47
47
|
gets the sun alone and still draws every triangle the cut selected.
|
|
48
48
|
|
|
49
|
-
**Not the GPU sky, and that is worth writing down.** `
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
**Not the GPU sky, and that is worth writing down.** `view/GPUViewSkyContext.js` would be the
|
|
50
|
+
natural source for this and is **not reachable**: nothing in the engine constructs it, and `Renderer`
|
|
51
|
+
does not mention the atmosphere. (`GPUSceneContext.sky` is real now -- the scene's `GPUSky`, whose
|
|
52
|
+
transmittance and multiple-scattering LUTs the volumetrics read -- but those are look-up tables, not
|
|
53
|
+
the convolved environment this would need.) Reviving the sky as a light source is not a playground's
|
|
53
54
|
change — the sky produces an already-convolved GPU texture with `SPHERE_PROBE_MIPMAP_LEVELS` mips,
|
|
54
55
|
while `GPULightCollection` builds its environment privately from a CPU `ShadeTexture` and convolves
|
|
55
56
|
a full mip chain itself, so the two do not meet without a new way to hand that class a GPU-side
|
|
@@ -23,14 +23,12 @@ below-interface view. The grazing camera stays over the submerged floor.
|
|
|
23
23
|
|
|
24
24
|
Water is an entity with `Water`, `MeshletGeometry` and `Transform64`. The mesh authors the outline
|
|
25
25
|
and elevations, and the transform places it; Level edits the transform's height. This fixture
|
|
26
|
-
has a curved, coarse authored outline. Optical controls edit Water. Optional WaterWaves
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Calm meshes allocate no grid. The simulation uses a one-metre reference depth and
|
|
33
|
-
does not infer bathymetry from the mesh. Screen reflections can be disabled while retaining the
|
|
26
|
+
has a curved, coarse authored outline. Optical controls edit Water. Optional WaterWaves sets the wind:
|
|
27
|
+
the body's waves are a fetch-limited JONSWAP sea over its own extent along the wind, drawn from 18
|
|
28
|
+
spectral bands every body shares, plus the wave particles of its splashes, which reflect off the mesh's
|
|
29
|
+
outline (`WATER_SURFACE_SIMULATION_PLAN_2026_10_06.md`). Vertices sample both in the body's metric local
|
|
30
|
+
frame and move in it; deep water is assumed, and nothing is inferred from bathymetry. A body with a
|
|
31
|
+
triangle too steep to flatten onto a reference plane stays calm. Screen reflections can be disabled while retaining the
|
|
34
32
|
fallback to the renderer's indirect lighting (IBL, or Brick4 when it is the active mode).
|
|
35
33
|
The Newton, bounded HZB traversal, and undisplaced control modes all use the same AVBOIT path.
|
|
36
34
|
The Medium select picks one of the water presets (`shade/renderer/medium/water/water_presets.js`):
|
|
@@ -162,8 +160,8 @@ tiny-loss resolve guard; existing particle, mesh and ribbon APIs remain intact.
|
|
|
162
160
|
Water bodies occupy persistent rows in the existing scene database. Optical and component edits
|
|
163
161
|
queue CPU writes; idle updates do not enumerate bodies. GPU page iteration, the existing prefix
|
|
164
162
|
scan, ordered meshlet expansion and indirect draws cover the scene. A GPU reduction supplies signed
|
|
165
|
-
local-y displacement bounds
|
|
166
|
-
bounds by
|
|
163
|
+
local-y and horizontal displacement bounds every frame. Body frustum culling expands the authored
|
|
164
|
+
bounds by them before applying the GPU world transform.
|
|
167
165
|
|
|
168
166
|
Following Far Cry 5's view-tile approach, each candidate triangle classifies its swept footprint into
|
|
169
167
|
view tiles. A tile contains 16×16 cells; `settings.tessellation_pixels` sets their reference-view spacing
|
|
@@ -181,7 +179,8 @@ against the view planes. Calm bodies project the authored triangles directly. Re
|
|
|
181
179
|
when displacement can bring them into view. Opaque depth is tested after displacement, so an
|
|
182
180
|
undisplaced depth rejection cannot hide a crest. Both surface passes share the same patch counts
|
|
183
181
|
and reconstruction inputs. Simulation is independent of camera position and render resolution;
|
|
184
|
-
|
|
182
|
+
the spectral bands cost the same for any number of bodies, and particles are dispatched from their
|
|
183
|
+
GPU count. Device buffer and indirect
|
|
185
184
|
draw limits still bound scene complexity. If the reference is coplanar with the camera, it moves
|
|
186
185
|
farther beyond the displacement envelope to retain a projectable surface. The body's conservative
|
|
187
186
|
swept span sets one shared grid spacing, at least the requested pixel spacing. This bounds each
|