@woosh/meep-engine 3.59.0 → 3.60.1
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/package.json +1 -1
- package/src/shade/playground/probe_clipmap/index.html +12 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +5 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +4 -6
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +63 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +3 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +13 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +764 -48
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +11 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +13 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +21 -18
- 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 +254 -73
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +149 -8
- 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 +181 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +179 -7
- 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 +412 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +4 -4
- 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 +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +36 -10
- 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 +218 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +24 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +18 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +157 -51
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +16 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +55 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +10 -9
- 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 +32 -39
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +100 -30
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +12 -12
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +65 -19
- package/src/view/elements/progress/segmented/GhostTrail.d.ts +116 -0
- package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/GhostTrail.js +280 -0
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +163 -10
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +442 -101
- package/src/view/elements/progress/segmented/playground/index.html +78 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/playground/main.js +173 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
- package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -238
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +0 -99
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +0 -139
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +0 -65
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +0 -393
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +0 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +0 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +0 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +0 -108
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +0 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +0 -113
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +0 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +0 -85
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +0 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +0 -273
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +0 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +0 -151
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +0 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +0 -133
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +0 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +0 -135
package/package.json
CHANGED
|
@@ -143,6 +143,18 @@
|
|
|
143
143
|
frame-time knob; this page starts higher so Sponza is whole in seconds, not minutes.
|
|
144
144
|
</p>
|
|
145
145
|
|
|
146
|
+
<label>
|
|
147
|
+
<span>Card capture</span>
|
|
148
|
+
<select id="card_capture_mode">
|
|
149
|
+
<option value="Raster" selected>Raster — the material's own pass</option>
|
|
150
|
+
<option value="Trace">Trace — a ray a texel</option>
|
|
151
|
+
</select>
|
|
152
|
+
</label>
|
|
153
|
+
<p class="note">
|
|
154
|
+
How the cards take their albedo. A change captures every card set again; the Mesh cards view
|
|
155
|
+
shows what they hold.
|
|
156
|
+
</p>
|
|
157
|
+
|
|
146
158
|
<hr>
|
|
147
159
|
|
|
148
160
|
<div id="status"></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/probe_clipmap/main.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/probe_clipmap/main.js"],"names":[],"mappings":"AA0FA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CA8QzB"}
|
|
@@ -11,6 +11,7 @@ import { camera_frame_sphere } from "../../renderer/camera/camera_frame_sphere.j
|
|
|
11
11
|
import { OrbitalCameraController } from "../../renderer/camera/orbital/OrbitalCameraController.js";
|
|
12
12
|
import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
|
|
13
13
|
import { create_frame_loop } from "../../renderer/create_frame_loop.js";
|
|
14
|
+
import { MeshCardCaptureMode } from "../../renderer/geometry/sdf/cards/MeshCardCaptureMode.js";
|
|
14
15
|
import { ProbeClipmapDebugView } from "../../renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js";
|
|
15
16
|
import { make_sunlight } from "../../renderer/light/make_sunlight.js";
|
|
16
17
|
import { PointLight } from "../../renderer/light/model/PointLight.js";
|
|
@@ -237,6 +238,10 @@ export async function start() {
|
|
|
237
238
|
renderer.probe_clipmap.debug_view = ProbeClipmapDebugView[event.target.value];
|
|
238
239
|
});
|
|
239
240
|
|
|
241
|
+
element('card_capture_mode').addEventListener('change', event => {
|
|
242
|
+
renderer.probe_clipmap.card_capture_mode = MeshCardCaptureMode[event.target.value];
|
|
243
|
+
});
|
|
244
|
+
|
|
240
245
|
const taa_toggle = element('taa');
|
|
241
246
|
const path_tracing_toggle = element('path_tracing');
|
|
242
247
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
|
|
@@ -2928,9 +2928,10 @@ export class Renderer {
|
|
|
2928
2928
|
// below is skipped on the same fact.
|
|
2929
2929
|
const has_volumetrics = view_ctx.scene.volumetrics.source.volumes.length > 0;
|
|
2930
2930
|
|
|
2931
|
-
// The probe clipmap GI runs after the G-buffer and the
|
|
2932
|
-
//
|
|
2933
|
-
// settings on the first frame in the mode, and given back
|
|
2931
|
+
// The probe clipmap GI runs after the G-buffer and before the volumetrics that sample it
|
|
2932
|
+
// (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §5); its hits trace their own shadow rays, so it reads no
|
|
2933
|
+
// shadow map. Made for this view and these settings on the first frame in the mode, and given back
|
|
2934
|
+
// on the first frame out of it.
|
|
2934
2935
|
if (this.indirect_lighting_mode === ShadeIndirectLightingMode.ProbeClipmap) {
|
|
2935
2936
|
this.#probe_clipmap_gi.graph_update({
|
|
2936
2937
|
graph,
|
|
@@ -2939,10 +2940,7 @@ export class Renderer {
|
|
|
2939
2940
|
depth: gr_texture_depth_current,
|
|
2940
2941
|
normal: gr_texture_normal,
|
|
2941
2942
|
stbn: STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec2,
|
|
2942
|
-
// a cache of the lighting, not the simulation: its response runs on the wall clock
|
|
2943
|
-
time: performance.now() / 1000,
|
|
2944
2943
|
movers: gr_scene_movers,
|
|
2945
|
-
shadowmap_atlas: gr_shadowmap_atlas,
|
|
2946
2944
|
});
|
|
2947
2945
|
} else {
|
|
2948
2946
|
this.#probe_clipmap_gi.release();
|
|
@@ -36,6 +36,12 @@ export const MESH_SDF_BAKE_BUDGET_MAX: number;
|
|
|
36
36
|
* {@link cards}, whose card sets — one per (geometry, material) pair — are captured after the bake,
|
|
37
37
|
* `capture_budget` pages a frame.
|
|
38
38
|
*
|
|
39
|
+
* **Sources** ({@link add_source}) make the caches of geometries with no tree of their own to bake from,
|
|
40
|
+
* a virtual geometry's: such a geometry waits queued, as one whose tree is not resident yet does. A
|
|
41
|
+
* source hears of each geometry queued ({@link onRequested}), records its own work each frame ahead of
|
|
42
|
+
* the bake, and bakes a proxy of it here as any geometry, whose resident cache it then gives the
|
|
43
|
+
* geometry ({@link adopt}).
|
|
44
|
+
*
|
|
39
45
|
* **Readers** bind {@link headers}, {@link indirection}, {@link texture} and {@link MESH_SDF_SAMPLER}
|
|
40
46
|
* (see {@link write_bindings}) and sample through `mesh_sdf_sample`, which only a resident header
|
|
41
47
|
* should be given to.
|
|
@@ -53,6 +59,11 @@ export class GPUGeometrySDFManager {
|
|
|
53
59
|
* @type {Signal<number>}
|
|
54
60
|
*/
|
|
55
61
|
onBaked: any;
|
|
62
|
+
/**
|
|
63
|
+
* Sent with a geometry's record each time its cache is queued for a bake: what a source listens to.
|
|
64
|
+
* @type {Signal<GPUGeometryMetadata>}
|
|
65
|
+
*/
|
|
66
|
+
onRequested: any;
|
|
56
67
|
/**
|
|
57
68
|
* The card sets: one capture of a geometry's layout per (geometry, material) pair, which their
|
|
58
69
|
* user acquires and releases. Layouts reach it as they are placed.
|
|
@@ -115,6 +126,42 @@ export class GPUGeometrySDFManager {
|
|
|
115
126
|
* @returns {MeshSDFState}
|
|
116
127
|
*/
|
|
117
128
|
state_of(record: GPUGeometryMetadata): MeshSDFState;
|
|
129
|
+
/**
|
|
130
|
+
* Whether a geometry's cache waits for its bake: queued, and not admitted. A cache whose last holder went is
|
|
131
|
+
* baked all the same until a {@link trim} drops it, as one admitted is.
|
|
132
|
+
*
|
|
133
|
+
* @param {GPUGeometryMetadata} record
|
|
134
|
+
* @returns {boolean}
|
|
135
|
+
*/
|
|
136
|
+
is_requested(record: GPUGeometryMetadata): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Whether a holder of a geometry's cache draws both sides of it: the side a bake of it takes.
|
|
139
|
+
*
|
|
140
|
+
* @param {GPUGeometryMetadata} record
|
|
141
|
+
* @returns {boolean}
|
|
142
|
+
*/
|
|
143
|
+
holds_two_sided(record: GPUGeometryMetadata): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* @param {MeshSDFSource} source run first in each {@link graph_bake} from here on
|
|
146
|
+
*/
|
|
147
|
+
add_source(source: MeshSDFSource): void;
|
|
148
|
+
/**
|
|
149
|
+
* @param {MeshSDFSource} source
|
|
150
|
+
*/
|
|
151
|
+
remove_source(source: MeshSDFSource): void;
|
|
152
|
+
/**
|
|
153
|
+
* Give `target` the resident cache baked for `proxy`: a source's hand-in, for a geometry with no tree of its own,
|
|
154
|
+
* of a proxy in the same local space baked as any geometry is. Nothing is copied. The target's header takes the
|
|
155
|
+
* proxy's layout, entries and side, and the proxy's reads None, as dropped; {@link onBaked} is sent with the
|
|
156
|
+
* target. The cache has no cards, the target having no tree to capture them with. Held for another side than the
|
|
157
|
+
* proxy was baked for, it is queued again at the next bake, as any cache is.
|
|
158
|
+
*
|
|
159
|
+
* @param {GPUGeometryMetadata} target waiting for its bake ({@link is_requested})
|
|
160
|
+
* @param {GPUGeometryMetadata} proxy whose cache is resident
|
|
161
|
+
* @returns {boolean} whether it was adopted: false, changing nothing, when `target` no longer waits or `proxy`'s
|
|
162
|
+
* cache is not resident
|
|
163
|
+
*/
|
|
164
|
+
adopt(target: GPUGeometryMetadata, proxy: GPUGeometryMetadata): boolean;
|
|
118
165
|
/**
|
|
119
166
|
* Geometries whose layout was coarsened by the cap, of those baked: coarser than asked.
|
|
120
167
|
* @returns {number}
|
|
@@ -200,12 +247,15 @@ export class GPUGeometrySDFManager {
|
|
|
200
247
|
* captures nothing
|
|
201
248
|
* @param {GPUResidentMaterialContext|null} [options.materials] what the capture shades with, as it
|
|
202
249
|
* stands this frame; needed with a `capture_budget`
|
|
250
|
+
* @param {GPUMaterialManager|null} [options.material_contexts] what a raster capture draws with
|
|
251
|
+
* ({@link GPUMeshCardSets#capture_mode}); needed with a `capture_budget` in that mode
|
|
203
252
|
*/
|
|
204
|
-
graph_bake({ graph, budget, capture_budget, materials }: {
|
|
253
|
+
graph_bake({ graph, budget, capture_budget, materials, material_contexts }: {
|
|
205
254
|
graph: FrameGraph;
|
|
206
255
|
budget: number;
|
|
207
256
|
capture_budget?: number;
|
|
208
257
|
materials?: GPUResidentMaterialContext | null;
|
|
258
|
+
material_contexts?: GPUMaterialManager | null;
|
|
209
259
|
}): void;
|
|
210
260
|
destroy(): void;
|
|
211
261
|
#private;
|
|
@@ -214,6 +264,18 @@ export type FrameGraph = import("../../../../engine/graphics/render/frame_graph/
|
|
|
214
264
|
export type GPUGeometryManager = import("../GPUGeometryManager.js").GPUGeometryManager;
|
|
215
265
|
export type GPUGeometryMetadata = import("../GPUGeometryMetadata.js").GPUGeometryMetadata;
|
|
216
266
|
export type GPUResidentMaterialContext = import("../../material/resident/GPUResidentMaterialContext.js").GPUResidentMaterialContext;
|
|
267
|
+
export type GPUMaterialManager = import("../../material/GPUMaterialManager.js").GPUMaterialManager;
|
|
268
|
+
/**
|
|
269
|
+
* What makes caches for geometries the bake cannot bake from a tree of their own
|
|
270
|
+
* ({@link GPUGeometrySDFManageradd_source }): it learns what is asked for from `onRequested`, records its own work in
|
|
271
|
+
* each frame's graph ahead of the bake, and hands each cache in through `adopt`.
|
|
272
|
+
*/
|
|
273
|
+
export type MeshSDFSource = {
|
|
274
|
+
/**
|
|
275
|
+
* records the source's work for the frame, ahead of the bake
|
|
276
|
+
*/
|
|
277
|
+
graph_update: (arg0: FrameGraph) => void;
|
|
278
|
+
};
|
|
217
279
|
import { GPUMeshCardSets } from "./cards/GPUMeshCardSets.js";
|
|
218
280
|
import { MeshSDFState } from "./MESH_SDF.js";
|
|
219
281
|
//# sourceMappingURL=GPUGeometrySDFManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUGeometrySDFManager.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUGeometrySDFManager.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js"],"names":[],"mappings":"AA+IA;;;;GAIG;AACH,uCAFU,MAAM,CAEuH;AAgDvI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH;IAsQI;;;OAGG;IACH,2CAFW,kBAAkB,EAS5B;IArQD;;;OAGG;IACH,aAAuB;IAEvB;;;OAGG;IACH,iBAA2B;IA6P3B;;;;OAIG;IACH,6BAEC;IAED;;;;;;OAMG;IACH,sBAHW,MAAM,cACN,MAAM,QAkChB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,yBAEC;IAED;;;;;OAKG;IACH,gBAHW,mBAAmB,aACnB,OAAO,QAqBjB;IAED;;;;;OAKG;IACH,gBAHW,mBAAmB,aACnB,OAAO,QAqBjB;IAED;;OAEG;IACH,aAYC;IAED;;;;;OAKG;IACH,eAFW,mBAAmB,QAe7B;IAED;;;;;;OAMG;IACH,aAHW,mBAAmB,UACnB,mBAAmB,QA0B7B;IAQD;;;;;OAKG;IACH,iBAHW,mBAAmB,GACjB,YAAY,CAaxB;IAED;;;;;;OAMG;IACH,qBAHW,mBAAmB,GACjB,OAAO,CAInB;IAED;;;;;OAKG;IACH,wBAHW,mBAAmB,GACjB,OAAO,CAInB;IAED;;OAEG;IACH,mBAFW,aAAa,QAOvB;IAED;;OAEG;IACH,sBAFW,aAAa,QAQvB;IAED;;;;;;;;;;;OAWG;IACH,cALW,mBAAmB,SACnB,mBAAmB,GACjB,OAAO,CA4CnB;IAED;;;OAGG;IACH,8BAEC;IAED;;OAEG;IACH,6BAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,2BAUC;IAED;;;OAGG;IACH,6BAEC;IAED;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,6BAEC;IAED;;;OAGG;IACH,4BAEC;IAED;;;OAGG;IACH,yBAIC;IAED;;;OAGG;IACH,6BAIC;IAED;;;OAGG;IACH,8EAIC;IAED;;;;;;OAMG;IACH,mCAOC;IAED;;OAEG;IACH,+BAcC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH;QAT+B,KAAK,EAAzB,UAAU;QACM,MAAM,EAAtB,MAAM;QACW,cAAc,GAA/B,MAAM;QAEoC,SAAS,GAAnD,0BAA0B,GAAC,IAAI;QAEG,iBAAiB,GAAnD,kBAAkB,GAAC,IAAI;aA8EjC;IAwiCD,gBAsBC;;CACJ;yBAljEY,OAAO,8DAA8D,EAAE,UAAU;iCACjF,OAAO,0BAA0B,EAAE,kBAAkB;kCACrD,OAAO,2BAA2B,EAAE,mBAAmB;yCACvD,OAAO,uDAAuD,EAAE,0BAA0B;iCAC1F,OAAO,sCAAsC,EAAE,kBAAkB;;;;;;;;;;yBASvD,UAAU,KAAG,IAAI;;gCA3BsB,4BAA4B;6BAQf,eAAe"}
|
|
@@ -43,7 +43,7 @@ import { shader_mesh_cards_log } from "./cards/shader_mesh_cards_log.js";
|
|
|
43
43
|
import { shader_mesh_cards_merge } from "./cards/shader_mesh_cards_merge.js";
|
|
44
44
|
import { shader_mesh_cards_pages } from "./cards/shader_mesh_cards_pages.js";
|
|
45
45
|
import { shader_mesh_cards_split } from "./cards/shader_mesh_cards_split.js";
|
|
46
|
-
import { MESH_SDF_BRICK_TEXELS, MeshSDFState } from "./MESH_SDF.js";
|
|
46
|
+
import { MESH_SDF_BRICK_TEXELS, MESH_SDF_BRICK_VOXELS, MeshSDFState } from "./MESH_SDF.js";
|
|
47
47
|
import { MESH_SDF_SAMPLER } from "./MESH_SDF_RESOURCES.js";
|
|
48
48
|
import { MESH_SDF_STRUCT } from "./MESH_SDF_STRUCT.js";
|
|
49
49
|
import { MeshSDFLayout } from "./MeshSDFLayout.js";
|
|
@@ -53,6 +53,16 @@ import { MeshSDFLayout } from "./MeshSDFLayout.js";
|
|
|
53
53
|
* @typedef {import("../GPUGeometryManager.js").GPUGeometryManager} GPUGeometryManager
|
|
54
54
|
* @typedef {import("../GPUGeometryMetadata.js").GPUGeometryMetadata} GPUGeometryMetadata
|
|
55
55
|
* @typedef {import("../../material/resident/GPUResidentMaterialContext.js").GPUResidentMaterialContext} GPUResidentMaterialContext
|
|
56
|
+
* @typedef {import("../../material/GPUMaterialManager.js").GPUMaterialManager} GPUMaterialManager
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* What makes caches for geometries the bake cannot bake from a tree of their own
|
|
61
|
+
* ({@link GPUGeometrySDFManager#add_source}): it learns what is asked for from `onRequested`, records its own work in
|
|
62
|
+
* each frame's graph ahead of the bake, and hands each cache in through `adopt`.
|
|
63
|
+
*
|
|
64
|
+
* @typedef {Object} MeshSDFSource
|
|
65
|
+
* @property {function(FrameGraph): void} graph_update records the source's work for the frame, ahead of the bake
|
|
56
66
|
*/
|
|
57
67
|
|
|
58
68
|
/*
|
|
@@ -216,6 +226,12 @@ function grow_typed(array, length) {
|
|
|
216
226
|
* {@link cards}, whose card sets — one per (geometry, material) pair — are captured after the bake,
|
|
217
227
|
* `capture_budget` pages a frame.
|
|
218
228
|
*
|
|
229
|
+
* **Sources** ({@link add_source}) make the caches of geometries with no tree of their own to bake from,
|
|
230
|
+
* a virtual geometry's: such a geometry waits queued, as one whose tree is not resident yet does. A
|
|
231
|
+
* source hears of each geometry queued ({@link onRequested}), records its own work each frame ahead of
|
|
232
|
+
* the bake, and bakes a proxy of it here as any geometry, whose resident cache it then gives the
|
|
233
|
+
* geometry ({@link adopt}).
|
|
234
|
+
*
|
|
219
235
|
* **Readers** bind {@link headers}, {@link indirection}, {@link texture} and {@link MESH_SDF_SAMPLER}
|
|
220
236
|
* (see {@link write_bindings}) and sample through `mesh_sdf_sample`, which only a resident header
|
|
221
237
|
* should be given to.
|
|
@@ -240,6 +256,18 @@ export class GPUGeometrySDFManager {
|
|
|
240
256
|
*/
|
|
241
257
|
onBaked = new Signal();
|
|
242
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Sent with a geometry's record each time its cache is queued for a bake: what a source listens to.
|
|
261
|
+
* @type {Signal<GPUGeometryMetadata>}
|
|
262
|
+
*/
|
|
263
|
+
onRequested = new Signal();
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Run first in each {@link graph_bake}.
|
|
267
|
+
* @type {MeshSDFSource[]}
|
|
268
|
+
*/
|
|
269
|
+
#sources = [];
|
|
270
|
+
|
|
243
271
|
#voxel_size = 0.125;
|
|
244
272
|
#max_bricks = 18;
|
|
245
273
|
|
|
@@ -265,6 +293,8 @@ export class GPUGeometrySDFManager {
|
|
|
265
293
|
#card_pages = new Uint32Array(64);
|
|
266
294
|
/** Words the placed layout keeps. */
|
|
267
295
|
#card_words = new Uint32Array(64);
|
|
296
|
+
/** Texels a side of the layout's largest card: the grid's longest axis in voxels, plus one. */
|
|
297
|
+
#card_side = new Uint32Array(64);
|
|
268
298
|
|
|
269
299
|
/**
|
|
270
300
|
* The range each geometry's cards are being placed in.
|
|
@@ -522,8 +552,7 @@ export class GPUGeometrySDFManager {
|
|
|
522
552
|
}
|
|
523
553
|
|
|
524
554
|
if (this.#references[id] > 0 && state[id] === HOST_NONE) {
|
|
525
|
-
|
|
526
|
-
this.#queue.push(id);
|
|
555
|
+
this.#request(id);
|
|
527
556
|
}
|
|
528
557
|
}
|
|
529
558
|
|
|
@@ -569,8 +598,7 @@ export class GPUGeometrySDFManager {
|
|
|
569
598
|
}
|
|
570
599
|
|
|
571
600
|
if (++this.#references[id] === 1 && this.#state[id] === HOST_NONE) {
|
|
572
|
-
this.#
|
|
573
|
-
this.#queue.push(id);
|
|
601
|
+
this.#request(id);
|
|
574
602
|
}
|
|
575
603
|
|
|
576
604
|
this.#holders_changed.push(id);
|
|
@@ -699,6 +727,103 @@ export class GPUGeometrySDFManager {
|
|
|
699
727
|
}
|
|
700
728
|
}
|
|
701
729
|
|
|
730
|
+
/**
|
|
731
|
+
* Whether a geometry's cache waits for its bake: queued, and not admitted. A cache whose last holder went is
|
|
732
|
+
* baked all the same until a {@link trim} drops it, as one admitted is.
|
|
733
|
+
*
|
|
734
|
+
* @param {GPUGeometryMetadata} record
|
|
735
|
+
* @returns {boolean}
|
|
736
|
+
*/
|
|
737
|
+
is_requested(record) {
|
|
738
|
+
return this.#state[record.index] === HOST_QUEUED;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/**
|
|
742
|
+
* Whether a holder of a geometry's cache draws both sides of it: the side a bake of it takes.
|
|
743
|
+
*
|
|
744
|
+
* @param {GPUGeometryMetadata} record
|
|
745
|
+
* @returns {boolean}
|
|
746
|
+
*/
|
|
747
|
+
holds_two_sided(record) {
|
|
748
|
+
return (this.#two_sided_references[record.index] ?? 0) > 0;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* @param {MeshSDFSource} source run first in each {@link graph_bake} from here on
|
|
753
|
+
*/
|
|
754
|
+
add_source(source) {
|
|
755
|
+
assert.defined(source, 'source');
|
|
756
|
+
assert.equal(this.#sources.includes(source), false, 'source added already');
|
|
757
|
+
|
|
758
|
+
this.#sources.push(source);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* @param {MeshSDFSource} source
|
|
763
|
+
*/
|
|
764
|
+
remove_source(source) {
|
|
765
|
+
const index = this.#sources.indexOf(source);
|
|
766
|
+
|
|
767
|
+
if (index !== -1) {
|
|
768
|
+
this.#sources.splice(index, 1);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* Give `target` the resident cache baked for `proxy`: a source's hand-in, for a geometry with no tree of its own,
|
|
774
|
+
* of a proxy in the same local space baked as any geometry is. Nothing is copied. The target's header takes the
|
|
775
|
+
* proxy's layout, entries and side, and the proxy's reads None, as dropped; {@link onBaked} is sent with the
|
|
776
|
+
* target. The cache has no cards, the target having no tree to capture them with. Held for another side than the
|
|
777
|
+
* proxy was baked for, it is queued again at the next bake, as any cache is.
|
|
778
|
+
*
|
|
779
|
+
* @param {GPUGeometryMetadata} target waiting for its bake ({@link is_requested})
|
|
780
|
+
* @param {GPUGeometryMetadata} proxy whose cache is resident
|
|
781
|
+
* @returns {boolean} whether it was adopted: false, changing nothing, when `target` no longer waits or `proxy`'s
|
|
782
|
+
* cache is not resident
|
|
783
|
+
*/
|
|
784
|
+
adopt(target, proxy) {
|
|
785
|
+
assert.defined(target, 'target');
|
|
786
|
+
assert.defined(proxy, 'proxy');
|
|
787
|
+
assert.notEqual(target.index, proxy.index, 'a geometry cannot adopt its own cache');
|
|
788
|
+
|
|
789
|
+
const id = target.index;
|
|
790
|
+
const from = proxy.index;
|
|
791
|
+
|
|
792
|
+
if (!this.is_requested(target) || this.#state[from] !== HOST_RESIDENT) {
|
|
793
|
+
return false;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
this.#drop_cards(from);
|
|
797
|
+
|
|
798
|
+
const range = this.#ranges[from];
|
|
799
|
+
|
|
800
|
+
this.#ranges[id] = range;
|
|
801
|
+
this.#ranges[from] = null;
|
|
802
|
+
this.#brick_count[id] = this.#brick_count[from];
|
|
803
|
+
this.#two_sided[id] = this.#two_sided[from];
|
|
804
|
+
this.#generation[id]++;
|
|
805
|
+
|
|
806
|
+
this.#state[from] = HOST_NONE;
|
|
807
|
+
this.#state[id] = HOST_RESIDENT;
|
|
808
|
+
|
|
809
|
+
// the layout the proxy was admitted with: a configure since would have dropped its cache
|
|
810
|
+
const layout = this.#layout;
|
|
811
|
+
|
|
812
|
+
layout.compute(proxy.geometry.bounding_box, this.#voxel_size, this.#max_bricks);
|
|
813
|
+
|
|
814
|
+
this.#write_header(id, layout, range.offset + 1, MeshSDFState.Resident);
|
|
815
|
+
|
|
816
|
+
this.#word_scratch[0] = MeshSDFState.None;
|
|
817
|
+
this.#device.queue.writeBuffer(this.#headers, from * HEADER_BYTES + HEADER_STATE, this.#word_scratch, 0, 1);
|
|
818
|
+
|
|
819
|
+
// the side its holders draw is checked at the next bake
|
|
820
|
+
this.#holders_changed.push(id);
|
|
821
|
+
|
|
822
|
+
this.onBaked.send1(id);
|
|
823
|
+
|
|
824
|
+
return true;
|
|
825
|
+
}
|
|
826
|
+
|
|
702
827
|
/**
|
|
703
828
|
* Geometries whose layout was coarsened by the cap, of those baked: coarser than asked.
|
|
704
829
|
* @returns {number}
|
|
@@ -857,8 +982,10 @@ export class GPUGeometrySDFManager {
|
|
|
857
982
|
* captures nothing
|
|
858
983
|
* @param {GPUResidentMaterialContext|null} [options.materials] what the capture shades with, as it
|
|
859
984
|
* stands this frame; needed with a `capture_budget`
|
|
985
|
+
* @param {GPUMaterialManager|null} [options.material_contexts] what a raster capture draws with
|
|
986
|
+
* ({@link GPUMeshCardSets#capture_mode}); needed with a `capture_budget` in that mode
|
|
860
987
|
*/
|
|
861
|
-
graph_bake({ graph, budget, capture_budget = 0, materials = null }) {
|
|
988
|
+
graph_bake({ graph, budget, capture_budget = 0, materials = null, material_contexts = null }) {
|
|
862
989
|
assert.defined(graph, 'graph');
|
|
863
990
|
assert.isPositiveInteger(budget, 'budget');
|
|
864
991
|
assert.lessThanOrEqual(budget, MESH_SDF_BAKE_BUDGET_MAX, 'budget');
|
|
@@ -867,6 +994,13 @@ export class GPUGeometrySDFManager {
|
|
|
867
994
|
|
|
868
995
|
this.#frame++;
|
|
869
996
|
|
|
997
|
+
// the sources first: a cache adopted here is not admitted to a bake of its own below
|
|
998
|
+
const sources = this.#sources;
|
|
999
|
+
|
|
1000
|
+
for (let i = 0; i < sources.length; i++) {
|
|
1001
|
+
sources[i].graph_update(graph);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
870
1004
|
this.#follow_sides();
|
|
871
1005
|
|
|
872
1006
|
// the last bake's commands were submitted before this call: what they read may be handed out
|
|
@@ -880,12 +1014,12 @@ export class GPUGeometrySDFManager {
|
|
|
880
1014
|
|
|
881
1015
|
const queued_bound = this.#read_queued + (this.#admitted_total - this.#read_admitted);
|
|
882
1016
|
|
|
883
|
-
const has_work = this.#
|
|
1017
|
+
const has_work = this.#admittable()
|
|
884
1018
|
|| queued_bound > 0
|
|
885
1019
|
|| this.#freed.length > 0
|
|
886
1020
|
|| this.#pushes.length > 0
|
|
887
1021
|
|| this.#fill_pending
|
|
888
|
-
|| this.#
|
|
1022
|
+
|| this.#placeable()
|
|
889
1023
|
|| this.#compact_queue.length > 0;
|
|
890
1024
|
|
|
891
1025
|
let arena = -1;
|
|
@@ -916,7 +1050,15 @@ export class GPUGeometrySDFManager {
|
|
|
916
1050
|
blas.meshlet_metadata = geometries.meshlets.buffer_metadata;
|
|
917
1051
|
blas.meshlet_data = geometries.meshlets.buffer_data;
|
|
918
1052
|
|
|
919
|
-
this.#cards.graph_capture({
|
|
1053
|
+
this.#cards.graph_capture({
|
|
1054
|
+
graph,
|
|
1055
|
+
budget: capture_budget,
|
|
1056
|
+
arena,
|
|
1057
|
+
headers: this.#headers,
|
|
1058
|
+
materials,
|
|
1059
|
+
material_contexts,
|
|
1060
|
+
blas,
|
|
1061
|
+
});
|
|
920
1062
|
}
|
|
921
1063
|
}
|
|
922
1064
|
|
|
@@ -1008,9 +1150,7 @@ export class GPUGeometrySDFManager {
|
|
|
1008
1150
|
}
|
|
1009
1151
|
|
|
1010
1152
|
this.#drop(id);
|
|
1011
|
-
|
|
1012
|
-
this.#state[id] = HOST_QUEUED;
|
|
1013
|
-
this.#queue.push(id);
|
|
1153
|
+
this.#request(id);
|
|
1014
1154
|
}
|
|
1015
1155
|
|
|
1016
1156
|
changed.length = 0;
|
|
@@ -1084,12 +1224,69 @@ export class GPUGeometrySDFManager {
|
|
|
1084
1224
|
this.#card_state[id] = CARDS_PLACED;
|
|
1085
1225
|
this.#write_header_cards(id, target.offset);
|
|
1086
1226
|
|
|
1087
|
-
this.#cards.set_layout(id, this.#card_pages[id]);
|
|
1227
|
+
this.#cards.set_layout(id, this.#card_pages[id], this.#card_side[id]);
|
|
1088
1228
|
}
|
|
1089
1229
|
|
|
1090
1230
|
queue.length = 0;
|
|
1091
1231
|
}
|
|
1092
1232
|
|
|
1233
|
+
/**
|
|
1234
|
+
* Whether a queued geometry's tree is traceable, so that a bake could admit it. A geometry that
|
|
1235
|
+
* waits for its tree, or for a source's cache, records no bake while it waits. Drops from the queue
|
|
1236
|
+
* what was dropped, or adopted, since it was queued.
|
|
1237
|
+
*
|
|
1238
|
+
* @returns {boolean}
|
|
1239
|
+
*/
|
|
1240
|
+
#admittable() {
|
|
1241
|
+
const queue = this.#queue;
|
|
1242
|
+
const blas = this.#geometries.blas;
|
|
1243
|
+
|
|
1244
|
+
let kept = 0;
|
|
1245
|
+
let admittable = false;
|
|
1246
|
+
|
|
1247
|
+
for (let i = 0; i < queue.length; i++) {
|
|
1248
|
+
const id = queue[i];
|
|
1249
|
+
|
|
1250
|
+
if (this.#state[id] !== HOST_QUEUED) {
|
|
1251
|
+
continue;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
queue[kept++] = id;
|
|
1255
|
+
|
|
1256
|
+
if (!admittable && blas.get_address(this.#records[id]) !== undefined) {
|
|
1257
|
+
admittable = true;
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
queue.length = kept;
|
|
1262
|
+
|
|
1263
|
+
return admittable;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
/**
|
|
1267
|
+
* Whether a resident geometry's cards wait for placement. Drops from the queue what was dropped, or
|
|
1268
|
+
* adopted away, since it was queued.
|
|
1269
|
+
*
|
|
1270
|
+
* @returns {boolean}
|
|
1271
|
+
*/
|
|
1272
|
+
#placeable() {
|
|
1273
|
+
const queue = this.#place_queue;
|
|
1274
|
+
|
|
1275
|
+
let kept = 0;
|
|
1276
|
+
|
|
1277
|
+
for (let i = 0; i < queue.length; i++) {
|
|
1278
|
+
const id = queue[i];
|
|
1279
|
+
|
|
1280
|
+
if (this.#state[id] === HOST_RESIDENT && this.#card_state[id] === CARDS_QUEUED) {
|
|
1281
|
+
queue[kept++] = id;
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
queue.length = kept;
|
|
1286
|
+
|
|
1287
|
+
return kept > 0;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1093
1290
|
/**
|
|
1094
1291
|
* Admit queued geometries in request order: those whose tree is resident, while every brick they
|
|
1095
1292
|
* could queue fits on the ring beside what may be on it already.
|
|
@@ -1153,7 +1350,7 @@ export class GPUGeometrySDFManager {
|
|
|
1153
1350
|
this.#coarsened_count++;
|
|
1154
1351
|
}
|
|
1155
1352
|
|
|
1156
|
-
this.#
|
|
1353
|
+
this.#write_header(id, layout, range.offset + 1, MeshSDFState.Baking);
|
|
1157
1354
|
|
|
1158
1355
|
// level 0's grid, which the cards are placed over
|
|
1159
1356
|
const grid = layout.bricks;
|
|
@@ -1162,6 +1359,7 @@ export class GPUGeometrySDFManager {
|
|
|
1162
1359
|
this.#placement_words[id] = placement.words;
|
|
1163
1360
|
this.#placement_scratch[id] = placement.histograms;
|
|
1164
1361
|
this.#placement_columns[id] = 2 * (grid[0] * grid[1] + grid[1] * grid[2] + grid[0] * grid[2]);
|
|
1362
|
+
this.#card_side[id] = Math.max(grid[0], grid[1], grid[2]) * MESH_SDF_BRICK_VOXELS + 1;
|
|
1165
1363
|
|
|
1166
1364
|
this.#word_scratch[0] = count;
|
|
1167
1365
|
this.#device.queue.writeBuffer(this.#indirection, range.offset * 4, this.#word_scratch, 0, 1);
|
|
@@ -1605,12 +1803,25 @@ export class GPUGeometrySDFManager {
|
|
|
1605
1803
|
}
|
|
1606
1804
|
}
|
|
1607
1805
|
|
|
1806
|
+
/**
|
|
1807
|
+
* Queue a held geometry's bake, and say so.
|
|
1808
|
+
*
|
|
1809
|
+
* @param {number} id
|
|
1810
|
+
*/
|
|
1811
|
+
#request(id) {
|
|
1812
|
+
this.#state[id] = HOST_QUEUED;
|
|
1813
|
+
this.#queue.push(id);
|
|
1814
|
+
|
|
1815
|
+
this.onRequested.send1(this.#records[id]);
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1608
1818
|
/**
|
|
1609
1819
|
* @param {number} id
|
|
1610
1820
|
* @param {MeshSDFLayout} layout
|
|
1611
1821
|
* @param {number} indirection
|
|
1822
|
+
* @param {MeshSDFState} state
|
|
1612
1823
|
*/
|
|
1613
|
-
#
|
|
1824
|
+
#write_header(id, layout, indirection, state) {
|
|
1614
1825
|
const view = this.#header_scratch;
|
|
1615
1826
|
|
|
1616
1827
|
for (let axis = 0; axis < 3; axis++) {
|
|
@@ -1622,7 +1833,7 @@ export class GPUGeometrySDFManager {
|
|
|
1622
1833
|
view.setUint32(HEADER_LEVEL_COUNT, layout.level_count, true);
|
|
1623
1834
|
view.setUint32(HEADER_INDIRECTION, indirection, true);
|
|
1624
1835
|
view.setUint32(HEADER_CARDS, GPU_DATABASE_NULL, true);
|
|
1625
|
-
view.setUint32(HEADER_STATE,
|
|
1836
|
+
view.setUint32(HEADER_STATE, state, true);
|
|
1626
1837
|
view.setUint32(HEADER_SOURCE, GPU_DATABASE_NULL, true);
|
|
1627
1838
|
view.setUint32(HEADER_GENERATION, this.#generation[id], true);
|
|
1628
1839
|
view.setUint32(HEADER_TWO_SIDED, this.#two_sided[id], true);
|
|
@@ -1665,6 +1876,7 @@ export class GPUGeometrySDFManager {
|
|
|
1665
1876
|
this.#placement_columns = grow_typed(this.#placement_columns, length);
|
|
1666
1877
|
this.#card_pages = grow_typed(this.#card_pages, length);
|
|
1667
1878
|
this.#card_words = grow_typed(this.#card_words, length);
|
|
1879
|
+
this.#card_side = grow_typed(this.#card_side, length);
|
|
1668
1880
|
}
|
|
1669
1881
|
|
|
1670
1882
|
#ensure_device() {
|
|
@@ -33,6 +33,10 @@ export const MESH_CARD_CAPTURE_BUDGET_MAX: number;
|
|
|
33
33
|
* the order they were asked for, then recaptures in the order queued. A card set's pages may span
|
|
34
34
|
* frames. {@link recapture} queues a resident card set again, which reads its last capture until the
|
|
35
35
|
* new one is done; a card set whose capture is under way starts it again.
|
|
36
|
+
*
|
|
37
|
+
* **Modes** ({@link capture_mode}). A traced card set is a run of pages, a thread a texel. A
|
|
38
|
+
* rastered one is taken whole: its cards are drawn into a region of a scratch, a cell a card, and its
|
|
39
|
+
* pages scattered from there into the atlas; the frame's last one may take the budget past its end.
|
|
36
40
|
*/
|
|
37
41
|
export class GPUMeshCardSets {
|
|
38
42
|
/**
|
|
@@ -79,6 +83,17 @@ export class GPUMeshCardSets {
|
|
|
79
83
|
* @returns {number}
|
|
80
84
|
*/
|
|
81
85
|
get pages_queued(): number;
|
|
86
|
+
/**
|
|
87
|
+
* A change captures every card set again in the new mode: resident ones read their last capture
|
|
88
|
+
* until it is done, and captures under way start again.
|
|
89
|
+
*
|
|
90
|
+
* @param {MeshCardCaptureMode} mode
|
|
91
|
+
*/
|
|
92
|
+
set capture_mode(mode: number);
|
|
93
|
+
/**
|
|
94
|
+
* @returns {MeshCardCaptureMode}
|
|
95
|
+
*/
|
|
96
|
+
get capture_mode(): number;
|
|
82
97
|
/**
|
|
83
98
|
* Whether readers may use the card set: captured at least once, and its layout still there.
|
|
84
99
|
*
|
|
@@ -127,8 +142,10 @@ export class GPUMeshCardSets {
|
|
|
127
142
|
*
|
|
128
143
|
* @param {number} geometry
|
|
129
144
|
* @param {number} pages
|
|
145
|
+
* @param {number} side texels a side of the layout's largest card: its grid's longest axis in
|
|
146
|
+
* voxels, plus one, the lattice having a point at either end
|
|
130
147
|
*/
|
|
131
|
-
set_layout(geometry: number, pages: number): void;
|
|
148
|
+
set_layout(geometry: number, pages: number, side: number): void;
|
|
132
149
|
/**
|
|
133
150
|
* A geometry's layout is gone: its card sets wait for the next.
|
|
134
151
|
*
|
|
@@ -145,15 +162,19 @@ export class GPUMeshCardSets {
|
|
|
145
162
|
* @param {number} options.budget pages captured at most, `card_capture_budget`
|
|
146
163
|
* @param {number} options.arena graph handle of the arena, as the frame's bake left it
|
|
147
164
|
* @param {GPUBuffer} options.headers
|
|
148
|
-
* @param {GPUResidentMaterialContext} options.materials
|
|
149
|
-
* @param {
|
|
165
|
+
* @param {GPUResidentMaterialContext} options.materials what the trace shades with
|
|
166
|
+
* @param {GPUMaterialManager} options.material_contexts what the raster draws with: each
|
|
167
|
+
* material's template and bind group
|
|
168
|
+
* @param {Object} options.blas the geometry bindings `ray_query_blas_nearest` reads, whose
|
|
169
|
+
* geometry and meshlet buffers the raster pulls vertices from
|
|
150
170
|
*/
|
|
151
|
-
graph_capture({ graph, budget, arena, headers, materials, blas }: {
|
|
171
|
+
graph_capture({ graph, budget, arena, headers, materials, material_contexts, blas }: {
|
|
152
172
|
graph: FrameGraph;
|
|
153
173
|
budget: number;
|
|
154
174
|
arena: number;
|
|
155
175
|
headers: GPUBuffer;
|
|
156
176
|
materials: GPUResidentMaterialContext;
|
|
177
|
+
material_contexts: GPUMaterialManager;
|
|
157
178
|
blas: any;
|
|
158
179
|
}): void;
|
|
159
180
|
/**
|
|
@@ -166,6 +187,8 @@ export class GPUMeshCardSets {
|
|
|
166
187
|
export type FrameGraph = import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
167
188
|
export type ShadeMaterial = import("../../../material/ShadeMaterial.js").ShadeMaterial;
|
|
168
189
|
export type GPUResidentMaterialContext = import("../../../material/resident/GPUResidentMaterialContext.js").GPUResidentMaterialContext;
|
|
190
|
+
export type GPUMaterialManager = import("../../../material/GPUMaterialManager.js").GPUMaterialManager;
|
|
191
|
+
export type GPUMaterialContext = import("../../../material/GPUMaterialContext.js").GPUMaterialContext;
|
|
169
192
|
export type Allocation = import("../../../../../core/binary/allocator/OffsetAllocator.js").Allocation;
|
|
170
193
|
import { GPUTileAtlas2D } from "../../../texture/atlas/GPUTileAtlas2D.js";
|
|
171
194
|
//# sourceMappingURL=GPUMeshCardSets.d.ts.map
|