@woosh/meep-engine 3.60.3 → 3.60.5
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/CHANGELOG.md +2602 -0
- package/CONTRIBUTING.md +7 -0
- package/MIGRATION_2_TO_3.md +136 -0
- package/SECURITY.md +4 -0
- package/editor/EditorCameraNavigation.d.ts +2 -1
- package/editor/EditorCameraNavigation.d.ts.map +1 -1
- package/editor/EditorCameraNavigation.js +51 -57
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +3 -0
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.js +6 -0
- package/package.json +6 -2
- package/src/engine/EngineHarness.d.ts +3 -9
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -8
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +1 -2
- package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts +14 -0
- package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts.map +1 -0
- package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.js +22 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +19 -3
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +31 -4
- package/src/engine/graphics/ecs/trail3d/advance_trail.js +1 -1
- package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +8 -0
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +5 -5
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +6 -6
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +731 -734
- package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
- package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
- package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +10 -0
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -1
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +2 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/probe_clipmap/README.md +1 -0
- package/src/shade/playground/probe_clipmap/index.html +5 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +16 -2
- package/src/shade/playground/vgeo_scene/README.md +1 -1
- package/src/shade/playground/water_refraction/README.md +5 -6
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +7 -5
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +4 -6
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +34 -36
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +162 -163
- package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +1 -1
- package/src/shade/renderer/atmosphere/compute_mie_absorption.js +1 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +1 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -164
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +4 -4
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +4 -4
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +2 -2
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts +4 -5
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +6 -7
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +2 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +50 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +6 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts +18 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +5 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +13 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +52 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +250 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
- package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
- package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
- package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
- package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts +39 -0
- package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/environment_level_1_blur_plan.js +119 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +15 -7
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +66 -83
- package/src/shade/renderer/light/environment/graph_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/graph_filter_environment_map.js +15 -6
- package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts +3 -0
- package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_blur_environment_map.js +111 -0
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts +3 -0
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.js +128 -0
- package/src/shade/renderer/light/environment/shader_downsample_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_downsample_environment_map.js +0 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -3
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +1 -3
- package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts +5 -6
- package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.js +9 -10
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +48 -49
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +12 -16
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +246 -246
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +1 -2
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +34 -35
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +2 -2
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +2 -2
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_compute_extinction.js +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +1 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.d.ts +3 -3
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.js +3 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +9 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +9 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +4 -4
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +5 -5
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +1 -2
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +1 -2
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts +14 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.js +19 -6
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts +10 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.js +14 -6
- package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.js +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts +2 -3
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.js +7 -8
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts +1 -1
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.js +12 -12
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +2 -2
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +3 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +22 -13
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +7 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +0 -19
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +2 -52
- package/editor/REWORK_PLAN_2026_08.md +0 -692
- package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
- package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
- package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
- package/src/REVIEW_2026_08_06/adv-core.md +0 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
- package/src/REVIEW_2026_08_06/adv-view.md +0 -446
- package/src/REVIEW_2026_08_06/api-core.md +0 -296
- package/src/REVIEW_2026_08_06/api-engine.md +0 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
- package/src/REVIEW_2026_08_06/core-binary.md +0 -348
- package/src/REVIEW_2026_08_06/core-collection.md +0 -376
- package/src/REVIEW_2026_08_06/core-math.md +0 -221
- package/src/REVIEW_2026_08_06/core-process.md +0 -266
- package/src/REVIEW_2026_08_06/core-science.md +0 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
- package/src/REVIEW_2026_08_06/engine-input.md +0 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
- package/src/REVIEW_2026_08_06/generation.md +0 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
- package/src/REVIEW_2026_08_06/view.md +0 -667
- package/src/REVIEW_2026_08_06.md +0 -610
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
- package/src/core/bvh2/bvh3/NOTES.md +0 -2
- package/src/core/bvh8/NOTES.md +0 -63
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
- package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
- package/src/core/geom/3d/gjk/NOTES.md +0 -8
- package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
- package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
- package/src/engine/REVIEW_2026_07_03.md +0 -211
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
- package/src/engine/control/first-person/DESIGN.md +0 -658
- package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
- package/src/engine/control/first-person/TODO.md +0 -160
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
- package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
- package/src/engine/ecs/ik/PLAN.md +0 -179
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
- package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
- package/src/engine/network/CONGESTION_CONTROL.md +0 -87
- package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
- package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
- package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
- package/src/engine/physics/cloth/PLAN.md +0 -3056
- package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
- package/src/engine/physics/fluid/solver/NOTES.md +0 -46
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
- package/src/format/image/avif/DECISIONS.md +0 -545
- package/src/format/image/jpeg/NOTES.md +0 -3
- package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
- package/src/generation/COORDINATES.md +0 -54
- package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
- package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
- package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
- package/src/shade/RENDERER_CONTRACT.md +0 -697
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
- package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
- package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
- package/src/shade/renderer/NOTES.md +0 -78
- package/src/shade/renderer/PLAN.md +0 -8
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
- package/src/shade/renderer/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
- package/src/shade/renderer/camera/orbital/README.md +0 -81
- package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
- package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/index.js +0 -9
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
- package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
- package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -483
- package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -536
- package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4225
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
- package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
- package/src/shade/renderer/hiz/NOTES.md +0 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
- package/src/shade/renderer/light/cluster/NOTES.md +0 -11
- package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
- package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts +0 -13
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts.map +0 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.js +0 -198
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
- package/src/shade/renderer/particles/DESIGN.md +0 -1011
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -283
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
- package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
- package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/nss/NOTES.md +0 -339
- package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
- package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
- package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
- package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
- package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
- package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
- package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -394
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -160
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
- package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -932
- package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
- package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
- package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
- package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
- package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
- package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
- package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
- package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
- package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -4
- package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
- package/src/shade/wgsl/NOTES.md +0 -4
- package/src/view/elements/progress/segmented/segment_frame_transform.d.ts +0 -15
- package/src/view/elements/progress/segmented/segment_frame_transform.d.ts.map +0 -1
- package/src/view/elements/progress/segmented/segment_frame_transform.js +0 -69
|
@@ -4,6 +4,7 @@ import { DEFAULT_DEPTH_TEXTURE_VIEW } from "../depth/DEFAULT_DEPTH_TEXTURE_VIEW.
|
|
|
4
4
|
import { graph_compute_pass } from "../shader/graph/compute/graph_compute_pass.js";
|
|
5
5
|
import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
|
|
6
6
|
import { ShaderSwitchSet } from "../shader/compiler/ShaderSwitchSet.js";
|
|
7
|
+
import { graph_water_meshlets } from "./medium/graph_water_meshlets.js";
|
|
7
8
|
import { graph_water_tessellation } from "./surface/graph_water_tessellation.js";
|
|
8
9
|
import { water_lod_view, WATER_LOD_VIEW_STRUCT } from "./surface/lod/WATER_LOD.js";
|
|
9
10
|
import { WATER_LOD_LIMITS_STRUCT, WATER_LOD_PATCH_INDICES, WATER_LOD_STATISTICS_WORDS,
|
|
@@ -28,12 +29,6 @@ export class GPUWaterRenderer {
|
|
|
28
29
|
settings = { enabled: true, max_distance: 300, distance_tolerance: 0.15,
|
|
29
30
|
max_updates: 4, fallback_steps: 48, mode: 0, reflections: 1, debug_view: 0, inscatter_segments: 4,
|
|
30
31
|
tessellation_pixels: 4 };
|
|
31
|
-
/**
|
|
32
|
-
* The frame's water bodies table, recorded by whoever owns the surfaces at the head of the frame;
|
|
33
|
-
* each drawable surface carries its row as `body_index`.
|
|
34
|
-
* @type {import("./medium/GPUWaterBodies.js").GPUWaterBodies|null}
|
|
35
|
-
*/
|
|
36
|
-
bodies = null;
|
|
37
32
|
#pipeline = create_water_pipeline();
|
|
38
33
|
/** The optics pipelines, each by the shader switch set it was built for. */
|
|
39
34
|
#finalize_pipelines = new Map();
|
|
@@ -169,7 +164,7 @@ export class GPUWaterRenderer {
|
|
|
169
164
|
// the lattice is chosen from the camera's position and its pixel angle, not its jittered projection's offset:
|
|
170
165
|
// raster jitter moves samples, not the mesh
|
|
171
166
|
const lod = water_lod_view(view_ctx.camera.camera.projection_matrix, resolution[1], Math.max(0.5, settings.tessellation_pixels));
|
|
172
|
-
const { meshlets, lod_bodies } =
|
|
167
|
+
const { meshlets, lod_bodies } = graph_water_meshlets({ graph, scene, camera, meshlet_capacity: this.meshlet_capacity,
|
|
173
168
|
visible_rows: surface.visible_rows, lod, steep: surface.steep });
|
|
174
169
|
const limits = { ...this.lod_budgets, triangles: Math.max(this.meshlet_capacity, 1) * GEOMETRY_MESHLET_TRIANGLE_LIMIT };
|
|
175
170
|
const patches = graph_water_tessellation({ graph, scene, camera, meshlets, lod_bodies, meshlet_capacity: this.meshlet_capacity,
|
|
@@ -225,7 +220,8 @@ export class GPUWaterRenderer {
|
|
|
225
220
|
data.commands = pass.read(patches.commands);
|
|
226
221
|
// Keep the accepted UV and both paths at f32 precision through final shading.
|
|
227
222
|
data.receiver = target("receiver", "rgba32float");
|
|
228
|
-
|
|
223
|
+
// the fragment's control path, shaded surface, coverage and body, bit-packed (shader_water.js WaterReceiver)
|
|
224
|
+
data.trace_metadata = target("trace metadata", "rgba32uint");
|
|
229
225
|
data.interface_depth = target("interface depth", "depth32float");
|
|
230
226
|
let states = this.#prepared.get(graph);
|
|
231
227
|
if (states === undefined) { states = new Map(); this.#prepared.set(graph, states); }
|
|
@@ -264,9 +260,10 @@ export class GPUWaterRenderer {
|
|
|
264
260
|
const bindings = WATER_FINALIZE_RESOURCES.generateBindings(shared, encoder);
|
|
265
261
|
const copy_pipeline = shader_water_background_copy.pipeline;
|
|
266
262
|
const copy_bindings = shader_water_background_copy.descriptor.resources.generateBindings({tScene: shared.tScene}, encoder);
|
|
263
|
+
// away from water nothing is transmitted through and nothing is added: the background copy leaves both
|
|
267
264
|
const render = encoder.constructRenderPass({label: 'Water / coherent optics', pipeline: finalize_pipeline, bindings: [],
|
|
268
|
-
colorAttachments: [d.transmission,d.radiance,d.background].map(handle => ({
|
|
269
|
-
view: resources.get(handle).obtainView(), loadOp: 'clear', storeOp: 'store', clearValue
|
|
265
|
+
colorAttachments: [[d.transmission, [1,1,1,0]], [d.radiance, [0,0,0,0]], [d.background, [0,0,0,0]]].map(([handle, clearValue]) => ({
|
|
266
|
+
view: resources.get(handle).obtainView(), loadOp: 'clear', storeOp: 'store', clearValue,
|
|
270
267
|
})), depthStencilAttachment: {view: resources.get(d.interface_depth).obtainView(DEFAULT_DEPTH_TEXTURE_VIEW), depthReadOnly: true},
|
|
271
268
|
});
|
|
272
269
|
render.setPipeline(graphics.render_pipelines.obtain(copy_pipeline)); render.record_pipeline(copy_pipeline);
|
|
@@ -353,7 +350,7 @@ export class GPUWaterRenderer {
|
|
|
353
350
|
const [color] = graph_image_pass({ graph, shader: shader_water_debug, output_resolution: resolution,
|
|
354
351
|
inputs: { inspection: { mode, resolution }, camera: data.camera, warp: data.warp, tIntegral: data.integral,
|
|
355
352
|
transmission: data.transmission, radiance: data.radiance,
|
|
356
|
-
receiver: data.receiver, interface_depth: data.interface_depth
|
|
353
|
+
receiver: data.receiver, interface_depth: data.interface_depth } });
|
|
357
354
|
return color;
|
|
358
355
|
}
|
|
359
356
|
|
|
@@ -362,7 +359,7 @@ export class GPUWaterRenderer {
|
|
|
362
359
|
const pass = graph.add("Water / pixel probe", data, (data, resources, { encoder, graphics }) => {
|
|
363
360
|
const buffer = graphics.device.createBuffer({ size: 1024, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST });
|
|
364
361
|
const pixel = probe.uv.map((v, i) => Math.min(resolution[i]-1, Math.max(0, Math.floor(v*resolution[i]))));
|
|
365
|
-
[data.receiver, data.transmission, data.radiance
|
|
362
|
+
[data.receiver, data.transmission, data.radiance].forEach((handle, i) => {
|
|
366
363
|
encoder.copyTextureToBuffer({ texture: resources.get(handle).gpu_texture, origin: [...pixel, 0] },
|
|
367
364
|
{ buffer, offset: i*256, bytesPerRow: 256 }, [1,1,1]);
|
|
368
365
|
});
|
|
@@ -370,16 +367,14 @@ export class GPUWaterRenderer {
|
|
|
370
367
|
try {
|
|
371
368
|
await buffer.mapAsync(GPUMapMode.READ);
|
|
372
369
|
const mapped = buffer.getMappedRange();
|
|
373
|
-
const half = offset => Array.from(new Float16Array(mapped, offset, 4));
|
|
374
|
-
const radiance = half(512);
|
|
375
|
-
radiance[3] = new Float32Array(mapped, 768, 4)[1];
|
|
376
370
|
probe.resolve({ pixel, resolution, frame_time: optical.frame_time, receiver: Array.from(new Float32Array(mapped, 0, 4)),
|
|
377
|
-
transmission: Array.from(new Float32Array(mapped, 256, 4)), radiance,
|
|
371
|
+
transmission: Array.from(new Float32Array(mapped, 256, 4)), radiance: Array.from(new Float16Array(mapped, 512, 4)),
|
|
372
|
+
stale: false });
|
|
378
373
|
} catch (error) { probe.reject(error); }
|
|
379
374
|
finally { buffer.destroy(); }
|
|
380
375
|
});
|
|
381
376
|
});
|
|
382
|
-
for (const key of ["receiver", "transmission", "radiance"
|
|
377
|
+
for (const key of ["receiver", "transmission", "radiance"]) { data[key] = pass.read(optical[key]); }
|
|
383
378
|
pass.make_side_effect();
|
|
384
379
|
}
|
|
385
380
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A view's water bodies: which the view draws and how, and their meshlets in row order.
|
|
3
|
+
*
|
|
4
|
+
* Draw culling over the frame's visible list (WATER_SURFACE_DISTANCE_LOD_PROPOSAL_2026_10_06.md §4.3), each drawn
|
|
5
|
+
* body's lattice frame at its row, and the drawn bodies' meshlets. The expansion is an ordered prefix scan over the
|
|
6
|
+
* rows, which preserves equal-depth ownership, including after holes and reuse.
|
|
7
|
+
*
|
|
8
|
+
* @param {object} options
|
|
9
|
+
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
|
|
10
|
+
* @param {object} options.scene GPU scene context
|
|
11
|
+
* @param {number} options.camera the view's camera uniform resource
|
|
12
|
+
* @param {number} options.meshlet_capacity every water meshlet the scene holds
|
|
13
|
+
* @param {GPUBuffer} options.visible_rows the frame's visible water rows
|
|
14
|
+
* @param {{ranges: number, orthographic: number, level: number, distance: number}} options.lod the view's lattice choice
|
|
15
|
+
* @param {GPUBuffer} options.steep per wave row: set for a body with a triangle too steep for the lattice
|
|
16
|
+
* @returns {{meshlets: number, lod_bodies: number}} resources
|
|
17
|
+
*/
|
|
18
|
+
export function graph_water_meshlets({ graph, scene, camera, meshlet_capacity, visible_rows, lod, steep }: {
|
|
19
|
+
graph: import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
20
|
+
scene: object;
|
|
21
|
+
camera: number;
|
|
22
|
+
meshlet_capacity: number;
|
|
23
|
+
visible_rows: GPUBuffer;
|
|
24
|
+
lod: {
|
|
25
|
+
ranges: number;
|
|
26
|
+
orthographic: number;
|
|
27
|
+
level: number;
|
|
28
|
+
distance: number;
|
|
29
|
+
};
|
|
30
|
+
steep: GPUBuffer;
|
|
31
|
+
}): {
|
|
32
|
+
meshlets: number;
|
|
33
|
+
lod_bodies: number;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=graph_water_meshlets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_water_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/medium/graph_water_meshlets.js"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;;;;GAgBG;AACH;IATsG,KAAK,EAAhG,OAAO,8DAA8D,EAAE,UAAU;IACjE,KAAK,EAArB,MAAM;IACU,MAAM,EAAtB,MAAM;IACU,gBAAgB,EAAhC,MAAM;IACa,YAAY;IACkD,GAAG,EAApF;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;IACpD,KAAK;IACtB;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAmDlD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
|
|
2
|
+
import { round_up } from "../../../../core/math/round_up.js";
|
|
3
|
+
import {
|
|
4
|
+
graph_prefix_scan_csdldf,
|
|
5
|
+
prefix_scan_csdldf_output_descriptor
|
|
6
|
+
} from "../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
|
|
7
|
+
import { graph_create_buffer } from "../../shader/graph/graph_create_buffer.js";
|
|
8
|
+
import {
|
|
9
|
+
build_indirect_compute_dispatch_command,
|
|
10
|
+
INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
|
|
11
|
+
} from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
12
|
+
import { shader_prefix_sum_to_command } from "../../rasterize/expand/mesh/shader_prefix_sum_to_command.js";
|
|
13
|
+
import { shader_increment_count_by_prefix_sum } from "../../rasterize/expand/mesh/shader_increment_count_by_prefix_sum.js";
|
|
14
|
+
import { graph_compute_pass } from "../../shader/graph/compute/graph_compute_pass.js";
|
|
15
|
+
import { shader_water_meshlets_expand } from "./shader_water_meshlets.js";
|
|
16
|
+
import { shader_water_lod_bodies } from "../surface/lod/shader_water_lod.js";
|
|
17
|
+
import { WATER_LOD_BODY_STRUCT, WATER_LOD_VIEW_STRUCT } from "../surface/lod/WATER_LOD.js";
|
|
18
|
+
import { MESHLET_COLLECTION_STRUCT } from "../../rasterize/MESHLET_COLLECTION_STRUCT.js";
|
|
19
|
+
import { MESHLET_DEFINITION_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_DEFINITION_STRUCT.js";
|
|
20
|
+
|
|
21
|
+
const MESHLETS_OFFSET = MESHLET_COLLECTION_STRUCT.get('elements').offset;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A view's water bodies: which the view draws and how, and their meshlets in row order.
|
|
25
|
+
*
|
|
26
|
+
* Draw culling over the frame's visible list (WATER_SURFACE_DISTANCE_LOD_PROPOSAL_2026_10_06.md §4.3), each drawn
|
|
27
|
+
* body's lattice frame at its row, and the drawn bodies' meshlets. The expansion is an ordered prefix scan over the
|
|
28
|
+
* rows, which preserves equal-depth ownership, including after holes and reuse.
|
|
29
|
+
*
|
|
30
|
+
* @param {object} options
|
|
31
|
+
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
|
|
32
|
+
* @param {object} options.scene GPU scene context
|
|
33
|
+
* @param {number} options.camera the view's camera uniform resource
|
|
34
|
+
* @param {number} options.meshlet_capacity every water meshlet the scene holds
|
|
35
|
+
* @param {GPUBuffer} options.visible_rows the frame's visible water rows
|
|
36
|
+
* @param {{ranges: number, orthographic: number, level: number, distance: number}} options.lod the view's lattice choice
|
|
37
|
+
* @param {GPUBuffer} options.steep per wave row: set for a body with a triangle too steep for the lattice
|
|
38
|
+
* @returns {{meshlets: number, lod_bodies: number}} resources
|
|
39
|
+
*/
|
|
40
|
+
export function graph_water_meshlets({ graph, scene, camera, meshlet_capacity, visible_rows, lod, steep }) {
|
|
41
|
+
const table = scene.scene_database.get('water_bodies');
|
|
42
|
+
const capacity = Math.max(table.element_capacity, 1);
|
|
43
|
+
const data = {};
|
|
44
|
+
const pass = graph.add('Water / lod bodies', data, (d, resources, { encoder }) => {
|
|
45
|
+
const command = resources.get(d.command);
|
|
46
|
+
build_indirect_compute_dispatch_command(64, encoder, visible_rows, 0, command, 0, true);
|
|
47
|
+
shader_water_lod_bodies.dispatchIndirect({ encoder, command, bindings: {
|
|
48
|
+
capacity: round_up(capacity, 4), lod: encoder.allocateTransientValueBuffer(WATER_LOD_VIEW_STRUCT, lod),
|
|
49
|
+
camera: resources.get(d.camera), scene_database: scene.scene_database_buffer,
|
|
50
|
+
geometries: scene.geometries.buffer_metadata, visible_rows, steep,
|
|
51
|
+
lod_bodies: resources.get(d.lod_bodies), counts: resources.get(d.counts),
|
|
52
|
+
} });
|
|
53
|
+
});
|
|
54
|
+
data.camera = pass.read(camera);
|
|
55
|
+
// The shared scan reads vec4u blocks, including the padded final block.
|
|
56
|
+
const bytes = 16 + round_up(capacity, 4) * 4;
|
|
57
|
+
data.counts = pass.create('counts', BufferResourceDescriptor.from(bytes, GPUBufferUsage.STORAGE, 0, bytes));
|
|
58
|
+
data.command = pass.create('Water lod bodies command', INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
|
|
59
|
+
data.lod_bodies = pass.create('Water lod bodies', BufferResourceDescriptor.from(capacity * WATER_LOD_BODY_STRUCT.size,
|
|
60
|
+
GPUBufferUsage.STORAGE));
|
|
61
|
+
const sums = graph_prefix_scan_csdldf({ graph, input: data.counts,
|
|
62
|
+
output: graph_create_buffer(graph, 'Water lod body meshlet sums', prefix_scan_csdldf_output_descriptor(capacity)),
|
|
63
|
+
element_max_count: capacity });
|
|
64
|
+
const command_data = {};
|
|
65
|
+
const command_pass = graph.add('Water / expand command', command_data, (d, resources, { encoder }) => {
|
|
66
|
+
shader_prefix_sum_to_command.dispatch({ encoder, bindings: {
|
|
67
|
+
prefix_sums: resources.get(d.sums), command: resources.get(d.command),
|
|
68
|
+
} });
|
|
69
|
+
});
|
|
70
|
+
command_data.sums = command_pass.read(sums);
|
|
71
|
+
const command = command_data.command = command_pass.create('command', INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
|
|
72
|
+
const expand_data = {};
|
|
73
|
+
const expand = graph.add('Water / expand meshlets', expand_data, (d, resources, { encoder }) => {
|
|
74
|
+
shader_water_meshlets_expand.dispatchIndirect({ encoder, command: resources.get(d.command), bindings: {
|
|
75
|
+
prefix_sums: resources.get(d.sums), output: resources.get(d.output),
|
|
76
|
+
scene_database: scene.scene_database_buffer, geometries: scene.geometries.buffer_metadata,
|
|
77
|
+
} });
|
|
78
|
+
});
|
|
79
|
+
expand_data.command = expand.read(command);
|
|
80
|
+
expand_data.sums = expand.read(sums);
|
|
81
|
+
// The collection struct holding this many meshlets, padded to its alignment: one meshlet is the binding's minimum.
|
|
82
|
+
const meshlets_bytes = round_up(MESHLETS_OFFSET + Math.max(meshlet_capacity, 1) * MESHLET_DEFINITION_STRUCT.aligned_size,
|
|
83
|
+
MESHLET_COLLECTION_STRUCT.align);
|
|
84
|
+
expand_data.output = expand.create('meshlets', BufferResourceDescriptor.from(meshlets_bytes,
|
|
85
|
+
GPUBufferUsage.STORAGE, 0, MESHLETS_OFFSET));
|
|
86
|
+
const { output } = graph_compute_pass({ graph, shader: shader_increment_count_by_prefix_sum,
|
|
87
|
+
bindings: { prefix_sums: sums, output: expand_data.output } });
|
|
88
|
+
return { meshlets: output, lod_bodies: data.lod_bodies };
|
|
89
|
+
}
|
|
@@ -24,7 +24,7 @@ export class GPUWaterQueries {
|
|
|
24
24
|
* @param {PipelineEnquiry} enquiry
|
|
25
25
|
*/
|
|
26
26
|
static enquirePipelines(enquiry: PipelineEnquiry): void;
|
|
27
|
-
static "__#
|
|
27
|
+
static "__#275@#execute"(pass: any, resources: any, context: any): void;
|
|
28
28
|
/**
|
|
29
29
|
* @param {object} options
|
|
30
30
|
* @param {GPUDevice} options.device
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_water.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water.js"],"names":[],"mappings":"AAwpBA,kEAAsH;AACtH,gFAAgF;AAChF,wFAEC;AArmBD,8CAKwB;AAwCxB;;;;GAIG;AACH,mEAA8D;AAgP9D,+CAsFmB;AA2MnB,4CAAmG;AACnG,uGAAuG;AACvG,qDACgE;AAChE,0DAAyC;yCA5nBA,8DAA8D;6BA2B1E,gCAAgC;4CAJjB,mDAAmD;0BAPrE,iCAAiC;iCAQ1B,+BAA+B"}
|
|
@@ -7,6 +7,8 @@ import { BRICK4_DATA_STRUCT } from "../global_illumination/brick4/gpu/BRICK4_DAT
|
|
|
7
7
|
import { PROBE_CLIPMAP_SAMPLING_GROUP } from "../global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js";
|
|
8
8
|
import { chunk_F_dielectric } from "../shader/chunk/brdf/fresnel/chunk_F_dielectric.js";
|
|
9
9
|
import { chunk_direction_view_to_world } from "../shader/chunk/camera/chunk_direction_view_to_world.js";
|
|
10
|
+
import { chunk_uv_octahedral_unit_decode } from "../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
|
|
11
|
+
import { chunk_uv_octahedral_unit_encode } from "../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_encode.js";
|
|
10
12
|
import { chunk_direction_world_to_view } from "../shader/chunk/camera/chunk_direction_world_to_view.js";
|
|
11
13
|
import { chunk_ray_at } from "../shader/chunk/geometry/ray/chunk_ray_at.js";
|
|
12
14
|
import { chunk_ffx_sssr_advance_ray } from "../shader/chunk/screen_space/chunk_ffx_sssr_advance_ray.js";
|
|
@@ -90,7 +92,7 @@ function water_resources(finalize = false) {
|
|
|
90
92
|
.add(WATER_PARTICLE_OFFSETS_RESOURCE)
|
|
91
93
|
.add(WATER_PARTICLE_ENTRIES_RESOURCE);
|
|
92
94
|
if (finalize) {
|
|
93
|
-
group.addTexture('receiver').addTexture('trace_metadata');
|
|
95
|
+
group.addTexture('receiver').addTexture('trace_metadata', 'uint');
|
|
94
96
|
}
|
|
95
97
|
return resources;
|
|
96
98
|
}
|
|
@@ -435,9 +437,12 @@ for (const resource of [CAMERA_RESOURCE, TRACE_RESOURCE, SCREEN_DEPTH_RESOURCE,
|
|
|
435
437
|
|
|
436
438
|
const body = CodeChunk.from(/* language=WGSL */ `
|
|
437
439
|
struct WaterReceiver {
|
|
438
|
-
@location(0) receiver: vec4<f32>,
|
|
439
|
-
@location(1) metadata: vec4<f32>,
|
|
440
440
|
// Receiver UV, bounded path, classified status + Newton updates / 32. Readback is opt-in.
|
|
441
|
+
@location(0) receiver: vec4<f32>,
|
|
442
|
+
// The fragment's control path (f32 bits); the surface it was shaded with, its normal octahedral in two unorm16
|
|
443
|
+
// and its slope variance beside its shore coverage in two f16; its body + 1. The optics take that surface from
|
|
444
|
+
// here rather than evaluate it again.
|
|
445
|
+
@location(1) metadata: vec4<u32>,
|
|
441
446
|
}
|
|
442
447
|
|
|
443
448
|
// A screen-space receiver must lie below the surface point the ray entered at: the refracted ray runs
|
|
@@ -515,10 +520,11 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterRecei
|
|
|
515
520
|
else if (status == 8u) { status = 24u + newton_failure; }
|
|
516
521
|
else if (status == 9u) { status = 31u; }
|
|
517
522
|
return WaterReceiver(vec4f(hit.uv, hit.distance, f32(status) + f32(newton_updates)/32.0),
|
|
518
|
-
|
|
523
|
+
vec4<u32>(bitcast<u32>(control_path), pack2x16unorm(uv_octahedral_unit_encode(pixel.normal)),
|
|
524
|
+
pack2x16float(vec2f(pixel.variance, coverage)), in.body_index + 1u));
|
|
519
525
|
}
|
|
520
526
|
`, [surface_body, chunk_water_screen_ray, chunk_direction_view_to_world,
|
|
521
|
-
chunk_water_receiver_texel, WATER_LEVEL_TOLERANCE_DECLARATION]);
|
|
527
|
+
chunk_water_receiver_texel, WATER_LEVEL_TOLERANCE_DECLARATION, chunk_uv_octahedral_unit_encode]);
|
|
522
528
|
|
|
523
529
|
const finalize_body = CodeChunk.from(/* language=WGSL */ `
|
|
524
530
|
struct WaterOptics {
|
|
@@ -528,12 +534,15 @@ struct WaterOptics {
|
|
|
528
534
|
}
|
|
529
535
|
@fragment
|
|
530
536
|
fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptics {
|
|
531
|
-
let pixel = water_pixel_surface(in, in.pixel_footprint);
|
|
532
|
-
let water = ${WATER_BODIES_TABLE.marshalling_method_read}(&scene_database, in.body_index);
|
|
533
537
|
let coord = vec2i(in.clip.xy);
|
|
534
538
|
let metadata = textureLoad(trace_metadata, coord, 0);
|
|
535
539
|
// Equal-depth surfaces must retain the same deterministic owner as receiver selection.
|
|
536
|
-
if (metadata.w !=
|
|
540
|
+
if (metadata.w != in.body_index + 1u) { discard; }
|
|
541
|
+
// the surface the receivers shaded this fragment with
|
|
542
|
+
let shading = unpack2x16float(metadata.z);
|
|
543
|
+
let pixel = WaterPixelSurface(uv_octahedral_unit_decode(unpack2x16unorm(metadata.y)), shading.x);
|
|
544
|
+
let coverage = shading.y;
|
|
545
|
+
let water = ${WATER_BODIES_TABLE.marshalling_method_read}(&scene_database, in.body_index);
|
|
537
546
|
let dimensions = vec2f(textureDimensions(tDepth, 0));
|
|
538
547
|
let uv = in.clip.xy / dimensions;
|
|
539
548
|
let receiver_data = textureLoad(receiver, coord, 0);
|
|
@@ -577,7 +586,7 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptic
|
|
|
577
586
|
// wave height across a few metres, against a tolerance the gather already allows.
|
|
578
587
|
let gathered = water_receiver_radiance(tScene, tDepth, tNormal, lookup,
|
|
579
588
|
camera.projection_matrix_inverse, camera.view_matrix_inverse, in.world, interface_normal, above);
|
|
580
|
-
var path = metadata.x;
|
|
589
|
+
var path = bitcast<f32>(metadata.x);
|
|
581
590
|
var color = original.rgb;
|
|
582
591
|
// the receiver seen through the surface: refracted, or the pixel's own when there is none
|
|
583
592
|
var receiver_coord = coord;
|
|
@@ -612,8 +621,8 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptic
|
|
|
612
621
|
scattered = exit * water_inscatter(body, in.world, direction, normalize(in.rest_normal), max(path, 0.0), trace.inscatter_segments);
|
|
613
622
|
}
|
|
614
623
|
let event = water_event(transmitted, fresnel * reflection + scattered);
|
|
615
|
-
let optical = water_transport(event, original.rgb, color,
|
|
616
|
-
return WaterOptics(vec4f(optical.transmission,
|
|
624
|
+
let optical = water_transport(event, original.rgb, color, coverage);
|
|
625
|
+
return WaterOptics(vec4f(optical.transmission, coverage), vec4f(optical.radiance, 0.0),
|
|
617
626
|
vec4f(optical.background, original.a));
|
|
618
627
|
}
|
|
619
628
|
`, [surface_body, chunk_water_screen_ray, chunk_F_dielectric, chunk_ffx_sssr_validate_hit,
|
|
@@ -621,7 +630,7 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptic
|
|
|
621
630
|
chunk_water_receiver_downwelling, chunk_water_receiver_texel,
|
|
622
631
|
chunk_water_transport, chunk_water_receiver_radiance,
|
|
623
632
|
// water_gi_specular here, and water_gi_irradiance for the in-scatter and the downwelling light
|
|
624
|
-
chunk_water_gi]);
|
|
633
|
+
chunk_water_gi, chunk_uv_octahedral_unit_decode]);
|
|
625
634
|
|
|
626
635
|
export const water_shader = ShaderDescriptor.from({ label: "Water / receivers", resources, body });
|
|
627
636
|
/** The optics pass; its variants differ in the indirect lighting they fall back to, and bind alike. */
|
|
@@ -653,7 +662,7 @@ function water_pipeline(shader, targets, finalize) {
|
|
|
653
662
|
primitive: { topology: "triangle-list", cullMode: "none" },
|
|
654
663
|
});
|
|
655
664
|
}
|
|
656
|
-
export function create_water_pipeline() { return water_pipeline(water_shader, ['rgba32float', '
|
|
665
|
+
export function create_water_pipeline() { return water_pipeline(water_shader, ['rgba32float', 'rgba32uint'], false); }
|
|
657
666
|
/** The optics pipeline, its shader built for `switches` (a ShaderSwitchSet). */
|
|
658
667
|
export function create_water_finalize_pipeline(switches) {
|
|
659
668
|
return water_pipeline(water_finalize_shader.variant(switches), ['rgba32float', 'rgba16float', 'rgba16float'], true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water_avboit.js"],"names":[],"mappings":"AAkCA,mDAwBG;AAQH,+CAqCG;AAUH,4CA4BG;
|
|
1
|
+
{"version":3,"file":"shader_water_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water_avboit.js"],"names":[],"mappings":"AAkCA,mDAwBG;AAQH,+CAqCG;AAUH,4CA4BG;AAOH,uDAYG;AAOH,6CAqCG;8BA3L2B,4BAA4B;4BAC9B,0BAA0B"}
|
|
@@ -141,21 +141,22 @@ fn main(@builtin(position) coord: vec4f) -> WaterContribution {
|
|
|
141
141
|
}), targets: AVBOIT_DRAW_TARGETS,
|
|
142
142
|
});
|
|
143
143
|
|
|
144
|
-
// Initialize
|
|
145
|
-
//
|
|
144
|
+
// Initialize the background target in the same render pass as water shading: the AVBOIT resolve reads it over the
|
|
145
|
+
// whole screen. Transmission and radiance are constants away from water, and the pass's clear gives them; this draw
|
|
146
|
+
// leaves them alone. It samples opaque HDR and needs no COPY_SRC usage or renderer changes.
|
|
146
147
|
const background_resources = new ShaderResourceSetDescriptor();
|
|
147
148
|
background_resources.createGroup().addTexture('tScene');
|
|
148
149
|
export const shader_water_background_copy = ImageShader.from({
|
|
149
150
|
descriptor: ShaderDescriptor.from({label: 'Water / background initialization', resources: background_resources,
|
|
150
151
|
body: CodeChunk.from(/* language=WGSL */ `
|
|
151
152
|
struct WaterBackground {
|
|
152
|
-
@location(
|
|
153
|
+
@location(2) background: vec4f,
|
|
153
154
|
}
|
|
154
155
|
@fragment
|
|
155
156
|
fn main(@builtin(position) coord: vec4f) -> WaterBackground {
|
|
156
|
-
return WaterBackground(
|
|
157
|
+
return WaterBackground(textureLoad(tScene, vec2i(coord.xy), 0));
|
|
157
158
|
}
|
|
158
|
-
`)}), targets: [{format:'rgba32float'}, {format:'rgba16float'}, {format:'rgba16float'}],
|
|
159
|
+
`)}), targets: [{format:'rgba32float', writeMask: 0}, {format:'rgba16float', writeMask: 0}, {format:'rgba16float'}],
|
|
159
160
|
depthStencil: DepthStencilState.from({format:'depth32float', depthWriteEnabled:false, depthCompare:'always'}),
|
|
160
161
|
});
|
|
161
162
|
|
|
@@ -163,7 +164,7 @@ const debug_resources = new ShaderResourceSetDescriptor();
|
|
|
163
164
|
debug_resources.createGroup().addUniform("inspection", WebGPUStruct.from({ mode: u32, resolution: vec2f }, "WaterInspection").pack())
|
|
164
165
|
.addUniform("camera", CAMERA_UNIFORM_STRUCT).addStorageBuffer("warp", AVBOIT_WARP_STRUCT)
|
|
165
166
|
.addTexture("tIntegral", "float", "3d").addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE).addTexture("transmission")
|
|
166
|
-
.addTexture("radiance").addTexture("receiver").addTexture("interface_depth")
|
|
167
|
+
.addTexture("radiance").addTexture("receiver").addTexture("interface_depth");
|
|
167
168
|
export const shader_water_debug = ImageShader.from({
|
|
168
169
|
descriptor: ShaderDescriptor.from({ label: "Water / inspection", resources: debug_resources,
|
|
169
170
|
body: CodeChunk.from(/* language=WGSL */ `
|
|
@@ -188,7 +189,6 @@ fn main(@builtin(position) coord: vec4f) -> @location(0) vec4f {
|
|
|
188
189
|
color.r = max(color.r, fract(r.w) * 2.0);
|
|
189
190
|
}
|
|
190
191
|
case 5u: { color = textureLoad(radiance, pixel, 0).rgb; }
|
|
191
|
-
case 6u: { color = vec3f(min(textureLoad(trace_metadata, pixel, 0).g, 1.0)); }
|
|
192
192
|
case 8u, 9u: {
|
|
193
193
|
let z = get_view_space_depth(textureLoad(interface_depth, pixel, 0).r, camera);
|
|
194
194
|
// without the draw's footprint (a derivative this switch cannot take): where the water is
|
|
@@ -30,7 +30,7 @@ export function water_lod_cell_layout(limits: {
|
|
|
30
30
|
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
|
|
31
31
|
* @param {object} options.scene GPU scene context
|
|
32
32
|
* @param {number} options.camera the view's camera uniform resource
|
|
33
|
-
* @param {number} options.meshlets the drawn bodies' meshlets resource, from {@link
|
|
33
|
+
* @param {number} options.meshlets the drawn bodies' meshlets resource, from {@link graph_water_meshlets}
|
|
34
34
|
* @param {number} options.lod_bodies the view's per-body lattice frames resource, from the same
|
|
35
35
|
* @param {number} options.meshlet_capacity every water meshlet the scene holds: the triangle slots there can be
|
|
36
36
|
* @param {{ranges: number, orthographic: number, level: number, distance: number}} options.lod the view's lattice choice
|
|
@@ -62,7 +62,7 @@ export function water_lod_cell_layout(limits) {
|
|
|
62
62
|
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
|
|
63
63
|
* @param {object} options.scene GPU scene context
|
|
64
64
|
* @param {number} options.camera the view's camera uniform resource
|
|
65
|
-
* @param {number} options.meshlets the drawn bodies' meshlets resource, from {@link
|
|
65
|
+
* @param {number} options.meshlets the drawn bodies' meshlets resource, from {@link graph_water_meshlets}
|
|
66
66
|
* @param {number} options.lod_bodies the view's per-body lattice frames resource, from the same
|
|
67
67
|
* @param {number} options.meshlet_capacity every water meshlet the scene holds: the triangle slots there can be
|
|
68
68
|
* @param {{ranges: number, orthographic: number, level: number, distance: number}} options.lod the view's lattice choice
|
|
@@ -3218,7 +3218,15 @@ function inferBuiltinReturnType(name, args) {
|
|
|
3218
3218
|
// the two values; the third argument is the condition
|
|
3219
3219
|
return commonArgumentType(args.slice(0, 2));
|
|
3220
3220
|
}
|
|
3221
|
-
if (name === 'textureLoad'
|
|
3221
|
+
if (name === 'textureLoad') {
|
|
3222
|
+
// A texel is the texture's declared sample type, its format's for a storage texture: an integer texture
|
|
3223
|
+
// loads integers, and a `bitcast` of one must see a u32 or i32, not an f32 that happens to hold the word.
|
|
3224
|
+
const texture = args[0] !== undefined ? args[0].type : null;
|
|
3225
|
+
const scalar = texture !== null && texture.kind === 'texture' ? texture.scalar : 'f32';
|
|
3226
|
+
return { kind: 'vec', size: 4, scalar: scalar === 'u32' || /uint$/.test(scalar) ? 'u32'
|
|
3227
|
+
: scalar === 'i32' || /sint$/.test(scalar) ? 'i32' : 'f32' };
|
|
3228
|
+
}
|
|
3229
|
+
if (name === 'textureSampleLevel' || name === 'textureSample' || name === 'textureSampleBias' || name === 'textureSampleGrad') {
|
|
3222
3230
|
return { kind: 'vec', size: 4, scalar: 'f32' };
|
|
3223
3231
|
}
|
|
3224
3232
|
// Both gathers return the four texels of a 2x2 footprint. Saying so here matters more than
|
|
@@ -140,25 +140,6 @@ export class SegmentedResourceBarView extends View {
|
|
|
140
140
|
* @private
|
|
141
141
|
*/
|
|
142
142
|
private __columns;
|
|
143
|
-
/**
|
|
144
|
-
* scratch for {@link segment_frame_transform}: [scale, offset]
|
|
145
|
-
* @type {number[]}
|
|
146
|
-
* @private
|
|
147
|
-
*/
|
|
148
|
-
private __frame;
|
|
149
|
-
/**
|
|
150
|
-
* The timer that re-checks the placement while linked; 0 when none
|
|
151
|
-
* @type {number}
|
|
152
|
-
* @private
|
|
153
|
-
*/
|
|
154
|
-
private __recheck_timer;
|
|
155
|
-
/**
|
|
156
|
-
* Place again if anything moved that no event reports: an ancestor's transform, the transform of an iframe the
|
|
157
|
-
* bar sits in, a move by a fraction of a pixel. Cheap when nothing did — a computed width and a few rects —
|
|
158
|
-
* and {@link updateSegments} rebuilds only on a change.
|
|
159
|
-
* @private
|
|
160
|
-
*/
|
|
161
|
-
private __recheck;
|
|
162
143
|
/**
|
|
163
144
|
*
|
|
164
145
|
* @type {List<NumericInterval>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedResourceBarView.d.ts","sourceRoot":"","sources":["../../../../../../src/view/elements/progress/segmented/SegmentedResourceBarView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SegmentedResourceBarView.d.ts","sourceRoot":"","sources":["../../../../../../src/view/elements/progress/segmented/SegmentedResourceBarView.js"],"names":[],"mappings":"AA4BA;;;;;;;;;;;;;;;;;GAiBG;AACH;IACI;;;;;;;;;;;;OAYG;IACH;QAVgD,MAAM,EAA3C,CAAC,OAAO,kBAAgB,CAAC,EAAE;QAC0B,GAAG,GAAxD,OAAO,uCAAmC;QACvB,SAAS,GAA5B,MAAM,EAAE;QAC6E,KAAK,GAA1F;YAAC,IAAI,EAAC,MAAM,CAAC;YAAC,UAAU,EAAC,MAAM,CAAC;YAAC,QAAQ,EAAC,MAAM,CAAC;YAAC,cAAc,EAAC,MAAM,CAAA;SAAC,EAAE;QAC9B,KAAK,GAAjD;YAAC,KAAK,EAAC,MAAM,CAAC;YAAC,KAAK,EAAC,MAAM,CAAA;SAAC,GAAC,IAAI;QAChB,cAAc,GAA/B,MAAM;QACW,qBAAqB,GAAtC,MAAM;QACW,qBAAqB,GAAtC,MAAM;OAyShB;IA5QG;;;;OAIG;IACH,yBAA8B;IAE9B;;;;OAIG;IACH,oBAAsB;IAEtB;;;OAGG;IACH,gBAAoB;IAEpB;;;OAGG;IACH,gBAAoB;IAEpB;;;OAGG;IACH,gBAA+B;IAG/B;;;OAGG;IACH,gCAAoD;IAEpD;;;OAGG;IACH,gCAAoD;IAEpD;;;;OAIG;IACH,yBAAyB;IAEzB;;;OAGG;IACH,yBAAgH;IAEhH;;;;OAIG;IACH,oBAAuB;IAgiB3B;;OAEG;IACH,4BASC;IAxiBG,yBAA4B;IAC5B,mBAAmB;IA6fvB;;OAEG;IACH,wBAQC;IArgBG;;;;OAIG;IACH,oBAAwB;IAGxB,oBAAsB;IACtB,sBAAwB;IACxB,sBAAwB;IACxB,6BAA+B;IAE/B;;;;OAIG;IACH,sBAAyB;IAEzB;;;;OAIG;IACH,qBAAqB;IAErB;;;;OAIG;IACH,kBAAmB;IAEnB;;;OAGG;IACH,YAFU,qBAAqB,CAEH;IAG5B,mBAAuC;IASvC;;;OAGG;IACH,mBAA+C;IAG/C;;;OAGG;IACH,sBAAuB;IAEvB;;;;OAIG;IACH,sBAAuB;IAEvB;;;;OAIG;IACH,mBAAsB;IACtB,gCAA2B;IAC3B,+BAA0B;IAkBtB;;;;OAIG;IACH,oBAAgD;IAoCpD;;;OAGG;IACH,gBAFU,QAAQ,CAsChB;IAWF;;;;OAIG;IACH,uBAA2C;IAuC/C,eAGC;IAED,wBAMC;IAED;;;;;;;OAOG;IACH,uBA4DC;IAED;;;;;;OAMG;IACH,sBAKC;IAED;;;;;;OAMG;IACH,wBA2CC;IAED;;;;;OAKG;IACH,sBAoBC;IAED,mBAiDC;IAED;;;;OAIG;IACH,eAaC;IAED;;;;OAIG;IACH,qBAoBC;IAeD;;;;OAIG;IACH,mCAUC;CAeJ;iBA5rBgB,kBAAkB;iBALlB,0CAA0C;qBAGtC,6BAA6B;oBAF9B,kCAAkC"}
|
|
@@ -10,7 +10,6 @@ import { GhostTrail } from "./GhostTrail.js";
|
|
|
10
10
|
import { SEGMENT_TIERS_DEFAULT } from "./SEGMENT_TIERS_DEFAULT.js";
|
|
11
11
|
import { segment_cell_extent } from "./segment_cell_extent.js";
|
|
12
12
|
import { segment_cell_layout } from "./segment_cell_layout.js";
|
|
13
|
-
import { segment_frame_transform } from "./segment_frame_transform.js";
|
|
14
13
|
import { segment_mask_apply, segment_mask_url } from "./segment_mask_url.js";
|
|
15
14
|
import { segment_mask_width } from "./segment_mask_width.js";
|
|
16
15
|
import { segment_tick_positions } from "./segment_tick_positions.js";
|
|
@@ -27,13 +26,6 @@ const REBUILD_WIDTH_THRESHOLD_PX = 0.5;
|
|
|
27
26
|
*/
|
|
28
27
|
const UNSCALED_TOLERANCE = 2e-3;
|
|
29
28
|
|
|
30
|
-
/**
|
|
31
|
-
* How often a linked bar checks that its notches or cells still sit on the screen's pixels, in milliseconds. A
|
|
32
|
-
* transform on an ancestor or on a containing iframe moves them without any event the bar hears.
|
|
33
|
-
* @type {number}
|
|
34
|
-
*/
|
|
35
|
-
const RECHECK_INTERVAL_MS = 250;
|
|
36
|
-
|
|
37
29
|
/**
|
|
38
30
|
* Resource bar in the style of a MOBA health bar: the values fill it end to end, notches mark fixed amounts, and
|
|
39
31
|
* a ghost behind the fill trails a drop so the loss stays readable for a moment.
|
|
@@ -197,22 +189,6 @@ export class SegmentedResourceBarView extends View {
|
|
|
197
189
|
*/
|
|
198
190
|
this.__columns = [];
|
|
199
191
|
|
|
200
|
-
/**
|
|
201
|
-
* scratch for {@link segment_frame_transform}: [scale, offset]
|
|
202
|
-
* @type {number[]}
|
|
203
|
-
* @private
|
|
204
|
-
*/
|
|
205
|
-
this.__frame = [1, 0];
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* The timer that re-checks the placement while linked; 0 when none
|
|
209
|
-
* @type {number}
|
|
210
|
-
* @private
|
|
211
|
-
*/
|
|
212
|
-
this.__recheck_timer = 0;
|
|
213
|
-
|
|
214
|
-
this.__recheck = this.__recheck.bind(this);
|
|
215
|
-
|
|
216
192
|
/**
|
|
217
193
|
*
|
|
218
194
|
* @type {List<NumericInterval>}
|
|
@@ -388,10 +364,6 @@ export class SegmentedResourceBarView extends View {
|
|
|
388
364
|
this.__sizeObserver.start();
|
|
389
365
|
this.__watch_device_pixel_ratio();
|
|
390
366
|
this.update();
|
|
391
|
-
|
|
392
|
-
if (typeof setInterval === 'function') {
|
|
393
|
-
this.__recheck_timer = setInterval(this.__recheck, RECHECK_INTERVAL_MS);
|
|
394
|
-
}
|
|
395
367
|
}
|
|
396
368
|
|
|
397
369
|
unlink() {
|
|
@@ -401,11 +373,6 @@ export class SegmentedResourceBarView extends View {
|
|
|
401
373
|
|
|
402
374
|
this.__sizeObserver.stop();
|
|
403
375
|
|
|
404
|
-
if (this.__recheck_timer !== 0) {
|
|
405
|
-
clearInterval(this.__recheck_timer);
|
|
406
|
-
this.__recheck_timer = 0;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
376
|
if (this.__dpr_query !== null) {
|
|
410
377
|
this.__dpr_query.removeEventListener('change', this.__handle_dpr_change);
|
|
411
378
|
this.__dpr_query = null;
|
|
@@ -463,21 +430,16 @@ export class SegmentedResourceBarView extends View {
|
|
|
463
430
|
|
|
464
431
|
const dpr = typeof devicePixelRatio === 'number' && devicePixelRatio > 0 ? devicePixelRatio : 1;
|
|
465
432
|
|
|
466
|
-
// how the iframes this bar sits in are drawn by the pages around them — invisible from in here
|
|
467
|
-
const frame = segment_frame_transform(el.ownerDocument.defaultView, this.__frame);
|
|
468
|
-
const frame_scale = frame[0];
|
|
469
|
-
const frame_offset = frame[1];
|
|
470
|
-
|
|
471
433
|
// a CSS scale on an ancestor shows each CSS pixel of the bar as `scale` page pixels. The computed width is
|
|
472
434
|
// serialised to a few decimals (175.844 for 175.84375), so an unscaled bar measures a hair off 1 — enough to
|
|
473
435
|
// put a width that should be whole in device pixels just past it — and is read as unscaled
|
|
474
|
-
const measured_scale =
|
|
436
|
+
const measured_scale = rect.width > 0 ? rect.width / layout_width : 1;
|
|
475
437
|
const scale = Math.abs(measured_scale - 1) < UNSCALED_TOLERANCE ? 1 : measured_scale;
|
|
476
438
|
|
|
477
439
|
// device pixels per CSS pixel of the bar
|
|
478
440
|
const ratio = dpr * scale;
|
|
479
441
|
|
|
480
|
-
const origin_device =
|
|
442
|
+
const origin_device = rect.left * dpr;
|
|
481
443
|
const origin_phase = origin_device - Math.round(origin_device);
|
|
482
444
|
|
|
483
445
|
const max = this.__value_max.getValue();
|
|
@@ -699,18 +661,6 @@ export class SegmentedResourceBarView extends View {
|
|
|
699
661
|
ghost.width = `${segment_cell_extent(layout, ghost_fraction * count) / ratio}px`;
|
|
700
662
|
}
|
|
701
663
|
|
|
702
|
-
/**
|
|
703
|
-
* Place again if anything moved that no event reports: an ancestor's transform, the transform of an iframe the
|
|
704
|
-
* bar sits in, a move by a fraction of a pixel. Cheap when nothing did — a computed width and a few rects —
|
|
705
|
-
* and {@link updateSegments} rebuilds only on a change.
|
|
706
|
-
* @private
|
|
707
|
-
*/
|
|
708
|
-
__recheck() {
|
|
709
|
-
if (this.isLinked) {
|
|
710
|
-
this.updateSegments();
|
|
711
|
-
}
|
|
712
|
-
}
|
|
713
|
-
|
|
714
664
|
/**
|
|
715
665
|
* @private
|
|
716
666
|
*/
|