@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,551 @@
1
+ //! Cascaded shadow mapping (CSM) for Bloom Engine.
2
+ //!
3
+ //! Implements 3-cascade directional light shadow mapping with PCF
4
+ //! (Percentage-Closer Filtering). The camera frustum is split into
5
+ //! near/mid/far slices, each rendered from the light's perspective into
6
+ //! its own depth texture. The scene shader selects the tightest cascade
7
+ //! for each fragment, giving high shadow resolution near the camera and
8
+ //! coverage out to the far plane.
9
+
10
+ use crate::renderer::IDENTITY_MAT4;
11
+
12
+ /// Number of shadow cascades.
13
+ pub const NUM_CASCADES: usize = 3;
14
+ /// Per-cascade shadow map resolution. 1024 (down from 2048) quarters
15
+ /// the fragment work per cascade and cuts the whole shadow pass from
16
+ /// ~14 ms to ~4 ms on Sponza. Softness is retained by the PCF kernel
17
+ /// + cascade splits; sharpness loss on near-field edges is minor and
18
+ /// can be tuned back by bumping this when targeting high-end GPUs.
19
+ pub const CASCADE_MAP_SIZE: u32 = 1024;
20
+ pub const SHADOW_NEAR: f32 = 0.1;
21
+ pub const SHADOW_FAR: f32 = 100.0;
22
+ /// Dynamic-uniform buffer stride for per-node shadow uniforms. Must
23
+ /// be >= sizeof(ShadowUniforms) (128B) and a multiple of the device's
24
+ /// min_uniform_buffer_offset_alignment. 256 is safe on every platform.
25
+ pub const SHADOW_UNIFORM_STRIDE: u32 = 256;
26
+ pub const SHADOW_MAX_NODES: u32 = 1024;
27
+
28
+ /// Depth-only shader for shadow pass.
29
+ pub const SHADOW_SHADER: &str = "
30
+ struct ShadowUniforms {
31
+ light_vp: mat4x4<f32>,
32
+ model: mat4x4<f32>,
33
+ };
34
+
35
+ @group(0) @binding(0) var<uniform> shadow_u: ShadowUniforms;
36
+
37
+ struct ShadowVertexInput {
38
+ @location(0) position: vec3<f32>,
39
+ @location(1) normal: vec3<f32>,
40
+ @location(2) color: vec4<f32>,
41
+ @location(3) uv: vec2<f32>,
42
+ @location(4) joints: vec4<f32>,
43
+ @location(5) weights: vec4<f32>,
44
+ };
45
+
46
+ @vertex
47
+ fn vs_shadow(in: ShadowVertexInput) -> @builtin(position) vec4<f32> {
48
+ let world_pos = shadow_u.model * vec4<f32>(in.position, 1.0);
49
+ return shadow_u.light_vp * world_pos;
50
+ }
51
+ ";
52
+
53
+ /// Uniform data for the shadow pass.
54
+ #[repr(C)]
55
+ #[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
56
+ pub struct ShadowUniforms {
57
+ pub light_vp: [[f32; 4]; 4],
58
+ pub model: [[f32; 4]; 4],
59
+ }
60
+
61
+ /// Shadow map resources for cascaded shadow mapping.
62
+ pub struct ShadowMap {
63
+ pub depth_textures: [wgpu::Texture; NUM_CASCADES],
64
+ pub depth_views: [wgpu::TextureView; NUM_CASCADES],
65
+ pub sampler: wgpu::Sampler,
66
+ pub bind_group_layout: wgpu::BindGroupLayout,
67
+ pub bind_group: wgpu::BindGroup,
68
+ pub pipeline: wgpu::RenderPipeline,
69
+ pub uniform_buffer: wgpu::Buffer,
70
+ pub uniform_bind_group: wgpu::BindGroup,
71
+ pub uniform_layout: wgpu::BindGroupLayout,
72
+ pub light_vps: [[[f32; 4]; 4]; NUM_CASCADES],
73
+ /// View-space Z split distances for each cascade. Cascade i covers
74
+ /// [cascade_splits[i-1], cascade_splits[i]]; cascade 0 starts at near.
75
+ pub cascade_splits: [f32; NUM_CASCADES],
76
+ pub enabled: bool,
77
+ /// Forces a shadow re-render next frame. Set by `invalidate()`
78
+ /// (on light direction change, `setShadowsEnabled(true)`, resize,
79
+ /// shadow-texture aliasing, etc.). Cleared after a render.
80
+ pub dirty: bool,
81
+ /// Escape hatch for games with continuously-changing light state
82
+ /// where the cache hit rate would be ~zero anyway. When true, every
83
+ /// frame renders shadows; the cache is bypassed.
84
+ pub always_fresh: bool,
85
+ /// Cascade VPs that correspond to the contents currently stored in
86
+ /// the depth textures. `None` before the first render. When the
87
+ /// freshly-computed VPs match this byte-for-byte AND nothing else
88
+ /// has invalidated, we can skip the render entirely and sample the
89
+ /// retained depth textures. Texel-snapping + radius quantization in
90
+ /// `compute_cascade_vps` means identical camera poses produce
91
+ /// identical VPs, so this check is robust.
92
+ pub rendered_light_vps: Option<[[[f32; 4]; 4]; NUM_CASCADES]>,
93
+ /// Light direction used for the current depth-texture contents.
94
+ /// Checked at the cache gate rather than on the setter because
95
+ /// `begin_frame` resets `lighting_uniforms` to defaults every
96
+ /// frame — comparing a setter's old-vs-new would always see the
97
+ /// default as the "old" value and invalidate every frame.
98
+ pub rendered_light_dir: Option<[f32; 3]>,
99
+ /// Scene-graph version counter sampled at the last shadow render.
100
+ /// `SceneGraph::shadow_version` increments whenever a shadow-casting
101
+ /// node's transform / cast_shadow / visibility / geometry changes;
102
+ /// a mismatch here forces a re-render.
103
+ pub rendered_scene_version: u64,
104
+ }
105
+
106
+ impl ShadowMap {
107
+ pub fn new(device: &wgpu::Device, vertex_layout: wgpu::VertexBufferLayout<'static>) -> Self {
108
+ // Create NUM_CASCADES depth textures
109
+ let mut depth_textures_vec: Vec<wgpu::Texture> = Vec::new();
110
+ let mut depth_views_vec: Vec<wgpu::TextureView> = Vec::new();
111
+ for i in 0..NUM_CASCADES {
112
+ let tex = device.create_texture(&wgpu::TextureDescriptor {
113
+ label: Some(&format!("shadow_depth_cascade_{}", i)),
114
+ size: wgpu::Extent3d {
115
+ width: CASCADE_MAP_SIZE,
116
+ height: CASCADE_MAP_SIZE,
117
+ depth_or_array_layers: 1,
118
+ },
119
+ mip_level_count: 1,
120
+ sample_count: 1,
121
+ dimension: wgpu::TextureDimension::D2,
122
+ format: wgpu::TextureFormat::Depth32Float,
123
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT
124
+ | wgpu::TextureUsages::TEXTURE_BINDING
125
+ | wgpu::TextureUsages::COPY_SRC,
126
+ view_formats: &[],
127
+ });
128
+ let view = tex.create_view(&wgpu::TextureViewDescriptor::default());
129
+ depth_textures_vec.push(tex);
130
+ depth_views_vec.push(view);
131
+ }
132
+
133
+ // Convert Vecs to fixed-size arrays
134
+ let depth_textures: [wgpu::Texture; NUM_CASCADES] =
135
+ depth_textures_vec.try_into().unwrap_or_else(|_| panic!("cascade texture count mismatch"));
136
+ let depth_views: [wgpu::TextureView; NUM_CASCADES] =
137
+ depth_views_vec.try_into().unwrap_or_else(|_| panic!("cascade view count mismatch"));
138
+
139
+ // Comparison sampler for PCF
140
+ let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
141
+ label: Some("shadow_sampler"),
142
+ compare: Some(wgpu::CompareFunction::LessEqual),
143
+ mag_filter: wgpu::FilterMode::Linear,
144
+ min_filter: wgpu::FilterMode::Linear,
145
+ ..Default::default()
146
+ });
147
+
148
+ // Bind group layout for sampling shadow maps in the main pass:
149
+ // 3 depth textures (bindings 0,1,2) + 1 comparison sampler (binding 3)
150
+ let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
151
+ label: Some("shadow_sample_layout"),
152
+ entries: &[
153
+ wgpu::BindGroupLayoutEntry {
154
+ binding: 0,
155
+ visibility: wgpu::ShaderStages::FRAGMENT,
156
+ ty: wgpu::BindingType::Texture {
157
+ sample_type: wgpu::TextureSampleType::Depth,
158
+ view_dimension: wgpu::TextureViewDimension::D2,
159
+ multisampled: false,
160
+ },
161
+ count: None,
162
+ },
163
+ wgpu::BindGroupLayoutEntry {
164
+ binding: 1,
165
+ visibility: wgpu::ShaderStages::FRAGMENT,
166
+ ty: wgpu::BindingType::Texture {
167
+ sample_type: wgpu::TextureSampleType::Depth,
168
+ view_dimension: wgpu::TextureViewDimension::D2,
169
+ multisampled: false,
170
+ },
171
+ count: None,
172
+ },
173
+ wgpu::BindGroupLayoutEntry {
174
+ binding: 2,
175
+ visibility: wgpu::ShaderStages::FRAGMENT,
176
+ ty: wgpu::BindingType::Texture {
177
+ sample_type: wgpu::TextureSampleType::Depth,
178
+ view_dimension: wgpu::TextureViewDimension::D2,
179
+ multisampled: false,
180
+ },
181
+ count: None,
182
+ },
183
+ wgpu::BindGroupLayoutEntry {
184
+ binding: 3,
185
+ visibility: wgpu::ShaderStages::FRAGMENT,
186
+ ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Comparison),
187
+ count: None,
188
+ },
189
+ ],
190
+ });
191
+
192
+ let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
193
+ label: Some("shadow_sample_bg"),
194
+ layout: &bind_group_layout,
195
+ entries: &[
196
+ wgpu::BindGroupEntry {
197
+ binding: 0,
198
+ resource: wgpu::BindingResource::TextureView(&depth_views[0]),
199
+ },
200
+ wgpu::BindGroupEntry {
201
+ binding: 1,
202
+ resource: wgpu::BindingResource::TextureView(&depth_views[1]),
203
+ },
204
+ wgpu::BindGroupEntry {
205
+ binding: 2,
206
+ resource: wgpu::BindingResource::TextureView(&depth_views[2]),
207
+ },
208
+ wgpu::BindGroupEntry {
209
+ binding: 3,
210
+ resource: wgpu::BindingResource::Sampler(&sampler),
211
+ },
212
+ ],
213
+ });
214
+
215
+ // Shadow pass uniform layout (dynamic offset for per-node)
216
+ let uniform_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
217
+ label: Some("shadow_uniform_layout"),
218
+ entries: &[wgpu::BindGroupLayoutEntry {
219
+ binding: 0,
220
+ visibility: wgpu::ShaderStages::VERTEX,
221
+ ty: wgpu::BindingType::Buffer {
222
+ ty: wgpu::BufferBindingType::Uniform,
223
+ has_dynamic_offset: true,
224
+ min_binding_size: std::num::NonZeroU64::new(
225
+ std::mem::size_of::<ShadowUniforms>() as u64,
226
+ ),
227
+ },
228
+ count: None,
229
+ }],
230
+ });
231
+
232
+ let uniform_buffer = device.create_buffer(&wgpu::BufferDescriptor {
233
+ label: Some("shadow_uniform_buf"),
234
+ size: (SHADOW_UNIFORM_STRIDE * SHADOW_MAX_NODES) as u64,
235
+ usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
236
+ mapped_at_creation: false,
237
+ });
238
+
239
+ let uniform_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
240
+ label: Some("shadow_uniform_bg"),
241
+ layout: &uniform_layout,
242
+ entries: &[wgpu::BindGroupEntry {
243
+ binding: 0,
244
+ resource: wgpu::BindingResource::Buffer(wgpu::BufferBinding {
245
+ buffer: &uniform_buffer,
246
+ offset: 0,
247
+ size: std::num::NonZeroU64::new(
248
+ std::mem::size_of::<ShadowUniforms>() as u64,
249
+ ),
250
+ }),
251
+ }],
252
+ });
253
+
254
+ // Shadow depth-only pipeline
255
+ let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
256
+ label: Some("shadow_shader"),
257
+ source: wgpu::ShaderSource::Wgsl(SHADOW_SHADER.into()),
258
+ });
259
+
260
+ let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
261
+ label: Some("shadow_pipeline_layout"),
262
+ bind_group_layouts: &[Some(&uniform_layout)],
263
+ immediate_size: 0,
264
+ });
265
+
266
+ let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
267
+ label: Some("shadow_pipeline"),
268
+ layout: Some(&pipeline_layout),
269
+ vertex: wgpu::VertexState {
270
+ module: &shader,
271
+ entry_point: Some("vs_shadow"),
272
+ buffers: &[vertex_layout],
273
+ compilation_options: Default::default(),
274
+ },
275
+ fragment: None, // depth only
276
+ primitive: wgpu::PrimitiveState {
277
+ topology: wgpu::PrimitiveTopology::TriangleList,
278
+ front_face: wgpu::FrontFace::Ccw,
279
+ cull_mode: None,
280
+ ..Default::default()
281
+ },
282
+ depth_stencil: Some(wgpu::DepthStencilState {
283
+ format: wgpu::TextureFormat::Depth32Float,
284
+ depth_write_enabled: Some(true),
285
+ depth_compare: Some(wgpu::CompareFunction::Less),
286
+ stencil: Default::default(),
287
+ bias: wgpu::DepthBiasState {
288
+ constant: 1,
289
+ slope_scale: 1.0,
290
+ clamp: 0.0,
291
+ },
292
+ }),
293
+ multisample: Default::default(),
294
+ multiview_mask: None,
295
+ cache: None,
296
+ });
297
+
298
+ Self {
299
+ depth_textures,
300
+ depth_views,
301
+ sampler,
302
+ bind_group_layout,
303
+ bind_group,
304
+ pipeline,
305
+ uniform_buffer,
306
+ uniform_bind_group,
307
+ uniform_layout,
308
+ light_vps: [IDENTITY_MAT4; NUM_CASCADES],
309
+ cascade_splits: [8.0, 25.0, 80.0],
310
+ enabled: false,
311
+ dirty: true,
312
+ always_fresh: false,
313
+ rendered_light_vps: None,
314
+ rendered_light_dir: None,
315
+ rendered_scene_version: 0,
316
+ }
317
+ }
318
+
319
+ /// Force the next shadow pass to re-render the depth textures.
320
+ /// Called on `setShadowsEnabled(true)`, swap-chain resize, or any
321
+ /// other event that invalidates the cached cascade contents.
322
+ pub fn invalidate(&mut self) {
323
+ self.dirty = true;
324
+ self.rendered_light_vps = None;
325
+ self.rendered_light_dir = None;
326
+ }
327
+
328
+ /// Compute cascade view-projection matrices by splitting the camera
329
+ /// frustum into NUM_CASCADES slices and fitting a tight ortho projection
330
+ /// around each slice from the light's perspective.
331
+ ///
332
+ /// `light_dir` points from the surface toward the light (the same
333
+ /// convention as the rest of the engine).
334
+ pub fn compute_cascade_vps(
335
+ &mut self,
336
+ light_dir: [f32; 3],
337
+ _camera_pos: [f32; 3],
338
+ camera_view: [[f32; 4]; 4],
339
+ camera_proj: [[f32; 4]; 4],
340
+ near: f32,
341
+ far: f32,
342
+ scene_bounds: Option<([f32; 3], [f32; 3])>,
343
+ ) {
344
+ let len = (light_dir[0] * light_dir[0]
345
+ + light_dir[1] * light_dir[1]
346
+ + light_dir[2] * light_dir[2])
347
+ .sqrt();
348
+ let d = if len > 1e-6 {
349
+ [light_dir[0] / len, light_dir[1] / len, light_dir[2] / len]
350
+ } else {
351
+ [0.0, 1.0, 0.0]
352
+ };
353
+
354
+ // Compute frustum split distances using practical split scheme
355
+ // (Nvidia GPU Gems 3, Chapter 10): blend of logarithmic and
356
+ // uniform split for stability.
357
+ let lambda = 0.5f32; // blend factor (0 = uniform, 1 = logarithmic)
358
+ let ratio = far / near;
359
+ let mut splits = [0.0f32; NUM_CASCADES + 1];
360
+ splits[0] = near;
361
+ for i in 1..NUM_CASCADES {
362
+ let p = i as f32 / NUM_CASCADES as f32;
363
+ let log_split = near * ratio.powf(p);
364
+ let uniform_split = near + (far - near) * p;
365
+ splits[i] = lambda * log_split + (1.0 - lambda) * uniform_split;
366
+ }
367
+ splits[NUM_CASCADES] = far;
368
+
369
+ // Store view-space Z split distances for shader cascade selection.
370
+ // cascade_splits[i] = far edge of cascade i.
371
+ for i in 0..NUM_CASCADES {
372
+ self.cascade_splits[i] = splits[i + 1];
373
+ }
374
+
375
+ // Light-space basis vectors for texel snapping
376
+ let up_hint = if d[1].abs() > 0.99 {
377
+ [1.0f32, 0.0, 0.0]
378
+ } else {
379
+ [0.0f32, 1.0, 0.0]
380
+ };
381
+ let right = normalize3([
382
+ up_hint[1] * d[2] - up_hint[2] * d[1],
383
+ up_hint[2] * d[0] - up_hint[0] * d[2],
384
+ up_hint[0] * d[1] - up_hint[1] * d[0],
385
+ ]);
386
+ let ortho_up = [
387
+ d[1] * right[2] - d[2] * right[1],
388
+ d[2] * right[0] - d[0] * right[2],
389
+ d[0] * right[1] - d[1] * right[0],
390
+ ];
391
+
392
+ for c in 0..NUM_CASCADES {
393
+ let c_near = splits[c];
394
+ let c_far = splits[c + 1];
395
+
396
+ // Build a sub-projection that matches the camera's projection
397
+ // but with the near/far planes replaced by cascade limits.
398
+ // For a perspective projection, that means re-deriving the
399
+ // z-mapping while keeping the x/y fields intact.
400
+ let mut sub_proj = camera_proj;
401
+ // camera_proj is column-major, standard wgpu perspective layout:
402
+ // col2 row2 = (far+near)/(near-far)
403
+ // col3 row2 = 2*far*near/(near-far)
404
+ // col2 row3 = -1
405
+ let nf = 1.0 / (c_near - c_far);
406
+ sub_proj[2][2] = (c_far + c_near) * nf;
407
+ sub_proj[3][2] = 2.0 * c_far * c_near * nf;
408
+
409
+ let sub_inv_vp = crate::renderer::mat4_invert(
410
+ crate::renderer::mat4_multiply(sub_proj, camera_view),
411
+ );
412
+
413
+ // The 8 NDC corners of a clip cube. wgpu uses z in [0,1].
414
+ let ndc_corners: [[f32; 4]; 8] = [
415
+ [-1.0, -1.0, 0.0, 1.0],
416
+ [ 1.0, -1.0, 0.0, 1.0],
417
+ [-1.0, 1.0, 0.0, 1.0],
418
+ [ 1.0, 1.0, 0.0, 1.0],
419
+ [-1.0, -1.0, 1.0, 1.0],
420
+ [ 1.0, -1.0, 1.0, 1.0],
421
+ [-1.0, 1.0, 1.0, 1.0],
422
+ [ 1.0, 1.0, 1.0, 1.0],
423
+ ];
424
+
425
+ // Unproject to world space
426
+ let mut world_corners = [[0.0f32; 3]; 8];
427
+ for i in 0..8 {
428
+ let h = crate::renderer::mat4_mul_vec4(&sub_inv_vp, &ndc_corners[i]);
429
+ let w = if h[3].abs() > 1e-8 { h[3] } else { 1.0 };
430
+ world_corners[i] = [h[0] / w, h[1] / w, h[2] / w];
431
+ }
432
+
433
+ // Bounding sphere of this cascade's frustum slice. Sphere
434
+ // (not AABB) gives rotation-invariant extent so the ortho
435
+ // volume doesn't resize as the camera rotates.
436
+ let mut center = [0.0f32; 3];
437
+ for i in 0..8 {
438
+ center[0] += world_corners[i][0];
439
+ center[1] += world_corners[i][1];
440
+ center[2] += world_corners[i][2];
441
+ }
442
+ center[0] /= 8.0;
443
+ center[1] /= 8.0;
444
+ center[2] /= 8.0;
445
+ let mut radius: f32 = 0.0;
446
+ for i in 0..8 {
447
+ let dx = world_corners[i][0] - center[0];
448
+ let dy = world_corners[i][1] - center[1];
449
+ let dz = world_corners[i][2] - center[2];
450
+ let r2 = dx*dx + dy*dy + dz*dz;
451
+ if r2 > radius { radius = r2; }
452
+ }
453
+ radius = radius.sqrt();
454
+ // Quantize radius so subpixel camera movement can't shift
455
+ // the texel grid.
456
+ let radius = (radius * 16.0).ceil() / 16.0;
457
+
458
+ // Texel snap: quantize the ortho center to texel boundaries
459
+ // in light space so camera translation doesn't crawl edges.
460
+ let texel_world = (2.0 * radius) / CASCADE_MAP_SIZE as f32;
461
+ let ls_x = dot3(center, right);
462
+ let ls_y = dot3(center, ortho_up);
463
+ let snapped_x = (ls_x / texel_world).floor() * texel_world;
464
+ let snapped_y = (ls_y / texel_world).floor() * texel_world;
465
+ let dx_snap = snapped_x - ls_x;
466
+ let dy_snap = snapped_y - ls_y;
467
+ let snapped_center = [
468
+ center[0] + dx_snap * right[0] + dy_snap * ortho_up[0],
469
+ center[1] + dx_snap * right[1] + dy_snap * ortho_up[1],
470
+ center[2] + dx_snap * right[2] + dy_snap * ortho_up[2],
471
+ ];
472
+
473
+ // Extend Z-range using the scene AABB so casters behind the
474
+ // visible slice (from the light's view) still project shadows
475
+ // into it. This is "pancaking" — cascade XY is tight to the
476
+ // frustum sphere, but Z reaches back to the full scene.
477
+ let mut pancake_back: f32 = radius; // +d distance (toward light)
478
+ let mut pancake_far: f32 = radius; // -d distance (away from light)
479
+ if let Some((bmin, bmax)) = scene_bounds {
480
+ let corners = [
481
+ [bmin[0], bmin[1], bmin[2]],
482
+ [bmax[0], bmin[1], bmin[2]],
483
+ [bmin[0], bmax[1], bmin[2]],
484
+ [bmax[0], bmax[1], bmin[2]],
485
+ [bmin[0], bmin[1], bmax[2]],
486
+ [bmax[0], bmin[1], bmax[2]],
487
+ [bmin[0], bmax[1], bmax[2]],
488
+ [bmax[0], bmax[1], bmax[2]],
489
+ ];
490
+ for p in corners.iter() {
491
+ let rel = [
492
+ p[0] - snapped_center[0],
493
+ p[1] - snapped_center[1],
494
+ p[2] - snapped_center[2],
495
+ ];
496
+ let along_d = dot3(rel, d);
497
+ if along_d > pancake_back { pancake_back = along_d; }
498
+ if -along_d > pancake_far { pancake_far = -along_d; }
499
+ }
500
+ }
501
+ // Quantize Z range so tiny scene-bounds drift doesn't shift depths.
502
+ let pancake_back = (pancake_back * 16.0).ceil() / 16.0;
503
+ let pancake_far = (pancake_far * 16.0).ceil() / 16.0;
504
+
505
+ // Place light eye at the far-back edge of the Z range so
506
+ // ortho near=0 exactly touches the top of the pancake volume.
507
+ let eye_offset = pancake_back;
508
+ let light_pos = [
509
+ snapped_center[0] + d[0] * eye_offset,
510
+ snapped_center[1] + d[1] * eye_offset,
511
+ snapped_center[2] + d[2] * eye_offset,
512
+ ];
513
+
514
+ let snapped_view = crate::renderer::mat4_look_at(light_pos, snapped_center, up_hint);
515
+ let light_proj = crate::renderer::mat4_ortho(
516
+ -radius, radius,
517
+ -radius, radius,
518
+ 0.0,
519
+ eye_offset + pancake_far,
520
+ );
521
+
522
+ self.light_vps[c] = crate::renderer::mat4_multiply(light_proj, snapped_view);
523
+ }
524
+ }
525
+
526
+ /// Enable shadow mapping.
527
+ pub fn enable(&mut self) {
528
+ if !self.enabled {
529
+ self.invalidate();
530
+ }
531
+ self.enabled = true;
532
+ }
533
+
534
+ /// Disable shadow mapping.
535
+ pub fn disable(&mut self) {
536
+ self.enabled = false;
537
+ }
538
+ }
539
+
540
+ fn normalize3(v: [f32; 3]) -> [f32; 3] {
541
+ let len = (v[0] * v[0] + v[1] * v[1] + v[2] * v[2]).sqrt();
542
+ if len > 1e-6 {
543
+ [v[0] / len, v[1] / len, v[2] / len]
544
+ } else {
545
+ [0.0, 0.0, 1.0]
546
+ }
547
+ }
548
+
549
+ fn dot3(a: [f32; 3], b: [f32; 3]) -> f32 {
550
+ a[0] * b[0] + a[1] * b[1] + a[2] * b[2]
551
+ }
@@ -0,0 +1,90 @@
1
+ use std::sync::{Mutex, OnceLock};
2
+ use crate::models::ModelData;
3
+ use crate::audio::SoundData;
4
+
5
+ pub struct StagedTexture {
6
+ pub data: Vec<u8>,
7
+ pub width: u32,
8
+ pub height: u32,
9
+ }
10
+
11
+ pub struct StagedModel {
12
+ pub model: ModelData,
13
+ pub textures: Vec<StagedTexture>,
14
+ }
15
+
16
+ // Thread-safe staging stores using Mutex<Vec<Option<T>>>.
17
+ // The lock is only held during insert/remove (microseconds), not during decode.
18
+
19
+ fn texture_store() -> &'static Mutex<Vec<Option<StagedTexture>>> {
20
+ static INSTANCE: OnceLock<Mutex<Vec<Option<StagedTexture>>>> = OnceLock::new();
21
+ INSTANCE.get_or_init(|| Mutex::new(Vec::new()))
22
+ }
23
+
24
+ fn model_store() -> &'static Mutex<Vec<Option<StagedModel>>> {
25
+ static INSTANCE: OnceLock<Mutex<Vec<Option<StagedModel>>>> = OnceLock::new();
26
+ INSTANCE.get_or_init(|| Mutex::new(Vec::new()))
27
+ }
28
+
29
+ fn sound_store() -> &'static Mutex<Vec<Option<SoundData>>> {
30
+ static INSTANCE: OnceLock<Mutex<Vec<Option<SoundData>>>> = OnceLock::new();
31
+ INSTANCE.get_or_init(|| Mutex::new(Vec::new()))
32
+ }
33
+
34
+ fn stage_into<T>(store: &Mutex<Vec<Option<T>>>, item: T) -> f64 {
35
+ let mut vec = store.lock().unwrap();
36
+ // Reuse freed slots
37
+ for (i, slot) in vec.iter_mut().enumerate() {
38
+ if slot.is_none() {
39
+ *slot = Some(item);
40
+ return (i + 1) as f64;
41
+ }
42
+ }
43
+ vec.push(Some(item));
44
+ vec.len() as f64
45
+ }
46
+
47
+ fn take_from<T>(store: &Mutex<Vec<Option<T>>>, handle: f64) -> Option<T> {
48
+ let idx = handle as usize;
49
+ if idx == 0 { return None; }
50
+ let mut vec = store.lock().unwrap();
51
+ if idx > vec.len() { return None; }
52
+ vec[idx - 1].take()
53
+ }
54
+
55
+ // Public API
56
+
57
+ /// Decode image bytes (PNG/JPEG/etc) and stage the result. Thread-safe.
58
+ pub fn decode_and_stage_texture(file_data: &[u8]) -> f64 {
59
+ let img = match image::load_from_memory(file_data) {
60
+ Ok(img) => img.to_rgba8(),
61
+ Err(_) => return 0.0,
62
+ };
63
+ let width = img.width();
64
+ let height = img.height();
65
+ stage_texture(StagedTexture { data: img.into_raw(), width, height })
66
+ }
67
+
68
+ pub fn stage_texture(tex: StagedTexture) -> f64 {
69
+ stage_into(texture_store(), tex)
70
+ }
71
+
72
+ pub fn take_texture(handle: f64) -> Option<StagedTexture> {
73
+ take_from(texture_store(), handle)
74
+ }
75
+
76
+ pub fn stage_model(model: StagedModel) -> f64 {
77
+ stage_into(model_store(), model)
78
+ }
79
+
80
+ pub fn take_model(handle: f64) -> Option<StagedModel> {
81
+ take_from(model_store(), handle)
82
+ }
83
+
84
+ pub fn stage_sound(sound: SoundData) -> f64 {
85
+ stage_into(sound_store(), sound)
86
+ }
87
+
88
+ pub fn take_sound(handle: f64) -> Option<SoundData> {
89
+ take_from(sound_store(), handle)
90
+ }
@@ -0,0 +1,35 @@
1
+ /// Header for heap-allocated strings (mirrors perry_runtime::string::StringHeader).
2
+ /// Defined locally to avoid pulling in the entire perry-runtime crate as a dependency.
3
+ ///
4
+ /// Perry 0.5.x changed the layout — utf16_len was added at offset 0 for inline
5
+ /// codegen, so byte_len moved to offset 4.
6
+ #[repr(C)]
7
+ pub struct StringHeader {
8
+ /// Length in UTF-16 code units (JS `.length` semantics). Offset 0.
9
+ pub utf16_len: u32,
10
+ /// Length in UTF-8 bytes. Offset 4.
11
+ pub byte_len: u32,
12
+ /// Capacity in bytes.
13
+ pub capacity: u32,
14
+ /// Reference hint: 0=shared, 1=unique (in-place append OK).
15
+ pub refcount: u32,
16
+ /// Bit flags (STRING_FLAG_HAS_LONE_SURROGATES = 1). Added in
17
+ /// Perry 0.5.18x. Engines built against older Perry headers
18
+ /// skipped 16 bytes and ended up reading 4 bytes into the
19
+ /// UTF-8 data; strings crossing the FFI came back with a 4-byte
20
+ /// garbage prefix and trailing truncation.
21
+ pub flags: u32,
22
+ }
23
+
24
+ /// Extract a &str from a *const StringHeader pointer (Perry string format).
25
+ pub fn str_from_header(ptr: *const u8) -> &'static str {
26
+ if ptr.is_null() || (ptr as usize) < 0x1000 {
27
+ return "";
28
+ }
29
+ unsafe {
30
+ let header = ptr as *const StringHeader;
31
+ let len = (*header).byte_len as usize;
32
+ let data = ptr.add(std::mem::size_of::<StringHeader>());
33
+ std::str::from_utf8_unchecked(std::slice::from_raw_parts(data, len))
34
+ }
35
+ }