@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.
Files changed (326) hide show
  1. package/package.json +1 -1
  2. package/src/shade/playground/probe_clipmap/index.html +12 -0
  3. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  4. package/src/shade/playground/probe_clipmap/main.js +5 -0
  5. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  6. package/src/shade/renderer/Renderer.js +4 -6
  7. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +63 -1
  8. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  9. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
  10. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
  11. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  12. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
  13. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
  14. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
  15. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
  16. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
  17. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
  18. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
  19. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
  20. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
  21. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
  22. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
  23. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
  24. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
  25. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
  26. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
  27. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
  28. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
  29. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
  30. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
  31. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
  32. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
  33. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
  34. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
  35. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
  36. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
  37. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
  38. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
  39. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
  40. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
  41. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
  42. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
  43. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
  44. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
  45. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +3 -9
  46. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  47. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +13 -31
  48. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +764 -48
  49. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
  50. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
  51. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  52. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
  53. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
  54. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  55. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
  56. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +11 -3
  57. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  58. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +13 -4
  59. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -18
  60. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  61. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -10
  62. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
  63. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  64. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
  65. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
  66. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  67. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
  68. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
  69. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
  70. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
  71. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -8
  72. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
  73. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -9
  74. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
  75. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
  76. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
  77. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -1
  78. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
  79. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -1
  80. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
  81. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
  82. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
  83. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
  84. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
  85. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
  86. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
  87. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
  88. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
  89. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
  90. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
  91. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
  92. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
  93. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
  94. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
  95. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
  96. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
  97. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
  98. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
  99. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
  101. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +21 -18
  102. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +254 -73
  104. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +149 -8
  105. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  106. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +181 -13
  107. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +179 -7
  108. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +412 -31
  110. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +4 -4
  111. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  112. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +4 -3
  113. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +36 -10
  114. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +218 -29
  116. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +5 -1
  117. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  118. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +24 -14
  119. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
  120. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
  121. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
  122. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
  123. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
  124. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
  125. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +18 -7
  126. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  127. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +157 -51
  128. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
  129. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
  130. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
  131. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
  132. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  133. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
  134. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +16 -3
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +55 -10
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +10 -9
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +32 -39
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +100 -30
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +3 -2
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +12 -12
  156. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
  157. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
  158. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
  159. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
  160. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
  161. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
  162. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
  163. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
  164. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
  165. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
  166. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
  167. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
  168. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
  169. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
  170. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
  171. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
  172. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
  173. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
  174. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
  175. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
  176. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
  177. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
  178. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
  179. package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
  180. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
  181. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  182. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
  183. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
  184. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  185. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
  186. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
  187. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
  188. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
  189. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
  190. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
  191. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
  192. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
  193. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  194. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
  195. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
  196. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
  197. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
  198. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
  199. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
  200. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
  201. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
  202. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
  203. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  204. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
  205. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
  206. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
  207. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
  208. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
  209. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
  210. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
  211. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
  212. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
  213. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
  214. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
  215. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
  216. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
  217. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
  218. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
  219. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
  220. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
  221. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
  222. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
  223. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
  224. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
  225. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
  226. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
  227. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
  228. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
  229. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
  230. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
  231. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
  232. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
  233. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
  234. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
  235. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
  236. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  237. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
  238. package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
  239. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
  241. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
  242. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
  243. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
  244. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
  245. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
  246. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
  247. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
  248. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
  249. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
  250. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
  251. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
  252. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
  253. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
  254. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
  255. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
  256. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  257. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
  258. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
  259. package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
  260. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  261. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +65 -19
  262. package/src/view/elements/progress/segmented/GhostTrail.d.ts +116 -0
  263. package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
  264. package/src/view/elements/progress/segmented/GhostTrail.js +280 -0
  265. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
  266. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
  267. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
  268. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
  269. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
  270. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
  271. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
  272. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
  273. package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
  274. package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
  275. package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
  276. package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
  277. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +163 -10
  278. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  279. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +442 -101
  280. package/src/view/elements/progress/segmented/playground/index.html +78 -0
  281. package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
  282. package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
  283. package/src/view/elements/progress/segmented/playground/main.js +173 -0
  284. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
  285. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
  286. package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
  287. package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
  288. package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
  289. package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
  290. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
  291. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
  292. package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
  293. package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -238
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +0 -99
  298. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +0 -1
  299. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +0 -139
  300. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +0 -65
  301. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +0 -1
  302. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +0 -393
  303. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +0 -17
  304. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +0 -1
  305. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +0 -36
  306. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +0 -29
  307. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +0 -1
  308. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +0 -108
  309. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +0 -31
  310. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +0 -1
  311. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +0 -113
  312. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +0 -36
  313. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +0 -1
  314. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +0 -85
  315. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +0 -23
  316. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +0 -1
  317. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +0 -273
  318. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +0 -13
  319. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +0 -1
  320. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +0 -151
  321. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +0 -13
  322. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +0 -1
  323. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +0 -133
  324. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +0 -22
  325. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +0 -1
  326. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +0 -135
@@ -1,65 +0,0 @@
1
- /**
2
- * @typedef {import("../GPUBrickClipmap.js").BrickProviderContext} BrickProviderContext
3
- * @typedef {import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
4
- */
5
- /**
6
- * The world's bricks from virtual geometry, which has no cached field (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a
7
- * {@link BrickProvider} like any plugin, which the probe clipmap GI runs after the mesh provider.
8
- *
9
- * Per taken cell, the vgeo instances in the SDF world whose boxes reach it are cut at a world error under half the
10
- * cascade's voxel, within the cell grown by the field's band, by the camera cut's own descent. The gather writes
11
- * their pair records as a cut's collect would; `graph_vgeo_cut_descent` runs the box cut,
12
- * `shader_vgeo_brick_traverse`, which puts each cluster in the cut onto its cell's list. The cut is a
13
- * {@link VGeoViewCut} of its own, so its wants reach the residency through its own feedback slot, ranked with the
14
- * camera's, and its counters come back to it ({@link cut}'s `stats`). Then `shader_vgeo_brick_distance` takes each
15
- * list's triangles near its cell and merges the cell's texels into the staging (contracts 1 to 3).
16
- *
17
- * A cell built while a cluster of its cut stood in for a page not resident, or a group not selectable, waits:
18
- * each frame `shader_vgeo_brick_wait` queues it again once that page is resident and that group selectable
19
- * (contract 6), so exactly the cells that stood something in are built again, once what they waited on arrived.
20
- * Until then it wants the page again each frame, in the cut's slot, since a want lasts one reading.
21
- *
22
- * It reads the view's scene through the context: the TLAS over the mesh rows, the scene database, the geometries'
23
- * rows, the materials, the meshlets and the scene's virtual geometry runtime. With no runtime, or none open this
24
- * frame, it records nothing.
25
- */
26
- export class VGeoBrickProvider {
27
- /**
28
- * @param {GPUDevice} device
29
- */
30
- constructor(device: GPUDevice);
31
- /**
32
- * @returns {GPUBuffer}
33
- */
34
- get statistics(): GPUBuffer;
35
- /**
36
- * The box cut, whose `stats` say what the last reading of its slot counted.
37
- * @returns {VGeoViewCut}
38
- */
39
- get cut(): VGeoViewCut;
40
- /**
41
- * The taken cells' lists of the frame last recorded, a resource of its graph, or -1 when it recorded none:
42
- * `VGEO_BRICK_CELL_WORDS` words a taken cell, laid out as `VGEO_BRICK_CELL_OFFSET`. A count runs past what its
43
- * list holds; read the least of the two.
44
- * @returns {number}
45
- */
46
- get cells(): number;
47
- /**
48
- * The waiting list the next recorded frame's wait reads: a count, then `VGEO_BRICK_WAIT_WORDS` words a cell, laid
49
- * out as `VGEO_BRICK_WAIT_OFFSET`. The count runs past what the list holds. Undefined before the provider first
50
- * records.
51
- * @returns {GPUBuffer|undefined}
52
- */
53
- get waiting(): any;
54
- /**
55
- * @param {FrameGraph} graph
56
- * @param {BrickProviderContext} context
57
- */
58
- graph_write_bricks(graph: FrameGraph, context: BrickProviderContext): void;
59
- destroy(): void;
60
- #private;
61
- }
62
- export type BrickProviderContext = import("../GPUBrickClipmap.js").BrickProviderContext;
63
- export type FrameGraph = import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
64
- import { VGeoViewCut } from "../../../../geometry/virtual/runtime/VGeoViewCut.js";
65
- //# sourceMappingURL=VGeoBrickProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VGeoBrickProvider.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js"],"names":[],"mappings":"AA0BA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IA6CI;;OAEG;IACH,+BAWC;IAED;;OAEG;IACH,4BAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;;OAKG;IACH,oBAEC;IAED;;;;;OAKG;IACH,mBAEC;IAED;;;OAGG;IACH,0BAHW,UAAU,WACV,oBAAoB,QAuH9B;IA4GD,gBAcC;;CACJ;mCA7WY,OAAO,uBAAuB,EAAE,oBAAoB;yBACpD,OAAO,oEAAoE,EAAE,UAAU;4BAtBxE,qDAAqD"}
@@ -1,393 +0,0 @@
1
- import { assert } from "../../../../../../core/assert.js";
2
- import { BufferDescriptor } from "../../../../../descriptor/buffer/BufferDescriptor.js";
3
- import { BufferResourceDescriptor } from "../../../../../device/graph/BufferResourceDescriptor.js";
4
- import { graph_vgeo_cut_descent } from "../../../../geometry/virtual/runtime/graph_vgeo_cut_descent.js";
5
- import { graph_build_indirect_dispatch_command } from "../../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
6
- import { VGEO_INSTANCE_WORDS } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js";
7
- import { VGeoViewCut } from "../../../../geometry/virtual/runtime/VGeoViewCut.js";
8
- import {
9
- graph_prefix_scan_csdldf,
10
- prefix_scan_csdldf_output_descriptor
11
- } from "../../../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
12
- import { graph_create_buffer } from "../../../../shader/graph/graph_create_buffer.js";
13
- import { graph_import_buffer } from "../../../../shader/graph/graph_import_buffer.js";
14
- import { BRICK_TAKE_CELL_DISPATCH } from "../BRICK_CLIPMAP.js";
15
- import { shader_vgeo_brick_distance } from "./shader_vgeo_brick_distance.js";
16
- import { shader_vgeo_brick_gather } from "./shader_vgeo_brick_gather.js";
17
- import { shader_vgeo_brick_traverse } from "./shader_vgeo_brick_traverse.js";
18
- import { shader_vgeo_brick_wait, VGEO_BRICK_WAIT_WORKGROUP_SIZE } from "./shader_vgeo_brick_wait.js";
19
- import {
20
- VGEO_BRICK_CELL_WORDS,
21
- VGEO_BRICK_PAIRS_PER_CELL,
22
- VGEO_BRICK_STATISTIC_WORDS,
23
- VGEO_BRICK_WAIT_WORDS,
24
- VGEO_BRICK_WAITS_PER_CELL
25
- } from "./VGEO_BRICK.js";
26
-
27
- /**
28
- * @typedef {import("../GPUBrickClipmap.js").BrickProviderContext} BrickProviderContext
29
- * @typedef {import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
30
- */
31
-
32
- /**
33
- * The world's bricks from virtual geometry, which has no cached field (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a
34
- * {@link BrickProvider} like any plugin, which the probe clipmap GI runs after the mesh provider.
35
- *
36
- * Per taken cell, the vgeo instances in the SDF world whose boxes reach it are cut at a world error under half the
37
- * cascade's voxel, within the cell grown by the field's band, by the camera cut's own descent. The gather writes
38
- * their pair records as a cut's collect would; `graph_vgeo_cut_descent` runs the box cut,
39
- * `shader_vgeo_brick_traverse`, which puts each cluster in the cut onto its cell's list. The cut is a
40
- * {@link VGeoViewCut} of its own, so its wants reach the residency through its own feedback slot, ranked with the
41
- * camera's, and its counters come back to it ({@link cut}'s `stats`). Then `shader_vgeo_brick_distance` takes each
42
- * list's triangles near its cell and merges the cell's texels into the staging (contracts 1 to 3).
43
- *
44
- * A cell built while a cluster of its cut stood in for a page not resident, or a group not selectable, waits:
45
- * each frame `shader_vgeo_brick_wait` queues it again once that page is resident and that group selectable
46
- * (contract 6), so exactly the cells that stood something in are built again, once what they waited on arrived.
47
- * Until then it wants the page again each frame, in the cut's slot, since a want lasts one reading.
48
- *
49
- * It reads the view's scene through the context: the TLAS over the mesh rows, the scene database, the geometries'
50
- * rows, the materials, the meshlets and the scene's virtual geometry runtime. With no runtime, or none open this
51
- * frame, it records nothing.
52
- */
53
- export class VGeoBrickProvider {
54
- /** @type {GPUDevice} */
55
- #device;
56
-
57
- /** @type {VGeoViewCut} */
58
- #cut;
59
-
60
- /**
61
- * Counts that accumulate: pairs dropped, and candidates and subtrees the gather dropped
62
- * (`VGEO_BRICK_STATISTIC_*`).
63
- * @type {GPUBuffer}
64
- */
65
- #statistics;
66
-
67
- /**
68
- * The two waiting lists: the one the next frame's wait reads, `#waiting_read`, and the one it keeps onto, which the
69
- * distance pass adds its own to. They trade places each frame the provider records.
70
- * @type {GPUBuffer[]}
71
- */
72
- #waiting = [];
73
- #waiting_read = 0;
74
- #waiting_capacity = 0;
75
-
76
- #settings = { ring_capacity: 0, resolution: 0, pair_capacity: 0, wait_capacity: 0 };
77
- #wait_data = { command: -1, waiting_in: -1, waiting: -1, feedback: -1, state: -1 };
78
- #wait_bindings = {};
79
- #gather_data = { take: -1, instances: -1, claim_widths: -1, cells: -1 };
80
- #gather_bindings = {};
81
- #distance_data = { command: -1, filled: -1, cells: -1, instances: -1, waiting: -1, staging: -1 };
82
- #distance_bindings = {};
83
-
84
- /**
85
- * The taken cells' lists as the last recorded frame's cut left them, or -1.
86
- * @type {number}
87
- */
88
- #cells = -1;
89
-
90
- /**
91
- * The context of the frame being recorded, as its passes execute.
92
- * @type {BrickProviderContext|null}
93
- */
94
- #context = null;
95
-
96
- #destroyed = false;
97
-
98
- /**
99
- * @param {GPUDevice} device
100
- */
101
- constructor(device) {
102
- assert.defined(device, 'device');
103
-
104
- this.#device = device;
105
- this.#cut = new VGeoViewCut({ device, label: 'probe clipmap vgeo bricks' });
106
-
107
- this.#statistics = device.createBuffer(BufferDescriptor.fromJSON({
108
- label: 'Probe clipmap / vgeo brick statistics',
109
- size: 4 * VGEO_BRICK_STATISTIC_WORDS,
110
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
111
- }));
112
- }
113
-
114
- /**
115
- * @returns {GPUBuffer}
116
- */
117
- get statistics() {
118
- return this.#statistics;
119
- }
120
-
121
- /**
122
- * The box cut, whose `stats` say what the last reading of its slot counted.
123
- * @returns {VGeoViewCut}
124
- */
125
- get cut() {
126
- return this.#cut;
127
- }
128
-
129
- /**
130
- * The taken cells' lists of the frame last recorded, a resource of its graph, or -1 when it recorded none:
131
- * `VGEO_BRICK_CELL_WORDS` words a taken cell, laid out as `VGEO_BRICK_CELL_OFFSET`. A count runs past what its
132
- * list holds; read the least of the two.
133
- * @returns {number}
134
- */
135
- get cells() {
136
- return this.#cells;
137
- }
138
-
139
- /**
140
- * The waiting list the next recorded frame's wait reads: a count, then `VGEO_BRICK_WAIT_WORDS` words a cell, laid
141
- * out as `VGEO_BRICK_WAIT_OFFSET`. The count runs past what the list holds. Undefined before the provider first
142
- * records.
143
- * @returns {GPUBuffer|undefined}
144
- */
145
- get waiting() {
146
- return this.#waiting[this.#waiting_read];
147
- }
148
-
149
- /**
150
- * @param {FrameGraph} graph
151
- * @param {BrickProviderContext} context
152
- */
153
- graph_write_bricks(graph, context) {
154
- assert.notOk(this.#destroyed, 'destroyed');
155
- assert.defined(context.scene, 'context.scene');
156
-
157
- this.#cells = -1;
158
-
159
- const runtime = context.scene.virtual_geometry;
160
-
161
- if (runtime === undefined || !runtime.frame_open) {
162
- return;
163
- }
164
-
165
- const pair_capacity = context.budget * VGEO_BRICK_PAIRS_PER_CELL;
166
-
167
- // this frame's slot for the cut, and its params: a τ of 1, since its records carry the error's own scale
168
- const slot = runtime.slot_of(this.#cut);
169
-
170
- this.#cut.write_params({ runtime, slot, tau: 1 });
171
-
172
- const wait_capacity = context.budget * VGEO_BRICK_WAITS_PER_CELL;
173
-
174
- this.#ensure_waiting(wait_capacity);
175
-
176
- this.#settings.ring_capacity = context.ring_capacity;
177
- this.#settings.resolution = context.resolution;
178
- this.#settings.pair_capacity = pair_capacity;
179
- this.#settings.wait_capacity = wait_capacity;
180
- this.#context = context;
181
-
182
- // ----- the wait: the cells the last frame left waiting, queued again once what they waited on is there -----
183
-
184
- const waiting_in = graph_import_buffer(graph, this.#waiting[this.#waiting_read], "vgeo brick waiting");
185
- const waiting_out = graph_import_buffer(graph, this.#waiting[1 - this.#waiting_read], "vgeo brick waiting next");
186
-
187
- this.#waiting_read = 1 - this.#waiting_read;
188
-
189
- const wait_command = graph_build_indirect_dispatch_command(graph, waiting_in, VGEO_BRICK_WAIT_WORKGROUP_SIZE, true);
190
-
191
- // the frame's feedback, imported first: the first graph of a frame to import it records its clear there
192
- const feedback = runtime.feedback_in(graph);
193
-
194
- const wait_data = this.#wait_data;
195
- const wait = graph.add("Brick Clipmap VGeo Wait", wait_data, this.#execute_wait);
196
-
197
- wait_data.command = wait.read(wait_command);
198
- wait_data.waiting_in = wait.read(waiting_in);
199
- wait_data.waiting = wait.write(waiting_out);
200
-
201
- // it wants the pages its cells wait on, in the cut's slot of the frame's feedback, ahead of the cut's own wants
202
- wait_data.feedback = wait.write(feedback);
203
- runtime.publish_feedback(graph, wait_data.feedback);
204
-
205
- // it queues cells: what writes the queue after it comes after it
206
- wait_data.state = wait.write(context.state);
207
- context.state = wait_data.state;
208
-
209
- // ----- gather: a pair record for each vgeo instance whose box reaches a taken cell -----
210
-
211
- const data = this.#gather_data;
212
- const gather = graph.add("Brick Clipmap VGeo Gather", data, this.#execute_gather);
213
-
214
- data.take = gather.read(context.take);
215
- data.instances = gather.create("vgeo brick pairs", BufferResourceDescriptor.from(
216
- pair_capacity * VGEO_INSTANCE_WORDS * 4, GPUBufferUsage.STORAGE
217
- ));
218
- data.claim_widths = gather.create("vgeo brick claim widths", BufferResourceDescriptor.from(
219
- 16 + pair_capacity * 4, GPUBufferUsage.STORAGE, 0, 16
220
- ));
221
- data.cells = gather.create("vgeo brick cells", BufferResourceDescriptor.from(
222
- context.budget * VGEO_BRICK_CELL_WORDS * 4, GPUBufferUsage.STORAGE
223
- ));
224
-
225
- // ----- the cut: the pairs' claim widths scanned into bases, then the camera cut's own descent -----
226
-
227
- const prefix_sums = graph_prefix_scan_csdldf({
228
- graph,
229
- input: data.claim_widths,
230
- output: graph_create_buffer(graph, "vgeo brick claim offsets", prefix_scan_csdldf_output_descriptor(pair_capacity)),
231
- element_max_count: pair_capacity,
232
- });
233
-
234
- // the cells the cut puts a cluster on the list of, each once: what the distances follow
235
- const filled = graph_create_buffer(graph, "vgeo brick filled", BufferResourceDescriptor.from(
236
- 16 + context.budget * 4, GPUBufferUsage.STORAGE, 0, 16
237
- ));
238
-
239
- const descent = graph_vgeo_cut_descent({
240
- graph,
241
- runtime,
242
- cut: this.#cut,
243
- instances: data.instances,
244
- prefix_sums,
245
- feedback: runtime.feedback_in(graph),
246
- traverse: shader_vgeo_brick_traverse,
247
- outputs: { vgeo_brick_cells: data.cells, vgeo_brick_filled: filled },
248
- });
249
-
250
- runtime.publish_feedback(graph, descent.feedback);
251
-
252
- this.#cells = descent.outputs.vgeo_brick_cells;
253
-
254
- // ----- the distances: a workgroup a filled cell, its list's triangles near it, its texels merged -----
255
-
256
- const command = graph_build_indirect_dispatch_command(graph, descent.outputs.vgeo_brick_filled, 1, true);
257
-
258
- const distance_data = this.#distance_data;
259
- const distance = graph.add("Brick Clipmap VGeo Distance", distance_data, this.#execute_distance);
260
-
261
- distance_data.command = distance.read(command);
262
- distance_data.filled = distance.read(descent.outputs.vgeo_brick_filled);
263
- distance_data.cells = distance.read(this.#cells);
264
- distance_data.instances = distance.read(descent.instances);
265
- distance_data.waiting = distance.write(wait_data.waiting);
266
- distance_data.staging = distance.write(context.staging);
267
-
268
- // the next provider and the store come after this one's merge
269
- context.staging = distance_data.staging;
270
- }
271
-
272
- #execute_gather = (data, resources, execution) => {
273
- const context = this.#context;
274
- const scene = context.scene;
275
- const take = resources.get(data.take);
276
- const b = this.#gather_bindings;
277
-
278
- b.settings = this.#settings;
279
- b.brick_take = take;
280
- b.brick_ring = context.ring;
281
- b.brick_levels = context.levels;
282
- b.vgeo_brick_statistics = this.#statistics;
283
- b.tlas = scene.tlas.buffer;
284
- b.scene_database = scene.scene_database_buffer;
285
- b.geometries = scene.geometries.buffer_metadata;
286
- b.vg_geometries = scene.virtual_geometry.pool.buffer_geometries;
287
- b.instances = resources.get(data.instances);
288
- b.claim_widths = resources.get(data.claim_widths);
289
- b.vgeo_brick_cells = resources.get(data.cells);
290
-
291
- shader_vgeo_brick_gather.dispatchIndirect({
292
- encoder: execution.encoder,
293
- command: take,
294
- command_offset: 4 * BRICK_TAKE_CELL_DISPATCH,
295
- bindings: b,
296
- });
297
- };
298
-
299
- #execute_distance = (data, resources, execution) => {
300
- const context = this.#context;
301
- const scene = context.scene;
302
- const meshlets = scene.geometries.meshlets;
303
- const b = this.#distance_bindings;
304
-
305
- b.settings = this.#settings;
306
- b.brick_staging = resources.get(data.staging);
307
- b.brick_levels = context.levels;
308
- b.vgeo_brick_statistics = this.#statistics;
309
- b.vgeo_brick_filled = resources.get(data.filled);
310
- b.vgeo_brick_cells = resources.get(data.cells);
311
- b.vgeo_brick_waiting = resources.get(data.waiting);
312
- b.instances = resources.get(data.instances);
313
- b.scene_database = scene.scene_database_buffer;
314
- b.materials = scene.materials.metadata_table.buffer;
315
- b.meshlet_metadata = meshlets.buffer_metadata;
316
- b.meshlet_data = meshlets.buffer_data;
317
-
318
- shader_vgeo_brick_distance.dispatchIndirect({
319
- encoder: execution.encoder,
320
- command: resources.get(data.command),
321
- command_offset: 0,
322
- bindings: b,
323
- });
324
- };
325
-
326
- #execute_wait = (data, resources, execution) => {
327
- const context = this.#context;
328
- const pool = context.scene.virtual_geometry.pool;
329
- const waiting = resources.get(data.waiting);
330
- const b = this.#wait_bindings;
331
-
332
- // this frame's list starts empty: the wait keeps its cells onto it, then the distances add theirs
333
- execution.encoder.clearBuffer(waiting, 0, 16);
334
-
335
- b.settings = this.#settings;
336
- b.params = this.#cut.params_buffer;
337
- b.vg_lookup = pool.buffer_lookup;
338
- b.vg_arena = pool.buffer_arena;
339
- b.feedback = resources.get(data.feedback);
340
- b.vg_want_stamps = pool.buffer_want_stamps;
341
- b.vgeo_brick_waiting_in = resources.get(data.waiting_in);
342
- b.vgeo_brick_waiting = waiting;
343
- b.brick_state = resources.get(data.state);
344
- b.brick_ring = context.ring;
345
- b.brick_pending = context.pending;
346
-
347
- shader_vgeo_brick_wait.dispatchIndirect({
348
- encoder: execution.encoder,
349
- command: resources.get(data.command),
350
- command_offset: 0,
351
- bindings: b,
352
- });
353
- };
354
-
355
- /**
356
- * Waiting lists of `capacity` cells each, made again when the capacity changes. A list made again holds no cell:
357
- * those that waited are built again only as anything else queues them.
358
- * @param {number} capacity
359
- */
360
- #ensure_waiting(capacity) {
361
- if (capacity === this.#waiting_capacity) {
362
- return;
363
- }
364
-
365
- for (const list of this.#waiting) {
366
- list.destroy();
367
- }
368
-
369
- this.#waiting = [0, 1].map(i => this.#device.createBuffer(BufferDescriptor.fromJSON({
370
- label: `Probe clipmap / vgeo brick waiting ${i}`,
371
- size: 16 + 4 * VGEO_BRICK_WAIT_WORDS * capacity,
372
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
373
- })));
374
- this.#waiting_read = 0;
375
- this.#waiting_capacity = capacity;
376
- }
377
-
378
- destroy() {
379
- if (this.#destroyed) {
380
- return;
381
- }
382
-
383
- this.#destroyed = true;
384
- this.#statistics.destroy();
385
- this.#cut.destroy();
386
-
387
- for (const list of this.#waiting) {
388
- list.destroy();
389
- }
390
-
391
- this.#waiting = [];
392
- }
393
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * A pair record's box ({@link VGEO_BRICK_PAIR_BOX}) as `vgeo_brick_pair` writes it: the taken cell grown by the
3
- * field's band, in the instance's object space (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
4
- *
5
- * ```wgsl
6
- * fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32>
7
- * fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32>
8
- * ```
9
- *
10
- * `pair_base` is the record's first word. Requires the importing shader to declare `instances`, the pair records,
11
- * as `array<u32>`.
12
- *
13
- * @type {CodeChunk}
14
- */
15
- export const chunk_vgeo_brick_box: CodeChunk;
16
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
17
- //# sourceMappingURL=chunk_vgeo_brick_box.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk_vgeo_brick_box.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,mCAFU,SAAS,CAoBhB;0BAnCuB,0CAA0C"}
@@ -1,36 +0,0 @@
1
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
2
- import { VGEO_BRICK_PAIR_BOX } from "./VGEO_BRICK.js";
3
-
4
- /**
5
- * A pair record's box ({@link VGEO_BRICK_PAIR_BOX}) as `vgeo_brick_pair` writes it: the taken cell grown by the
6
- * field's band, in the instance's object space (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
7
- *
8
- * ```wgsl
9
- * fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32>
10
- * fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32>
11
- * ```
12
- *
13
- * `pair_base` is the record's first word. Requires the importing shader to declare `instances`, the pair records,
14
- * as `array<u32>`.
15
- *
16
- * @type {CodeChunk}
17
- */
18
- export const chunk_vgeo_brick_box = CodeChunk.from(
19
- //language=WGSL
20
- `
21
- fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32> {
22
- return vec3<f32>(
23
- bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX}u]),
24
- bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 1}u]),
25
- bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 2}u])
26
- );
27
- }
28
-
29
- fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32> {
30
- return vec3<f32>(
31
- bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 3}u]),
32
- bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 4}u]),
33
- bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 5}u])
34
- );
35
- }
36
- `);
@@ -1,29 +0,0 @@
1
- /**
2
- * What the vgeo provider asks of a `meshes` row (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8), on the scene database
3
- * and the vgeo geometry rows:
4
- *
5
- * ```wgsl
6
- * fn vgeo_brick_accept(row: u32, bounds: array<f32, 6>, voxel: f32) -> bool
7
- * fn vgeo_brick_pair(row: u32, build: u32, lower: vec3<f32>, upper: vec3<f32>, voxel: f32, capacity: u32) -> bool
8
- * ```
9
- *
10
- * `vgeo_brick_accept` is the gather's leaf filter, with `bounds` the row's world box and `voxel` the cascade's: the
11
- * row is in the SDF world, its geometry is virtual (the mesh provider's rows are the others), and its box resolves
12
- * in the cascade.
13
- *
14
- * `vgeo_brick_pair` writes the pair's record, a cut's instance record under `capacity`:
15
- * - cut at a world error under half the voxel, at any distance: `k` is σ_max over half the voxel and the distance
16
- * weight 0, so `vg_project` is the world error over half the voxel, against a τ of 1;
17
- * - within the world box [lower, upper], put in the instance's object space as the bounds of its eight corners;
18
- * - for taken cell `build`.
19
- *
20
- * It is false where the instance's transform flattens it or the records are full, which the caller counts.
21
- *
22
- * Requires the importing shader to declare `scene_database`, `geometries`, `vg_geometries`, `instances` and
23
- * `claim_widths`.
24
- *
25
- * @type {CodeChunk}
26
- */
27
- export const chunk_vgeo_brick_pair: CodeChunk;
28
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
29
- //# sourceMappingURL=chunk_vgeo_brick_pair.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk_vgeo_brick_pair.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,oCAFU,SAAS,CAyEhB;0BArGuB,0CAA0C"}
@@ -1,108 +0,0 @@
1
- import { chunk_vgeo_cut_instance } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js";
2
- import { VGEO_GEOMETRY_ROW_NONE } from "../../../../geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.js";
3
- import { VGEO_INSTANCE_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js";
4
- import { chunk_scene_database_access } from "../../../../scene/chunk_scene_database_access.js";
5
- import { MESH_FLAG_SDF_WORLD } from "../../../../scene/MESH_INSTANCE_METADATA_STRUCT.js";
6
- import { chunk_mat4_inverse } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_inverse.js";
7
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
8
- import { chunk_brick_provider_resolves } from "../chunk_brick_provider.js";
9
- import { VGEO_BRICK_PAIR_BOX, VGEO_BRICK_PAIR_BUILD } from "./VGEO_BRICK.js";
10
-
11
- /**
12
- * What the vgeo provider asks of a `meshes` row (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8), on the scene database
13
- * and the vgeo geometry rows:
14
- *
15
- * ```wgsl
16
- * fn vgeo_brick_accept(row: u32, bounds: array<f32, 6>, voxel: f32) -> bool
17
- * fn vgeo_brick_pair(row: u32, build: u32, lower: vec3<f32>, upper: vec3<f32>, voxel: f32, capacity: u32) -> bool
18
- * ```
19
- *
20
- * `vgeo_brick_accept` is the gather's leaf filter, with `bounds` the row's world box and `voxel` the cascade's: the
21
- * row is in the SDF world, its geometry is virtual (the mesh provider's rows are the others), and its box resolves
22
- * in the cascade.
23
- *
24
- * `vgeo_brick_pair` writes the pair's record, a cut's instance record under `capacity`:
25
- * - cut at a world error under half the voxel, at any distance: `k` is σ_max over half the voxel and the distance
26
- * weight 0, so `vg_project` is the world error over half the voxel, against a τ of 1;
27
- * - within the world box [lower, upper], put in the instance's object space as the bounds of its eight corners;
28
- * - for taken cell `build`.
29
- *
30
- * It is false where the instance's transform flattens it or the records are full, which the caller counts.
31
- *
32
- * Requires the importing shader to declare `scene_database`, `geometries`, `vg_geometries`, `instances` and
33
- * `claim_widths`.
34
- *
35
- * @type {CodeChunk}
36
- */
37
- export const chunk_vgeo_brick_pair = CodeChunk.from(
38
- //language=WGSL
39
- `
40
- const VG_GEOMETRY_ROW_NONE = ${VGEO_GEOMETRY_ROW_NONE}u;
41
-
42
- fn vgeo_brick_accept(row: u32, bounds: array<f32, 6>, voxel: f32) -> bool {
43
- let mesh = scene_read_mesh(&scene_database, row);
44
-
45
- if ((mesh.flags & ${MESH_FLAG_SDF_WORLD}u) == 0u) {
46
- return false;
47
- }
48
-
49
- if (geometries[mesh.geometry].vg_row == VG_GEOMETRY_ROW_NONE) {
50
- return false;
51
- }
52
-
53
- return brick_provider_resolves(bounds, voxel);
54
- }
55
-
56
- fn vgeo_brick_pair(row: u32, build: u32, lower: vec3<f32>, upper: vec3<f32>, voxel: f32, capacity: u32) -> bool {
57
- let mesh = scene_read_mesh(&scene_database, row);
58
- let global = scene_read_node(&scene_database, mesh.node).global;
59
-
60
- let stretch = vg_instance_stretch(global);
61
-
62
- if (!(stretch.y > 0.0)) {
63
- return false;
64
- }
65
-
66
- let base = vg_instance_record(row, geometries[mesh.geometry].vg_row, capacity);
67
-
68
- if (base == VG_INSTANCE_RECORD_NONE) {
69
- return false;
70
- }
71
-
72
- // no eye: at a distance weight of 0 the projection is the world error itself, wherever the pair is
73
- vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE}u, 0.0);
74
- vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 1}u, 0.0);
75
- vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 2}u, 0.0);
76
- vg_store(base, ${VGEO_INSTANCE_OFFSET.PROJECTION_K}u, stretch.x / (0.5 * voxel));
77
- vg_store(base, ${VGEO_INSTANCE_OFFSET.DISTANCE_WEIGHT}u, 0.0);
78
-
79
- let to_object = mat4_inverse(global);
80
-
81
- var box_lower = vec3<f32>(3.4e38);
82
- var box_upper = vec3<f32>(-3.4e38);
83
-
84
- for (var corner = 0u; corner < 8u; corner++) {
85
- let world = select(lower, upper, vec3<bool>((corner & 1u) != 0u, (corner & 2u) != 0u, (corner & 4u) != 0u));
86
- let object = (to_object * vec4<f32>(world, 1.0)).xyz;
87
-
88
- box_lower = min(box_lower, object);
89
- box_upper = max(box_upper, object);
90
- }
91
-
92
- vg_store(base, ${VGEO_BRICK_PAIR_BOX}u, box_lower.x);
93
- vg_store(base, ${VGEO_BRICK_PAIR_BOX + 1}u, box_lower.y);
94
- vg_store(base, ${VGEO_BRICK_PAIR_BOX + 2}u, box_lower.z);
95
- vg_store(base, ${VGEO_BRICK_PAIR_BOX + 3}u, box_upper.x);
96
- vg_store(base, ${VGEO_BRICK_PAIR_BOX + 4}u, box_upper.y);
97
- vg_store(base, ${VGEO_BRICK_PAIR_BOX + 5}u, box_upper.z);
98
-
99
- instances[base + ${VGEO_BRICK_PAIR_BUILD}u] = build;
100
-
101
- return true;
102
- }
103
- `, [
104
- chunk_scene_database_access,
105
- chunk_vgeo_cut_instance,
106
- chunk_mat4_inverse,
107
- chunk_brick_provider_resolves,
108
- ]);