@bloomengine/engine 0.3.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 (562) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +169 -0
  3. package/native/android/Cargo.lock +1848 -0
  4. package/native/android/Cargo.toml +20 -0
  5. package/native/android/src/lib.rs +1747 -0
  6. package/native/ios/Cargo.lock +1688 -0
  7. package/native/ios/Cargo.toml +19 -0
  8. package/native/ios/src/lib.rs +2258 -0
  9. package/native/linux/Cargo.lock +1719 -0
  10. package/native/linux/Cargo.toml +22 -0
  11. package/native/linux/src/lib.rs +2236 -0
  12. package/native/macos/Cargo.lock +3310 -0
  13. package/native/macos/Cargo.toml +29 -0
  14. package/native/macos/src/lib.rs +3444 -0
  15. package/native/shared/Cargo.lock +1898 -0
  16. package/native/shared/Cargo.toml +42 -0
  17. package/native/shared/assets/default_font.ttf +0 -0
  18. package/native/shared/build.rs +77 -0
  19. package/native/shared/shaders/common/fog.wgsl +16 -0
  20. package/native/shared/shaders/common/imposter.wgsl +112 -0
  21. package/native/shared/shaders/common/pbr.wgsl +186 -0
  22. package/native/shared/shaders/common/shadows.wgsl +77 -0
  23. package/native/shared/shaders/common/sky.wgsl +8 -0
  24. package/native/shared/shaders/common/tonemap.wgsl +25 -0
  25. package/native/shared/shaders/impulse_field.wgsl +53 -0
  26. package/native/shared/shaders/material_abi.wgsl +360 -0
  27. package/native/shared/shaders/materials/test_minimal.wgsl +42 -0
  28. package/native/shared/src/audio.rs +363 -0
  29. package/native/shared/src/custom_shaders.rs +104 -0
  30. package/native/shared/src/drs.rs +211 -0
  31. package/native/shared/src/engine.rs +186 -0
  32. package/native/shared/src/frame_callbacks.rs +88 -0
  33. package/native/shared/src/geometry.rs +236 -0
  34. package/native/shared/src/handles.rs +76 -0
  35. package/native/shared/src/input.rs +273 -0
  36. package/native/shared/src/jolt_sys.rs +822 -0
  37. package/native/shared/src/lib.rs +43 -0
  38. package/native/shared/src/models.rs +1941 -0
  39. package/native/shared/src/physics_jolt.rs +1528 -0
  40. package/native/shared/src/picking.rs +298 -0
  41. package/native/shared/src/postfx.rs +339 -0
  42. package/native/shared/src/profiler.rs +416 -0
  43. package/native/shared/src/renderer/atmosphere_lut.rs +573 -0
  44. package/native/shared/src/renderer/brdf_lut.rs +154 -0
  45. package/native/shared/src/renderer/formats.rs +778 -0
  46. package/native/shared/src/renderer/graph.rs +465 -0
  47. package/native/shared/src/renderer/hot_reload.rs +390 -0
  48. package/native/shared/src/renderer/impulse_field.rs +455 -0
  49. package/native/shared/src/renderer/material_pipeline.rs +604 -0
  50. package/native/shared/src/renderer/material_system.rs +2106 -0
  51. package/native/shared/src/renderer/mod.rs +13923 -0
  52. package/native/shared/src/renderer/planar_reflection.rs +458 -0
  53. package/native/shared/src/renderer/post_pass.rs +249 -0
  54. package/native/shared/src/renderer/shader_include.rs +205 -0
  55. package/native/shared/src/renderer/shader_library.rs +134 -0
  56. package/native/shared/src/renderer/shaders.rs +5855 -0
  57. package/native/shared/src/renderer/transient.rs +576 -0
  58. package/native/shared/src/renderer/types.rs +259 -0
  59. package/native/shared/src/renderer/util.rs +151 -0
  60. package/native/shared/src/scene.rs +1066 -0
  61. package/native/shared/src/sdf_cache.rs +274 -0
  62. package/native/shared/src/shadows.rs +551 -0
  63. package/native/shared/src/staging.rs +90 -0
  64. package/native/shared/src/string_header.rs +35 -0
  65. package/native/shared/src/text_renderer.rs +456 -0
  66. package/native/shared/src/textures.rs +154 -0
  67. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.cpp +242 -0
  68. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.h +121 -0
  69. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeToBuffer.h +296 -0
  70. package/native/third_party/JoltPhysics/Jolt/AABBTree/NodeCodec/NodeCodecQuadTreeHalfFloat.h +323 -0
  71. package/native/third_party/JoltPhysics/Jolt/AABBTree/TriangleCodec/TriangleCodecIndexed8BitPackSOA4Flags.h +555 -0
  72. package/native/third_party/JoltPhysics/Jolt/ConfigurationString.h +112 -0
  73. package/native/third_party/JoltPhysics/Jolt/Core/ARMNeon.h +94 -0
  74. package/native/third_party/JoltPhysics/Jolt/Core/Array.h +713 -0
  75. package/native/third_party/JoltPhysics/Jolt/Core/Atomics.h +44 -0
  76. package/native/third_party/JoltPhysics/Jolt/Core/BinaryHeap.h +96 -0
  77. package/native/third_party/JoltPhysics/Jolt/Core/ByteBuffer.h +74 -0
  78. package/native/third_party/JoltPhysics/Jolt/Core/Color.cpp +38 -0
  79. package/native/third_party/JoltPhysics/Jolt/Core/Color.h +98 -0
  80. package/native/third_party/JoltPhysics/Jolt/Core/Core.h +652 -0
  81. package/native/third_party/JoltPhysics/Jolt/Core/FPControlWord.h +143 -0
  82. package/native/third_party/JoltPhysics/Jolt/Core/FPException.h +96 -0
  83. package/native/third_party/JoltPhysics/Jolt/Core/FPFlushDenormals.h +43 -0
  84. package/native/third_party/JoltPhysics/Jolt/Core/Factory.cpp +92 -0
  85. package/native/third_party/JoltPhysics/Jolt/Core/Factory.h +54 -0
  86. package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.h +122 -0
  87. package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.inl +215 -0
  88. package/native/third_party/JoltPhysics/Jolt/Core/HashCombine.h +234 -0
  89. package/native/third_party/JoltPhysics/Jolt/Core/HashTable.h +876 -0
  90. package/native/third_party/JoltPhysics/Jolt/Core/InsertionSort.h +58 -0
  91. package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.cpp +27 -0
  92. package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.h +38 -0
  93. package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.h +311 -0
  94. package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.inl +56 -0
  95. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.cpp +65 -0
  96. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.h +62 -0
  97. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.cpp +364 -0
  98. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.h +101 -0
  99. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.cpp +230 -0
  100. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.h +85 -0
  101. package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.cpp +51 -0
  102. package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.h +67 -0
  103. package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.h +182 -0
  104. package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.inl +351 -0
  105. package/native/third_party/JoltPhysics/Jolt/Core/Memory.cpp +85 -0
  106. package/native/third_party/JoltPhysics/Jolt/Core/Memory.h +85 -0
  107. package/native/third_party/JoltPhysics/Jolt/Core/Mutex.h +223 -0
  108. package/native/third_party/JoltPhysics/Jolt/Core/MutexArray.h +98 -0
  109. package/native/third_party/JoltPhysics/Jolt/Core/NonCopyable.h +18 -0
  110. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.cpp +677 -0
  111. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.h +301 -0
  112. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.inl +90 -0
  113. package/native/third_party/JoltPhysics/Jolt/Core/QuickSort.h +137 -0
  114. package/native/third_party/JoltPhysics/Jolt/Core/RTTI.cpp +149 -0
  115. package/native/third_party/JoltPhysics/Jolt/Core/RTTI.h +436 -0
  116. package/native/third_party/JoltPhysics/Jolt/Core/Reference.h +244 -0
  117. package/native/third_party/JoltPhysics/Jolt/Core/Result.h +174 -0
  118. package/native/third_party/JoltPhysics/Jolt/Core/STLAlignedAllocator.h +72 -0
  119. package/native/third_party/JoltPhysics/Jolt/Core/STLAllocator.h +127 -0
  120. package/native/third_party/JoltPhysics/Jolt/Core/STLLocalAllocator.h +170 -0
  121. package/native/third_party/JoltPhysics/Jolt/Core/STLTempAllocator.h +80 -0
  122. package/native/third_party/JoltPhysics/Jolt/Core/ScopeExit.h +49 -0
  123. package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.cpp +135 -0
  124. package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.h +68 -0
  125. package/native/third_party/JoltPhysics/Jolt/Core/StaticArray.h +329 -0
  126. package/native/third_party/JoltPhysics/Jolt/Core/StreamIn.h +120 -0
  127. package/native/third_party/JoltPhysics/Jolt/Core/StreamOut.h +97 -0
  128. package/native/third_party/JoltPhysics/Jolt/Core/StreamUtils.h +168 -0
  129. package/native/third_party/JoltPhysics/Jolt/Core/StreamWrapper.h +53 -0
  130. package/native/third_party/JoltPhysics/Jolt/Core/StridedPtr.h +63 -0
  131. package/native/third_party/JoltPhysics/Jolt/Core/StringTools.cpp +101 -0
  132. package/native/third_party/JoltPhysics/Jolt/Core/StringTools.h +38 -0
  133. package/native/third_party/JoltPhysics/Jolt/Core/TempAllocator.h +209 -0
  134. package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.cpp +37 -0
  135. package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.h +58 -0
  136. package/native/third_party/JoltPhysics/Jolt/Core/UnorderedMap.h +80 -0
  137. package/native/third_party/JoltPhysics/Jolt/Core/UnorderedSet.h +32 -0
  138. package/native/third_party/JoltPhysics/Jolt/Geometry/AABox.h +313 -0
  139. package/native/third_party/JoltPhysics/Jolt/Geometry/AABox4.h +224 -0
  140. package/native/third_party/JoltPhysics/Jolt/Geometry/ClipPoly.h +200 -0
  141. package/native/third_party/JoltPhysics/Jolt/Geometry/ClosestPoint.h +498 -0
  142. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.cpp +1467 -0
  143. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.h +276 -0
  144. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.cpp +335 -0
  145. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.h +105 -0
  146. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexSupport.h +188 -0
  147. package/native/third_party/JoltPhysics/Jolt/Geometry/EPAConvexHullBuilder.h +845 -0
  148. package/native/third_party/JoltPhysics/Jolt/Geometry/EPAPenetrationDepth.h +557 -0
  149. package/native/third_party/JoltPhysics/Jolt/Geometry/Ellipse.h +77 -0
  150. package/native/third_party/JoltPhysics/Jolt/Geometry/GJKClosestPoint.h +945 -0
  151. package/native/third_party/JoltPhysics/Jolt/Geometry/IndexedTriangle.h +130 -0
  152. package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.cpp +222 -0
  153. package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.h +19 -0
  154. package/native/third_party/JoltPhysics/Jolt/Geometry/MortonCode.h +40 -0
  155. package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.cpp +178 -0
  156. package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.h +39 -0
  157. package/native/third_party/JoltPhysics/Jolt/Geometry/Plane.h +104 -0
  158. package/native/third_party/JoltPhysics/Jolt/Geometry/RayAABox.h +241 -0
  159. package/native/third_party/JoltPhysics/Jolt/Geometry/RayCapsule.h +37 -0
  160. package/native/third_party/JoltPhysics/Jolt/Geometry/RayCylinder.h +101 -0
  161. package/native/third_party/JoltPhysics/Jolt/Geometry/RaySphere.h +96 -0
  162. package/native/third_party/JoltPhysics/Jolt/Geometry/RayTriangle.h +158 -0
  163. package/native/third_party/JoltPhysics/Jolt/Geometry/Sphere.h +72 -0
  164. package/native/third_party/JoltPhysics/Jolt/Geometry/Triangle.h +34 -0
  165. package/native/third_party/JoltPhysics/Jolt/Jolt.cmake +703 -0
  166. package/native/third_party/JoltPhysics/Jolt/Jolt.h +16 -0
  167. package/native/third_party/JoltPhysics/Jolt/Jolt.natvis +116 -0
  168. package/native/third_party/JoltPhysics/Jolt/Math/BVec16.h +99 -0
  169. package/native/third_party/JoltPhysics/Jolt/Math/BVec16.inl +177 -0
  170. package/native/third_party/JoltPhysics/Jolt/Math/DMat44.h +158 -0
  171. package/native/third_party/JoltPhysics/Jolt/Math/DMat44.inl +310 -0
  172. package/native/third_party/JoltPhysics/Jolt/Math/DVec3.h +291 -0
  173. package/native/third_party/JoltPhysics/Jolt/Math/DVec3.inl +941 -0
  174. package/native/third_party/JoltPhysics/Jolt/Math/Double3.h +48 -0
  175. package/native/third_party/JoltPhysics/Jolt/Math/DynMatrix.h +31 -0
  176. package/native/third_party/JoltPhysics/Jolt/Math/EigenValueSymmetric.h +177 -0
  177. package/native/third_party/JoltPhysics/Jolt/Math/FindRoot.h +42 -0
  178. package/native/third_party/JoltPhysics/Jolt/Math/Float2.h +36 -0
  179. package/native/third_party/JoltPhysics/Jolt/Math/Float3.h +50 -0
  180. package/native/third_party/JoltPhysics/Jolt/Math/Float4.h +44 -0
  181. package/native/third_party/JoltPhysics/Jolt/Math/GaussianElimination.h +102 -0
  182. package/native/third_party/JoltPhysics/Jolt/Math/HalfFloat.h +208 -0
  183. package/native/third_party/JoltPhysics/Jolt/Math/Mat44.h +243 -0
  184. package/native/third_party/JoltPhysics/Jolt/Math/Mat44.inl +952 -0
  185. package/native/third_party/JoltPhysics/Jolt/Math/Math.h +208 -0
  186. package/native/third_party/JoltPhysics/Jolt/Math/MathTypes.h +32 -0
  187. package/native/third_party/JoltPhysics/Jolt/Math/Matrix.h +259 -0
  188. package/native/third_party/JoltPhysics/Jolt/Math/Quat.h +268 -0
  189. package/native/third_party/JoltPhysics/Jolt/Math/Quat.inl +406 -0
  190. package/native/third_party/JoltPhysics/Jolt/Math/Real.h +44 -0
  191. package/native/third_party/JoltPhysics/Jolt/Math/Swizzle.h +19 -0
  192. package/native/third_party/JoltPhysics/Jolt/Math/Trigonometry.h +79 -0
  193. package/native/third_party/JoltPhysics/Jolt/Math/UVec4.h +232 -0
  194. package/native/third_party/JoltPhysics/Jolt/Math/UVec4.inl +636 -0
  195. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.cpp +71 -0
  196. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.h +308 -0
  197. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.inl +942 -0
  198. package/native/third_party/JoltPhysics/Jolt/Math/Vec4.h +320 -0
  199. package/native/third_party/JoltPhysics/Jolt/Math/Vec4.inl +1152 -0
  200. package/native/third_party/JoltPhysics/Jolt/Math/Vector.h +211 -0
  201. package/native/third_party/JoltPhysics/Jolt/ObjectStream/GetPrimitiveTypeOfType.h +54 -0
  202. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.cpp +38 -0
  203. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.h +337 -0
  204. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.cpp +252 -0
  205. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.h +57 -0
  206. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.cpp +165 -0
  207. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.h +57 -0
  208. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.cpp +635 -0
  209. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.h +148 -0
  210. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.cpp +166 -0
  211. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.h +101 -0
  212. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.cpp +418 -0
  213. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.h +55 -0
  214. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.cpp +255 -0
  215. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.h +62 -0
  216. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTypes.h +26 -0
  217. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttribute.h +111 -0
  218. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeEnum.h +67 -0
  219. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeTyped.h +60 -0
  220. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.cpp +15 -0
  221. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.h +170 -0
  222. package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.cpp +70 -0
  223. package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.h +45 -0
  224. package/native/third_party/JoltPhysics/Jolt/Physics/Body/AllowedDOFs.h +68 -0
  225. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.cpp +426 -0
  226. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.h +452 -0
  227. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.inl +197 -0
  228. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyAccess.h +68 -0
  229. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyActivationListener.h +28 -0
  230. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.cpp +234 -0
  231. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.h +124 -0
  232. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyFilter.h +130 -0
  233. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyID.h +101 -0
  234. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.cpp +1099 -0
  235. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.h +324 -0
  236. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLock.h +111 -0
  237. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockInterface.h +134 -0
  238. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockMulti.h +120 -0
  239. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.cpp +1220 -0
  240. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.h +403 -0
  241. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyPair.h +36 -0
  242. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyType.h +19 -0
  243. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.cpp +185 -0
  244. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.h +58 -0
  245. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.cpp +92 -0
  246. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.h +308 -0
  247. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.inl +178 -0
  248. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionQuality.h +31 -0
  249. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionType.h +17 -0
  250. package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.cpp +354 -0
  251. package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.h +159 -0
  252. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.cpp +59 -0
  253. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.h +157 -0
  254. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterID.h +98 -0
  255. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.cpp +1933 -0
  256. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.h +752 -0
  257. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/AABoxCast.h +20 -0
  258. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdgeMode.h +17 -0
  259. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdges.h +114 -0
  260. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BackFaceMode.h +16 -0
  261. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.cpp +16 -0
  262. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.h +109 -0
  263. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp +313 -0
  264. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.h +38 -0
  265. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h +148 -0
  266. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceMask.h +92 -0
  267. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceTable.h +64 -0
  268. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp +629 -0
  269. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.h +108 -0
  270. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h +56 -0
  271. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterMask.h +35 -0
  272. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterTable.h +66 -0
  273. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.cpp +1768 -0
  274. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.h +389 -0
  275. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.cpp +107 -0
  276. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.h +46 -0
  277. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastResult.h +37 -0
  278. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.cpp +223 -0
  279. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.h +49 -0
  280. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollectFacesMode.h +16 -0
  281. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.cpp +155 -0
  282. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.h +56 -0
  283. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollidePointResult.h +25 -0
  284. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShape.h +106 -0
  285. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShapeVsShapePerLeaf.h +94 -0
  286. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVertexIterator.h +110 -0
  287. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVerticesVsTriangles.h +102 -0
  288. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.cpp +121 -0
  289. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.h +50 -0
  290. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollector.h +109 -0
  291. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollectorImpl.h +219 -0
  292. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.cpp +107 -0
  293. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.h +97 -0
  294. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.cpp +35 -0
  295. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.h +97 -0
  296. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ContactListener.h +143 -0
  297. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.cpp +213 -0
  298. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.h +48 -0
  299. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.cpp +32 -0
  300. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.h +46 -0
  301. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.cpp +38 -0
  302. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.h +130 -0
  303. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/InternalEdgeRemovingCollector.h +279 -0
  304. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.cpp +271 -0
  305. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.h +44 -0
  306. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.cpp +448 -0
  307. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.h +77 -0
  308. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.cpp +62 -0
  309. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.h +110 -0
  310. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayer.h +111 -0
  311. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterMask.h +52 -0
  312. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterTable.h +78 -0
  313. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.cpp +35 -0
  314. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.h +57 -0
  315. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.cpp +38 -0
  316. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.h +37 -0
  317. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/RayCast.h +87 -0
  318. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.cpp +318 -0
  319. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.h +115 -0
  320. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.cpp +438 -0
  321. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.h +129 -0
  322. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.cpp +433 -0
  323. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.h +354 -0
  324. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShapeVisitors.h +461 -0
  325. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.cpp +1311 -0
  326. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.h +202 -0
  327. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.cpp +566 -0
  328. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.h +150 -0
  329. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.cpp +418 -0
  330. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.h +126 -0
  331. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.cpp +87 -0
  332. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.h +80 -0
  333. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.cpp +64 -0
  334. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.h +75 -0
  335. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/GetTrianglesContext.h +248 -0
  336. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.cpp +2754 -0
  337. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.h +380 -0
  338. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.cpp +1305 -0
  339. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.h +228 -0
  340. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.cpp +596 -0
  341. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.h +176 -0
  342. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp +217 -0
  343. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.h +140 -0
  344. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.cpp +541 -0
  345. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.h +147 -0
  346. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PolyhedronSubmergedVolumeCalculator.h +319 -0
  347. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.cpp +333 -0
  348. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.h +161 -0
  349. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaleHelpers.h +83 -0
  350. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.cpp +238 -0
  351. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.h +145 -0
  352. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.cpp +325 -0
  353. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.h +466 -0
  354. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.cpp +347 -0
  355. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.h +125 -0
  356. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.cpp +674 -0
  357. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.h +139 -0
  358. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeID.h +138 -0
  359. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeIDPair.h +65 -0
  360. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.cpp +453 -0
  361. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.gliffy +1 -0
  362. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.h +135 -0
  363. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.cpp +691 -0
  364. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.h +132 -0
  365. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.cpp +430 -0
  366. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.h +143 -0
  367. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeCast.h +173 -0
  368. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeFilter.h +73 -0
  369. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilter.h +40 -0
  370. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilterWrapper.h +58 -0
  371. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SortReverseAndStore.h +48 -0
  372. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.cpp +180 -0
  373. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.h +194 -0
  374. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/CalculateSolverSteps.h +70 -0
  375. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.cpp +246 -0
  376. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.h +133 -0
  377. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.cpp +73 -0
  378. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.h +243 -0
  379. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.cpp +289 -0
  380. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.h +100 -0
  381. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AngleConstraintPart.h +257 -0
  382. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AxisConstraintPart.h +682 -0
  383. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h +276 -0
  384. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/GearConstraintPart.h +195 -0
  385. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h +222 -0
  386. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/IndependentAxisConstraintPart.h +246 -0
  387. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/PointConstraintPart.h +239 -0
  388. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RackAndPinionConstraintPart.h +196 -0
  389. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h +283 -0
  390. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationQuatConstraintPart.h +246 -0
  391. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SpringPart.h +169 -0
  392. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h +597 -0
  393. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.cpp +1804 -0
  394. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.h +524 -0
  395. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.cpp +266 -0
  396. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.h +120 -0
  397. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.cpp +215 -0
  398. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.h +96 -0
  399. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.cpp +188 -0
  400. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.h +116 -0
  401. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.cpp +443 -0
  402. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.h +205 -0
  403. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.cpp +43 -0
  404. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.h +66 -0
  405. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.cpp +458 -0
  406. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.h +191 -0
  407. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.cpp +85 -0
  408. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.h +76 -0
  409. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.cpp +308 -0
  410. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.h +54 -0
  411. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.cpp +157 -0
  412. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.h +94 -0
  413. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.cpp +253 -0
  414. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.h +137 -0
  415. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.cpp +189 -0
  416. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.h +118 -0
  417. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.cpp +900 -0
  418. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.h +289 -0
  419. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.cpp +501 -0
  420. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.h +198 -0
  421. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.cpp +35 -0
  422. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.h +70 -0
  423. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.cpp +524 -0
  424. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.h +197 -0
  425. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.cpp +56 -0
  426. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.h +65 -0
  427. package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.cpp +17 -0
  428. package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.h +159 -0
  429. package/native/third_party/JoltPhysics/Jolt/Physics/EActivation.h +16 -0
  430. package/native/third_party/JoltPhysics/Jolt/Physics/EPhysicsUpdateError.h +37 -0
  431. package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.cpp +492 -0
  432. package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.h +144 -0
  433. package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.cpp +582 -0
  434. package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.h +187 -0
  435. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsLock.h +169 -0
  436. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.cpp +261 -0
  437. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.h +104 -0
  438. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSettings.h +125 -0
  439. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsStepListener.h +37 -0
  440. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.cpp +2915 -0
  441. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.h +391 -0
  442. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.cpp +25 -0
  443. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.h +176 -0
  444. package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.cpp +744 -0
  445. package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.h +245 -0
  446. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyContactListener.h +55 -0
  447. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp +128 -0
  448. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.h +75 -0
  449. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyManifold.h +74 -0
  450. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.cpp +1501 -0
  451. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.h +333 -0
  452. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.cpp +354 -0
  453. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.h +73 -0
  454. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.cpp +1487 -0
  455. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.h +390 -0
  456. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyUpdateContext.h +63 -0
  457. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyVertex.h +36 -0
  458. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorder.h +136 -0
  459. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.cpp +90 -0
  460. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.h +50 -0
  461. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.cpp +306 -0
  462. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.h +119 -0
  463. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.cpp +547 -0
  464. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.h +169 -0
  465. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.cpp +33 -0
  466. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.h +33 -0
  467. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.cpp +376 -0
  468. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.h +146 -0
  469. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.cpp +703 -0
  470. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.h +252 -0
  471. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.cpp +17 -0
  472. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.h +87 -0
  473. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.cpp +81 -0
  474. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.h +39 -0
  475. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.cpp +122 -0
  476. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.h +93 -0
  477. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.cpp +52 -0
  478. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.h +56 -0
  479. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.cpp +159 -0
  480. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.h +87 -0
  481. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.cpp +93 -0
  482. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.h +148 -0
  483. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.cpp +866 -0
  484. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.h +205 -0
  485. package/native/third_party/JoltPhysics/Jolt/RegisterTypes.cpp +204 -0
  486. package/native/third_party/JoltPhysics/Jolt/RegisterTypes.h +29 -0
  487. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.cpp +1107 -0
  488. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.h +383 -0
  489. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.cpp +168 -0
  490. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.h +48 -0
  491. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.cpp +158 -0
  492. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.h +130 -0
  493. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.cpp +80 -0
  494. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.h +88 -0
  495. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.cpp +165 -0
  496. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.h +91 -0
  497. package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.cpp +82 -0
  498. package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.h +72 -0
  499. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.cpp +237 -0
  500. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.h +145 -0
  501. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.cpp +87 -0
  502. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.h +82 -0
  503. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.cpp +73 -0
  504. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.h +84 -0
  505. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.cpp +139 -0
  506. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.h +52 -0
  507. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.cpp +43 -0
  508. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.h +28 -0
  509. package/native/third_party/JoltPhysics/LICENSE +7 -0
  510. package/native/third_party/JoltPhysics/README.md +173 -0
  511. package/native/third_party/bloom_jolt/CMakeLists.txt +78 -0
  512. package/native/third_party/bloom_jolt/include/bloom_jolt.h +519 -0
  513. package/native/third_party/bloom_jolt/src/bloom_jolt.cpp +1780 -0
  514. package/native/tvos/Cargo.lock +1692 -0
  515. package/native/tvos/Cargo.toml +22 -0
  516. package/native/tvos/src/lib.rs +3179 -0
  517. package/native/watchos/Cargo.lock +16 -0
  518. package/native/watchos/Cargo.toml +19 -0
  519. package/native/watchos/shaders/bloom_postfx.metal +99 -0
  520. package/native/watchos/src/BloomWatchApp.swift +1236 -0
  521. package/native/watchos/src/BloomWatchAudio.swift +179 -0
  522. package/native/watchos/src/audio.rs +55 -0
  523. package/native/watchos/src/draw_list.rs +223 -0
  524. package/native/watchos/src/ffi_stubs.rs +454 -0
  525. package/native/watchos/src/lib.rs +1013 -0
  526. package/native/watchos/src/models.rs +746 -0
  527. package/native/watchos/src/postfx.rs +91 -0
  528. package/native/watchos/src/scene.rs +534 -0
  529. package/native/watchos/src/textures.rs +184 -0
  530. package/native/web/Cargo.lock +1656 -0
  531. package/native/web/Cargo.toml +38 -0
  532. package/native/web/bloom_glue.js +218 -0
  533. package/native/web/build.sh +101 -0
  534. package/native/web/index.html +390 -0
  535. package/native/web/jolt_bridge.js +1311 -0
  536. package/native/web/src/lib.rs +2739 -0
  537. package/native/windows/Cargo.lock +1813 -0
  538. package/native/windows/Cargo.toml +31 -0
  539. package/native/windows/src/lib.rs +1933 -0
  540. package/package.json +558 -0
  541. package/src/audio/index.ts +151 -0
  542. package/src/core/colors.ts +56 -0
  543. package/src/core/index.ts +903 -0
  544. package/src/core/keys.ts +63 -0
  545. package/src/core/types.ts +102 -0
  546. package/src/index.ts +158 -0
  547. package/src/math/index.ts +502 -0
  548. package/src/mobile/index.ts +294 -0
  549. package/src/models/index.ts +859 -0
  550. package/src/physics/index.ts +1072 -0
  551. package/src/scene/index.ts +570 -0
  552. package/src/shapes/index.ts +120 -0
  553. package/src/text/index.ts +48 -0
  554. package/src/textures/index.ts +173 -0
  555. package/src/world/index.ts +22 -0
  556. package/src/world/loader.ts +385 -0
  557. package/src/world/prefab.ts +205 -0
  558. package/src/world/saver.ts +61 -0
  559. package/src/world/terrain.ts +254 -0
  560. package/src/world/types.ts +136 -0
  561. package/src/world/validate.ts +202 -0
  562. package/src/world/version.ts +47 -0
@@ -0,0 +1,778 @@
1
+ //! Texture formats + render-target creation helpers.
2
+ //!
3
+ //! All `*_FORMAT` constants, the mip-count constants, and every
4
+ //! `create_*` helper that hands the Renderer a `(Texture, View)`
5
+ //! pair live here. Pure data/helpers — no Renderer state. Each
6
+ //! helper is `pub(super)` so only the surrounding `renderer::`
7
+ //! module can call it.
8
+
9
+ use wgpu;
10
+
11
+ // ============================================================
12
+ // Depth texture helper
13
+ // ============================================================
14
+
15
+ pub(super) const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
16
+ /// Linear HDR format for the offscreen render target. The scene + sky
17
+ /// + immediate-mode 3D passes write here in linear space; a final
18
+ /// composite pass tonemaps to the sRGB surface format.
19
+ pub(super) const HDR_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba16Float;
20
+
21
+ /// Number of bloom mip levels. 5 mips gives a long-tail glow that
22
+ /// covers ~32× the source pixel size. More mips = more haloing,
23
+ /// fewer = less coverage. Each mip is half the previous size.
24
+ pub(super) const BLOOM_MIP_COUNT: u32 = 5;
25
+
26
+ /// SSAO RT layout: R = GTAO occlusion (bilaterally blurred), G =
27
+ /// contact-shadow factor (passed through blur unchanged so the fine-
28
+ /// detail ray-march result survives). Rgba8Unorm because WebGPU
29
+ /// requires `rgba8unorm` for storage-texture writes by default —
30
+ /// the compute GTAO pass (SSAO_SHADER_WGSL) uses `textureStore`.
31
+ /// Extra two channels left 0; downstream samplers only read .r/.g,
32
+ /// so the only cost is 4 B/px vs 2 B/px at half-res
33
+ /// (~180 kB extra on a 1600×900 surface).
34
+ pub(super) const SSAO_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba8Unorm;
35
+
36
+ /// Material G-buffer format. Rg8Unorm: R = metallic, G = roughness.
37
+ /// Written as a second color attachment in the HDR pass; SSR (and
38
+ /// any future deferred passes) reads it for per-pixel material info.
39
+ pub(super) const MATERIAL_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rg8Unorm;
40
+
41
+ /// Linear-depth Hi-Z pyramid format. R32Float (not R16Float) because
42
+ /// WebGPU only mandates r32-family formats for single-channel storage
43
+ /// textures. The pyramid stores *positive* view-space distance
44
+ /// (|view_z|) so compute GTAO skips per-sample linearization. Sky
45
+ /// pixels get `HIZ_SKY_Z` (10 000) and the downsample uses `min` so
46
+ /// any near-field geometry in a tile dominates surrounding sky.
47
+ pub(super) const HIZ_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::R32Float;
48
+
49
+ /// Number of mip levels in the linear-depth Hi-Z pyramid. 5 covers
50
+ /// a 16-pixel-radius footprint at the coarsest mip — enough for
51
+ /// the 0.25 UV clamp SSAO uses (~100 px at half-res 400-wide).
52
+ /// One linearize pass plus `HIZ_MIP_COUNT - 1` downsample passes.
53
+ pub(super) const HIZ_MIP_COUNT: u32 = 5;
54
+
55
+ /// Velocity buffer format. Rg16Float: two-channel 16-bit float for
56
+ /// sub-pixel precision screen-space velocity. Written as a third
57
+ /// color attachment in the HDR pass; motion blur and TAA read it.
58
+ pub(super) const VELOCITY_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rg16Float;
59
+
60
+ pub(super) fn create_depth_texture(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
61
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
62
+ label: Some("depth_texture"),
63
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
64
+ mip_level_count: 1,
65
+ sample_count: 1,
66
+ dimension: wgpu::TextureDimension::D2,
67
+ format: DEPTH_FORMAT,
68
+ // SSAO samples this texture in a separate pass after the
69
+ // depth-write HDR pass — needs TEXTURE_BINDING in addition
70
+ // to RENDER_ATTACHMENT.
71
+ //
72
+ // COPY_SRC: Phase 4c snapshots this to a transient depth
73
+ // texture so translucent materials can sample it without
74
+ // aliasing the pass's own depth-stencil attachment.
75
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
76
+ | wgpu::TextureUsages::TEXTURE_BINDING
77
+ | wgpu::TextureUsages::COPY_SRC,
78
+ view_formats: &[],
79
+ });
80
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
81
+ (texture, view)
82
+ }
83
+
84
+ pub(super) fn create_hdr_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
85
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
86
+ label: Some("hdr_rt"),
87
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
88
+ mip_level_count: 1,
89
+ sample_count: 1,
90
+ dimension: wgpu::TextureDimension::D2,
91
+ format: HDR_FORMAT,
92
+ // Phase 4b adds COPY_SRC so the translucent-pass scheduler
93
+ // can snapshot hdr_rt → a SceneColor transient via
94
+ // copy_texture_to_texture before refractive draws run.
95
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
96
+ | wgpu::TextureUsages::TEXTURE_BINDING
97
+ | wgpu::TextureUsages::COPY_SRC,
98
+ view_formats: &[],
99
+ });
100
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
101
+ (texture, view)
102
+ }
103
+
104
+ /// Create the two ping-pong 1×1 exposure textures. Single fragment
105
+ /// writes to one, composite samples the other, swap each frame.
106
+ pub(super) fn create_exposure_textures(device: &wgpu::Device) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
107
+ let make = |label: &str| -> (wgpu::Texture, wgpu::TextureView) {
108
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
109
+ label: Some(label),
110
+ size: wgpu::Extent3d { width: 1, height: 1, depth_or_array_layers: 1 },
111
+ mip_level_count: 1,
112
+ sample_count: 1,
113
+ dimension: wgpu::TextureDimension::D2,
114
+ format: wgpu::TextureFormat::R16Float,
115
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
116
+ | wgpu::TextureUsages::TEXTURE_BINDING,
117
+ view_formats: &[],
118
+ });
119
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
120
+ (texture, view)
121
+ };
122
+ let (a, av) = make("exposure_a");
123
+ let (b, bv) = make("exposure_b");
124
+ ([a, b], [av, bv])
125
+ }
126
+
127
+ /// Create the material G-buffer (Rg8Unorm, surface size).
128
+ pub(super) fn create_material_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
129
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
130
+ label: Some("material_rt"),
131
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
132
+ mip_level_count: 1,
133
+ sample_count: 1,
134
+ dimension: wgpu::TextureDimension::D2,
135
+ format: MATERIAL_FORMAT,
136
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
137
+ | wgpu::TextureUsages::TEXTURE_BINDING,
138
+ view_formats: &[],
139
+ });
140
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
141
+ (texture, view)
142
+ }
143
+
144
+ /// Create the albedo G-buffer (Rgba8Unorm, surface size). Written by
145
+ /// the scene pass so post-passes can modulate bounce light by the
146
+ /// receiving surface's diffuse albedo (SSGI etc.).
147
+ pub(super) fn create_albedo_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
148
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
149
+ label: Some("albedo_rt"),
150
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
151
+ mip_level_count: 1,
152
+ sample_count: 1,
153
+ dimension: wgpu::TextureDimension::D2,
154
+ format: wgpu::TextureFormat::Rgba8Unorm,
155
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
156
+ | wgpu::TextureUsages::TEXTURE_BINDING,
157
+ view_formats: &[],
158
+ });
159
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
160
+ (texture, view)
161
+ }
162
+
163
+ /// Create the composed HDR render target. Scene HDR + SSR + SSGI *
164
+ /// albedo + bloom + fog + sun shafts all merged into one texture by
165
+ /// the `scene_compose` pass. Both the TAA-on path (TAA consumes this
166
+ /// as its "current frame" input) and the TAA-off path (composite
167
+ /// reads it directly) read from the same buffer, so fog / shafts /
168
+ /// post-effects stay visible regardless of TAA state.
169
+ pub(super) fn create_composed_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
170
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
171
+ label: Some("composed_rt"),
172
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
173
+ mip_level_count: 1,
174
+ sample_count: 1,
175
+ dimension: wgpu::TextureDimension::D2,
176
+ format: HDR_FORMAT,
177
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
178
+ | wgpu::TextureUsages::TEXTURE_BINDING,
179
+ view_formats: &[],
180
+ });
181
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
182
+ (texture, view)
183
+ }
184
+
185
+ /// Create the velocity render target (Rg16Float, surface size).
186
+ /// Per-pixel screen-space velocity for motion blur and TAA.
187
+ pub(super) fn create_velocity_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
188
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
189
+ label: Some("velocity_rt"),
190
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
191
+ mip_level_count: 1,
192
+ sample_count: 1,
193
+ dimension: wgpu::TextureDimension::D2,
194
+ format: VELOCITY_FORMAT,
195
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
196
+ | wgpu::TextureUsages::TEXTURE_BINDING,
197
+ view_formats: &[],
198
+ });
199
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
200
+ (texture, view)
201
+ }
202
+
203
+ /// Create the SSR render target (quarter-res HDR). Stochastic SSR
204
+ /// traces one GGX-sampled ray per pixel per frame and relies on the
205
+ /// temporal denoiser to converge the cone over 4–8 frames; pushing
206
+ /// from half to quarter-res cuts the march + temporal-filter pixel
207
+ /// counts 4× and the bilinear upsample in compose is imperceptible
208
+ /// because the GGX cone + temporal blend is already wider than one
209
+ /// quarter-res texel.
210
+ pub(super) fn create_ssr_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
211
+ let w = (width / 4).max(1);
212
+ let h = (height / 4).max(1);
213
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
214
+ label: Some("ssr_rt"),
215
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
216
+ mip_level_count: 1,
217
+ sample_count: 1,
218
+ dimension: wgpu::TextureDimension::D2,
219
+ format: HDR_FORMAT,
220
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
221
+ | wgpu::TextureUsages::TEXTURE_BINDING,
222
+ view_formats: &[],
223
+ });
224
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
225
+ (texture, view)
226
+ }
227
+
228
+ /// Create the SSR temporal history textures (ping-pong pair, same
229
+ /// format/size as ssr_rt — half-res HDR). The temporal denoiser
230
+ /// blends the noisy current-frame stochastic SSR into the
231
+ /// reprojected previous-frame history so 4–8 frames of accumulation
232
+ /// converge to a smooth reflection.
233
+ pub(super) fn create_ssr_history_textures(
234
+ device: &wgpu::Device, width: u32, height: u32,
235
+ ) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
236
+ let w = (width / 4).max(1);
237
+ let h = (height / 4).max(1);
238
+ let make = || {
239
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
240
+ label: Some("ssr_history"),
241
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
242
+ mip_level_count: 1,
243
+ sample_count: 1,
244
+ dimension: wgpu::TextureDimension::D2,
245
+ format: HDR_FORMAT,
246
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
247
+ | wgpu::TextureUsages::TEXTURE_BINDING,
248
+ view_formats: &[],
249
+ });
250
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
251
+ (texture, view)
252
+ };
253
+ let (t0, v0) = make();
254
+ let (t1, v1) = make();
255
+ ([t0, t1], [v0, v1])
256
+ }
257
+
258
+ /// Create the SSGI render target (half-res HDR — indirect diffuse bounce light).
259
+ /// Same half-res HDR strategy as SSR: keeps the per-pixel ray march cheap
260
+ /// while still providing enough color resolution for colored bounce light.
261
+ pub(super) fn create_ssgi_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
262
+ let w = (width / 2).max(1);
263
+ let h = (height / 2).max(1);
264
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
265
+ label: Some("ssgi_rt"),
266
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
267
+ mip_level_count: 1,
268
+ sample_count: 1,
269
+ dimension: wgpu::TextureDimension::D2,
270
+ format: HDR_FORMAT,
271
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
272
+ | wgpu::TextureUsages::TEXTURE_BINDING,
273
+ view_formats: &[],
274
+ });
275
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
276
+ (texture, view)
277
+ }
278
+
279
+ /// Probe grid = ceil(half_w / 16) × ceil(half_h / 16). 50×29 on a
280
+ /// 800×450 half-res Sponza RT = 1450 probes, each holding an 8×8
281
+ /// octahedral atlas = 64 radiance samples (ticket 007a).
282
+ pub(super) const PROBE_TILE_SIZE: u32 = 16;
283
+ pub(super) const PROBE_OCT_SIZE: u32 = 8;
284
+ pub(super) const PROBE_OCT_TEXELS: u32 = PROBE_OCT_SIZE * PROBE_OCT_SIZE;
285
+
286
+ pub(super) fn probe_grid_dims(width: u32, height: u32) -> (u32, u32) {
287
+ let half_w = (width / 2).max(1);
288
+ let half_h = (height / 2).max(1);
289
+ let gw = (half_w + PROBE_TILE_SIZE - 1) / PROBE_TILE_SIZE;
290
+ let gh = (half_h + PROBE_TILE_SIZE - 1) / PROBE_TILE_SIZE;
291
+ (gw.max(1), gh.max(1))
292
+ }
293
+
294
+ /// 3D Rgba16Float texture with dimensions `(probe_grid_w, probe_grid_h,
295
+ /// 64)` — one voxel per probe × octahedral texel. Shared shape for the
296
+ /// trace output and the ping-pong history textures.
297
+ fn create_probe_3d_tex(
298
+ device: &wgpu::Device, label: &'static str, gw: u32, gh: u32,
299
+ ) -> (wgpu::Texture, wgpu::TextureView) {
300
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
301
+ label: Some(label),
302
+ size: wgpu::Extent3d { width: gw, height: gh, depth_or_array_layers: PROBE_OCT_TEXELS },
303
+ mip_level_count: 1,
304
+ sample_count: 1,
305
+ dimension: wgpu::TextureDimension::D3,
306
+ format: HDR_FORMAT,
307
+ usage: wgpu::TextureUsages::STORAGE_BINDING
308
+ | wgpu::TextureUsages::TEXTURE_BINDING,
309
+ view_formats: &[],
310
+ });
311
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
312
+ (texture, view)
313
+ }
314
+
315
+ /// Per-frame trace output. The trace pass writes into this, the temporal
316
+ /// pass reads it as the "current" input. Not ping-pong because its
317
+ /// contents are fully regenerated every frame.
318
+ pub(super) fn create_probe_trace_tex(
319
+ device: &wgpu::Device, width: u32, height: u32,
320
+ ) -> (wgpu::Texture, wgpu::TextureView) {
321
+ let (gw, gh) = probe_grid_dims(width, height);
322
+ create_probe_3d_tex(device, "probe_trace", gw, gh)
323
+ }
324
+
325
+ /// Ticket 014 V2/V5 — scene-wide SDF clipmap. 64³ R32Float covering
326
+ /// `SCENE_SDF_CLIPMAP_EXTENT` metres around the camera (V5). The
327
+ /// initial origin is the first-frame camera position, voxel-snapped.
328
+ /// Re-bakes when the camera has moved past
329
+ /// `SCENE_SDF_CLIPMAP_REBAKE_THRESHOLD` of the extent.
330
+ pub(super) const SCENE_SDF_CLIPMAP_RES: u32 = 64;
331
+ pub(super) const SCENE_SDF_CLIPMAP_EXTENT: f32 = 40.0;
332
+ /// V5 — voxel-size invalidation threshold, expressed as a fraction
333
+ /// of the full extent. 0.25 = rebake when the camera has moved more
334
+ /// than 10 m from the clipmap centre on a 40 m clipmap.
335
+ pub(super) const SCENE_SDF_CLIPMAP_REBAKE_THRESHOLD: f32 = 0.25;
336
+
337
+ pub(super) fn create_scene_sdf_clipmap(
338
+ device: &wgpu::Device,
339
+ ) -> (wgpu::Texture, wgpu::TextureView) {
340
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
341
+ label: Some("scene_sdf_clipmap"),
342
+ size: wgpu::Extent3d {
343
+ width: SCENE_SDF_CLIPMAP_RES,
344
+ height: SCENE_SDF_CLIPMAP_RES,
345
+ depth_or_array_layers: SCENE_SDF_CLIPMAP_RES,
346
+ },
347
+ mip_level_count: 1,
348
+ sample_count: 1,
349
+ dimension: wgpu::TextureDimension::D3,
350
+ format: wgpu::TextureFormat::R32Float,
351
+ usage: wgpu::TextureUsages::STORAGE_BINDING
352
+ | wgpu::TextureUsages::TEXTURE_BINDING,
353
+ view_formats: &[],
354
+ });
355
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
356
+ (texture, view)
357
+ }
358
+
359
+ /// Ticket 014 V6/V10/V13 — World-Space Radiance Cache. 16³ grid of
360
+ /// octahedral probes per cascade, each an 8×8 slab of pre-integrated
361
+ /// distant lighting (padded to 10×10 in V10 for hardware bilinear).
362
+ /// V13 stacks `WSRC_CASCADE_COUNT` cascades in Z at a range of
363
+ /// extents so long-range bounces don't share one probe's coarse
364
+ /// cell with close bounces.
365
+ ///
366
+ /// Cascade extents: near 30 m / mid 120 m / far 500 m. 16³ probes
367
+ /// per cascade → cell sizes of 1.875 / 7.5 / 31.25 m. The near
368
+ /// cascade re-bakes often as the camera moves (1.875 × 0.25 ≈
369
+ /// 0.47 m threshold → 7.5 m rebake extent; inverted: cascades with
370
+ /// larger extents rebake less often).
371
+ ///
372
+ /// Atlas layout (rgba16float D3 at `(160, 160, 48)`):
373
+ /// probe `(gx, gy, gz)` in cascade `c ∈ [0, 3)`, padded octel
374
+ /// `(ox_pad, oy_pad) ∈ [0, 10)²` → texel
375
+ /// `(gx * 10 + ox_pad, gy * 10 + oy_pad, c * 16 + gz)`
376
+ ///
377
+ /// Borders are octahedrally-wrapped at bake time (V11) so the
378
+ /// sampler's bilinear tap stays smooth across the silhouette.
379
+ pub(super) const WSRC_GRID_RES: u32 = 16;
380
+ pub(super) const WSRC_OCT_PAD: u32 = 1;
381
+ pub(super) const WSRC_OCT_PADDED: u32 = PROBE_OCT_SIZE + 2 * WSRC_OCT_PAD;
382
+ pub(super) const WSRC_CASCADE_COUNT: u32 = 3;
383
+ pub(super) const WSRC_CASCADE_EXTENTS: [f32; 3] = [30.0, 120.0, 500.0];
384
+ pub(super) const WSRC_REBAKE_THRESHOLD: f32 = 0.25;
385
+
386
+ pub(super) fn create_wsrc_atlas(
387
+ device: &wgpu::Device,
388
+ ) -> (wgpu::Texture, wgpu::TextureView) {
389
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
390
+ label: Some("wsrc_atlas"),
391
+ size: wgpu::Extent3d {
392
+ width: WSRC_GRID_RES * WSRC_OCT_PADDED,
393
+ height: WSRC_GRID_RES * WSRC_OCT_PADDED,
394
+ depth_or_array_layers: WSRC_GRID_RES * WSRC_CASCADE_COUNT,
395
+ },
396
+ mip_level_count: 1,
397
+ sample_count: 1,
398
+ dimension: wgpu::TextureDimension::D3,
399
+ format: HDR_FORMAT,
400
+ usage: wgpu::TextureUsages::STORAGE_BINDING
401
+ | wgpu::TextureUsages::TEXTURE_BINDING,
402
+ view_formats: &[],
403
+ });
404
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
405
+ (texture, view)
406
+ }
407
+
408
+ /// Ticket 014 — per-mesh unsigned distance field. V1 is a fixed 32³
409
+ /// R32Float 3D texture per mesh (128 KB each). R32 instead of R16 so
410
+ /// `WriteOnly` storage binding is accepted on the core wgpu feature
411
+ /// set (R16Float storage-write would need an optional feature). Used
412
+ /// later by the SW probe trace for sphere-marching when HW ray query
413
+ /// isn't available. UDF (not SDF) — the march advances by the scalar
414
+ /// distance regardless of sign, which side-steps the inside/outside
415
+ /// problem on open-surface Sponza meshes (walls, banners, capitals).
416
+ pub(super) const MESH_SDF_RES: u32 = 32;
417
+
418
+ pub(super) fn create_mesh_sdf_texture(
419
+ device: &wgpu::Device,
420
+ label: &'static str,
421
+ ) -> (wgpu::Texture, wgpu::TextureView) {
422
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
423
+ label: Some(label),
424
+ size: wgpu::Extent3d {
425
+ width: MESH_SDF_RES,
426
+ height: MESH_SDF_RES,
427
+ depth_or_array_layers: MESH_SDF_RES,
428
+ },
429
+ mip_level_count: 1,
430
+ sample_count: 1,
431
+ dimension: wgpu::TextureDimension::D3,
432
+ format: wgpu::TextureFormat::R32Float,
433
+ // COPY_DST is needed by ticket 022's disk cache so a cached
434
+ // SDF can be uploaded via queue.write_texture instead of
435
+ // re-baked. COPY_SRC is needed by the same ticket's readback
436
+ // path on cache miss. Both have zero runtime cost when the
437
+ // cache isn't used (just usage-flag bits at allocation).
438
+ usage: wgpu::TextureUsages::STORAGE_BINDING
439
+ | wgpu::TextureUsages::TEXTURE_BINDING
440
+ | wgpu::TextureUsages::COPY_SRC
441
+ | wgpu::TextureUsages::COPY_DST,
442
+ view_formats: &[],
443
+ });
444
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
445
+ (texture, view)
446
+ }
447
+
448
+ /// Ticket 013 — Mesh Cards. Shared 2D atlases sampled by the HW probe
449
+ /// trace at hit. V2 stores 6 signed-axis slots per mesh (±X ±Y ±Z)
450
+ /// at 64×64 each; 4096² atlas ⇒ 64×64 = 4096 slots ⇒ 682 meshes at
451
+ /// full 6-axis capture (Sponza's ~405 fits comfortably).
452
+ ///
453
+ /// Two atlases are kept in lockstep:
454
+ /// - `mesh_card_albedo_atlas` — baked once per mesh at load.
455
+ /// - `mesh_card_radiance_atlas` — written every frame by the card-
456
+ /// lighting compute pass (albedo × sun × NdotL + sky × NdotUp).
457
+ /// The HW trace samples radiance directly at hit, amortising shading
458
+ /// cost across all rays that land in the same card texel.
459
+ pub(super) const CARD_ATLAS_SIZE: u32 = 4096;
460
+ pub(super) const CARD_SLOT_SIZE: u32 = 64;
461
+ pub(super) const CARD_SLOTS_PER_ROW: u32 = CARD_ATLAS_SIZE / CARD_SLOT_SIZE;
462
+ pub(super) const CARD_MAX_SLOTS: u32 = CARD_SLOTS_PER_ROW * CARD_SLOTS_PER_ROW;
463
+ /// V2: 6 directed axes per mesh (+X, -X, +Y, -Y, +Z, -Z).
464
+ pub(super) const CARD_AXES_PER_MESH: u32 = 6;
465
+
466
+ /// Create the mesh-card albedo atlas. `RENDER_ATTACHMENT` for capture,
467
+ /// `TEXTURE_BINDING` for both the card-lighting compute input and a
468
+ /// direct HW-trace fallback.
469
+ pub(super) fn create_mesh_card_atlas(
470
+ device: &wgpu::Device,
471
+ ) -> (wgpu::Texture, wgpu::TextureView) {
472
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
473
+ label: Some("mesh_card_albedo_atlas"),
474
+ size: wgpu::Extent3d {
475
+ width: CARD_ATLAS_SIZE,
476
+ height: CARD_ATLAS_SIZE,
477
+ depth_or_array_layers: 1,
478
+ },
479
+ mip_level_count: 1,
480
+ sample_count: 1,
481
+ dimension: wgpu::TextureDimension::D2,
482
+ format: wgpu::TextureFormat::Rgba8UnormSrgb,
483
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
484
+ | wgpu::TextureUsages::TEXTURE_BINDING,
485
+ view_formats: &[],
486
+ });
487
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
488
+ (texture, view)
489
+ }
490
+
491
+ /// Ticket 013 V3 — emissive atlas. Same shape as the albedo atlas but
492
+ /// carries material emissive per card texel. Read by the card-lighting
493
+ /// pass to add as-is to the radiance output.
494
+ pub(super) fn create_mesh_card_emissive_atlas(
495
+ device: &wgpu::Device,
496
+ ) -> (wgpu::Texture, wgpu::TextureView) {
497
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
498
+ label: Some("mesh_card_emissive_atlas"),
499
+ size: wgpu::Extent3d {
500
+ width: CARD_ATLAS_SIZE,
501
+ height: CARD_ATLAS_SIZE,
502
+ depth_or_array_layers: 1,
503
+ },
504
+ mip_level_count: 1,
505
+ sample_count: 1,
506
+ dimension: wgpu::TextureDimension::D2,
507
+ format: wgpu::TextureFormat::Rgba8UnormSrgb,
508
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
509
+ | wgpu::TextureUsages::TEXTURE_BINDING,
510
+ view_formats: &[],
511
+ });
512
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
513
+ (texture, view)
514
+ }
515
+
516
+ /// Create the mesh-card radiance atlas. Written every frame by the
517
+ /// card-lighting compute pass; sampled at hit by the HW probe trace.
518
+ /// Rgba16Float so we can carry multiplicatively-composed sun + sky
519
+ /// without banding. `STORAGE_BINDING` for the compute write,
520
+ /// `TEXTURE_BINDING` for the trace sample.
521
+ pub(super) fn create_mesh_card_radiance_atlas(
522
+ device: &wgpu::Device,
523
+ ) -> (wgpu::Texture, wgpu::TextureView) {
524
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
525
+ label: Some("mesh_card_radiance_atlas"),
526
+ size: wgpu::Extent3d {
527
+ width: CARD_ATLAS_SIZE,
528
+ height: CARD_ATLAS_SIZE,
529
+ depth_or_array_layers: 1,
530
+ },
531
+ mip_level_count: 1,
532
+ sample_count: 1,
533
+ dimension: wgpu::TextureDimension::D2,
534
+ format: HDR_FORMAT,
535
+ usage: wgpu::TextureUsages::STORAGE_BINDING
536
+ | wgpu::TextureUsages::TEXTURE_BINDING,
537
+ view_formats: &[],
538
+ });
539
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
540
+ (texture, view)
541
+ }
542
+
543
+ /// Ping-pong probe-radiance history. Each frame the temporal pass
544
+ /// reads `[prev_idx]` (last frame's blended history), blends it with
545
+ /// the fresh trace, and writes to `[write_idx]`. The resolve pass then
546
+ /// samples `[write_idx]`. Separate textures — the temporal pass cannot
547
+ /// bind the same view as both sampled input and storage-write output.
548
+ pub(super) fn create_probe_history_textures(
549
+ device: &wgpu::Device, width: u32, height: u32,
550
+ ) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
551
+ let (gw, gh) = probe_grid_dims(width, height);
552
+ let (t0, v0) = create_probe_3d_tex(device, "probe_history_0", gw, gh);
553
+ let (t1, v1) = create_probe_3d_tex(device, "probe_history_1", gw, gh);
554
+ ([t0, t1], [v0, v1])
555
+ }
556
+
557
+ /// Create the DoF render target (full-res HDR, same format as TAA output).
558
+ /// DoF reads the TAA output + depth, writes the blurred result here.
559
+ /// Composite then reads this instead of the TAA output.
560
+ pub(super) fn create_dof_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
561
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
562
+ label: Some("dof_rt"),
563
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
564
+ mip_level_count: 1,
565
+ sample_count: 1,
566
+ dimension: wgpu::TextureDimension::D2,
567
+ format: HDR_FORMAT,
568
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
569
+ | wgpu::TextureUsages::TEXTURE_BINDING,
570
+ view_formats: &[],
571
+ });
572
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
573
+ (texture, view)
574
+ }
575
+
576
+ /// Create the SSS render target (full-res HDR, same format as DoF/motion-blur).
577
+ pub(super) fn create_sss_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
578
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
579
+ label: Some("sss_rt"),
580
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
581
+ mip_level_count: 1,
582
+ sample_count: 1,
583
+ dimension: wgpu::TextureDimension::D2,
584
+ format: HDR_FORMAT,
585
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
586
+ | wgpu::TextureUsages::TEXTURE_BINDING,
587
+ view_formats: &[],
588
+ });
589
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
590
+ (texture, view)
591
+ }
592
+
593
+ /// Halton low-discrepancy sequence (base `b`, index `i`, 1-based).
594
+ /// Returns a value in [0, 1). Used to generate sub-pixel jitter
595
+ /// offsets that are well-distributed across the pixel — the TAA
596
+ /// accumulation effectively integrates over those sample points
597
+ /// to produce a stably anti-aliased image.
598
+ pub(super) fn halton(mut i: u32, b: u32) -> f32 {
599
+ let mut f = 1.0_f32;
600
+ let mut r = 0.0_f32;
601
+ while i > 0 {
602
+ f /= b as f32;
603
+ r += f * (i % b) as f32;
604
+ i /= b;
605
+ }
606
+ r
607
+ }
608
+
609
+ /// Create the two TAA history textures (HDR format, surface size).
610
+ pub(super) fn create_taa_textures(device: &wgpu::Device, width: u32, height: u32) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
611
+ let make = |label: &str| -> (wgpu::Texture, wgpu::TextureView) {
612
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
613
+ label: Some(label),
614
+ size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
615
+ mip_level_count: 1,
616
+ sample_count: 1,
617
+ dimension: wgpu::TextureDimension::D2,
618
+ format: HDR_FORMAT,
619
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
620
+ | wgpu::TextureUsages::TEXTURE_BINDING,
621
+ view_formats: &[],
622
+ });
623
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
624
+ (texture, view)
625
+ };
626
+ let (a, av) = make("taa_a");
627
+ let (b, bv) = make("taa_b");
628
+ ([a, b], [av, bv])
629
+ }
630
+
631
+ /// Create the SSAO render target. Written by the compute GTAO pass
632
+ /// (via `STORAGE_BINDING`) and sampled by the bilateral blur +
633
+ /// downstream passes.
634
+ pub(super) fn create_ssao_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
635
+ let w = (width / 2).max(1);
636
+ let h = (height / 2).max(1);
637
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
638
+ label: Some("ssao_rt"),
639
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
640
+ mip_level_count: 1,
641
+ sample_count: 1,
642
+ dimension: wgpu::TextureDimension::D2,
643
+ format: SSAO_FORMAT,
644
+ usage: wgpu::TextureUsages::STORAGE_BINDING
645
+ | wgpu::TextureUsages::TEXTURE_BINDING,
646
+ view_formats: &[],
647
+ });
648
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
649
+ (texture, view)
650
+ }
651
+
652
+ /// Ping-pong half-res SSAO history textures (temporal accumulation).
653
+ /// Same size/format as `ssao_rt`. The compute pass reads the previous
654
+ /// frame's history via `TEXTURE_BINDING` and writes the blended
655
+ /// current-frame result back via `STORAGE_BINDING`. Downstream the
656
+ /// bilateral blur samples the current-frame ssao_rt as before —
657
+ /// history is only used as an input to the GTAO compute.
658
+ pub(super) fn create_ssao_history_textures(
659
+ device: &wgpu::Device,
660
+ width: u32,
661
+ height: u32,
662
+ ) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
663
+ let w = (width / 2).max(1);
664
+ let h = (height / 2).max(1);
665
+ let make = |label: &str| -> (wgpu::Texture, wgpu::TextureView) {
666
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
667
+ label: Some(label),
668
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
669
+ mip_level_count: 1,
670
+ sample_count: 1,
671
+ dimension: wgpu::TextureDimension::D2,
672
+ format: SSAO_FORMAT,
673
+ usage: wgpu::TextureUsages::STORAGE_BINDING
674
+ | wgpu::TextureUsages::TEXTURE_BINDING,
675
+ view_formats: &[],
676
+ });
677
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
678
+ (texture, view)
679
+ };
680
+ let (a, av) = make("ssao_history_a");
681
+ let (b, bv) = make("ssao_history_b");
682
+ ([a, b], [av, bv])
683
+ }
684
+
685
+ /// Create the SSAO bilateral-blur render target (same format/size as ssao_rt).
686
+ pub(super) fn create_ssao_blur_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
687
+ let w = (width / 2).max(1);
688
+ let h = (height / 2).max(1);
689
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
690
+ label: Some("ssao_blur_rt"),
691
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
692
+ mip_level_count: 1,
693
+ sample_count: 1,
694
+ dimension: wgpu::TextureDimension::D2,
695
+ format: SSAO_FORMAT,
696
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
697
+ | wgpu::TextureUsages::TEXTURE_BINDING,
698
+ view_formats: &[],
699
+ });
700
+ let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
701
+ (texture, view)
702
+ }
703
+
704
+ /// Build the linear-depth Hi-Z pyramid as `HIZ_MIP_COUNT` separate
705
+ /// single-mip textures. One multi-mip texture is cheaper on paper
706
+ /// but Metal's per-subresource state tracking trips when wgpu
707
+ /// writes one mip and samples another in the same encoder — the
708
+ /// bloom chain has the same issue and uses this same layout.
709
+ pub(super) fn create_linear_depth_hiz_chain(
710
+ device: &wgpu::Device,
711
+ width: u32,
712
+ height: u32,
713
+ ) -> (Vec<wgpu::Texture>, Vec<wgpu::TextureView>) {
714
+ let mut textures = Vec::with_capacity(HIZ_MIP_COUNT as usize);
715
+ let mut views = Vec::with_capacity(HIZ_MIP_COUNT as usize);
716
+ for i in 0..HIZ_MIP_COUNT {
717
+ let w = ((width / 2) >> i).max(1);
718
+ let h = ((height / 2) >> i).max(1);
719
+ let tex = device.create_texture(&wgpu::TextureDescriptor {
720
+ label: Some("linear_depth_hiz_mip"),
721
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
722
+ mip_level_count: 1,
723
+ sample_count: 1,
724
+ dimension: wgpu::TextureDimension::D2,
725
+ format: HIZ_FORMAT,
726
+ usage: wgpu::TextureUsages::STORAGE_BINDING
727
+ | wgpu::TextureUsages::TEXTURE_BINDING,
728
+ view_formats: &[],
729
+ });
730
+ let view = tex.create_view(&wgpu::TextureViewDescriptor::default());
731
+ textures.push(tex);
732
+ views.push(view);
733
+ }
734
+ (textures, views)
735
+ }
736
+
737
+ /// Create the bloom mip-chain texture + per-mip render views + a
738
+ /// full-chain view for sampling. Mip 0 starts at surface/2 size and
739
+ /// each subsequent mip halves down to ~surface/2^N. Caller is
740
+ /// responsible for deciding N (usually BLOOM_MIP_COUNT). At least
741
+ /// 1×1 is enforced per mip.
742
+ /// Build the bloom chain as N separate single-mip textures rather
743
+ /// than one multi-mip texture. Multi-mip textures with one mip
744
+ /// bound as render target while another mip is sampled in the
745
+ /// same encoder trips wgpu/Metal's per-subresource state tracking
746
+ /// — symptoms include large black bars in the sampled output. N
747
+ /// separate textures sidestep the problem entirely (each pass's
748
+ /// read/write hits a distinct texture). `bloom_full_view` is a
749
+ /// view onto mip 0's texture, kept for backward compatibility.
750
+ pub(super) fn create_bloom_chain(
751
+ device: &wgpu::Device,
752
+ width: u32,
753
+ height: u32,
754
+ mip_count: u32,
755
+ ) -> (Vec<wgpu::Texture>, Vec<wgpu::TextureView>, wgpu::TextureView) {
756
+ let mut textures = Vec::with_capacity(mip_count as usize);
757
+ let mut views = Vec::with_capacity(mip_count as usize);
758
+ for i in 0..mip_count {
759
+ let w = ((width / 2) >> i).max(1);
760
+ let h = ((height / 2) >> i).max(1);
761
+ let tex = device.create_texture(&wgpu::TextureDescriptor {
762
+ label: Some("bloom_mip_tex"),
763
+ size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
764
+ mip_level_count: 1,
765
+ sample_count: 1,
766
+ dimension: wgpu::TextureDimension::D2,
767
+ format: HDR_FORMAT,
768
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
769
+ | wgpu::TextureUsages::TEXTURE_BINDING,
770
+ view_formats: &[],
771
+ });
772
+ let view = tex.create_view(&wgpu::TextureViewDescriptor::default());
773
+ textures.push(tex);
774
+ views.push(view);
775
+ }
776
+ let full_view = textures[0].create_view(&wgpu::TextureViewDescriptor::default());
777
+ (textures, views, full_view)
778
+ }