@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,458 @@
|
|
|
1
|
+
//! EN-011 — Planar reflection probes.
|
|
2
|
+
//!
|
|
3
|
+
//! A planar reflection probe owns an off-screen RT (`Rgba16Float` HDR
|
|
4
|
+
//! colour + `Depth32Float` depth) into which the engine renders the
|
|
5
|
+
//! scene from a camera mirrored across a flat reflective plane. The
|
|
6
|
+
//! resulting texture is bound at `@group(2) @binding(12)` on materials
|
|
7
|
+
//! that opt in via `Renderer::set_material_reflection_probe`, so e.g.
|
|
8
|
+
//! a water shader can sample the *actual* trees / bridge above the
|
|
9
|
+
//! surface instead of just the static `env_tex` skybox.
|
|
10
|
+
//!
|
|
11
|
+
//! ## V1 design
|
|
12
|
+
//!
|
|
13
|
+
//! - **One probe per plane.** A river is one plane; lakes are one
|
|
14
|
+
//! plane. Multi-probe blending lives in V2.
|
|
15
|
+
//! - **Rebuilt every frame** at the requested resolution. Half of the
|
|
16
|
+
//! swapchain width × height is the typical caller-supplied number;
|
|
17
|
+
//! nothing in this module enforces that — the FFI just defaults to
|
|
18
|
+
//! it when the game passes 0.
|
|
19
|
+
//! - **Cull list = "everything in the opaque material bucket minus a
|
|
20
|
+
//! hardcoded exclude list".** Implemented in `Renderer` (this
|
|
21
|
+
//! module just owns the probe RT + plane parameters); the dispatch
|
|
22
|
+
//! loop walks `material_system.commands` and skips the same
|
|
23
|
+
//! material handles for every probe.
|
|
24
|
+
//!
|
|
25
|
+
//! ## Coordinate convention
|
|
26
|
+
//!
|
|
27
|
+
//! The reflection plane is defined by `plane_y` (a single y-value
|
|
28
|
+
//! offset from origin) and a unit `normal`. We mirror world-space
|
|
29
|
+
//! points across plane `n · p = d`, where `d = n · plane_origin` and
|
|
30
|
+
//! `plane_origin = (0, plane_y, 0)`. For the typical horizontal water
|
|
31
|
+
//! surface, `normal = (0, 1, 0)` and `d = plane_y`. Non-axis-aligned
|
|
32
|
+
//! planes work too — the math is general — but the FFI surface
|
|
33
|
+
//! exposes the simpler horizontal case explicitly.
|
|
34
|
+
//!
|
|
35
|
+
//! See `Renderer::dispatch_planar_reflections` for the per-frame
|
|
36
|
+
//! render-graph node that drives all registered probes.
|
|
37
|
+
|
|
38
|
+
use crate::renderer::util::{mat4_invert, mat4_mul_vec4, mat4_multiply};
|
|
39
|
+
|
|
40
|
+
/// One planar reflection probe + its dedicated RT pair.
|
|
41
|
+
///
|
|
42
|
+
/// The texture views (`color_view`, `depth_view`) are stable for the
|
|
43
|
+
/// lifetime of the probe, so per-material bind groups built once at
|
|
44
|
+
/// `set_material_reflection_probe` time stay valid frame after frame
|
|
45
|
+
/// even as the engine repaints the texture each frame.
|
|
46
|
+
pub struct PlanarReflectionProbe {
|
|
47
|
+
/// World-space y of the reflective plane (only used to build `d`
|
|
48
|
+
/// when normal == +Y; otherwise carried for diagnostics).
|
|
49
|
+
pub plane_y: f32,
|
|
50
|
+
/// Unit normal of the plane in world space. The mirror matrix
|
|
51
|
+
/// reflects across `n · p = d`, where `d = n · (0, plane_y, 0)`.
|
|
52
|
+
pub normal: [f32; 3],
|
|
53
|
+
/// Texture extent — width = height for a square probe; both
|
|
54
|
+
/// dimensions get rounded to ≥ 16 px in `new` so a tiny RT can't
|
|
55
|
+
/// crash the renderer.
|
|
56
|
+
pub resolution: u32,
|
|
57
|
+
|
|
58
|
+
pub color_rt: wgpu::Texture,
|
|
59
|
+
pub color_view: wgpu::TextureView,
|
|
60
|
+
pub depth_rt: wgpu::Texture,
|
|
61
|
+
pub depth_view: wgpu::TextureView,
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
impl PlanarReflectionProbe {
|
|
65
|
+
/// Allocate the colour + depth textures sized to `resolution²`.
|
|
66
|
+
/// Format choices match the engine's HDR pipeline so the probe
|
|
67
|
+
/// texture interoperates cleanly with the rest of `material_abi`:
|
|
68
|
+
///
|
|
69
|
+
/// - colour: `Rgba16Float` (`HDR_FORMAT`) so emissive geometry
|
|
70
|
+
/// reflected into the probe doesn't clamp to LDR
|
|
71
|
+
/// - depth: `Depth32Float` so the mirrored draws can z-test
|
|
72
|
+
/// against each other without a separate downsample
|
|
73
|
+
pub fn new(
|
|
74
|
+
device: &wgpu::Device,
|
|
75
|
+
plane_y: f32,
|
|
76
|
+
normal: [f32; 3],
|
|
77
|
+
resolution: u32,
|
|
78
|
+
) -> Self {
|
|
79
|
+
// Clamp absurd inputs — a 0-px texture is illegal in wgpu
|
|
80
|
+
// and a 16k-px probe would cost more than the rest of the
|
|
81
|
+
// frame combined. 16..=4096 covers every realistic case.
|
|
82
|
+
let res = resolution.clamp(16, 4096);
|
|
83
|
+
|
|
84
|
+
let color_rt = device.create_texture(&wgpu::TextureDescriptor {
|
|
85
|
+
label: Some("planar_reflection_color"),
|
|
86
|
+
size: wgpu::Extent3d { width: res, height: res, depth_or_array_layers: 1 },
|
|
87
|
+
mip_level_count: 1,
|
|
88
|
+
sample_count: 1,
|
|
89
|
+
dimension: wgpu::TextureDimension::D2,
|
|
90
|
+
format: super::formats::HDR_FORMAT,
|
|
91
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
92
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
93
|
+
view_formats: &[],
|
|
94
|
+
});
|
|
95
|
+
let color_view = color_rt.create_view(&Default::default());
|
|
96
|
+
|
|
97
|
+
let depth_rt = device.create_texture(&wgpu::TextureDescriptor {
|
|
98
|
+
label: Some("planar_reflection_depth"),
|
|
99
|
+
size: wgpu::Extent3d { width: res, height: res, depth_or_array_layers: 1 },
|
|
100
|
+
mip_level_count: 1,
|
|
101
|
+
sample_count: 1,
|
|
102
|
+
dimension: wgpu::TextureDimension::D2,
|
|
103
|
+
format: super::formats::DEPTH_FORMAT,
|
|
104
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
|
|
105
|
+
view_formats: &[],
|
|
106
|
+
});
|
|
107
|
+
let depth_view = depth_rt.create_view(&Default::default());
|
|
108
|
+
|
|
109
|
+
// Normalise the supplied normal — caller may pass a non-unit
|
|
110
|
+
// vector; downstream math (specifically the reflection
|
|
111
|
+
// matrix below) assumes |n| == 1.
|
|
112
|
+
let n = normalise(normal);
|
|
113
|
+
|
|
114
|
+
Self {
|
|
115
|
+
plane_y, normal: n, resolution: res,
|
|
116
|
+
color_rt, color_view, depth_rt, depth_view,
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// Build the world-space reflection matrix for plane (n, plane_y).
|
|
122
|
+
///
|
|
123
|
+
/// Reflects a world-space point `p` across the plane `n · p = d`
|
|
124
|
+
/// where `d = n · (0, plane_y, 0) = n.y * plane_y`. The returned 4×4
|
|
125
|
+
/// matrix R has `R · p = p - 2 (n·p - d) n`, with R applied
|
|
126
|
+
/// post-multiply on column vectors (Bloom convention).
|
|
127
|
+
///
|
|
128
|
+
/// Plug this into the view chain via `mirror_view = view * R` —
|
|
129
|
+
/// post-multiplying R into the view matrix means: world → mirror
|
|
130
|
+
/// (R) → camera (view).
|
|
131
|
+
pub fn reflection_matrix(plane_y: f32, normal: [f32; 3]) -> [[f32; 4]; 4] {
|
|
132
|
+
let n = normalise(normal);
|
|
133
|
+
let d = n[1] * plane_y;
|
|
134
|
+
// Standard Householder-style reflection across the plane.
|
|
135
|
+
// Column-major; multiplies p as `R * p` (post-mul).
|
|
136
|
+
let nx = n[0]; let ny = n[1]; let nz = n[2];
|
|
137
|
+
[
|
|
138
|
+
[1.0 - 2.0 * nx * nx, -2.0 * nx * ny, -2.0 * nx * nz, 0.0],
|
|
139
|
+
[-2.0 * ny * nx, 1.0 - 2.0 * ny * ny, -2.0 * ny * nz, 0.0],
|
|
140
|
+
[-2.0 * nz * nx, -2.0 * nz * ny, 1.0 - 2.0 * nz * nz, 0.0],
|
|
141
|
+
[2.0 * nx * d, 2.0 * ny * d, 2.0 * nz * d, 1.0],
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// Compose a mirrored view matrix from the camera's current view
|
|
146
|
+
/// matrix and the reflection plane.
|
|
147
|
+
///
|
|
148
|
+
/// In Bloom's column-major / post-mul convention, `view` transforms
|
|
149
|
+
/// world points into camera space (`p_cam = view * p_world`). To
|
|
150
|
+
/// render the mirror image we want `p_cam = view * R * p_world` —
|
|
151
|
+
/// reflect first, then apply the existing view. The returned matrix
|
|
152
|
+
/// is `view * R`.
|
|
153
|
+
///
|
|
154
|
+
/// **Caller MUST flip front-face cull mode** when using this view —
|
|
155
|
+
/// reflection inverts triangle winding. The renderer handles that
|
|
156
|
+
/// by binding pipelines compiled with `cull_mode = None` for the
|
|
157
|
+
/// mirrored pass; we accept the small fragment-shader cost for V1.
|
|
158
|
+
pub fn mirrored_view(view: [[f32; 4]; 4], plane_y: f32, normal: [f32; 3]) -> [[f32; 4]; 4] {
|
|
159
|
+
let r = reflection_matrix(plane_y, normal);
|
|
160
|
+
mat4_multiply(view, r)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// Reflect the camera's world position across the plane. Used for
|
|
164
|
+
/// `PerView.camera_pos` in the mirrored UBO so view-dependent shading
|
|
165
|
+
/// (Fresnel, specular, parallax) sees the mirror camera, not the
|
|
166
|
+
/// real one.
|
|
167
|
+
pub fn mirrored_camera_pos(pos: [f32; 3], plane_y: f32, normal: [f32; 3]) -> [f32; 3] {
|
|
168
|
+
let n = normalise(normal);
|
|
169
|
+
let d = n[1] * plane_y;
|
|
170
|
+
let dist = n[0] * pos[0] + n[1] * pos[1] + n[2] * pos[2] - d;
|
|
171
|
+
[
|
|
172
|
+
pos[0] - 2.0 * dist * n[0],
|
|
173
|
+
pos[1] - 2.0 * dist * n[1],
|
|
174
|
+
pos[2] - 2.0 * dist * n[2],
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/// Recompute `inv_proj` from a possibly-modified projection. After the
|
|
179
|
+
/// EN-011 V2 `oblique_proj` rewrite, the reflection pass uses a near-
|
|
180
|
+
/// plane-clipped projection that differs from the main camera's, so
|
|
181
|
+
/// the inverse needs to be recomputed for any view-space reconstruction
|
|
182
|
+
/// downstream (SSR, deferred unprojection).
|
|
183
|
+
pub fn inv_proj_for(proj: [[f32; 4]; 4]) -> [[f32; 4]; 4] {
|
|
184
|
+
mat4_invert(proj)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/// Transform a world-space plane `(Nx, Ny, Nz, d)` (such that
|
|
188
|
+
/// `N · p + d = 0` for points on the plane) into eye / view space
|
|
189
|
+
/// using the view matrix. Plane equations transform by the inverse-
|
|
190
|
+
/// transpose of the matrix; for a rigid view matrix this is the same
|
|
191
|
+
/// as the matrix itself, but we do it the general way to stay safe
|
|
192
|
+
/// for skewed views.
|
|
193
|
+
///
|
|
194
|
+
/// For Bloom's column-major / post-mul convention, applying the
|
|
195
|
+
/// inverse-transpose of `view` to a plane `(N, d)` equates to the
|
|
196
|
+
/// standard direct-3D / OpenGL formulation.
|
|
197
|
+
pub fn world_plane_to_eye_space(
|
|
198
|
+
view: [[f32; 4]; 4],
|
|
199
|
+
plane_world: [f32; 4],
|
|
200
|
+
) -> [f32; 4] {
|
|
201
|
+
let inv = mat4_invert(view);
|
|
202
|
+
// Inverse-transpose, column-major. Multiplying the *transpose* of
|
|
203
|
+
// `inv` by the plane vector is the same as multiplying `inv`
|
|
204
|
+
// post-multiplied by the row vector — but we have a column-vec
|
|
205
|
+
// mul helper so we transpose `inv` first by reading rows as cols.
|
|
206
|
+
let inv_t: [[f32; 4]; 4] = [
|
|
207
|
+
[inv[0][0], inv[1][0], inv[2][0], inv[3][0]],
|
|
208
|
+
[inv[0][1], inv[1][1], inv[2][1], inv[3][1]],
|
|
209
|
+
[inv[0][2], inv[1][2], inv[2][2], inv[3][2]],
|
|
210
|
+
[inv[0][3], inv[1][3], inv[2][3], inv[3][3]],
|
|
211
|
+
];
|
|
212
|
+
mat4_mul_vec4(&inv_t, &plane_world)
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/// EN-011 V2 — modify a projection matrix so its near plane is clipped
|
|
216
|
+
/// at the given eye-space plane. Used for planar reflection to prevent
|
|
217
|
+
/// geometry below the water from polluting the reflection along the
|
|
218
|
+
/// shoreline edge.
|
|
219
|
+
///
|
|
220
|
+
/// Reference: Eric Lengyel, "Oblique View Frustum Depth Projection
|
|
221
|
+
/// and Clipping" (Journal of Game Development, 2005). The technique
|
|
222
|
+
/// shifts the projection's near plane to coincide with the supplied
|
|
223
|
+
/// plane (typically the water plane), then any geometry on the wrong
|
|
224
|
+
/// side gets clipped at the rasterizer.
|
|
225
|
+
///
|
|
226
|
+
/// `proj` is the original column-major projection matrix.
|
|
227
|
+
/// `plane_eye_space` is `(Nx, Ny, Nz, d)` such that points on the
|
|
228
|
+
/// plane satisfy `N · p_eye + d = 0`. Use `world_plane_to_eye_space`
|
|
229
|
+
/// to convert from a world-space plane.
|
|
230
|
+
pub fn oblique_proj(
|
|
231
|
+
proj: [[f32; 4]; 4],
|
|
232
|
+
plane_eye_space: [f32; 4],
|
|
233
|
+
) -> [[f32; 4]; 4] {
|
|
234
|
+
let c = plane_eye_space;
|
|
235
|
+
|
|
236
|
+
// Far-plane corner in clip space is in the direction of (sgn(c.x),
|
|
237
|
+
// sgn(c.y), 1, 1) — Lengyel §2. Pulled back into eye space by
|
|
238
|
+
// multiplying with `inv(proj)`.
|
|
239
|
+
let sx = if c[0] >= 0.0 { 1.0 } else { -1.0 };
|
|
240
|
+
let sy = if c[1] >= 0.0 { 1.0 } else { -1.0 };
|
|
241
|
+
let q_clip = [sx, sy, 1.0, 1.0];
|
|
242
|
+
let inv_p = mat4_invert(proj);
|
|
243
|
+
let q = mat4_mul_vec4(&inv_p, &q_clip);
|
|
244
|
+
|
|
245
|
+
// Scale `c` so the near-plane crosses through the supplied plane:
|
|
246
|
+
// M = (2 / dot(c, q)) · c
|
|
247
|
+
// Then the new third row of P (which controls the depth output) is
|
|
248
|
+
// P_row2 = M - P_row3
|
|
249
|
+
// (P_row3 is the standard perspective w-row, all stays the same.)
|
|
250
|
+
let denom = c[0] * q[0] + c[1] * q[1] + c[2] * q[2] + c[3] * q[3];
|
|
251
|
+
if denom.abs() < 1e-10 {
|
|
252
|
+
// Degenerate plane orientation w.r.t. the frustum — leave
|
|
253
|
+
// projection unchanged rather than divide-by-zero. The
|
|
254
|
+
// reflection still renders, just without near-plane clipping.
|
|
255
|
+
return proj;
|
|
256
|
+
}
|
|
257
|
+
let scale = 2.0 / denom;
|
|
258
|
+
let m = [c[0] * scale, c[1] * scale, c[2] * scale, c[3] * scale];
|
|
259
|
+
|
|
260
|
+
// proj is column-major: proj[col][row]. The "third row" we want
|
|
261
|
+
// to replace is at row index 2 across all four columns. The
|
|
262
|
+
// "fourth row" is at row index 3. New row-2 = M - row3 — but
|
|
263
|
+
// since wgpu's clip-space z range is [0, 1] (not [-1, 1] like
|
|
264
|
+
// OpenGL), the depth-rescaling pre-step is `M - P_row3` exactly
|
|
265
|
+
// as in Lengyel's original derivation; the [-1, 1] vs [0, 1]
|
|
266
|
+
// difference is absorbed by the scale.
|
|
267
|
+
let mut out = proj;
|
|
268
|
+
out[0][2] = m[0] - proj[0][3];
|
|
269
|
+
out[1][2] = m[1] - proj[1][3];
|
|
270
|
+
out[2][2] = m[2] - proj[2][3];
|
|
271
|
+
out[3][2] = m[3] - proj[3][3];
|
|
272
|
+
out
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
fn normalise(v: [f32; 3]) -> [f32; 3] {
|
|
276
|
+
let len_sq = v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
|
|
277
|
+
if len_sq < 1e-10 {
|
|
278
|
+
// Default to +Y — a horizontal mirror like a calm lake.
|
|
279
|
+
return [0.0, 1.0, 0.0];
|
|
280
|
+
}
|
|
281
|
+
let inv = 1.0 / len_sq.sqrt();
|
|
282
|
+
[v[0] * inv, v[1] * inv, v[2] * inv]
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// =====================================================================
|
|
286
|
+
// Tests
|
|
287
|
+
// =====================================================================
|
|
288
|
+
|
|
289
|
+
#[cfg(test)]
|
|
290
|
+
mod tests {
|
|
291
|
+
use super::*;
|
|
292
|
+
use crate::renderer::util::mat4_mul_vec4;
|
|
293
|
+
|
|
294
|
+
/// A point above a horizontal y=0 plane reflects to the mirror
|
|
295
|
+
/// position below it — y-coordinate flips sign, x and z preserved.
|
|
296
|
+
#[test]
|
|
297
|
+
fn reflection_matrix_mirrors_above_to_below() {
|
|
298
|
+
let r = reflection_matrix(0.0, [0.0, 1.0, 0.0]);
|
|
299
|
+
let p = [3.0_f32, 5.0, -7.0, 1.0];
|
|
300
|
+
let out = mat4_mul_vec4(&r, &p);
|
|
301
|
+
assert!((out[0] - 3.0).abs() < 1e-5, "x preserved (got {})", out[0]);
|
|
302
|
+
assert!((out[1] + 5.0).abs() < 1e-5, "y flipped (got {})", out[1]);
|
|
303
|
+
assert!((out[2] + 7.0).abs() < 1e-5, "z preserved (got {})", out[2]);
|
|
304
|
+
assert!((out[3] - 1.0).abs() < 1e-5, "w preserved");
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/// A non-zero `plane_y` shifts the mirror — point at y=10 across
|
|
308
|
+
/// plane y=2 lands at y = 2 - (10 - 2) = -6.
|
|
309
|
+
#[test]
|
|
310
|
+
fn reflection_matrix_offset_plane() {
|
|
311
|
+
let r = reflection_matrix(2.0, [0.0, 1.0, 0.0]);
|
|
312
|
+
let p = [0.0_f32, 10.0, 0.0, 1.0];
|
|
313
|
+
let out = mat4_mul_vec4(&r, &p);
|
|
314
|
+
assert!((out[1] - (-6.0)).abs() < 1e-4, "y reflected across y=2 (got {})", out[1]);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/// Camera position helper agrees with applying the matrix to a
|
|
318
|
+
/// (cam_pos, 1) vec4 — sanity check.
|
|
319
|
+
#[test]
|
|
320
|
+
fn mirrored_camera_pos_matches_matrix() {
|
|
321
|
+
let plane_y = 0.5;
|
|
322
|
+
let n = [0.0, 1.0, 0.0];
|
|
323
|
+
let cam = [1.5_f32, 4.0, -2.0];
|
|
324
|
+
|
|
325
|
+
let helper_out = mirrored_camera_pos(cam, plane_y, n);
|
|
326
|
+
let r = reflection_matrix(plane_y, n);
|
|
327
|
+
let mat_out = mat4_mul_vec4(&r, &[cam[0], cam[1], cam[2], 1.0]);
|
|
328
|
+
|
|
329
|
+
assert!((helper_out[0] - mat_out[0]).abs() < 1e-5);
|
|
330
|
+
assert!((helper_out[1] - mat_out[1]).abs() < 1e-5);
|
|
331
|
+
assert!((helper_out[2] - mat_out[2]).abs() < 1e-5);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/// Reflection is its own inverse — applying it twice returns
|
|
335
|
+
/// the original point.
|
|
336
|
+
#[test]
|
|
337
|
+
fn reflection_is_involution() {
|
|
338
|
+
let r = reflection_matrix(0.5, [0.0, 1.0, 0.0]);
|
|
339
|
+
let p = [3.0_f32, 5.0, -7.0, 1.0];
|
|
340
|
+
let once = mat4_mul_vec4(&r, &p);
|
|
341
|
+
let twice = mat4_mul_vec4(&r, &once);
|
|
342
|
+
for i in 0..4 {
|
|
343
|
+
assert!((twice[i] - p[i]).abs() < 1e-4, "comp {} mismatch", i);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/// Headless wgpu device. Mirrors the EN-006 pattern from
|
|
348
|
+
/// `transient.rs` / `impulse_field.rs`. Returns `None` when no GPU
|
|
349
|
+
/// is available so the test skips gracefully on bare CI.
|
|
350
|
+
fn try_create_device() -> Option<(wgpu::Device, wgpu::Queue)> {
|
|
351
|
+
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
|
|
352
|
+
backends: wgpu::Backends::all(),
|
|
353
|
+
..wgpu::InstanceDescriptor::new_without_display_handle()
|
|
354
|
+
});
|
|
355
|
+
let adapter = pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions {
|
|
356
|
+
power_preference: wgpu::PowerPreference::LowPower,
|
|
357
|
+
compatible_surface: None,
|
|
358
|
+
force_fallback_adapter: true,
|
|
359
|
+
})).ok()?;
|
|
360
|
+
let (device, queue) = pollster::block_on(adapter.request_device(
|
|
361
|
+
&wgpu::DeviceDescriptor {
|
|
362
|
+
label: Some("planar-reflection-test-device"),
|
|
363
|
+
required_features: wgpu::Features::empty(),
|
|
364
|
+
required_limits: wgpu::Limits::downlevel_defaults(),
|
|
365
|
+
..Default::default()
|
|
366
|
+
},
|
|
367
|
+
)).ok()?;
|
|
368
|
+
Some((device, queue))
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/// EN-011 — verify `PlanarReflectionProbe::new` allocates HDR
|
|
372
|
+
/// colour + Depth32 attachments at the requested resolution.
|
|
373
|
+
/// Pure construction test — render-graph integration lives in
|
|
374
|
+
/// `Renderer::dispatch_planar_reflections`.
|
|
375
|
+
#[test]
|
|
376
|
+
fn probe_creation_allocates_hdr_and_depth_attachments() {
|
|
377
|
+
let Some((device, _queue)) = try_create_device() else { return; };
|
|
378
|
+
let probe = PlanarReflectionProbe::new(&device, 0.5, [0.0, 1.0, 0.0], 256);
|
|
379
|
+
assert_eq!(probe.resolution, 256, "resolution clamped to caller value");
|
|
380
|
+
assert_eq!(probe.normal, [0.0, 1.0, 0.0], "normalised +Y stays +Y");
|
|
381
|
+
let color_size = probe.color_rt.size();
|
|
382
|
+
assert_eq!(color_size.width, 256);
|
|
383
|
+
assert_eq!(color_size.height, 256);
|
|
384
|
+
assert_eq!(probe.color_rt.format(), super::super::formats::HDR_FORMAT);
|
|
385
|
+
assert_eq!(probe.depth_rt.format(), super::super::formats::DEPTH_FORMAT);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/// Tiny resolutions are clamped up to 16 px to keep wgpu happy.
|
|
389
|
+
#[test]
|
|
390
|
+
fn probe_resolution_clamps_minimum() {
|
|
391
|
+
let Some((device, _queue)) = try_create_device() else { return; };
|
|
392
|
+
let probe = PlanarReflectionProbe::new(&device, 0.0, [0.0, 1.0, 0.0], 4);
|
|
393
|
+
assert_eq!(probe.resolution, 16, "clamps to 16 px floor");
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/// EN-011 V2 — oblique projection clips a point on the wrong side
|
|
397
|
+
/// of the supplied plane. Point ABOVE the eye-space plane should
|
|
398
|
+
/// project inside the [-w, w] z range (clip-space-z divides to
|
|
399
|
+
/// [0, 1] in wgpu); point BELOW the plane projects with z > w
|
|
400
|
+
/// (i.e. ndc.z > 1 in wgpu) so the rasterizer clips it.
|
|
401
|
+
///
|
|
402
|
+
/// Setup: identity view (eye-space == world-space), a horizontal
|
|
403
|
+
/// plane y = 0 (so eye-space plane = (0, 1, 0, 0)), and a perspective
|
|
404
|
+
/// projection. We then check a point ABOVE (y = +5) renders, and a
|
|
405
|
+
/// point BELOW (y = -5) gets clipped.
|
|
406
|
+
#[test]
|
|
407
|
+
fn oblique_proj_clips_below_plane() {
|
|
408
|
+
use crate::renderer::util::mat4_perspective;
|
|
409
|
+
// Standard perspective matching mat4_perspective conventions.
|
|
410
|
+
let proj = mat4_perspective(70.0_f32.to_radians(), 16.0/9.0, 0.1, 100.0);
|
|
411
|
+
// Horizontal plane y = 0 in eye-space, normal +Y, points above
|
|
412
|
+
// satisfy y > 0 → N·p + d > 0 (kept). The plane equation
|
|
413
|
+
// (Nx, Ny, Nz, d) for "y >= 0 is above" is (0, 1, 0, 0).
|
|
414
|
+
let plane_eye = [0.0_f32, 1.0, 0.0, 0.0];
|
|
415
|
+
let oblique = oblique_proj(proj, plane_eye);
|
|
416
|
+
|
|
417
|
+
// A point in eye space ABOVE the plane, in front of camera:
|
|
418
|
+
// y = +5 (above), z = -10 (in front, right-handed view).
|
|
419
|
+
let p_above = [3.0_f32, 5.0, -10.0, 1.0];
|
|
420
|
+
let clip_above = mat4_mul_vec4(&oblique, &p_above);
|
|
421
|
+
// wgpu / D3D / Metal clip space: visible when 0 <= z <= w.
|
|
422
|
+
// For a point above the plane, z/w should be inside [0, 1].
|
|
423
|
+
assert!(clip_above[3] > 0.0, "point above plane has positive w (got {})", clip_above[3]);
|
|
424
|
+
let ndc_z_above = clip_above[2] / clip_above[3];
|
|
425
|
+
assert!(ndc_z_above >= 0.0 && ndc_z_above <= 1.0,
|
|
426
|
+
"above-plane point ndc.z within [0,1] (got {})", ndc_z_above);
|
|
427
|
+
|
|
428
|
+
// A point BELOW the plane: y = -5 (below), z = -10 (in front).
|
|
429
|
+
// Oblique projection moves the near plane to coincide with
|
|
430
|
+
// y = 0, so this point is on the wrong side and should clip.
|
|
431
|
+
// wgpu's clip space requires 0 <= z <= w to be visible — any
|
|
432
|
+
// ndc.z outside [0, 1] (or w <= 0) means the rasterizer drops
|
|
433
|
+
// the fragment.
|
|
434
|
+
let p_below = [3.0_f32, -5.0, -10.0, 1.0];
|
|
435
|
+
let clip_below = mat4_mul_vec4(&oblique, &p_below);
|
|
436
|
+
let visible = clip_below[3] > 0.0
|
|
437
|
+
&& clip_below[2] >= 0.0
|
|
438
|
+
&& clip_below[2] <= clip_below[3];
|
|
439
|
+
assert!(!visible,
|
|
440
|
+
"below-plane point should be clipped; got clip = ({}, {}, {}, {})",
|
|
441
|
+
clip_below[0], clip_below[1], clip_below[2], clip_below[3]);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/// `world_plane_to_eye_space` round-trip: a horizontal world plane
|
|
445
|
+
/// y = 0 (normal +Y) under an identity view stays as (0, 1, 0, 0)
|
|
446
|
+
/// in eye space — sanity check the inverse-transpose plumbing.
|
|
447
|
+
#[test]
|
|
448
|
+
fn world_plane_to_eye_space_identity_view() {
|
|
449
|
+
use crate::renderer::util::IDENTITY_MAT4;
|
|
450
|
+
let plane_world = [0.0_f32, 1.0, 0.0, 0.0]; // y = 0 plane
|
|
451
|
+
let plane_eye = world_plane_to_eye_space(IDENTITY_MAT4, plane_world);
|
|
452
|
+
for i in 0..4 {
|
|
453
|
+
assert!((plane_eye[i] - plane_world[i]).abs() < 1e-5,
|
|
454
|
+
"identity view leaves plane unchanged (comp {}: {} vs {})",
|
|
455
|
+
i, plane_eye[i], plane_world[i]);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|