@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,746 @@
1
+ //! Minimal .glb (glTF 2.0 binary) loader for watchOS.
2
+ //!
3
+ //! Supports a single mesh's first primitive — POSITION / NORMAL / TEXCOORD_0 /
4
+ //! indices, plus PBR baseColorFactor / metallicFactor / roughnessFactor from
5
+ //! the referenced material. Multi-primitive meshes, skinning, animations,
6
+ //! and external texture files are intentionally out of scope for this first
7
+ //! cut; they'll be added as concrete games need them.
8
+ //!
9
+ //! Uses a hand-rolled JSON value parser to avoid pulling in the full serde /
10
+ //! serde_json compile tree — the glTF JSON schema is well-formed output from
11
+ //! exporters, so we don't need serde's robustness, just its shape.
12
+
13
+ use std::sync::{Arc, Mutex};
14
+
15
+ // ---------- Model registry ----------
16
+
17
+ /// A Model mirrors glTF's layout: a list of Meshes (each with Primitives),
18
+ /// a list of Nodes (transform + optional mesh reference + children), and
19
+ /// scene roots (node indices the scene starts from). bloom_scene_attach_model
20
+ /// walks the node tree and spawns one bloom scene node per glTF node, with
21
+ /// the glTF node's transform baked in.
22
+ pub struct Model {
23
+ pub meshes: Vec<Mesh>,
24
+ pub nodes: Vec<Node>,
25
+ pub scene_roots: Vec<usize>,
26
+ pub skins: Vec<Skin>,
27
+ pub animations: Vec<Animation>,
28
+ }
29
+
30
+ /// One node in the glTF scene graph. Translation/rotation/scale compose into
31
+ /// the local transform; if `matrix` is set it wins outright (glTF spec).
32
+ pub struct Node {
33
+ pub translation: [f32; 3],
34
+ pub rotation: [f32; 4], // quaternion xyzw
35
+ pub scale: [f32; 3],
36
+ pub matrix: Option<[f32; 16]>, // column-major if present
37
+ pub mesh: Option<usize>,
38
+ pub skin: Option<usize>,
39
+ pub children: Vec<usize>,
40
+ }
41
+
42
+ impl Node {
43
+ pub fn identity() -> Self {
44
+ Self {
45
+ translation: [0.0; 3],
46
+ rotation: [0.0, 0.0, 0.0, 1.0],
47
+ scale: [1.0; 3],
48
+ matrix: None,
49
+ mesh: None,
50
+ skin: None,
51
+ children: Vec::new(),
52
+ }
53
+ }
54
+
55
+ /// Compose TRS into a column-major 4x4 matrix, or return `matrix` if set.
56
+ pub fn local_transform(&self) -> [f32; 16] {
57
+ if let Some(m) = self.matrix { return m; }
58
+ let [tx, ty, tz] = self.translation;
59
+ let [qx, qy, qz, qw] = self.rotation;
60
+ let [sx, sy, sz] = self.scale;
61
+ // Rotation matrix from quaternion.
62
+ let xx = qx * qx; let yy = qy * qy; let zz = qz * qz;
63
+ let xy = qx * qy; let xz = qx * qz; let yz = qy * qz;
64
+ let wx = qw * qx; let wy = qw * qy; let wz = qw * qz;
65
+ [
66
+ (1.0 - 2.0 * (yy + zz)) * sx,
67
+ (2.0 * (xy + wz)) * sx,
68
+ (2.0 * (xz - wy)) * sx,
69
+ 0.0,
70
+
71
+ (2.0 * (xy - wz)) * sy,
72
+ (1.0 - 2.0 * (xx + zz)) * sy,
73
+ (2.0 * (yz + wx)) * sy,
74
+ 0.0,
75
+
76
+ (2.0 * (xz + wy)) * sz,
77
+ (2.0 * (yz - wx)) * sz,
78
+ (1.0 - 2.0 * (xx + yy)) * sz,
79
+ 0.0,
80
+
81
+ tx, ty, tz, 1.0,
82
+ ]
83
+ }
84
+ }
85
+
86
+ pub struct Mesh {
87
+ pub primitives: Vec<Primitive>,
88
+ }
89
+
90
+ pub struct Primitive {
91
+ pub positions: Vec<f32>,
92
+ pub normals: Vec<f32>,
93
+ pub uvs: Vec<f32>,
94
+ pub indices: Vec<u32>,
95
+ pub color: [f32; 4],
96
+ pub metallic: f32,
97
+ pub roughness: f32,
98
+ /// PBR texture slots — texture registry handles (0 = none).
99
+ pub tex_base_color: u32,
100
+ pub tex_normal: u32,
101
+ pub tex_metallic_roughness: u32,
102
+ pub tex_emissive: u32,
103
+ pub tex_occlusion: u32,
104
+ /// Per-vertex skinning attributes (glTF JOINTS_0 / WEIGHTS_0). 4 per
105
+ /// vertex; empty if the primitive isn't skinned.
106
+ pub joint_indices: Vec<u32>,
107
+ pub weights: Vec<f32>,
108
+ }
109
+
110
+ /// A glTF skin: list of bone node indices + inverse-bind matrices. Used
111
+ /// alongside a skinned primitive to drive SCNSkinner.
112
+ pub struct Skin {
113
+ pub joints: Vec<usize>, // glTF node indices
114
+ pub inverse_bind_matrices: Vec<[f32; 16]>, // one per joint
115
+ }
116
+
117
+ /// One glTF animation — an ordered bundle of per-bone keyframe tracks.
118
+ pub struct Animation {
119
+ pub name: String,
120
+ pub duration: f32,
121
+ pub channels: Vec<Channel>,
122
+ }
123
+
124
+ #[repr(u32)]
125
+ #[derive(Clone, Copy)]
126
+ pub enum ChannelPath { Translation = 0, Rotation = 1, Scale = 2 }
127
+
128
+ pub struct Channel {
129
+ pub target_node: usize, // glTF node index (will be resolved to bloom handle on attach)
130
+ pub path: ChannelPath,
131
+ /// Flat key/value arrays. For Translation/Scale: 3 floats per keyframe.
132
+ /// For Rotation (quaternion xyzw): 4 floats per keyframe.
133
+ pub times: Vec<f32>,
134
+ pub values: Vec<f32>,
135
+ }
136
+
137
+ static MODELS: Mutex<Vec<Option<Arc<Model>>>> = Mutex::new(Vec::new());
138
+
139
+ pub fn load(path: &str) -> u32 {
140
+ let Ok(bytes) = std::fs::read(path) else { return 0; };
141
+ let Some(model) = parse_glb(&bytes) else { return 0; };
142
+
143
+ let mut reg = MODELS.lock().unwrap();
144
+ if reg.is_empty() { reg.push(None); } // sentinel 0 handle
145
+ reg.push(Some(Arc::new(model)));
146
+ (reg.len() - 1) as u32
147
+ }
148
+
149
+ pub fn get(handle: u32) -> Option<Arc<Model>> {
150
+ let reg = MODELS.lock().unwrap();
151
+ reg.get(handle as usize).and_then(|m| m.as_ref().cloned())
152
+ }
153
+
154
+ // ---------- GLB parsing ----------
155
+
156
+ const GLB_MAGIC: u32 = 0x46546C67; // "glTF" LE
157
+ const CHUNK_JSON: u32 = 0x4E4F534A; // "JSON"
158
+ const CHUNK_BIN: u32 = 0x004E4942; // "BIN\0"
159
+
160
+ fn parse_glb(bytes: &[u8]) -> Option<Model> {
161
+ if bytes.len() < 12 { return None; }
162
+ if u32_le(bytes, 0) != GLB_MAGIC { return None; }
163
+ let _version = u32_le(bytes, 4);
164
+ let _total_len = u32_le(bytes, 8);
165
+
166
+ // Walk chunks. Expect JSON first, then BIN.
167
+ let mut off = 12usize;
168
+ let mut json_bytes: &[u8] = &[];
169
+ let mut bin_bytes: &[u8] = &[];
170
+ while off + 8 <= bytes.len() {
171
+ let chunk_len = u32_le(bytes, off) as usize;
172
+ let chunk_type = u32_le(bytes, off + 4);
173
+ let data_start = off + 8;
174
+ let data_end = data_start + chunk_len;
175
+ if data_end > bytes.len() { break; }
176
+ let data = &bytes[data_start..data_end];
177
+ match chunk_type {
178
+ CHUNK_JSON => json_bytes = data,
179
+ CHUNK_BIN => bin_bytes = data,
180
+ _ => {}
181
+ }
182
+ off = data_end;
183
+ }
184
+ if json_bytes.is_empty() { return None; }
185
+
186
+ let json = std::str::from_utf8(json_bytes).ok()?;
187
+ let root = json_parse(json)?;
188
+
189
+ let meshes_js = root.get("meshes")?.arr()?;
190
+ let accessors = root.get("accessors")?.arr()?;
191
+ let buf_views = root.get("bufferViews")?.arr()?;
192
+
193
+ let mut meshes: Vec<Mesh> = Vec::with_capacity(meshes_js.len());
194
+ for mesh_js in meshes_js {
195
+ let prims_js = match mesh_js.get("primitives").and_then(|v| v.arr()) {
196
+ Some(p) => p,
197
+ None => continue,
198
+ };
199
+ let mut primitives: Vec<Primitive> = Vec::with_capacity(prims_js.len());
200
+ for prim in prims_js {
201
+ if let Some(p) = parse_primitive(prim, &root, accessors, buf_views, bin_bytes) {
202
+ primitives.push(p);
203
+ }
204
+ }
205
+ meshes.push(Mesh { primitives });
206
+ }
207
+ if meshes.is_empty() { return None; }
208
+
209
+ // Parse nodes + scenes (glTF hierarchy).
210
+ let mut nodes: Vec<Node> = Vec::new();
211
+ if let Some(nodes_js) = root.get("nodes").and_then(|v| v.arr()) {
212
+ nodes.reserve(nodes_js.len());
213
+ for n in nodes_js {
214
+ nodes.push(parse_node(n));
215
+ }
216
+ }
217
+ let mut scene_roots: Vec<usize> = Vec::new();
218
+ if let Some(scenes_js) = root.get("scenes").and_then(|v| v.arr()) {
219
+ // Pick the default scene (glTF's "scene" field) or scene 0.
220
+ let default_idx = root.get("scene").and_then(|v| v.num()).unwrap_or(0.0) as usize;
221
+ if let Some(scene) = scenes_js.get(default_idx).or_else(|| scenes_js.first()) {
222
+ if let Some(arr) = scene.get("nodes").and_then(|v| v.arr()) {
223
+ for n in arr {
224
+ if let Some(i) = n.num() { scene_roots.push(i as usize); }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ // Fallback: if the file has no scenes/ but has nodes, treat node 0 as root.
230
+ if scene_roots.is_empty() && !nodes.is_empty() {
231
+ scene_roots.push(0);
232
+ }
233
+ // Fallback: if no nodes at all but meshes exist, synthesize a single root
234
+ // node pointing at mesh 0 so older callers still get a valid hierarchy.
235
+ if nodes.is_empty() && !meshes.is_empty() {
236
+ let mut n = Node::identity();
237
+ n.mesh = Some(0);
238
+ nodes.push(n);
239
+ scene_roots.push(0);
240
+ }
241
+
242
+ // Parse skins: joints (node indices) + inverse-bind matrices.
243
+ let mut skins: Vec<Skin> = Vec::new();
244
+ if let Some(skins_js) = root.get("skins").and_then(|v| v.arr()) {
245
+ skins.reserve(skins_js.len());
246
+ for sk in skins_js {
247
+ let mut joints: Vec<usize> = Vec::new();
248
+ if let Some(j) = sk.get("joints").and_then(|v| v.arr()) {
249
+ for v in j {
250
+ if let Some(n) = v.num() { joints.push(n as usize); }
251
+ }
252
+ }
253
+ let mut ibms: Vec<[f32; 16]> = Vec::new();
254
+ if let Some(ibm_acc_idx) = sk.get("inverseBindMatrices").and_then(|v| v.num()) {
255
+ let raw = read_f32_vec(accessors, buf_views, bin_bytes, ibm_acc_idx as usize, 16)
256
+ .unwrap_or_default();
257
+ for chunk in raw.chunks(16) {
258
+ if chunk.len() == 16 {
259
+ let mut m = [0.0f32; 16];
260
+ m.copy_from_slice(chunk);
261
+ ibms.push(m);
262
+ }
263
+ }
264
+ }
265
+ // If IBMs are missing, fall back to identity per joint (spec
266
+ // default). Happens rarely but keeps Swift's SCNSkinner happy.
267
+ if ibms.is_empty() {
268
+ let mut id = [0.0f32; 16];
269
+ id[0] = 1.0; id[5] = 1.0; id[10] = 1.0; id[15] = 1.0;
270
+ ibms = vec![id; joints.len()];
271
+ }
272
+ skins.push(Skin { joints, inverse_bind_matrices: ibms });
273
+ }
274
+ }
275
+
276
+ // Parse animations.
277
+ let mut animations: Vec<Animation> = Vec::new();
278
+ if let Some(anims_js) = root.get("animations").and_then(|v| v.arr()) {
279
+ for a in anims_js {
280
+ let name = a.get("name").and_then(|v| match v { JVal::Str(s) => Some(s.clone()), _ => None })
281
+ .unwrap_or_default();
282
+ let samplers = match a.get("samplers").and_then(|v| v.arr()) {
283
+ Some(s) => s,
284
+ None => continue,
285
+ };
286
+ let channels_js = match a.get("channels").and_then(|v| v.arr()) {
287
+ Some(c) => c,
288
+ None => continue,
289
+ };
290
+ let mut channels: Vec<Channel> = Vec::new();
291
+ let mut duration = 0.0f32;
292
+ for ch in channels_js {
293
+ let Some(smp_idx) = ch.get("sampler").and_then(|v| v.num()) else { continue };
294
+ let Some(tgt) = ch.get("target") else { continue };
295
+ let Some(tgt_node) = tgt.get("node").and_then(|v| v.num()) else { continue };
296
+ let path_str = tgt.get("path").and_then(|v| match v { JVal::Str(s) => Some(s.as_str()), _ => None });
297
+ let path = match path_str {
298
+ Some("translation") => ChannelPath::Translation,
299
+ Some("rotation") => ChannelPath::Rotation,
300
+ Some("scale") => ChannelPath::Scale,
301
+ _ => continue, // 'weights' (morph targets) not supported yet
302
+ };
303
+ let Some(smp) = samplers.get(smp_idx as usize) else { continue };
304
+ let Some(input_idx) = smp.get("input").and_then(|v| v.num()) else { continue };
305
+ let Some(output_idx) = smp.get("output").and_then(|v| v.num()) else { continue };
306
+
307
+ let times = read_f32_vec(accessors, buf_views, bin_bytes, input_idx as usize, 1)
308
+ .unwrap_or_default();
309
+ let comps = match path { ChannelPath::Rotation => 4, _ => 3 };
310
+ let values = read_f32_vec(accessors, buf_views, bin_bytes, output_idx as usize, comps)
311
+ .unwrap_or_default();
312
+
313
+ if let Some(&t) = times.last() { if t > duration { duration = t; } }
314
+ channels.push(Channel { target_node: tgt_node as usize, path, times, values });
315
+ }
316
+ animations.push(Animation { name, duration, channels });
317
+ }
318
+ }
319
+
320
+ Some(Model { meshes, nodes, scene_roots, skins, animations })
321
+ }
322
+
323
+ fn parse_node(n: &JVal) -> Node {
324
+ let mut node = Node::identity();
325
+ if let Some(t) = n.get("translation").and_then(|v| v.arr()) {
326
+ for (i, v) in t.iter().take(3).enumerate() {
327
+ if let Some(f) = v.num() { node.translation[i] = f as f32; }
328
+ }
329
+ }
330
+ if let Some(r) = n.get("rotation").and_then(|v| v.arr()) {
331
+ for (i, v) in r.iter().take(4).enumerate() {
332
+ if let Some(f) = v.num() { node.rotation[i] = f as f32; }
333
+ }
334
+ }
335
+ if let Some(s) = n.get("scale").and_then(|v| v.arr()) {
336
+ for (i, v) in s.iter().take(3).enumerate() {
337
+ if let Some(f) = v.num() { node.scale[i] = f as f32; }
338
+ }
339
+ }
340
+ if let Some(m) = n.get("matrix").and_then(|v| v.arr()) {
341
+ let mut arr = [0.0f32; 16];
342
+ for (i, v) in m.iter().take(16).enumerate() {
343
+ if let Some(f) = v.num() { arr[i] = f as f32; }
344
+ }
345
+ node.matrix = Some(arr);
346
+ }
347
+ if let Some(mi) = n.get("mesh").and_then(|v| v.num()) {
348
+ node.mesh = Some(mi as usize);
349
+ }
350
+ if let Some(si) = n.get("skin").and_then(|v| v.num()) {
351
+ node.skin = Some(si as usize);
352
+ }
353
+ if let Some(kids) = n.get("children").and_then(|v| v.arr()) {
354
+ for v in kids {
355
+ if let Some(i) = v.num() { node.children.push(i as usize); }
356
+ }
357
+ }
358
+ node
359
+ }
360
+
361
+ fn parse_primitive(
362
+ prim: &JVal, root: &JVal,
363
+ accessors: &[JVal], buf_views: &[JVal], bin_bytes: &[u8],
364
+ ) -> Option<Primitive> {
365
+ let attrs = prim.get("attributes")?;
366
+ let pos_acc = attrs.get("POSITION")?.num()? as usize;
367
+ let nrm_acc = attrs.get("NORMAL").and_then(|v| v.num().map(|n| n as usize));
368
+ let uv_acc = attrs.get("TEXCOORD_0").and_then(|v| v.num().map(|n| n as usize));
369
+ let j0_acc = attrs.get("JOINTS_0").and_then(|v| v.num().map(|n| n as usize));
370
+ let w0_acc = attrs.get("WEIGHTS_0").and_then(|v| v.num().map(|n| n as usize));
371
+ let idx_acc = prim.get("indices").and_then(|v| v.num().map(|n| n as usize));
372
+ let mat_idx = prim.get("material").and_then(|v| v.num().map(|n| n as usize));
373
+
374
+ let positions = read_f32_vec(accessors, buf_views, bin_bytes, pos_acc, 3)?;
375
+ let normals = nrm_acc
376
+ .and_then(|a| read_f32_vec(accessors, buf_views, bin_bytes, a, 3))
377
+ .unwrap_or_default();
378
+ let uvs = uv_acc
379
+ .and_then(|a| read_f32_vec(accessors, buf_views, bin_bytes, a, 2))
380
+ .unwrap_or_default();
381
+ // Indexless primitives (POSITION-only triangle soups) — synthesize
382
+ // sequential indices so the SceneKit SCNGeometryElement path stays
383
+ // uniform. Fox.glb uses this layout.
384
+ let indices = match idx_acc {
385
+ Some(a) => read_index_vec(accessors, buf_views, bin_bytes, a)?,
386
+ None => (0..(positions.len() / 3) as u32).collect(),
387
+ };
388
+ // JOINTS_0 is typically unsigned byte or short vec4 per vertex.
389
+ let joint_indices = j0_acc
390
+ .and_then(|a| read_joint_indices(accessors, buf_views, bin_bytes, a))
391
+ .unwrap_or_default();
392
+ // WEIGHTS_0 is f32 vec4 per vertex (spec allows normalized u8/u16 but
393
+ // current Khronos samples use float; stick with float for v1).
394
+ let weights = w0_acc
395
+ .and_then(|a| read_f32_vec(accessors, buf_views, bin_bytes, a, 4))
396
+ .unwrap_or_default();
397
+
398
+ let mut color = [1.0f32; 4];
399
+ let mut metallic = 1.0f32;
400
+ let mut roughness = 1.0f32;
401
+ let mut tex_base_color = 0u32;
402
+ let mut tex_normal = 0u32;
403
+ let mut tex_metallic_roughness = 0u32;
404
+ let mut tex_emissive = 0u32;
405
+ let mut tex_occlusion = 0u32;
406
+
407
+ if let Some(mi) = mat_idx {
408
+ if let Some(mats) = root.get("materials").and_then(|v| v.arr()) {
409
+ if let Some(mat) = mats.get(mi) {
410
+ if let Some(pbr) = mat.get("pbrMetallicRoughness") {
411
+ if let Some(bc) = pbr.get("baseColorFactor").and_then(|v| v.arr()) {
412
+ for (i, n) in bc.iter().take(4).enumerate() {
413
+ if let Some(f) = n.num() { color[i] = f as f32; }
414
+ }
415
+ }
416
+ if let Some(m) = pbr.get("metallicFactor").and_then(|v| v.num()) {
417
+ metallic = m as f32;
418
+ }
419
+ if let Some(r) = pbr.get("roughnessFactor").and_then(|v| v.num()) {
420
+ roughness = r as f32;
421
+ }
422
+ tex_base_color = resolve_texture(root, pbr, "baseColorTexture", bin_bytes);
423
+ tex_metallic_roughness = resolve_texture(root, pbr, "metallicRoughnessTexture", bin_bytes);
424
+ }
425
+ tex_normal = resolve_texture(root, mat, "normalTexture", bin_bytes);
426
+ tex_emissive = resolve_texture(root, mat, "emissiveTexture", bin_bytes);
427
+ tex_occlusion = resolve_texture(root, mat, "occlusionTexture", bin_bytes);
428
+ }
429
+ }
430
+ }
431
+
432
+ Some(Primitive {
433
+ positions, normals, uvs, indices,
434
+ color, metallic, roughness,
435
+ tex_base_color, tex_normal, tex_metallic_roughness, tex_emissive, tex_occlusion,
436
+ joint_indices, weights,
437
+ })
438
+ }
439
+
440
+ /// Read a JOINTS_0 accessor as u32 quads. Handles componentType 5121
441
+ /// (UNSIGNED_BYTE) and 5123 (UNSIGNED_SHORT); returns empty for anything
442
+ /// else.
443
+ fn read_joint_indices(
444
+ accessors: &[JVal], buf_views: &[JVal], bin: &[u8], acc_idx: usize,
445
+ ) -> Option<Vec<u32>> {
446
+ let acc = accessors.get(acc_idx)?;
447
+ let comp_type = acc.get("componentType")?.num()? as u32;
448
+ let bv_idx = acc.get("bufferView")?.num()? as usize;
449
+ let count = acc.get("count")?.num()? as usize;
450
+ let byte_off_acc = acc.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
451
+ let bv = buf_views.get(bv_idx)?;
452
+ let byte_off_bv = bv.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
453
+ let base = byte_off_bv + byte_off_acc;
454
+
455
+ let stride_per_element = match comp_type {
456
+ 5121 => 1, // u8
457
+ 5123 => 2, // u16
458
+ _ => return None,
459
+ };
460
+ let total_bytes = count * 4 * stride_per_element;
461
+ if base + total_bytes > bin.len() { return None; }
462
+
463
+ let mut out = Vec::with_capacity(count * 4);
464
+ for i in 0..(count * 4) {
465
+ let o = base + i * stride_per_element;
466
+ let v = match comp_type {
467
+ 5121 => bin[o] as u32,
468
+ 5123 => u16::from_le_bytes([bin[o], bin[o + 1]]) as u32,
469
+ _ => return None,
470
+ };
471
+ out.push(v);
472
+ }
473
+ Some(out)
474
+ }
475
+
476
+ /// Chase a material.<slotName>.index → textures[i].source → images[j]
477
+ /// → bufferViews[k] → BIN bytes, register via crate::textures. Returns the
478
+ /// texture handle or 0 on any missing link.
479
+ fn resolve_texture(root: &JVal, parent: &JVal, slot_name: &str, bin: &[u8]) -> u32 {
480
+ let Some(slot) = parent.get(slot_name) else { return 0 };
481
+ let Some(tex_idx) = slot.get("index").and_then(|v| v.num()) else { return 0 };
482
+ let Some(textures) = root.get("textures").and_then(|v| v.arr()) else { return 0 };
483
+ let Some(tex) = textures.get(tex_idx as usize) else { return 0 };
484
+ let Some(src_idx) = tex.get("source").and_then(|v| v.num()) else { return 0 };
485
+ let Some(images) = root.get("images").and_then(|v| v.arr()) else { return 0 };
486
+ let Some(img) = images.get(src_idx as usize) else { return 0 };
487
+ let Some(bv_idx) = img.get("bufferView").and_then(|v| v.num()) else { return 0 };
488
+ let Some(buf_views) = root.get("bufferViews").and_then(|v| v.arr()) else { return 0 };
489
+ let Some(bv) = buf_views.get(bv_idx as usize) else { return 0 };
490
+
491
+ let off = bv.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
492
+ let len = bv.get("byteLength").and_then(|v| v.num()).unwrap_or(0.0) as usize;
493
+ if off + len > bin.len() { return 0; }
494
+ crate::textures::register_bytes(&bin[off..off + len])
495
+ }
496
+
497
+ fn u32_le(b: &[u8], o: usize) -> u32 {
498
+ u32::from_le_bytes([b[o], b[o+1], b[o+2], b[o+3]])
499
+ }
500
+
501
+ /// Resolve accessor → raw float slice from the bin chunk. `components` is
502
+ /// the expected vector width (3 for position/normal, 2 for uv). glTF stores
503
+ /// accessor.componentType = 5126 (FLOAT) for these.
504
+ fn read_f32_vec(
505
+ accessors: &[JVal], buf_views: &[JVal], bin: &[u8],
506
+ acc_idx: usize, components: usize,
507
+ ) -> Option<Vec<f32>> {
508
+ let acc = accessors.get(acc_idx)?;
509
+ let bv_idx = acc.get("bufferView")?.num()? as usize;
510
+ let count = acc.get("count")?.num()? as usize;
511
+ let byte_off_acc = acc.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
512
+
513
+ let bv = buf_views.get(bv_idx)?;
514
+ let byte_off_bv = bv.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
515
+ let stride = bv.get("byteStride").and_then(|v| v.num()).map(|n| n as usize)
516
+ .unwrap_or(components * 4);
517
+
518
+ let mut out = Vec::with_capacity(count * components);
519
+ for i in 0..count {
520
+ let base = byte_off_bv + byte_off_acc + i * stride;
521
+ if base + components * 4 > bin.len() { return None; }
522
+ for c in 0..components {
523
+ let b = base + c * 4;
524
+ out.push(f32::from_le_bytes([bin[b], bin[b+1], bin[b+2], bin[b+3]]));
525
+ }
526
+ }
527
+ Some(out)
528
+ }
529
+
530
+ /// Indices — componentType 5121 (u8), 5123 (u16), or 5125 (u32). Always
531
+ /// returned as u32.
532
+ fn read_index_vec(
533
+ accessors: &[JVal], buf_views: &[JVal], bin: &[u8], acc_idx: usize,
534
+ ) -> Option<Vec<u32>> {
535
+ let acc = accessors.get(acc_idx)?;
536
+ let comp_type = acc.get("componentType")?.num()? as u32;
537
+ let bv_idx = acc.get("bufferView")?.num()? as usize;
538
+ let count = acc.get("count")?.num()? as usize;
539
+ let byte_off_acc = acc.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
540
+
541
+ let bv = buf_views.get(bv_idx)?;
542
+ let byte_off_bv = bv.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
543
+ let base = byte_off_bv + byte_off_acc;
544
+
545
+ let mut out = Vec::with_capacity(count);
546
+ match comp_type {
547
+ 5121 => { // u8
548
+ if base + count > bin.len() { return None; }
549
+ for i in 0..count { out.push(bin[base + i] as u32); }
550
+ }
551
+ 5123 => { // u16
552
+ if base + count * 2 > bin.len() { return None; }
553
+ for i in 0..count {
554
+ let o = base + i * 2;
555
+ out.push(u16::from_le_bytes([bin[o], bin[o+1]]) as u32);
556
+ }
557
+ }
558
+ 5125 => { // u32
559
+ if base + count * 4 > bin.len() { return None; }
560
+ for i in 0..count {
561
+ let o = base + i * 4;
562
+ out.push(u32::from_le_bytes([bin[o], bin[o+1], bin[o+2], bin[o+3]]));
563
+ }
564
+ }
565
+ _ => return None,
566
+ }
567
+ Some(out)
568
+ }
569
+
570
+ // ---------- Tiny JSON value parser ----------
571
+ //
572
+ // Only what we need for glTF: objects, arrays, numbers, strings. No booleans,
573
+ // null, escapes, or unicode. Exporter output tends to be well-formed.
574
+
575
+ #[derive(Debug, Clone)]
576
+ pub enum JVal {
577
+ Obj(Vec<(String, JVal)>),
578
+ Arr(Vec<JVal>),
579
+ Num(f64),
580
+ Str(String),
581
+ }
582
+
583
+ impl JVal {
584
+ pub fn get(&self, key: &str) -> Option<&JVal> {
585
+ match self {
586
+ JVal::Obj(v) => v.iter().find(|(k, _)| k == key).map(|(_, v)| v),
587
+ _ => None,
588
+ }
589
+ }
590
+ pub fn arr(&self) -> Option<&[JVal]> {
591
+ if let JVal::Arr(a) = self { Some(a.as_slice()) } else { None }
592
+ }
593
+ pub fn num(&self) -> Option<f64> {
594
+ if let JVal::Num(n) = self { Some(*n) } else { None }
595
+ }
596
+ }
597
+
598
+ struct P<'a> { bytes: &'a [u8], pos: usize }
599
+
600
+ impl<'a> P<'a> {
601
+ fn peek(&self) -> Option<u8> { self.bytes.get(self.pos).copied() }
602
+ fn bump(&mut self) -> Option<u8> {
603
+ let c = self.peek()?; self.pos += 1; Some(c)
604
+ }
605
+ fn skip_ws(&mut self) {
606
+ while let Some(c) = self.peek() {
607
+ if c == b' ' || c == b'\t' || c == b'\n' || c == b'\r' { self.pos += 1; }
608
+ else { break; }
609
+ }
610
+ }
611
+ fn val(&mut self) -> Option<JVal> {
612
+ self.skip_ws();
613
+ match self.peek()? {
614
+ b'{' => self.obj(),
615
+ b'[' => self.arr(),
616
+ b'"' => self.string().map(JVal::Str),
617
+ b'-' | b'0'..=b'9' => self.number().map(JVal::Num),
618
+ b't' => { for c in b"true" { if self.bump() != Some(*c) { return None; } } Some(JVal::Num(1.0)) }
619
+ b'f' => { for c in b"false" { if self.bump() != Some(*c) { return None; } } Some(JVal::Num(0.0)) }
620
+ b'n' => { for c in b"null" { if self.bump() != Some(*c) { return None; } } Some(JVal::Num(0.0)) }
621
+ _ => None,
622
+ }
623
+ }
624
+ fn obj(&mut self) -> Option<JVal> {
625
+ if self.bump() != Some(b'{') { return None; }
626
+ let mut kv = Vec::new();
627
+ loop {
628
+ self.skip_ws();
629
+ match self.peek()? {
630
+ b'}' => { self.bump(); return Some(JVal::Obj(kv)); }
631
+ b',' => { self.bump(); continue; }
632
+ b'"' => {
633
+ let key = self.string()?;
634
+ self.skip_ws();
635
+ if self.bump() != Some(b':') { return None; }
636
+ let v = self.val()?;
637
+ kv.push((key, v));
638
+ }
639
+ _ => return None,
640
+ }
641
+ }
642
+ }
643
+ fn arr(&mut self) -> Option<JVal> {
644
+ if self.bump() != Some(b'[') { return None; }
645
+ let mut items = Vec::new();
646
+ loop {
647
+ self.skip_ws();
648
+ match self.peek()? {
649
+ b']' => { self.bump(); return Some(JVal::Arr(items)); }
650
+ b',' => { self.bump(); continue; }
651
+ _ => items.push(self.val()?),
652
+ }
653
+ }
654
+ }
655
+ fn string(&mut self) -> Option<String> {
656
+ if self.bump() != Some(b'"') { return None; }
657
+ let start = self.pos;
658
+ while let Some(c) = self.peek() {
659
+ if c == b'"' {
660
+ let s = std::str::from_utf8(&self.bytes[start..self.pos]).ok()?.to_string();
661
+ self.bump();
662
+ return Some(s);
663
+ }
664
+ if c == b'\\' { self.bump(); } // skip escape + next char
665
+ self.bump();
666
+ }
667
+ None
668
+ }
669
+ fn number(&mut self) -> Option<f64> {
670
+ let start = self.pos;
671
+ if self.peek() == Some(b'-') { self.bump(); }
672
+ while let Some(c) = self.peek() {
673
+ match c {
674
+ b'0'..=b'9' | b'.' | b'e' | b'E' | b'+' | b'-' => { self.bump(); }
675
+ _ => break,
676
+ }
677
+ }
678
+ std::str::from_utf8(&self.bytes[start..self.pos]).ok()?.parse().ok()
679
+ }
680
+ }
681
+
682
+ pub fn json_parse(s: &str) -> Option<JVal> {
683
+ P { bytes: s.as_bytes(), pos: 0 }.val()
684
+ }
685
+
686
+ // ---------- Procedural cube mesh — for bloom_gen_mesh_cube ----------
687
+
688
+ pub fn gen_cube_mesh(w: f32, h: f32, d: f32) -> u32 {
689
+ let hx = w * 0.5;
690
+ let hy = h * 0.5;
691
+ let hz = d * 0.5;
692
+
693
+ // 6 faces × 4 verts each, positions + normals + uvs per vertex.
694
+ // Face data: normal direction and (a, b) UV-space corners relative.
695
+ let faces: &[[f32; 3]] = &[
696
+ [ 0.0, 0.0, 1.0], [ 0.0, 0.0, -1.0],
697
+ [ 1.0, 0.0, 0.0], [-1.0, 0.0, 0.0],
698
+ [ 0.0, 1.0, 0.0], [ 0.0, -1.0, 0.0],
699
+ ];
700
+ let corners: &[[[f32; 3]; 4]] = &[
701
+ [[-hx,-hy, hz],[ hx,-hy, hz],[ hx, hy, hz],[-hx, hy, hz]], // +Z
702
+ [[ hx,-hy,-hz],[-hx,-hy,-hz],[-hx, hy,-hz],[ hx, hy,-hz]], // -Z
703
+ [[ hx,-hy, hz],[ hx,-hy,-hz],[ hx, hy,-hz],[ hx, hy, hz]], // +X
704
+ [[-hx,-hy,-hz],[-hx,-hy, hz],[-hx, hy, hz],[-hx, hy,-hz]], // -X
705
+ [[-hx, hy, hz],[ hx, hy, hz],[ hx, hy,-hz],[-hx, hy,-hz]], // +Y
706
+ [[-hx,-hy,-hz],[ hx,-hy,-hz],[ hx,-hy, hz],[-hx,-hy, hz]], // -Y
707
+ ];
708
+ let uvs_per_corner = [[0.0_f32, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]];
709
+
710
+ let mut positions = Vec::with_capacity(6 * 4 * 3);
711
+ let mut normals = Vec::with_capacity(6 * 4 * 3);
712
+ let mut uvs = Vec::with_capacity(6 * 4 * 2);
713
+ let mut indices = Vec::with_capacity(6 * 6);
714
+
715
+ for f in 0..6 {
716
+ let n = faces[f];
717
+ for c in 0..4 {
718
+ let p = corners[f][c];
719
+ positions.extend_from_slice(&p);
720
+ normals.extend_from_slice(&n);
721
+ uvs.extend_from_slice(&uvs_per_corner[c]);
722
+ }
723
+ let base = (f * 4) as u32;
724
+ indices.extend_from_slice(&[base, base+1, base+2, base, base+2, base+3]);
725
+ }
726
+
727
+ let mut reg = MODELS.lock().unwrap();
728
+ if reg.is_empty() { reg.push(None); }
729
+ let mut root = Node::identity();
730
+ root.mesh = Some(0);
731
+ reg.push(Some(Arc::new(Model {
732
+ meshes: vec![Mesh { primitives: vec![Primitive {
733
+ positions, normals, uvs, indices,
734
+ color: [1.0, 1.0, 1.0, 1.0],
735
+ metallic: 0.0, roughness: 0.6,
736
+ tex_base_color: 0, tex_normal: 0, tex_metallic_roughness: 0,
737
+ tex_emissive: 0, tex_occlusion: 0,
738
+ joint_indices: Vec::new(), weights: Vec::new(),
739
+ }] }],
740
+ nodes: vec![root],
741
+ scene_roots: vec![0],
742
+ skins: Vec::new(),
743
+ animations: Vec::new(),
744
+ })));
745
+ (reg.len() - 1) as u32
746
+ }