@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.
- package/LICENSE +21 -0
- package/README.md +169 -0
- package/native/android/Cargo.lock +1848 -0
- package/native/android/Cargo.toml +20 -0
- package/native/android/src/lib.rs +1747 -0
- package/native/ios/Cargo.lock +1688 -0
- package/native/ios/Cargo.toml +19 -0
- package/native/ios/src/lib.rs +2258 -0
- package/native/linux/Cargo.lock +1719 -0
- package/native/linux/Cargo.toml +22 -0
- package/native/linux/src/lib.rs +2236 -0
- package/native/macos/Cargo.lock +3310 -0
- package/native/macos/Cargo.toml +29 -0
- package/native/macos/src/lib.rs +3444 -0
- package/native/shared/Cargo.lock +1898 -0
- package/native/shared/Cargo.toml +42 -0
- package/native/shared/assets/default_font.ttf +0 -0
- package/native/shared/build.rs +77 -0
- package/native/shared/shaders/common/fog.wgsl +16 -0
- package/native/shared/shaders/common/imposter.wgsl +112 -0
- package/native/shared/shaders/common/pbr.wgsl +186 -0
- package/native/shared/shaders/common/shadows.wgsl +77 -0
- package/native/shared/shaders/common/sky.wgsl +8 -0
- package/native/shared/shaders/common/tonemap.wgsl +25 -0
- package/native/shared/shaders/impulse_field.wgsl +53 -0
- package/native/shared/shaders/material_abi.wgsl +360 -0
- package/native/shared/shaders/materials/test_minimal.wgsl +42 -0
- package/native/shared/src/audio.rs +363 -0
- package/native/shared/src/custom_shaders.rs +104 -0
- package/native/shared/src/drs.rs +211 -0
- package/native/shared/src/engine.rs +186 -0
- package/native/shared/src/frame_callbacks.rs +88 -0
- package/native/shared/src/geometry.rs +236 -0
- package/native/shared/src/handles.rs +76 -0
- package/native/shared/src/input.rs +273 -0
- package/native/shared/src/jolt_sys.rs +822 -0
- package/native/shared/src/lib.rs +43 -0
- package/native/shared/src/models.rs +1941 -0
- package/native/shared/src/physics_jolt.rs +1528 -0
- package/native/shared/src/picking.rs +298 -0
- package/native/shared/src/postfx.rs +339 -0
- package/native/shared/src/profiler.rs +416 -0
- package/native/shared/src/renderer/atmosphere_lut.rs +573 -0
- package/native/shared/src/renderer/brdf_lut.rs +154 -0
- package/native/shared/src/renderer/formats.rs +778 -0
- package/native/shared/src/renderer/graph.rs +465 -0
- package/native/shared/src/renderer/hot_reload.rs +390 -0
- package/native/shared/src/renderer/impulse_field.rs +455 -0
- package/native/shared/src/renderer/material_pipeline.rs +604 -0
- package/native/shared/src/renderer/material_system.rs +2106 -0
- package/native/shared/src/renderer/mod.rs +13923 -0
- package/native/shared/src/renderer/planar_reflection.rs +458 -0
- package/native/shared/src/renderer/post_pass.rs +249 -0
- package/native/shared/src/renderer/shader_include.rs +205 -0
- package/native/shared/src/renderer/shader_library.rs +134 -0
- package/native/shared/src/renderer/shaders.rs +5855 -0
- package/native/shared/src/renderer/transient.rs +576 -0
- package/native/shared/src/renderer/types.rs +259 -0
- package/native/shared/src/renderer/util.rs +151 -0
- package/native/shared/src/scene.rs +1066 -0
- package/native/shared/src/sdf_cache.rs +274 -0
- package/native/shared/src/shadows.rs +551 -0
- package/native/shared/src/staging.rs +90 -0
- package/native/shared/src/string_header.rs +35 -0
- package/native/shared/src/text_renderer.rs +456 -0
- package/native/shared/src/textures.rs +154 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.cpp +242 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.h +121 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeToBuffer.h +296 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/NodeCodec/NodeCodecQuadTreeHalfFloat.h +323 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/TriangleCodec/TriangleCodecIndexed8BitPackSOA4Flags.h +555 -0
- package/native/third_party/JoltPhysics/Jolt/ConfigurationString.h +112 -0
- package/native/third_party/JoltPhysics/Jolt/Core/ARMNeon.h +94 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Array.h +713 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Atomics.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Core/BinaryHeap.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Core/ByteBuffer.h +74 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Color.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Color.h +98 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Core.h +652 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FPControlWord.h +143 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FPException.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FPFlushDenormals.h +43 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Factory.cpp +92 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Factory.h +54 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.h +122 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.inl +215 -0
- package/native/third_party/JoltPhysics/Jolt/Core/HashCombine.h +234 -0
- package/native/third_party/JoltPhysics/Jolt/Core/HashTable.h +876 -0
- package/native/third_party/JoltPhysics/Jolt/Core/InsertionSort.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.cpp +27 -0
- package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.h +38 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.h +311 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.inl +56 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.cpp +65 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.h +62 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.cpp +364 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.cpp +230 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.h +85 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.cpp +51 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.h +67 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.h +182 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.inl +351 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Memory.cpp +85 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Memory.h +85 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Mutex.h +223 -0
- package/native/third_party/JoltPhysics/Jolt/Core/MutexArray.h +98 -0
- package/native/third_party/JoltPhysics/Jolt/Core/NonCopyable.h +18 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Profiler.cpp +677 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Profiler.h +301 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Profiler.inl +90 -0
- package/native/third_party/JoltPhysics/Jolt/Core/QuickSort.h +137 -0
- package/native/third_party/JoltPhysics/Jolt/Core/RTTI.cpp +149 -0
- package/native/third_party/JoltPhysics/Jolt/Core/RTTI.h +436 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Reference.h +244 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Result.h +174 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLAlignedAllocator.h +72 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLAllocator.h +127 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLLocalAllocator.h +170 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLTempAllocator.h +80 -0
- package/native/third_party/JoltPhysics/Jolt/Core/ScopeExit.h +49 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.cpp +135 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.h +68 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StaticArray.h +329 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamIn.h +120 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamOut.h +97 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamUtils.h +168 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamWrapper.h +53 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StridedPtr.h +63 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StringTools.cpp +101 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StringTools.h +38 -0
- package/native/third_party/JoltPhysics/Jolt/Core/TempAllocator.h +209 -0
- package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.cpp +37 -0
- package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Core/UnorderedMap.h +80 -0
- package/native/third_party/JoltPhysics/Jolt/Core/UnorderedSet.h +32 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/AABox.h +313 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/AABox4.h +224 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ClipPoly.h +200 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ClosestPoint.h +498 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.cpp +1467 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.h +276 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.cpp +335 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.h +105 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexSupport.h +188 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/EPAConvexHullBuilder.h +845 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/EPAPenetrationDepth.h +557 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Ellipse.h +77 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/GJKClosestPoint.h +945 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/IndexedTriangle.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.cpp +222 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.h +19 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/MortonCode.h +40 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.cpp +178 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.h +39 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Plane.h +104 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayAABox.h +241 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayCapsule.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayCylinder.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RaySphere.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayTriangle.h +158 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Sphere.h +72 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Triangle.h +34 -0
- package/native/third_party/JoltPhysics/Jolt/Jolt.cmake +703 -0
- package/native/third_party/JoltPhysics/Jolt/Jolt.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Jolt.natvis +116 -0
- package/native/third_party/JoltPhysics/Jolt/Math/BVec16.h +99 -0
- package/native/third_party/JoltPhysics/Jolt/Math/BVec16.inl +177 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DMat44.h +158 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DMat44.inl +310 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DVec3.h +291 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DVec3.inl +941 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Double3.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DynMatrix.h +31 -0
- package/native/third_party/JoltPhysics/Jolt/Math/EigenValueSymmetric.h +177 -0
- package/native/third_party/JoltPhysics/Jolt/Math/FindRoot.h +42 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Float2.h +36 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Float3.h +50 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Float4.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Math/GaussianElimination.h +102 -0
- package/native/third_party/JoltPhysics/Jolt/Math/HalfFloat.h +208 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Mat44.h +243 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Mat44.inl +952 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Math.h +208 -0
- package/native/third_party/JoltPhysics/Jolt/Math/MathTypes.h +32 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Matrix.h +259 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Quat.h +268 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Quat.inl +406 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Real.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Swizzle.h +19 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Trigonometry.h +79 -0
- package/native/third_party/JoltPhysics/Jolt/Math/UVec4.h +232 -0
- package/native/third_party/JoltPhysics/Jolt/Math/UVec4.inl +636 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec3.cpp +71 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec3.h +308 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec3.inl +942 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec4.h +320 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec4.inl +1152 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vector.h +211 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/GetPrimitiveTypeOfType.h +54 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.h +337 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.cpp +252 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.h +57 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.cpp +165 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.h +57 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.cpp +635 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.h +148 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.cpp +166 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.cpp +418 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.h +55 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.cpp +255 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.h +62 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTypes.h +26 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttribute.h +111 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeEnum.h +67 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeTyped.h +60 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.cpp +15 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.h +170 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.cpp +70 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.h +45 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/AllowedDOFs.h +68 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.cpp +426 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.h +452 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.inl +197 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyAccess.h +68 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyActivationListener.h +28 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.cpp +234 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.h +124 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyFilter.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyID.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.cpp +1099 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.h +324 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLock.h +111 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockInterface.h +134 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockMulti.h +120 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.cpp +1220 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.h +403 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyPair.h +36 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyType.h +19 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.cpp +185 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.cpp +92 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.h +308 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.inl +178 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionQuality.h +31 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionType.h +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.cpp +354 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.h +159 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.cpp +59 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.h +157 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterID.h +98 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.cpp +1933 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.h +752 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/AABoxCast.h +20 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdgeMode.h +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdges.h +114 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BackFaceMode.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.cpp +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.h +109 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp +313 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.h +38 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h +148 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceMask.h +92 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceTable.h +64 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp +629 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.h +108 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterMask.h +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterTable.h +66 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.cpp +1768 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.h +389 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.cpp +107 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.h +46 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastResult.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.cpp +223 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.h +49 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollectFacesMode.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.cpp +155 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.h +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollidePointResult.h +25 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShape.h +106 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShapeVsShapePerLeaf.h +94 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVertexIterator.h +110 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVerticesVsTriangles.h +102 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.cpp +121 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.h +50 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollector.h +109 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollectorImpl.h +219 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.cpp +107 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.h +97 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.cpp +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.h +97 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ContactListener.h +143 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.cpp +213 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.cpp +32 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.h +46 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/InternalEdgeRemovingCollector.h +279 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.cpp +271 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.cpp +448 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.h +77 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.cpp +62 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.h +110 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayer.h +111 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterMask.h +52 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterTable.h +78 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.cpp +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.h +57 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/RayCast.h +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.cpp +318 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.h +115 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.cpp +438 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.h +129 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.cpp +433 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.h +354 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShapeVisitors.h +461 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.cpp +1311 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.h +202 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.cpp +566 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.h +150 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.cpp +418 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.h +126 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.cpp +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.h +80 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.cpp +64 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.h +75 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/GetTrianglesContext.h +248 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.cpp +2754 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.h +380 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.cpp +1305 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.h +228 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.cpp +596 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.h +176 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp +217 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.h +140 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.cpp +541 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.h +147 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PolyhedronSubmergedVolumeCalculator.h +319 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.cpp +333 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.h +161 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaleHelpers.h +83 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.cpp +238 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.h +145 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.cpp +325 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.h +466 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.cpp +347 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.h +125 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.cpp +674 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.h +139 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeID.h +138 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeIDPair.h +65 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.cpp +453 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.gliffy +1 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.h +135 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.cpp +691 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.h +132 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.cpp +430 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.h +143 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeCast.h +173 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeFilter.h +73 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilter.h +40 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilterWrapper.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SortReverseAndStore.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.cpp +180 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.h +194 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/CalculateSolverSteps.h +70 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.cpp +246 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.h +133 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.cpp +73 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.h +243 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.cpp +289 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.h +100 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AngleConstraintPart.h +257 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AxisConstraintPart.h +682 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h +276 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/GearConstraintPart.h +195 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h +222 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/IndependentAxisConstraintPart.h +246 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/PointConstraintPart.h +239 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RackAndPinionConstraintPart.h +196 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h +283 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationQuatConstraintPart.h +246 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SpringPart.h +169 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h +597 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.cpp +1804 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.h +524 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.cpp +266 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.h +120 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.cpp +215 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.cpp +188 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.h +116 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.cpp +443 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.h +205 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.cpp +43 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.h +66 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.cpp +458 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.h +191 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.cpp +85 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.h +76 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.cpp +308 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.h +54 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.cpp +157 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.h +94 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.cpp +253 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.h +137 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.cpp +189 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.h +118 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.cpp +900 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.h +289 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.cpp +501 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.h +198 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.cpp +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.h +70 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.cpp +524 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.h +197 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.cpp +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.h +65 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.cpp +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.h +159 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/EActivation.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/EPhysicsUpdateError.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.cpp +492 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.h +144 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.cpp +582 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.h +187 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsLock.h +169 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.cpp +261 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.h +104 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSettings.h +125 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsStepListener.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.cpp +2915 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.h +391 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.cpp +25 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.h +176 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.cpp +744 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.h +245 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyContactListener.h +55 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp +128 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.h +75 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyManifold.h +74 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.cpp +1501 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.h +333 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.cpp +354 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.h +73 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.cpp +1487 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.h +390 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyUpdateContext.h +63 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyVertex.h +36 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorder.h +136 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.cpp +90 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.h +50 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.cpp +306 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.h +119 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.cpp +547 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.h +169 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.cpp +33 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.h +33 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.cpp +376 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.h +146 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.cpp +703 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.h +252 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.cpp +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.h +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.cpp +81 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.h +39 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.cpp +122 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.h +93 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.cpp +52 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.h +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.cpp +159 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.h +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.cpp +93 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.h +148 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.cpp +866 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.h +205 -0
- package/native/third_party/JoltPhysics/Jolt/RegisterTypes.cpp +204 -0
- package/native/third_party/JoltPhysics/Jolt/RegisterTypes.h +29 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.cpp +1107 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.h +383 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.cpp +168 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.cpp +158 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.cpp +80 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.h +88 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.cpp +165 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.h +91 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.cpp +82 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.h +72 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.cpp +237 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.h +145 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.cpp +87 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.h +82 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.cpp +73 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.h +84 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.cpp +139 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.h +52 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.cpp +43 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.h +28 -0
- package/native/third_party/JoltPhysics/LICENSE +7 -0
- package/native/third_party/JoltPhysics/README.md +173 -0
- package/native/third_party/bloom_jolt/CMakeLists.txt +78 -0
- package/native/third_party/bloom_jolt/include/bloom_jolt.h +519 -0
- package/native/third_party/bloom_jolt/src/bloom_jolt.cpp +1780 -0
- package/native/tvos/Cargo.lock +1692 -0
- package/native/tvos/Cargo.toml +22 -0
- package/native/tvos/src/lib.rs +3179 -0
- package/native/watchos/Cargo.lock +16 -0
- package/native/watchos/Cargo.toml +19 -0
- package/native/watchos/shaders/bloom_postfx.metal +99 -0
- package/native/watchos/src/BloomWatchApp.swift +1236 -0
- package/native/watchos/src/BloomWatchAudio.swift +179 -0
- package/native/watchos/src/audio.rs +55 -0
- package/native/watchos/src/draw_list.rs +223 -0
- package/native/watchos/src/ffi_stubs.rs +454 -0
- package/native/watchos/src/lib.rs +1013 -0
- package/native/watchos/src/models.rs +746 -0
- package/native/watchos/src/postfx.rs +91 -0
- package/native/watchos/src/scene.rs +534 -0
- package/native/watchos/src/textures.rs +184 -0
- package/native/web/Cargo.lock +1656 -0
- package/native/web/Cargo.toml +38 -0
- package/native/web/bloom_glue.js +218 -0
- package/native/web/build.sh +101 -0
- package/native/web/index.html +390 -0
- package/native/web/jolt_bridge.js +1311 -0
- package/native/web/src/lib.rs +2739 -0
- package/native/windows/Cargo.lock +1813 -0
- package/native/windows/Cargo.toml +31 -0
- package/native/windows/src/lib.rs +1933 -0
- package/package.json +558 -0
- package/src/audio/index.ts +151 -0
- package/src/core/colors.ts +56 -0
- package/src/core/index.ts +903 -0
- package/src/core/keys.ts +63 -0
- package/src/core/types.ts +102 -0
- package/src/index.ts +158 -0
- package/src/math/index.ts +502 -0
- package/src/mobile/index.ts +294 -0
- package/src/models/index.ts +859 -0
- package/src/physics/index.ts +1072 -0
- package/src/scene/index.ts +570 -0
- package/src/shapes/index.ts +120 -0
- package/src/text/index.ts +48 -0
- package/src/textures/index.ts +173 -0
- package/src/world/index.ts +22 -0
- package/src/world/loader.ts +385 -0
- package/src/world/prefab.ts +205 -0
- package/src/world/saver.ts +61 -0
- package/src/world/terrain.ts +254 -0
- package/src/world/types.ts +136 -0
- package/src/world/validate.ts +202 -0
- 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
|
+
}
|