@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,604 @@
1
+ // Material pipeline — the entry point for custom WGSL materials against
2
+ // the ABI described in docs/rfc/0001-material-render-graph.md.
3
+ //
4
+ // This module is deliberately self-contained. It owns the bind-group
5
+ // layouts, pipeline-layout composition, and the preprocessor driver.
6
+ // The rest of the renderer doesn't know or care how a material is
7
+ // compiled — it just receives a `MaterialPipeline` and uses the
8
+ // layouts for binding groups that the shader declares it consumes.
9
+ //
10
+ // Phase 1b scope: everything needed to *compile* a material pipeline
11
+ // from user WGSL against the ABI. Draw dispatch, per-draw uniform
12
+ // writes, and FFI glue all land in follow-up phases.
13
+
14
+ use super::shader_include::{BakedSource, IncludeError, process};
15
+
16
+ // =====================================================================
17
+ // Bind-group layouts — one struct, five layouts, matching RFC §1
18
+ // =====================================================================
19
+
20
+ /// The five bind-group layouts every ABI-compliant pipeline binds.
21
+ /// Owned by Renderer once per process (not per pipeline). Cheap to clone
22
+ /// references since `wgpu::BindGroupLayout` is Arc'd internally.
23
+ pub struct MaterialAbiLayouts {
24
+ pub per_frame: wgpu::BindGroupLayout,
25
+ pub per_view: wgpu::BindGroupLayout,
26
+ pub per_material: wgpu::BindGroupLayout,
27
+ pub per_draw: wgpu::BindGroupLayout,
28
+ pub scene_inputs: wgpu::BindGroupLayout,
29
+ }
30
+
31
+ impl MaterialAbiLayouts {
32
+ pub fn create(device: &wgpu::Device) -> Self {
33
+ Self {
34
+ per_frame: create_per_frame_layout(device),
35
+ per_view: create_per_view_layout(device),
36
+ per_material: create_per_material_layout(device),
37
+ per_draw: create_per_draw_layout(device),
38
+ scene_inputs: create_scene_inputs_layout(device),
39
+ }
40
+ }
41
+ }
42
+
43
+ fn create_per_frame_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout {
44
+ device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
45
+ label: Some("abi_per_frame"),
46
+ entries: &[wgpu::BindGroupLayoutEntry {
47
+ binding: 0,
48
+ visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT,
49
+ ty: wgpu::BindingType::Buffer {
50
+ ty: wgpu::BufferBindingType::Uniform,
51
+ has_dynamic_offset: false,
52
+ min_binding_size: None,
53
+ },
54
+ count: None,
55
+ }],
56
+ })
57
+ }
58
+
59
+ fn create_per_view_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout {
60
+ // Mirror of the ABI header: UBO at 0, env colour + sampler at 1+2,
61
+ // env diffuse at 3, BRDF LUT + sampler at 4+5, three cascades at
62
+ // 6..8, comparison sampler at 9.
63
+ device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
64
+ label: Some("abi_per_view"),
65
+ entries: &[
66
+ entry_ubo(0, wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT),
67
+ entry_tex_f(1, wgpu::ShaderStages::FRAGMENT),
68
+ entry_samp(2, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
69
+ entry_tex_f(3, wgpu::ShaderStages::FRAGMENT),
70
+ entry_tex_f(4, wgpu::ShaderStages::FRAGMENT),
71
+ entry_samp(5, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
72
+ entry_tex_depth(6, wgpu::ShaderStages::FRAGMENT),
73
+ entry_tex_depth(7, wgpu::ShaderStages::FRAGMENT),
74
+ entry_tex_depth(8, wgpu::ShaderStages::FRAGMENT),
75
+ entry_samp(9, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Comparison),
76
+ ],
77
+ })
78
+ }
79
+
80
+ fn create_per_material_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout {
81
+ // PBR texture + sampler pairs: base, normal, mr, emissive, occlusion.
82
+ // Bindings 0..9 are texture/sampler pairs. Binding 10 is
83
+ // MaterialFactors UBO. Binding 11 is the user_params UBO (shader-
84
+ // defined type; 256-byte cap enforced by the pipeline-creation
85
+ // helper, not by the layout itself). Bindings 12 (texture) + 13
86
+ // (sampler) are the EN-011 planar reflection RT — bound to the
87
+ // engine's 1×1 black default for materials without a probe so
88
+ // unconditional sampling is always safe. Bindings 14/15/16/17 are
89
+ // the EN-014 texture-array slots (albedo / normal / MR + a shared
90
+ // sampler) for splat-mapped terrain materials — bound to a 1×1×1
91
+ // black stub array when a material doesn't declare its own.
92
+ device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
93
+ label: Some("abi_per_material"),
94
+ entries: &[
95
+ entry_tex_f(0, wgpu::ShaderStages::FRAGMENT),
96
+ entry_samp(1, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
97
+ entry_tex_f(2, wgpu::ShaderStages::FRAGMENT),
98
+ entry_samp(3, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
99
+ entry_tex_f(4, wgpu::ShaderStages::FRAGMENT),
100
+ entry_samp(5, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
101
+ entry_tex_f(6, wgpu::ShaderStages::FRAGMENT),
102
+ entry_samp(7, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
103
+ entry_tex_f(8, wgpu::ShaderStages::FRAGMENT),
104
+ entry_samp(9, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
105
+ entry_ubo(10, wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT),
106
+ entry_ubo(11, wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT),
107
+ // EN-011 — planar reflection RT (texture + sampler).
108
+ entry_tex_f(12, wgpu::ShaderStages::FRAGMENT),
109
+ entry_samp(13, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
110
+ // EN-014 — texture-array slots for splat-mapped terrain.
111
+ entry_tex_f_array(14, wgpu::ShaderStages::FRAGMENT),
112
+ entry_tex_f_array(15, wgpu::ShaderStages::FRAGMENT),
113
+ entry_tex_f_array(16, wgpu::ShaderStages::FRAGMENT),
114
+ entry_samp(17, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
115
+ ],
116
+ })
117
+ }
118
+
119
+ fn create_per_draw_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout {
120
+ device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
121
+ label: Some("abi_per_draw"),
122
+ entries: &[
123
+ entry_ubo(0, wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT),
124
+ entry_ubo(1, wgpu::ShaderStages::VERTEX), // JointMatrices (1024 × mat4)
125
+ ],
126
+ })
127
+ }
128
+
129
+ fn create_scene_inputs_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout {
130
+ device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
131
+ label: Some("abi_scene_inputs"),
132
+ entries: &[
133
+ entry_tex_f(0, wgpu::ShaderStages::FRAGMENT),
134
+ entry_samp(1, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::Filtering),
135
+ entry_tex_depth(2, wgpu::ShaderStages::FRAGMENT),
136
+ entry_samp(3, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::NonFiltering),
137
+ // Phase 7 — impulse_tex is R32Float which is non-filterable
138
+ // in wgpu 29 without a feature flag, so the binding is
139
+ // declared NonFiltering. Materials sample via textureLoad
140
+ // (no filtering; 0.5 m / texel is already coarse).
141
+ entry_tex_f_nonfilt(4, wgpu::ShaderStages::FRAGMENT),
142
+ entry_samp(5, wgpu::ShaderStages::FRAGMENT, wgpu::SamplerBindingType::NonFiltering),
143
+ entry_tex_f(6, wgpu::ShaderStages::FRAGMENT),
144
+ ],
145
+ })
146
+ }
147
+
148
+ fn entry_tex_f_nonfilt(binding: u32, vis: wgpu::ShaderStages) -> wgpu::BindGroupLayoutEntry {
149
+ wgpu::BindGroupLayoutEntry {
150
+ binding, visibility: vis,
151
+ ty: wgpu::BindingType::Texture {
152
+ sample_type: wgpu::TextureSampleType::Float { filterable: false },
153
+ view_dimension: wgpu::TextureViewDimension::D2,
154
+ multisampled: false,
155
+ },
156
+ count: None,
157
+ }
158
+ }
159
+
160
+ // Small helpers for binding entry construction.
161
+ fn entry_ubo(binding: u32, vis: wgpu::ShaderStages) -> wgpu::BindGroupLayoutEntry {
162
+ wgpu::BindGroupLayoutEntry {
163
+ binding, visibility: vis,
164
+ ty: wgpu::BindingType::Buffer {
165
+ ty: wgpu::BufferBindingType::Uniform,
166
+ has_dynamic_offset: false,
167
+ min_binding_size: None,
168
+ },
169
+ count: None,
170
+ }
171
+ }
172
+ fn entry_tex_f(binding: u32, vis: wgpu::ShaderStages) -> wgpu::BindGroupLayoutEntry {
173
+ wgpu::BindGroupLayoutEntry {
174
+ binding, visibility: vis,
175
+ ty: wgpu::BindingType::Texture {
176
+ sample_type: wgpu::TextureSampleType::Float { filterable: true },
177
+ view_dimension: wgpu::TextureViewDimension::D2,
178
+ multisampled: false,
179
+ },
180
+ count: None,
181
+ }
182
+ }
183
+ /// EN-014 — `texture_2d_array<f32>` binding entry. Used for the
184
+ /// splat-mapped terrain slots (albedo / normal / MR arrays) at
185
+ /// bindings 14/15/16. Filterable so games can use linear filtering
186
+ /// per-layer.
187
+ fn entry_tex_f_array(binding: u32, vis: wgpu::ShaderStages) -> wgpu::BindGroupLayoutEntry {
188
+ wgpu::BindGroupLayoutEntry {
189
+ binding, visibility: vis,
190
+ ty: wgpu::BindingType::Texture {
191
+ sample_type: wgpu::TextureSampleType::Float { filterable: true },
192
+ view_dimension: wgpu::TextureViewDimension::D2Array,
193
+ multisampled: false,
194
+ },
195
+ count: None,
196
+ }
197
+ }
198
+ fn entry_tex_depth(binding: u32, vis: wgpu::ShaderStages) -> wgpu::BindGroupLayoutEntry {
199
+ wgpu::BindGroupLayoutEntry {
200
+ binding, visibility: vis,
201
+ ty: wgpu::BindingType::Texture {
202
+ sample_type: wgpu::TextureSampleType::Depth,
203
+ view_dimension: wgpu::TextureViewDimension::D2,
204
+ multisampled: false,
205
+ },
206
+ count: None,
207
+ }
208
+ }
209
+ fn entry_samp(binding: u32, vis: wgpu::ShaderStages, ty: wgpu::SamplerBindingType)
210
+ -> wgpu::BindGroupLayoutEntry {
211
+ wgpu::BindGroupLayoutEntry {
212
+ binding, visibility: vis,
213
+ ty: wgpu::BindingType::Sampler(ty),
214
+ count: None,
215
+ }
216
+ }
217
+
218
+ // =====================================================================
219
+ // Fragment output profile — opaque or translucent
220
+ // =====================================================================
221
+
222
+ /// Fragment output profile a material declares. Decides the pipeline's
223
+ /// colour attachment layout and blend state. See ABI §1.8.
224
+ #[derive(Copy, Clone, Debug, Eq, PartialEq)]
225
+ pub enum FragmentProfile {
226
+ /// Four MRT attachments: HDR, material, velocity, albedo.
227
+ Opaque,
228
+ /// Single HDR attachment, alpha-blended. Does not write depth.
229
+ Translucent,
230
+ }
231
+
232
+ /// Scheduling bucket — tells the render graph which pass a draw
233
+ /// belongs in and what sort order to apply. Distinct from
234
+ /// `FragmentProfile` (which describes pipeline outputs): a material
235
+ /// with profile `Translucent` could be in either `Transparent` or
236
+ /// `Refractive`, and `Additive` is its own bucket even though it
237
+ /// shares attachment layout with `Transparent`.
238
+ ///
239
+ /// See RFC 0001 §3.2.
240
+ #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
241
+ pub enum Bucket {
242
+ /// Opaque draws. Front-to-back sort for early-z efficiency. Runs
243
+ /// in the main HDR pass; writes the full 4-MRT G-buffer.
244
+ Opaque,
245
+ /// Alpha-cutout draws (foliage cards, chain-link fences, leaf
246
+ /// silhouettes). Runs in the opaque pass with full G-buffer write
247
+ /// + sun shadow + SSAO, but the fragment shader is expected to
248
+ /// `discard` against `MaterialFactors.alpha_cutoff`. Rendered
249
+ /// double-sided so foliage is visible from both faces.
250
+ Cutout,
251
+ /// Translucent draws. Back-to-front sort for correct blending.
252
+ /// Single HDR attachment, alpha-blended, depth-test without
253
+ /// depth-write. Runs in the translucent sub-pass (Phase 4b).
254
+ Transparent,
255
+ /// Translucent + reads the scene colour snapshot (for refraction,
256
+ /// Fresnel, shoreline effects). Same pass + sort as Transparent
257
+ /// but the graph inserts a SceneColor snapshot before this
258
+ /// bucket runs.
259
+ Refractive,
260
+ /// Additive-blend draws — particle flares, sparks, weapon
261
+ /// glows. Order-independent, so no sort needed. Runs in the
262
+ /// translucent sub-pass.
263
+ Additive,
264
+ }
265
+
266
+ impl Bucket {
267
+ /// True if this bucket dispatches in the translucent sub-pass
268
+ /// (single HDR attachment, alpha/additive blending) rather than
269
+ /// the main HDR pass.
270
+ pub fn is_translucent(self) -> bool {
271
+ matches!(self, Bucket::Transparent | Bucket::Refractive | Bucket::Additive)
272
+ }
273
+ /// True if this bucket requires a SceneColor snapshot before it
274
+ /// runs. Only Refractive does today; future buckets (e.g.
275
+ /// VolumetricFog) may join.
276
+ pub fn needs_scene_color(self) -> bool {
277
+ matches!(self, Bucket::Refractive)
278
+ }
279
+ }
280
+
281
+ // =====================================================================
282
+ // Material pipeline — the compiled artefact
283
+ // =====================================================================
284
+
285
+ /// A pipeline ready to receive draws. Owns only the `RenderPipeline`;
286
+ /// the layouts are borrowed from the shared `MaterialAbiLayouts`.
287
+ pub struct MaterialPipeline {
288
+ pub pipeline: wgpu::RenderPipeline,
289
+ pub profile: FragmentProfile,
290
+ pub bucket: Bucket,
291
+ pub reads_scene: bool,
292
+ /// EN-001 — true when the pipeline was compiled with the
293
+ /// per-instance vertex layout (slot 1, step_mode = Instance). The
294
+ /// dispatch site uses this as a sanity flag — it doesn't change
295
+ /// what bind groups get bound, only which `set_vertex_buffer(1, …)`
296
+ /// path runs for a given draw command.
297
+ pub wants_instancing: bool,
298
+ /// Label carried through for debug output.
299
+ pub label: String,
300
+ /// EN-011 V2 — sibling pipeline with front-face culling for use in
301
+ /// planar reflection passes. Reflection inverts triangle winding,
302
+ /// so an opaque material that would normally cull back-faces needs
303
+ /// to cull front-faces in the mirrored pass — otherwise single-
304
+ /// sided geometry renders inside-out. Lazily compiled the first
305
+ /// time the material gets linked to a probe via
306
+ /// `MaterialSystem::set_reflection_probe`. Reuses the main
307
+ /// pipeline's shader module — the only difference is `cull_mode`.
308
+ ///
309
+ /// `None` for materials whose original cull mode is already
310
+ /// `None` (translucent, cutout) — flipping a non-culled pipeline
311
+ /// is a no-op so we don't bother compiling a duplicate.
312
+ pub reflection_pipeline: Option<wgpu::RenderPipeline>,
313
+ }
314
+
315
+ /// Options passed to compile a material. Matches the material-descriptor
316
+ /// shape in RFC §3.1, minus the textures / parameters (those are game
317
+ /// data, set per draw).
318
+ pub struct MaterialCompileDesc<'a> {
319
+ pub label: &'a str,
320
+ pub entry_path: &'a str, // e.g. "materials/water.wgsl"
321
+ /// Additional (path, source) entries layered over the baked library.
322
+ /// Game-supplied shaders live here.
323
+ pub extra_sources: &'a [(&'a str, &'a str)],
324
+ pub profile: FragmentProfile,
325
+ pub bucket: Bucket,
326
+ pub reads_scene: bool,
327
+ pub hdr_format: wgpu::TextureFormat,
328
+ pub material_format: wgpu::TextureFormat,
329
+ pub velocity_format: wgpu::TextureFormat,
330
+ pub albedo_format: wgpu::TextureFormat,
331
+ pub depth_format: wgpu::TextureFormat,
332
+ pub vertex_buffers: &'a [wgpu::VertexBufferLayout<'a>],
333
+ /// EN-001 — when true, `compile_material` appends
334
+ /// `InstanceData3D::desc()` to `vertex_buffers` so the pipeline
335
+ /// expects a second VB at slot 1 with step_mode = Instance.
336
+ pub wants_instancing: bool,
337
+ }
338
+
339
+ #[derive(Debug)]
340
+ pub enum MaterialCompileError {
341
+ Include(IncludeError),
342
+ Naga(String),
343
+ Wgpu(String),
344
+ }
345
+ impl From<IncludeError> for MaterialCompileError {
346
+ fn from(e: IncludeError) -> Self { MaterialCompileError::Include(e) }
347
+ }
348
+
349
+ /// Compile a material pipeline. This is the happy-path you call at
350
+ /// `loadMaterial()` time.
351
+ pub fn compile_material(
352
+ device: &wgpu::Device,
353
+ layouts: &MaterialAbiLayouts,
354
+ desc: &MaterialCompileDesc<'_>,
355
+ ) -> Result<MaterialPipeline, MaterialCompileError> {
356
+ // 1. Resolve #include chain against the baked library +
357
+ // game-supplied overlay.
358
+ let baked_entries = BAKED_ENTRIES_SNAPSHOT; // from library snapshot below
359
+ let mut entries: Vec<(&str, &str)> = baked_entries.to_vec();
360
+ for &(p, s) in desc.extra_sources {
361
+ entries.push((p, s));
362
+ }
363
+ let source = BakedSource { entries: &entries };
364
+ let expanded = process(&source, desc.entry_path)?;
365
+
366
+ // 2. Create shader module. wgpu's WGSL parser surfaces errors as
367
+ // panics through the default handler; we catch them by
368
+ // pushing the scope and popping on failure.
369
+ let _ = device.push_error_scope(wgpu::ErrorFilter::Validation);
370
+ let module = device.create_shader_module(wgpu::ShaderModuleDescriptor {
371
+ label: Some(desc.label),
372
+ source: wgpu::ShaderSource::Wgsl(expanded.into()),
373
+ });
374
+ // Note: we don't poll the error scope here because wgpu 29 returns
375
+ // validation errors synchronously via the device's uncaptured-error
376
+ // handler; callers should install their own handler for hot-reload.
377
+
378
+ // 3. Pipeline layout — always binds groups 0..3; only includes
379
+ // scene_inputs when the material declares it.
380
+ let mut bg_layouts: Vec<Option<&wgpu::BindGroupLayout>> = vec![
381
+ Some(&layouts.per_frame),
382
+ Some(&layouts.per_view),
383
+ Some(&layouts.per_material),
384
+ Some(&layouts.per_draw),
385
+ ];
386
+ if desc.reads_scene {
387
+ bg_layouts.push(Some(&layouts.scene_inputs));
388
+ }
389
+ let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
390
+ label: Some(desc.label),
391
+ bind_group_layouts: &bg_layouts,
392
+ immediate_size: 0,
393
+ });
394
+
395
+ // 4. Colour targets based on profile.
396
+ let opaque_targets = [
397
+ Some(wgpu::ColorTargetState {
398
+ format: desc.hdr_format,
399
+ blend: None,
400
+ write_mask: wgpu::ColorWrites::ALL,
401
+ }),
402
+ Some(wgpu::ColorTargetState {
403
+ format: desc.material_format,
404
+ blend: None,
405
+ write_mask: wgpu::ColorWrites::ALL,
406
+ }),
407
+ Some(wgpu::ColorTargetState {
408
+ format: desc.velocity_format,
409
+ blend: None,
410
+ write_mask: wgpu::ColorWrites::ALL,
411
+ }),
412
+ Some(wgpu::ColorTargetState {
413
+ format: desc.albedo_format,
414
+ blend: None,
415
+ write_mask: wgpu::ColorWrites::ALL,
416
+ }),
417
+ ];
418
+ // Additive bucket uses src+dst on color; alpha-blending buckets
419
+ // (Transparent, Refractive) use SrcAlpha/OneMinusSrcAlpha. Both
420
+ // share the single HDR attachment.
421
+ let additive_blend = wgpu::BlendState {
422
+ color: wgpu::BlendComponent {
423
+ src_factor: wgpu::BlendFactor::One,
424
+ dst_factor: wgpu::BlendFactor::One,
425
+ operation: wgpu::BlendOperation::Add,
426
+ },
427
+ alpha: wgpu::BlendComponent::OVER,
428
+ };
429
+ let translucent_blend = match desc.bucket {
430
+ Bucket::Additive => additive_blend,
431
+ _ => wgpu::BlendState::ALPHA_BLENDING,
432
+ };
433
+ let translucent_targets = [Some(wgpu::ColorTargetState {
434
+ format: desc.hdr_format,
435
+ blend: Some(translucent_blend),
436
+ write_mask: wgpu::ColorWrites::ALL,
437
+ })];
438
+ let targets: &[Option<wgpu::ColorTargetState>] = match desc.profile {
439
+ FragmentProfile::Opaque => &opaque_targets,
440
+ FragmentProfile::Translucent => &translucent_targets,
441
+ };
442
+
443
+ // 5. Depth-stencil — translucent reads depth, doesn't write.
444
+ let depth_stencil = Some(wgpu::DepthStencilState {
445
+ format: desc.depth_format,
446
+ depth_write_enabled: Some(matches!(desc.profile, FragmentProfile::Opaque)),
447
+ depth_compare: Some(wgpu::CompareFunction::Less),
448
+ stencil: wgpu::StencilState::default(),
449
+ bias: wgpu::DepthBiasState::default(),
450
+ });
451
+
452
+ // 6. Vertex + fragment entry points. Convention: `vs_main` / `fs_main`.
453
+ // Materials can override by prefixing their shader with
454
+ // `// @entry vs:foo fs:bar` but the first version is fixed names.
455
+ //
456
+ // EN-001 — when `wants_instancing` is set, append the standard
457
+ // InstanceData3D layout so the pipeline expects a second VB at
458
+ // slot 1 (step_mode = Instance). The owned Vec only lives long
459
+ // enough to be referenced by the RenderPipelineDescriptor.
460
+ let vertex_buffers_owned: Vec<wgpu::VertexBufferLayout<'_>>;
461
+ let vertex_buffers: &[wgpu::VertexBufferLayout<'_>] = if desc.wants_instancing {
462
+ vertex_buffers_owned = desc.vertex_buffers
463
+ .iter()
464
+ .cloned()
465
+ .chain(std::iter::once(crate::renderer::types::InstanceData3D::desc()))
466
+ .collect();
467
+ &vertex_buffers_owned
468
+ } else {
469
+ desc.vertex_buffers
470
+ };
471
+ // Translucent materials (water, glass, particles) are commonly
472
+ // viewed from both sides, so they render double-sided. Cutout
473
+ // materials (foliage cards, chain-link fences) likewise need to
474
+ // be visible from both faces. Plain Opaque materials cull backfaces.
475
+ let main_cull = if matches!(desc.profile, FragmentProfile::Translucent)
476
+ || matches!(desc.bucket, Bucket::Cutout) {
477
+ None
478
+ } else {
479
+ Some(wgpu::Face::Back)
480
+ };
481
+
482
+ let make_pipeline = |cull: Option<wgpu::Face>, label_suffix: &str| {
483
+ let label_owned = format!("{}{}", desc.label, label_suffix);
484
+ device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
485
+ label: Some(&label_owned),
486
+ layout: Some(&pipeline_layout),
487
+ vertex: wgpu::VertexState {
488
+ module: &module,
489
+ entry_point: Some("vs_main"),
490
+ buffers: vertex_buffers,
491
+ compilation_options: Default::default(),
492
+ },
493
+ fragment: Some(wgpu::FragmentState {
494
+ module: &module,
495
+ entry_point: Some("fs_main"),
496
+ targets,
497
+ compilation_options: Default::default(),
498
+ }),
499
+ primitive: wgpu::PrimitiveState {
500
+ topology: wgpu::PrimitiveTopology::TriangleList,
501
+ front_face: wgpu::FrontFace::Ccw,
502
+ cull_mode: cull,
503
+ ..Default::default()
504
+ },
505
+ depth_stencil: depth_stencil.clone(),
506
+ multisample: wgpu::MultisampleState::default(),
507
+ multiview_mask: None,
508
+ cache: None,
509
+ })
510
+ };
511
+
512
+ let pipeline = make_pipeline(main_cull, "");
513
+
514
+ // EN-011 V2 — eagerly compile a reflection sibling with cull_mode
515
+ // flipped (Back → Front). Reflection mirrors world-space, which
516
+ // inverts triangle winding; without this swap, single-sided opaque
517
+ // geometry renders inside-out in the planar-reflection pass.
518
+ //
519
+ // Only build the variant when the original cull mode is `Back` —
520
+ // for `None` (translucent, cutout) and any future `Front`-default
521
+ // case, the reflection variant would be identical to the main
522
+ // pipeline (or already-flipped), so we save the compile cost.
523
+ //
524
+ // The cost when we DO build is a single extra pipeline per
525
+ // material (typically 5-30 in a scene). Compiled here rather
526
+ // than lazily at `set_reflection_probe` time so we never need to
527
+ // stash the WGSL source for a later recompile.
528
+ let reflection_pipeline = match main_cull {
529
+ Some(wgpu::Face::Back) => Some(make_pipeline(Some(wgpu::Face::Front), "_reflection")),
530
+ Some(wgpu::Face::Front) => Some(make_pipeline(Some(wgpu::Face::Back), "_reflection")),
531
+ None => None,
532
+ };
533
+
534
+ Ok(MaterialPipeline {
535
+ pipeline,
536
+ profile: desc.profile,
537
+ bucket: desc.bucket,
538
+ reads_scene: desc.reads_scene,
539
+ wants_instancing: desc.wants_instancing,
540
+ label: desc.label.to_string(),
541
+ reflection_pipeline,
542
+ })
543
+ }
544
+
545
+ // =====================================================================
546
+ // Baked library snapshot
547
+ // =====================================================================
548
+ //
549
+ // `shader_library::library()` returns an `impl ShaderSource`; for the
550
+ // compile path above we need a `&[(&str, &str)]` slice so the
551
+ // BakedSource we build can layer user overrides on top. Mirror the
552
+ // library contents here; kept in sync by a test.
553
+
554
+ const BAKED_ENTRIES_SNAPSHOT: &[(&str, &str)] = &[
555
+ ("material_abi.wgsl", include_str!("../../../shared/shaders/material_abi.wgsl")),
556
+ ("common/pbr.wgsl", include_str!("../../../shared/shaders/common/pbr.wgsl")),
557
+ ("common/shadows.wgsl", include_str!("../../../shared/shaders/common/shadows.wgsl")),
558
+ ("common/fog.wgsl", include_str!("../../../shared/shaders/common/fog.wgsl")),
559
+ ("common/tonemap.wgsl", include_str!("../../../shared/shaders/common/tonemap.wgsl")),
560
+ ("common/sky.wgsl", include_str!("../../../shared/shaders/common/sky.wgsl")),
561
+ ("materials/test_minimal.wgsl", include_str!("../../../shared/shaders/materials/test_minimal.wgsl")),
562
+ ];
563
+
564
+ #[cfg(test)]
565
+ mod tests {
566
+ use super::*;
567
+
568
+ /// Ensure the baked snapshot used by compile_material matches the
569
+ /// shader library. If this fails, an entry was added to the library
570
+ /// but not the snapshot (or vice-versa) — fix either.
571
+ #[test]
572
+ fn snapshot_matches_library() {
573
+ use super::super::shader_include::ShaderSource;
574
+ use super::super::shader_library;
575
+ let lib = shader_library::library();
576
+ for (path, body) in BAKED_ENTRIES_SNAPSHOT {
577
+ let from_lib = lib.fetch(path)
578
+ .unwrap_or_else(|| panic!("snapshot includes '{}' not in library", path));
579
+ assert_eq!(*body, from_lib, "mismatch for {}", path);
580
+ }
581
+ }
582
+
583
+ /// End-to-end validation: resolve the minimal test material's
584
+ /// includes and parse the result through naga (wgpu's WGSL
585
+ /// front-end). If the ABI header has a syntax error, or if a
586
+ /// struct reference is missing, naga fails this test.
587
+ ///
588
+ /// This test does not create a wgpu device — it's pure front-end
589
+ /// parsing — so it runs in any CI or dev environment without a
590
+ /// GPU. The downside is it doesn't verify the full pipeline
591
+ /// descriptor (blend state, vertex buffer layout, etc.); those are
592
+ /// exercised when `compile_material` runs at application startup.
593
+ #[test]
594
+ fn test_minimal_parses_through_naga() {
595
+ let source = BakedSource { entries: BAKED_ENTRIES_SNAPSHOT };
596
+ let expanded = process(&source, "materials/test_minimal.wgsl")
597
+ .expect("preprocessor resolves test_minimal.wgsl");
598
+ let result = wgpu::naga::front::wgsl::parse_str(&expanded);
599
+ if let Err(ref e) = result {
600
+ eprintln!("naga parse error:\n{}", e.emit_to_string(&expanded));
601
+ }
602
+ assert!(result.is_ok(), "test_minimal.wgsl should parse via naga after include expansion");
603
+ }
604
+ }