@woosh/meep-engine 3.24.0 → 3.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +59 -0
  3. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  4. package/src/core/geom/3d/shape/HeightMapShape3D.js +285 -0
  5. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  6. package/src/core/geom/3d/shape/PosedShape3D.js +57 -0
  7. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  8. package/src/core/geom/3d/shape/TransformedShape3D.js +102 -0
  9. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  10. package/src/core/geom/3d/shape/UnionShape3D.js +64 -0
  11. package/src/engine/graphics3/PickingSystem.d.ts +3 -3
  12. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  13. package/src/engine/graphics3/PickingSystem.js +52 -55
  14. package/src/engine/graphics3/shader_picking_gather.d.ts +40 -0
  15. package/src/engine/graphics3/shader_picking_gather.d.ts.map +1 -0
  16. package/src/engine/graphics3/shader_picking_gather.js +120 -0
  17. package/src/engine/physics/cloth/MEASUREMENTS.md +1632 -0
  18. package/src/engine/physics/cloth/PLAN.md +738 -95
  19. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +84 -17
  20. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  21. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +451 -42
  22. package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.d.ts +52 -0
  23. package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.d.ts.map +1 -0
  24. package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.js +70 -0
  25. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts +12 -3
  26. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  27. package/src/engine/physics/cloth/ecs/ClothDynamics.js +340 -331
  28. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +101 -29
  29. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  30. package/src/engine/physics/cloth/ecs/ClothInstance.js +110 -31
  31. package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.d.ts +84 -0
  32. package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.d.ts.map +1 -0
  33. package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.js +141 -0
  34. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +71 -81
  35. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  36. package/src/engine/physics/cloth/ecs/ClothSystem.js +135 -856
  37. package/src/engine/physics/cloth/ecs/ClothWorkerCore.d.ts +48 -0
  38. package/src/engine/physics/cloth/ecs/ClothWorkerCore.d.ts.map +1 -0
  39. package/src/engine/physics/cloth/ecs/ClothWorkerCore.js +107 -0
  40. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +323 -0
  41. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -0
  42. package/src/engine/physics/cloth/ecs/ClothWorld.js +1248 -0
  43. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +192 -0
  44. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -0
  45. package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +578 -0
  46. package/src/engine/physics/cloth/ecs/cloth.worker.d.ts +2 -0
  47. package/src/engine/physics/cloth/ecs/cloth.worker.d.ts.map +1 -0
  48. package/src/engine/physics/cloth/ecs/cloth.worker.js +12 -0
  49. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  50. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +2 -1
  51. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +85 -3
  52. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  53. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +366 -271
  54. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +95 -12
  55. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  56. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +170 -27
  57. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -0
  58. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  59. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +249 -201
  60. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -0
  61. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  62. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +62 -1
  63. package/src/engine/physics/cloth/ecs/cloth_worker_protocol.d.ts +29 -0
  64. package/src/engine/physics/cloth/ecs/cloth_worker_protocol.d.ts.map +1 -0
  65. package/src/engine/physics/cloth/ecs/cloth_worker_protocol.js +78 -0
  66. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  67. package/src/engine/physics/cloth/ecs/cloth_write_back.js +18 -10
  68. package/src/engine/physics/cloth/ecs/makeClothWorker.d.ts +17 -0
  69. package/src/engine/physics/cloth/ecs/makeClothWorker.d.ts.map +1 -0
  70. package/src/engine/physics/cloth/ecs/makeClothWorker.js +18 -0
  71. package/src/engine/physics/cloth/playground/README.md +73 -2
  72. package/src/engine/physics/cloth/playground/collide_main.js +1 -1
  73. package/src/engine/physics/cloth/playground/wind.html +166 -0
  74. package/src/engine/physics/cloth/playground/wind_build.d.ts +81 -0
  75. package/src/engine/physics/cloth/playground/wind_build.d.ts.map +1 -0
  76. package/src/engine/physics/cloth/playground/wind_build.js +141 -0
  77. package/src/engine/physics/cloth/playground/wind_main.d.ts +2 -0
  78. package/src/engine/physics/cloth/playground/wind_main.d.ts.map +1 -0
  79. package/src/engine/physics/cloth/playground/wind_main.js +681 -0
  80. package/src/engine/physics/cloth/solver/ClothState.d.ts +134 -79
  81. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  82. package/src/engine/physics/cloth/solver/ClothState.js +273 -12
  83. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +29 -8
  84. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  85. package/src/engine/physics/cloth/solver/cloth_contact_find.js +37 -9
  86. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +45 -2
  87. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
  88. package/src/engine/physics/cloth/solver/cloth_solver_constants.js +46 -2
  89. package/src/engine/physics/cloth/solver/cloth_step.d.ts +21 -2
  90. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  91. package/src/engine/physics/cloth/solver/cloth_step.js +173 -4
  92. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +40 -0
  93. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -0
  94. package/src/engine/physics/cloth/solver/cloth_step_instance.js +284 -0
  95. package/src/engine/physics/cloth/solver/cloth_wind_accelerate.d.ts +107 -0
  96. package/src/engine/physics/cloth/solver/cloth_wind_accelerate.d.ts.map +1 -0
  97. package/src/engine/physics/cloth/solver/cloth_wind_accelerate.js +263 -0
  98. package/src/engine/physics/cloth/solver/constraint/cloth_backstop_row.d.ts +9 -2
  99. package/src/engine/physics/cloth/solver/constraint/cloth_backstop_row.d.ts.map +1 -1
  100. package/src/engine/physics/cloth/solver/constraint/cloth_backstop_row.js +9 -2
  101. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +102 -0
  102. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts.map +1 -0
  103. package/src/engine/physics/cloth/wind/AbstractClothWind.js +114 -0
  104. package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts +87 -0
  105. package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts.map +1 -0
  106. package/src/engine/physics/cloth/wind/ClothAmbientWind.js +185 -0
  107. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +79 -0
  108. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -0
  109. package/src/engine/physics/cloth/wind/ClothFluidWind.js +213 -0
  110. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +106 -0
  111. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -0
  112. package/src/engine/physics/cloth/wind/cloth_sample_air.js +297 -0
  113. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  114. package/src/shade/device/mock/texture_copy.d.ts.map +1 -1
  115. package/src/shade/device/mock/texture_copy.js +28 -0
  116. package/src/shade/playground/vgeo_runtime/README.md +94 -0
  117. package/src/shade/playground/vgeo_runtime/index.html +62 -0
  118. package/src/shade/playground/vgeo_runtime/main.d.ts +2 -0
  119. package/src/shade/playground/vgeo_runtime/main.d.ts.map +1 -0
  120. package/src/shade/playground/vgeo_runtime/main.js +399 -0
  121. package/src/shade/playground/vgeo_viewer/sample_asset.js +1 -1
  122. package/src/shade/renderer/camera/Camera.d.ts +14 -0
  123. package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
  124. package/src/shade/renderer/camera/Camera.js +7 -1
  125. package/src/shade/renderer/geometry/GEOMETRY_METADATA_STRUCT.d.ts.map +1 -1
  126. package/src/shade/renderer/geometry/GEOMETRY_METADATA_STRUCT.js +16 -1
  127. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  128. package/src/shade/renderer/geometry/GPUGeometryManager.js +29 -9
  129. package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts +10 -0
  130. package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts.map +1 -1
  131. package/src/shade/renderer/geometry/GPUGeometryMetadata.js +13 -0
  132. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +46 -18
  133. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +70 -22
  134. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +97 -19
  135. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +12 -2
  136. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  137. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +14 -3
  138. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +2 -2
  139. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
  140. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +124 -6
  141. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +22 -0
  142. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +1 -0
  143. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.js +53 -0
  144. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +8 -1
  145. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  146. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +8 -1
  147. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.d.ts +16 -0
  148. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.d.ts.map +1 -0
  149. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.js +15 -0
  150. package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.d.ts +54 -0
  151. package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.d.ts.map +1 -0
  152. package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.js +53 -0
  153. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +13 -2
  154. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
  155. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +14 -2
  156. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +100 -0
  157. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  158. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +113 -0
  159. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
  160. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +5 -0
  161. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  162. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +108 -0
  163. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  164. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +23 -0
  165. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +40 -0
  167. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +228 -0
  168. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +932 -0
  170. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +176 -0
  171. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -0
  172. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +425 -0
  173. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +241 -0
  174. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +574 -0
  175. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +120 -0
  176. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -0
  177. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +674 -0
  178. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +287 -0
  179. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -0
  180. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +976 -0
  181. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +42 -0
  182. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -0
  183. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +96 -0
  184. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.d.ts +16 -0
  185. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.d.ts.map +1 -0
  186. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.js +15 -0
  187. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts +19 -0
  188. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -0
  189. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +83 -0
  190. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.d.ts +9 -0
  191. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.d.ts.map +1 -0
  192. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.js +8 -0
  193. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +19 -0
  194. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -0
  195. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +160 -0
  196. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts +3 -0
  197. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -0
  198. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +255 -0
  199. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts +3 -0
  200. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -0
  201. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +80 -0
  202. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts +3 -0
  203. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -0
  204. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +144 -0
  205. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts +3 -0
  206. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -0
  207. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +530 -0
  208. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +39 -0
  209. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -0
  210. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +54 -0
  211. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +41 -0
  212. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -0
  213. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +56 -0
  214. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts +49 -0
  215. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -0
  216. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +328 -0
  217. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +10 -0
  218. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts.map +1 -0
  219. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +51 -0
  220. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +13 -0
  221. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -0
  222. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +12 -0
  223. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +17 -0
  224. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts.map +1 -0
  225. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +99 -0
  226. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.d.ts +9 -0
  227. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.d.ts.map +1 -0
  228. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +8 -0
  229. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +7 -0
  230. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts.map +1 -0
  231. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +27 -0
  232. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.d.ts +14 -0
  233. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.d.ts.map +1 -0
  234. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.js +13 -0
  235. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.d.ts +7 -0
  236. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.d.ts.map +1 -0
  237. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.js +35 -0
  238. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.d.ts +9 -0
  239. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.d.ts.map +1 -0
  240. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.js +8 -0
  241. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.d.ts +15 -0
  242. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.d.ts.map +1 -0
  243. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.js +14 -0
  244. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +7 -0
  245. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts.map +1 -0
  246. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +36 -0
  247. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +10 -0
  248. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -0
  249. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +9 -0
  250. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +11 -0
  251. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts.map +1 -0
  252. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +54 -0
  253. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.d.ts +9 -0
  254. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.d.ts.map +1 -0
  255. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js +8 -0
  256. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.d.ts +11 -0
  257. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.d.ts.map +1 -0
  258. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.js +10 -0
  259. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.d.ts +7 -0
  260. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.d.ts.map +1 -0
  261. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.js +30 -0
  262. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.d.ts +9 -0
  263. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.d.ts.map +1 -0
  264. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.js +8 -0
  265. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.d.ts +13 -0
  266. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.d.ts.map +1 -0
  267. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.js +12 -0
  268. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.d.ts +14 -0
  269. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.d.ts.map +1 -0
  270. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.js +13 -0
  271. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +11 -0
  272. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts.map +1 -0
  273. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +61 -0
  274. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts +9 -0
  275. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -0
  276. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +8 -0
  277. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.d.ts +13 -0
  278. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.d.ts.map +1 -0
  279. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.js +12 -0
  280. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.d.ts +9 -0
  281. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.d.ts.map +1 -0
  282. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.js +8 -0
  283. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.d.ts +20 -0
  284. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.d.ts.map +1 -0
  285. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.js +19 -0
  286. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts +23 -0
  287. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -0
  288. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +70 -0
  289. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +18 -0
  290. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -0
  291. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +25 -0
  292. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +35 -0
  293. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -0
  294. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +41 -0
  295. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +32 -0
  296. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -0
  297. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +138 -0
  298. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  299. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  300. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  301. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +9 -0
  302. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  303. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +12 -1
  304. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  305. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +12 -1
  306. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  307. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +10 -0
  308. package/src/shade/renderer/scene/GPUSceneContext.d.ts +18 -0
  309. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  310. package/src/shade/renderer/scene/GPUSceneContext.js +647 -594
  311. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  312. package/src/shade/renderer/scene/rows/GPUSceneRows.js +22 -0
  313. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts +35 -0
  314. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts.map +1 -0
  315. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.js +91 -0
  316. package/src/engine/graphics3/instantiate_scene_bundle.d.ts +0 -54
  317. package/src/engine/graphics3/instantiate_scene_bundle.d.ts.map +0 -1
  318. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +0 -39
  319. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +0 -1
  320. package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts +0 -35
  321. package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts.map +0 -1
  322. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.d.ts +0 -96
  323. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.d.ts.map +0 -1
  324. package/src/shade/renderer/animation/pose/pose_evaluate_world.d.ts +0 -20
  325. package/src/shade/renderer/animation/pose/pose_evaluate_world.d.ts.map +0 -1
  326. package/src/shade/renderer/animation/skin_bind_transform.d.ts +0 -25
  327. package/src/shade/renderer/animation/skin_bind_transform.d.ts.map +0 -1
  328. package/src/shade/renderer/animation/skin_frame_defect.d.ts +0 -34
  329. package/src/shade/renderer/animation/skin_frame_defect.d.ts.map +0 -1
  330. package/src/shade/renderer/animation/skin_joint_matrix.d.ts +0 -24
  331. package/src/shade/renderer/animation/skin_joint_matrix.d.ts.map +0 -1
  332. package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts +0 -70
  333. package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts.map +0 -1
  334. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +0 -96
  335. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +0 -1
  336. package/src/shade/renderer/scene/InstanceBatch.d.ts +0 -92
  337. package/src/shade/renderer/scene/InstanceBatch.d.ts.map +0 -1
  338. package/src/shade/renderer/scene/Mesh.d.ts +0 -55
  339. package/src/shade/renderer/scene/Mesh.d.ts.map +0 -1
  340. package/src/shade/renderer/scene/Node3D.d.ts +0 -159
  341. package/src/shade/renderer/scene/Node3D.d.ts.map +0 -1
  342. package/src/shade/renderer/scene/Node3DDirtyList.d.ts +0 -59
  343. package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +0 -1
  344. package/src/shade/renderer/scene/SceneNodeBinding.d.ts +0 -52
  345. package/src/shade/renderer/scene/SceneNodeBinding.d.ts.map +0 -1
  346. package/src/shade/renderer/scene/SkinnedMesh.d.ts +0 -27
  347. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +0 -1
  348. package/src/shade/renderer/scene/TransformAuthority.d.ts +0 -19
  349. package/src/shade/renderer/scene/TransformAuthority.d.ts.map +0 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * How many counters {@link VGEO_CUT_STAT} names.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_CUT_STAT_COUNT = 14;
@@ -0,0 +1,7 @@
1
+ export namespace VGEO_FEEDBACK_OFFSET {
2
+ let WANT_COUNT: number;
3
+ let TOUCH_COUNT: number;
4
+ let STATS: number;
5
+ let HEADER_WORDS: number;
6
+ }
7
+ //# sourceMappingURL=VGEO_FEEDBACK_OFFSET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_FEEDBACK_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { VGEO_CUT_STAT_COUNT } from "./VGEO_CUT_STAT_COUNT.js";
2
+
3
+ /**
4
+ * Word offsets in the feedback buffer — the one thing the cut hands back to the CPU, and the only
5
+ * place in the runtime where a GPU pass and a host frame meet.
6
+ *
7
+ * Header first, then the two lists, so a readback of the header alone tells a saturated frame how
8
+ * much of the rest is worth mapping. Design §6: the wants loop tolerates its transport — multi-frame
9
+ * `mapAsync` latency, a small in-flight cap, and frames where feedback is skipped entirely.
10
+ *
11
+ * @author Alex Goldring
12
+ * @copyright Company Named Limited (c) 2026
13
+ */
14
+ export const VGEO_FEEDBACK_OFFSET = {
15
+ WANT_COUNT: 0,
16
+ TOUCH_COUNT: 1,
17
+ /**
18
+ * Counters live in the header so that a frame whose lists overflowed still says so.
19
+ */
20
+ STATS: 2,
21
+ /**
22
+ * Where the want records begin. The lists themselves are sized by the caller's options and
23
+ * their bases travel in the params block, because a graph resource's size is a host-side
24
+ * decision and the kernel must not assume one.
25
+ */
26
+ HEADER_WORDS: 2 + VGEO_CUT_STAT_COUNT,
27
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `GEOMETRY_METADATA_STRUCT.vg_row` for a geometry that is not virtual — which is nearly all of
3
+ * them, and every one that existed before this field did.
4
+ *
5
+ * It is how a shader handed a list of visible mesh instances tells a VG instance from a static one,
6
+ * and it is the whole of what the engine's record formats had to learn about virtual geometry. The
7
+ * draw records, the meshlet metadata, the material buckets and the indirect draws are unchanged.
8
+ *
9
+ * @author Alex Goldring
10
+ * @copyright Company Named Limited (c) 2026
11
+ * @type {number}
12
+ */
13
+ export const VGEO_GEOMETRY_ROW_NONE: number;
14
+ //# sourceMappingURL=VGEO_GEOMETRY_ROW_NONE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_GEOMETRY_ROW_NONE.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,qCAFU,MAAM,CAEiC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `GEOMETRY_METADATA_STRUCT.vg_row` for a geometry that is not virtual — which is nearly all of
3
+ * them, and every one that existed before this field did.
4
+ *
5
+ * It is how a shader handed a list of visible mesh instances tells a VG instance from a static one,
6
+ * and it is the whole of what the engine's record formats had to learn about virtual geometry. The
7
+ * draw records, the meshlet metadata, the material buckets and the indirect draws are unchanged.
8
+ *
9
+ * @author Alex Goldring
10
+ * @copyright Company Named Limited (c) 2026
11
+ * @type {number}
12
+ */
13
+ export const VGEO_GEOMETRY_ROW_NONE = 0xFFFFFFFF;
@@ -0,0 +1,7 @@
1
+ export namespace VGEO_GEOMETRY_ROW_OFFSET {
2
+ let ROOT_PAGE_ROW: number;
3
+ let LOOKUP_WORD_OFFSET: number;
4
+ let PAGE_COUNT: number;
5
+ let ORDINAL_CAPACITY: number;
6
+ }
7
+ //# sourceMappingURL=VGEO_GEOMETRY_ROW_OFFSET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_GEOMETRY_ROW_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.js"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Word offsets within one VG geometry row.
3
+ *
4
+ * Read by the instance-collect pass and folded into each instance record, so the traversal kernel
5
+ * never binds this table at all — which is one of the reasons it fits inside the engine's
6
+ * ten-storage-buffer floor (`runtime/RUNTIME_PLAN.md` §4.9).
7
+ *
8
+ * @author Alex Goldring
9
+ * @copyright Company Named Limited (c) 2026
10
+ */
11
+ export const VGEO_GEOMETRY_ROW_OFFSET = {
12
+ /**
13
+ * Page-table row of page 0, which is pinned and therefore always valid.
14
+ */
15
+ ROOT_PAGE_ROW: 0,
16
+ /**
17
+ * Start of this geometry's page lookup in the arena: `PAGE_COUNT` words, container page index →
18
+ * page-table row or {@link VGEO_PAGE_ROW_NONE}.
19
+ *
20
+ * A lookup rather than a pointer stored in each referring cluster row, because the pointer
21
+ * makes an install a scatter over every cluster that refers into the arriving page — across
22
+ * pages, unbounded, and undone on eviction. One indirection in the shader is cheaper than that
23
+ * every time.
24
+ */
25
+ LOOKUP_WORD_OFFSET: 1,
26
+ /**
27
+ * `total_pages` of the container — the lookup's extent.
28
+ */
29
+ PAGE_COUNT: 2,
30
+ /**
31
+ * How wide one instance's slice of the claim bitmask has to be. The high-water mark of handed
32
+ * out ordinals, not the resident count: ordinals come from a free list and can be sparse.
33
+ */
34
+ ORDINAL_CAPACITY: 3,
35
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Words in one VG geometry row.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_GEOMETRY_ROW_WORDS: number;
9
+ //# sourceMappingURL=VGEO_GEOMETRY_ROW_WORDS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_GEOMETRY_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,sCAFU,MAAM,CAEyB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Words in one VG geometry row.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_GEOMETRY_ROW_WORDS = 4;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The group is selectable: every one of its `parent_cluster_count` references is live —
3
+ * the referencing cluster's page installed and that cluster's own group selectable
4
+ * (`VGEO_FORMAT.md` §10).
5
+ *
6
+ * The cut rule's clamp reads *this*, not residency, and so does the predicate's own-group term.
7
+ * `runtime/RUNTIME_PLAN.md` §4.4: leaving the own-group term out draws a coarse stand-in and the
8
+ * fine surface it stands in for, both, a few microns apart.
9
+ *
10
+ * @author Alex Goldring
11
+ * @copyright Company Named Limited (c) 2026
12
+ * @type {number}
13
+ */
14
+ export const VGEO_GROUP_FLAG_SELECTABLE: number;
15
+ //# sourceMappingURL=VGEO_GROUP_FLAG_SELECTABLE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_GROUP_FLAG_SELECTABLE.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,yCAFU,MAAM,CAE4B"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The group is selectable: every one of its `parent_cluster_count` references is live —
3
+ * the referencing cluster's page installed and that cluster's own group selectable
4
+ * (`VGEO_FORMAT.md` §10).
5
+ *
6
+ * The cut rule's clamp reads *this*, not residency, and so does the predicate's own-group term.
7
+ * `runtime/RUNTIME_PLAN.md` §4.4: leaving the own-group term out draws a coarse stand-in and the
8
+ * fine surface it stands in for, both, a few microns apart.
9
+ *
10
+ * @author Alex Goldring
11
+ * @copyright Company Named Limited (c) 2026
12
+ * @type {number}
13
+ */
14
+ export const VGEO_GROUP_FLAG_SELECTABLE = 1;
@@ -0,0 +1,7 @@
1
+ export namespace VGEO_GROUP_ROW_OFFSET {
2
+ let CLUSTER_FIRST: number;
3
+ let CLUSTER_COUNT: number;
4
+ let FLAGS: number;
5
+ let PARENT_COUNT: number;
6
+ }
7
+ //# sourceMappingURL=VGEO_GROUP_ROW_OFFSET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_GROUP_ROW_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Word offsets within one group row.
3
+ *
4
+ * The group is the atomic LOD decision unit (design §3) and the atomic *activation* unit
5
+ * (`VGEO_FORMAT.md` §10), so selectability lives here and nowhere else — a per-cluster copy would
6
+ * have to be scattered over every referring cluster on each install.
7
+ *
8
+ * @author Alex Goldring
9
+ * @copyright Company Named Limited (c) 2026
10
+ */
11
+ export const VGEO_GROUP_ROW_OFFSET = {
12
+ /**
13
+ * First cluster of this group, as a row within its page's cluster block.
14
+ */
15
+ CLUSTER_FIRST: 0,
16
+ CLUSTER_COUNT: 1,
17
+ /**
18
+ * @see VGEO_GROUP_FLAG_SELECTABLE
19
+ */
20
+ FLAGS: 2,
21
+ /**
22
+ * How many clusters anywhere in the container refine into this group — the format's
23
+ * `group_parent_count`, copied in at install.
24
+ *
25
+ * It is here so that **this tier can answer its own activation question**. Selectability is
26
+ * "every parent reference is live", and which references are live depends on which pages are
27
+ * resident *in the tier asking* — so the RAM tier's answer is not the VRAM tier's, and the VRAM
28
+ * tier publishing the RAM tier's answer is REVIEW_LEDGER C1: a group drawn because its
29
+ * ancestors are in RAM, under a coarse stand-in drawn because one of them is not in VRAM.
30
+ *
31
+ * With this word, `VGeoRuntimeTables.refresh_selectable` computes the VRAM answer from the
32
+ * arena and the page lookup alone. No reader is consulted, which also means a page whose RAM
33
+ * copy has been evicted underneath this tier still has a correct answer.
34
+ */
35
+ PARENT_COUNT: 3,
36
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Words in one group row. Four rather than three so a group block stays 16-byte aligned, which
3
+ * costs nothing — a page carries a handful of groups against hundreds of clusters.
4
+ *
5
+ * @author Alex Goldring
6
+ * @copyright Company Named Limited (c) 2026
7
+ * @type {number}
8
+ */
9
+ export const VGEO_GROUP_ROW_WORDS: number;
10
+ //# sourceMappingURL=VGEO_GROUP_ROW_WORDS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_GROUP_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,mCAFU,MAAM,CAEsB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Words in one group row. Four rather than three so a group block stays 16-byte aligned, which
3
+ * costs nothing — a page carries a handful of groups against hundreds of clusters.
4
+ *
5
+ * @author Alex Goldring
6
+ * @copyright Company Named Limited (c) 2026
7
+ * @type {number}
8
+ */
9
+ export const VGEO_GROUP_ROW_WORDS = 4;
@@ -0,0 +1,11 @@
1
+ export namespace VGEO_INSTANCE_OFFSET {
2
+ let EYE: number;
3
+ let PROJECTION_K: number;
4
+ let FRUSTUM: number;
5
+ let MESH_INDEX: number;
6
+ let ROOT_PAGE_ROW: number;
7
+ let LOOKUP_WORD_OFFSET: number;
8
+ let CLAIM_BASE: number;
9
+ let ORDINAL_CAPACITY: number;
10
+ }
11
+ //# sourceMappingURL=VGEO_INSTANCE_OFFSET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_INSTANCE_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Word offsets within one instance record — a visible VG instance, as the cut kernel sees it.
3
+ *
4
+ * Everything here is **object space**, and that is `MICRON_COMPARISON_2026_08_20.md` §2.7 as
5
+ * design §3.1 adopted it: multiply the camera's view-projection by the instance transform once,
6
+ * derive the frustum from the result, and run every cull and error test against untransformed
7
+ * cluster bounds. One matrix per instance instead of a transform per cluster, and with thousands
8
+ * of instances sharing one geometry that difference is the entire cost.
9
+ *
10
+ * The geometry's own fields are folded in here rather than looked up, so the traversal kernel does
11
+ * not bind the geometry table.
12
+ *
13
+ * @author Alex Goldring
14
+ * @copyright Company Named Limited (c) 2026
15
+ */
16
+ export const VGEO_INSTANCE_OFFSET = {
17
+ /**
18
+ * The camera's position in this instance's object space.
19
+ */
20
+ EYE: 0,
21
+ /**
22
+ * `screen_height / (2 * tan(fov_y / 2))`, times the scale correction below.
23
+ *
24
+ * Error and distance are both object-space, so a **uniform** instance scale cancels out of
25
+ * `r_e * k / d` exactly and needs no term at all. A non-uniform one does not cancel, and the
26
+ * correction is the ratio of the transform's singular values — σ_max / σ_min, not the ratio of
27
+ * its column lengths, which a shear leaves at 1 while stretching space without bound
28
+ * (REVIEW_LEDGER M4). It over-refines rather than under-refines, and it is exactly 1 for every
29
+ * instance that is not stretched.
30
+ */
31
+ PROJECTION_K: 3,
32
+ /**
33
+ * Five object-space frustum planes, `xyzw` each, in the order left, right, bottom, top, near.
34
+ *
35
+ * Five and not six: the projection is infinite reverse-Z, so the far plane's row is degenerate
36
+ * and normalizing it produces nothing a test can use. Ordering it last is what makes "test the
37
+ * first five" true by construction rather than by knowing which one to skip.
38
+ */
39
+ FRUSTUM: 4,
40
+ /**
41
+ * Which mesh row this instance is — the second half of every draw record it emits.
42
+ */
43
+ MESH_INDEX: 24,
44
+ ROOT_PAGE_ROW: 25,
45
+ LOOKUP_WORD_OFFSET: 26,
46
+ /**
47
+ * First bit of this instance's slice of the claim bitmask.
48
+ */
49
+ CLAIM_BASE: 27,
50
+ /**
51
+ * How many bits that slice runs to.
52
+ */
53
+ ORDINAL_CAPACITY: 28,
54
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Words in one instance record.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_INSTANCE_WORDS: number;
9
+ //# sourceMappingURL=VGEO_INSTANCE_WORDS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_INSTANCE_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,kCAFU,MAAM,CAEsB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Words in one instance record.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_INSTANCE_WORDS = 32;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Set in a node row's `CHILD_COUNT_AND_FLAGS` when the children are groups rather than nodes.
3
+ *
4
+ * Above the fanout cap of 4 by a wide margin, so the count is readable as the low byte.
5
+ *
6
+ * @author Alex Goldring
7
+ * @copyright Company Named Limited (c) 2026
8
+ * @type {number}
9
+ */
10
+ export const VGEO_NODE_ROW_LEAF_BIT: number;
11
+ //# sourceMappingURL=VGEO_NODE_ROW_LEAF_BIT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_NODE_ROW_LEAF_BIT.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qCAFU,MAAM,CAE4B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Set in a node row's `CHILD_COUNT_AND_FLAGS` when the children are groups rather than nodes.
3
+ *
4
+ * Above the fanout cap of 4 by a wide margin, so the count is readable as the low byte.
5
+ *
6
+ * @author Alex Goldring
7
+ * @copyright Company Named Limited (c) 2026
8
+ * @type {number}
9
+ */
10
+ export const VGEO_NODE_ROW_LEAF_BIT = 0x100;
@@ -0,0 +1,7 @@
1
+ export namespace VGEO_NODE_ROW_OFFSET {
2
+ let SPHERE: number;
3
+ let MAX_PARENT_ERROR: number;
4
+ let CHILD_FIRST: number;
5
+ let CHILD_COUNT_AND_FLAGS: number;
6
+ }
7
+ //# sourceMappingURL=VGEO_NODE_ROW_OFFSET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_NODE_ROW_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.js"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Word offsets within one node row — the page's own tree over its own groups
3
+ * (`VGEO_FORMAT.md` §6.1).
4
+ *
5
+ * `min_self_error` is not carried. It ranks a prefetch, and the cut never asks it anything:
6
+ * see `runtime/RUNTIME_PLAN.md` §4.8.
7
+ *
8
+ * @author Alex Goldring
9
+ * @copyright Company Named Limited (c) 2026
10
+ */
11
+ export const VGEO_NODE_ROW_OFFSET = {
12
+ /**
13
+ * Contains every `parent_sphere` under this node, so it bounds the subtree's geometry too.
14
+ */
15
+ SPHERE: 0,
16
+ /**
17
+ * The coarsest parent error covered. A node whose largest parent error still projects to no
18
+ * more than τ has nothing drawable anywhere under it.
19
+ */
20
+ MAX_PARENT_ERROR: 4,
21
+ /**
22
+ * A node index when interior, a group index when a leaf.
23
+ */
24
+ CHILD_FIRST: 5,
25
+ /**
26
+ * `count | (leaf ? 0x100 : 0)`.
27
+ * @see VGEO_NODE_ROW_LEAF_BIT
28
+ */
29
+ CHILD_COUNT_AND_FLAGS: 6,
30
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Words in one node row.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_NODE_ROW_WORDS: number;
9
+ //# sourceMappingURL=VGEO_NODE_ROW_WORDS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_NODE_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,kCAFU,MAAM,CAEqB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Words in one node row.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_NODE_ROW_WORDS = 8;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * A cluster row's `CHILD_PAGE_INDEX` when the cluster is a leaf — nothing refines it, and the cut
3
+ * takes it at any threshold.
4
+ *
5
+ * Distinct from {@link VGEO_PAGE_ROW_NONE}, which says a child exists and is not here. Conflating
6
+ * them would turn every leaf into a permanent want.
7
+ *
8
+ * @author Alex Goldring
9
+ * @copyright Company Named Limited (c) 2026
10
+ * @type {number}
11
+ */
12
+ export const VGEO_NO_CHILD_PAGE: number;
13
+ //# sourceMappingURL=VGEO_NO_CHILD_PAGE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_NO_CHILD_PAGE.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,iCAFU,MAAM,CAE6B"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * A cluster row's `CHILD_PAGE_INDEX` when the cluster is a leaf — nothing refines it, and the cut
3
+ * takes it at any threshold.
4
+ *
5
+ * Distinct from {@link VGEO_PAGE_ROW_NONE}, which says a child exists and is not here. Conflating
6
+ * them would turn every leaf into a permanent want.
7
+ *
8
+ * @author Alex Goldring
9
+ * @copyright Company Named Limited (c) 2026
10
+ * @type {number}
11
+ */
12
+ export const VGEO_NO_CHILD_PAGE = 0xFFFFFFFF;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The page-lookup entry for a page that is not VRAM-resident.
3
+ *
4
+ * A cluster whose child page reads this is **clamped**: it draws as it stands and records a want.
5
+ * That is the residency clamp (design §4), and it is the reason a cut can be taken at all before a
6
+ * file has finished arriving — the coarser cluster is not a fallback for a missing one, it is the
7
+ * correct surface over exactly the region the missing page would have refined.
8
+ *
9
+ * @author Alex Goldring
10
+ * @copyright Company Named Limited (c) 2026
11
+ * @type {number}
12
+ */
13
+ export const VGEO_PAGE_ROW_NONE: number;
14
+ //# sourceMappingURL=VGEO_PAGE_ROW_NONE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_PAGE_ROW_NONE.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,iCAFU,MAAM,CAE6B"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The page-lookup entry for a page that is not VRAM-resident.
3
+ *
4
+ * A cluster whose child page reads this is **clamped**: it draws as it stands and records a want.
5
+ * That is the residency clamp (design §4), and it is the reason a cut can be taken at all before a
6
+ * file has finished arriving — the coarser cluster is not a fallback for a missing one, it is the
7
+ * correct surface over exactly the region the missing page would have refined.
8
+ *
9
+ * @author Alex Goldring
10
+ * @copyright Company Named Limited (c) 2026
11
+ * @type {number}
12
+ */
13
+ export const VGEO_PAGE_ROW_NONE = 0xFFFFFFFF;
@@ -0,0 +1,11 @@
1
+ export namespace VGEO_PAGE_ROW_OFFSET {
2
+ let NODE_COUNT: number;
3
+ let GROUP_COUNT: number;
4
+ let CLUSTER_COUNT: number;
5
+ let MESHLET_BASE: number;
6
+ let PAGE_INDEX: number;
7
+ let ORDINAL: number;
8
+ let GEOMETRY_ROW: number;
9
+ let DECODED_SIZE: number;
10
+ }
11
+ //# sourceMappingURL=VGEO_PAGE_ROW_OFFSET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_PAGE_ROW_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Word offsets within the **header of one page slot** — the first words of every fixed-stride slot
3
+ * in the arena, before that page's node, group and cluster rows.
4
+ *
5
+ * This is `VIRTUAL_GEOMETRY_DESIGN.md` §6's "fixed-size page-slot allocation" taken literally. A
6
+ * slot's address is `page row × VGEO_CUT_PARAMS.page_slot_words`: no allocator, no growth path, no
7
+ * ceiling to run into, and no second buffer to keep coherent with this one. What made that
8
+ * available is format §11.14 — `nominal_page_size` is a bound every page is within, announced by a
9
+ * feature bit, and `GPUVirtualGeometryPool.register` refuses a container that does not carry it.
10
+ *
11
+ * **The page header is inside the slot rather than in a table of its own**, and that is worth a
12
+ * sentence because the plan drew it the other way. A separate table costs a second storage binding
13
+ * in the traversal, which declares nine against the engine's floor of ten (RUNTIME_PLAN §4.9), and
14
+ * it costs a coherence question — a page row and its block written to two buffers, dirtied
15
+ * separately, uploaded separately. In one slot an install is one contiguous range and the header is
16
+ * where the reader of the block already is.
17
+ *
18
+ * There is no `ARENA_WORD_OFFSET` any more. It was the allocator's answer to "where is this page",
19
+ * and the answer is now a multiply.
20
+ *
21
+ * @author Alex Goldring
22
+ * @copyright Company Named Limited (c) 2026
23
+ */
24
+ export const VGEO_PAGE_ROW_OFFSET = {
25
+ NODE_COUNT: 0,
26
+ GROUP_COUNT: 1,
27
+ CLUSTER_COUNT: 2,
28
+ /**
29
+ * Row of this page's cluster 0 in the meshlet **metadata** pool, so a draw record is
30
+ * `meshlet_base + local cluster` and downstream reads the buffer it already reads.
31
+ *
32
+ * The one field of a slot that moves without the page moving: `GPUMeshletManager` relocates
33
+ * batches when it compacts, and the pool republishes this from the batch's `changed` signal.
34
+ */
35
+ MESHLET_BASE: 3,
36
+ /**
37
+ * The container's own page index — the frame ordinal. What a touch reports, and what a want
38
+ * dedups on.
39
+ */
40
+ PAGE_INDEX: 4,
41
+ /**
42
+ * Dense index of this page *within its geometry*, which is what the per-instance claim bitmask
43
+ * is indexed by. Global page-table rows would make the claim `instances × pool capacity`, which
44
+ * does not fit; per-geometry ordinals make it `instances × that geometry's working set`.
45
+ */
46
+ ORDINAL: 5,
47
+ /**
48
+ * Row in the VG geometry table.
49
+ */
50
+ GEOMETRY_ROW: 6,
51
+ /**
52
+ * Decoded bytes this page cost the tier, held here rather than re-derived from the RAM reader
53
+ * at eviction time.
54
+ *
55
+ * The tier that charged the budget is the tier that has to refund it, and the RAM tier can drop
56
+ * a page the VRAM tier still holds — which made the refund zero and walked `resident_bytes`
57
+ * upward until the budget refused every install (REVIEW_LEDGER C4). A number the tier wrote
58
+ * down itself cannot drift.
59
+ */
60
+ DECODED_SIZE: 7,
61
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Words in one page-table row.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_PAGE_ROW_WORDS: number;
9
+ //# sourceMappingURL=VGEO_PAGE_ROW_WORDS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VGEO_PAGE_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,kCAFU,MAAM,CAEqB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Words in one page-table row.
3
+ *
4
+ * @author Alex Goldring
5
+ * @copyright Company Named Limited (c) 2026
6
+ * @type {number}
7
+ */
8
+ export const VGEO_PAGE_ROW_WORDS = 8;