@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,778 @@
|
|
|
1
|
+
//! Texture formats + render-target creation helpers.
|
|
2
|
+
//!
|
|
3
|
+
//! All `*_FORMAT` constants, the mip-count constants, and every
|
|
4
|
+
//! `create_*` helper that hands the Renderer a `(Texture, View)`
|
|
5
|
+
//! pair live here. Pure data/helpers — no Renderer state. Each
|
|
6
|
+
//! helper is `pub(super)` so only the surrounding `renderer::`
|
|
7
|
+
//! module can call it.
|
|
8
|
+
|
|
9
|
+
use wgpu;
|
|
10
|
+
|
|
11
|
+
// ============================================================
|
|
12
|
+
// Depth texture helper
|
|
13
|
+
// ============================================================
|
|
14
|
+
|
|
15
|
+
pub(super) const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
|
|
16
|
+
/// Linear HDR format for the offscreen render target. The scene + sky
|
|
17
|
+
/// + immediate-mode 3D passes write here in linear space; a final
|
|
18
|
+
/// composite pass tonemaps to the sRGB surface format.
|
|
19
|
+
pub(super) const HDR_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba16Float;
|
|
20
|
+
|
|
21
|
+
/// Number of bloom mip levels. 5 mips gives a long-tail glow that
|
|
22
|
+
/// covers ~32× the source pixel size. More mips = more haloing,
|
|
23
|
+
/// fewer = less coverage. Each mip is half the previous size.
|
|
24
|
+
pub(super) const BLOOM_MIP_COUNT: u32 = 5;
|
|
25
|
+
|
|
26
|
+
/// SSAO RT layout: R = GTAO occlusion (bilaterally blurred), G =
|
|
27
|
+
/// contact-shadow factor (passed through blur unchanged so the fine-
|
|
28
|
+
/// detail ray-march result survives). Rgba8Unorm because WebGPU
|
|
29
|
+
/// requires `rgba8unorm` for storage-texture writes by default —
|
|
30
|
+
/// the compute GTAO pass (SSAO_SHADER_WGSL) uses `textureStore`.
|
|
31
|
+
/// Extra two channels left 0; downstream samplers only read .r/.g,
|
|
32
|
+
/// so the only cost is 4 B/px vs 2 B/px at half-res
|
|
33
|
+
/// (~180 kB extra on a 1600×900 surface).
|
|
34
|
+
pub(super) const SSAO_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba8Unorm;
|
|
35
|
+
|
|
36
|
+
/// Material G-buffer format. Rg8Unorm: R = metallic, G = roughness.
|
|
37
|
+
/// Written as a second color attachment in the HDR pass; SSR (and
|
|
38
|
+
/// any future deferred passes) reads it for per-pixel material info.
|
|
39
|
+
pub(super) const MATERIAL_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rg8Unorm;
|
|
40
|
+
|
|
41
|
+
/// Linear-depth Hi-Z pyramid format. R32Float (not R16Float) because
|
|
42
|
+
/// WebGPU only mandates r32-family formats for single-channel storage
|
|
43
|
+
/// textures. The pyramid stores *positive* view-space distance
|
|
44
|
+
/// (|view_z|) so compute GTAO skips per-sample linearization. Sky
|
|
45
|
+
/// pixels get `HIZ_SKY_Z` (10 000) and the downsample uses `min` so
|
|
46
|
+
/// any near-field geometry in a tile dominates surrounding sky.
|
|
47
|
+
pub(super) const HIZ_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::R32Float;
|
|
48
|
+
|
|
49
|
+
/// Number of mip levels in the linear-depth Hi-Z pyramid. 5 covers
|
|
50
|
+
/// a 16-pixel-radius footprint at the coarsest mip — enough for
|
|
51
|
+
/// the 0.25 UV clamp SSAO uses (~100 px at half-res 400-wide).
|
|
52
|
+
/// One linearize pass plus `HIZ_MIP_COUNT - 1` downsample passes.
|
|
53
|
+
pub(super) const HIZ_MIP_COUNT: u32 = 5;
|
|
54
|
+
|
|
55
|
+
/// Velocity buffer format. Rg16Float: two-channel 16-bit float for
|
|
56
|
+
/// sub-pixel precision screen-space velocity. Written as a third
|
|
57
|
+
/// color attachment in the HDR pass; motion blur and TAA read it.
|
|
58
|
+
pub(super) const VELOCITY_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rg16Float;
|
|
59
|
+
|
|
60
|
+
pub(super) fn create_depth_texture(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
61
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
62
|
+
label: Some("depth_texture"),
|
|
63
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
64
|
+
mip_level_count: 1,
|
|
65
|
+
sample_count: 1,
|
|
66
|
+
dimension: wgpu::TextureDimension::D2,
|
|
67
|
+
format: DEPTH_FORMAT,
|
|
68
|
+
// SSAO samples this texture in a separate pass after the
|
|
69
|
+
// depth-write HDR pass — needs TEXTURE_BINDING in addition
|
|
70
|
+
// to RENDER_ATTACHMENT.
|
|
71
|
+
//
|
|
72
|
+
// COPY_SRC: Phase 4c snapshots this to a transient depth
|
|
73
|
+
// texture so translucent materials can sample it without
|
|
74
|
+
// aliasing the pass's own depth-stencil attachment.
|
|
75
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
76
|
+
| wgpu::TextureUsages::TEXTURE_BINDING
|
|
77
|
+
| wgpu::TextureUsages::COPY_SRC,
|
|
78
|
+
view_formats: &[],
|
|
79
|
+
});
|
|
80
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
81
|
+
(texture, view)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
pub(super) fn create_hdr_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
85
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
86
|
+
label: Some("hdr_rt"),
|
|
87
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
88
|
+
mip_level_count: 1,
|
|
89
|
+
sample_count: 1,
|
|
90
|
+
dimension: wgpu::TextureDimension::D2,
|
|
91
|
+
format: HDR_FORMAT,
|
|
92
|
+
// Phase 4b adds COPY_SRC so the translucent-pass scheduler
|
|
93
|
+
// can snapshot hdr_rt → a SceneColor transient via
|
|
94
|
+
// copy_texture_to_texture before refractive draws run.
|
|
95
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
96
|
+
| wgpu::TextureUsages::TEXTURE_BINDING
|
|
97
|
+
| wgpu::TextureUsages::COPY_SRC,
|
|
98
|
+
view_formats: &[],
|
|
99
|
+
});
|
|
100
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
101
|
+
(texture, view)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// Create the two ping-pong 1×1 exposure textures. Single fragment
|
|
105
|
+
/// writes to one, composite samples the other, swap each frame.
|
|
106
|
+
pub(super) fn create_exposure_textures(device: &wgpu::Device) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
|
|
107
|
+
let make = |label: &str| -> (wgpu::Texture, wgpu::TextureView) {
|
|
108
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
109
|
+
label: Some(label),
|
|
110
|
+
size: wgpu::Extent3d { width: 1, height: 1, depth_or_array_layers: 1 },
|
|
111
|
+
mip_level_count: 1,
|
|
112
|
+
sample_count: 1,
|
|
113
|
+
dimension: wgpu::TextureDimension::D2,
|
|
114
|
+
format: wgpu::TextureFormat::R16Float,
|
|
115
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
116
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
117
|
+
view_formats: &[],
|
|
118
|
+
});
|
|
119
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
120
|
+
(texture, view)
|
|
121
|
+
};
|
|
122
|
+
let (a, av) = make("exposure_a");
|
|
123
|
+
let (b, bv) = make("exposure_b");
|
|
124
|
+
([a, b], [av, bv])
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// Create the material G-buffer (Rg8Unorm, surface size).
|
|
128
|
+
pub(super) fn create_material_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
129
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
130
|
+
label: Some("material_rt"),
|
|
131
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
132
|
+
mip_level_count: 1,
|
|
133
|
+
sample_count: 1,
|
|
134
|
+
dimension: wgpu::TextureDimension::D2,
|
|
135
|
+
format: MATERIAL_FORMAT,
|
|
136
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
137
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
138
|
+
view_formats: &[],
|
|
139
|
+
});
|
|
140
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
141
|
+
(texture, view)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/// Create the albedo G-buffer (Rgba8Unorm, surface size). Written by
|
|
145
|
+
/// the scene pass so post-passes can modulate bounce light by the
|
|
146
|
+
/// receiving surface's diffuse albedo (SSGI etc.).
|
|
147
|
+
pub(super) fn create_albedo_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
148
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
149
|
+
label: Some("albedo_rt"),
|
|
150
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
151
|
+
mip_level_count: 1,
|
|
152
|
+
sample_count: 1,
|
|
153
|
+
dimension: wgpu::TextureDimension::D2,
|
|
154
|
+
format: wgpu::TextureFormat::Rgba8Unorm,
|
|
155
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
156
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
157
|
+
view_formats: &[],
|
|
158
|
+
});
|
|
159
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
160
|
+
(texture, view)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// Create the composed HDR render target. Scene HDR + SSR + SSGI *
|
|
164
|
+
/// albedo + bloom + fog + sun shafts all merged into one texture by
|
|
165
|
+
/// the `scene_compose` pass. Both the TAA-on path (TAA consumes this
|
|
166
|
+
/// as its "current frame" input) and the TAA-off path (composite
|
|
167
|
+
/// reads it directly) read from the same buffer, so fog / shafts /
|
|
168
|
+
/// post-effects stay visible regardless of TAA state.
|
|
169
|
+
pub(super) fn create_composed_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
170
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
171
|
+
label: Some("composed_rt"),
|
|
172
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
173
|
+
mip_level_count: 1,
|
|
174
|
+
sample_count: 1,
|
|
175
|
+
dimension: wgpu::TextureDimension::D2,
|
|
176
|
+
format: HDR_FORMAT,
|
|
177
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
178
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
179
|
+
view_formats: &[],
|
|
180
|
+
});
|
|
181
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
182
|
+
(texture, view)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// Create the velocity render target (Rg16Float, surface size).
|
|
186
|
+
/// Per-pixel screen-space velocity for motion blur and TAA.
|
|
187
|
+
pub(super) fn create_velocity_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
188
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
189
|
+
label: Some("velocity_rt"),
|
|
190
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
191
|
+
mip_level_count: 1,
|
|
192
|
+
sample_count: 1,
|
|
193
|
+
dimension: wgpu::TextureDimension::D2,
|
|
194
|
+
format: VELOCITY_FORMAT,
|
|
195
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
196
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
197
|
+
view_formats: &[],
|
|
198
|
+
});
|
|
199
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
200
|
+
(texture, view)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/// Create the SSR render target (quarter-res HDR). Stochastic SSR
|
|
204
|
+
/// traces one GGX-sampled ray per pixel per frame and relies on the
|
|
205
|
+
/// temporal denoiser to converge the cone over 4–8 frames; pushing
|
|
206
|
+
/// from half to quarter-res cuts the march + temporal-filter pixel
|
|
207
|
+
/// counts 4× and the bilinear upsample in compose is imperceptible
|
|
208
|
+
/// because the GGX cone + temporal blend is already wider than one
|
|
209
|
+
/// quarter-res texel.
|
|
210
|
+
pub(super) fn create_ssr_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
211
|
+
let w = (width / 4).max(1);
|
|
212
|
+
let h = (height / 4).max(1);
|
|
213
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
214
|
+
label: Some("ssr_rt"),
|
|
215
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
216
|
+
mip_level_count: 1,
|
|
217
|
+
sample_count: 1,
|
|
218
|
+
dimension: wgpu::TextureDimension::D2,
|
|
219
|
+
format: HDR_FORMAT,
|
|
220
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
221
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
222
|
+
view_formats: &[],
|
|
223
|
+
});
|
|
224
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
225
|
+
(texture, view)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/// Create the SSR temporal history textures (ping-pong pair, same
|
|
229
|
+
/// format/size as ssr_rt — half-res HDR). The temporal denoiser
|
|
230
|
+
/// blends the noisy current-frame stochastic SSR into the
|
|
231
|
+
/// reprojected previous-frame history so 4–8 frames of accumulation
|
|
232
|
+
/// converge to a smooth reflection.
|
|
233
|
+
pub(super) fn create_ssr_history_textures(
|
|
234
|
+
device: &wgpu::Device, width: u32, height: u32,
|
|
235
|
+
) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
|
|
236
|
+
let w = (width / 4).max(1);
|
|
237
|
+
let h = (height / 4).max(1);
|
|
238
|
+
let make = || {
|
|
239
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
240
|
+
label: Some("ssr_history"),
|
|
241
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
242
|
+
mip_level_count: 1,
|
|
243
|
+
sample_count: 1,
|
|
244
|
+
dimension: wgpu::TextureDimension::D2,
|
|
245
|
+
format: HDR_FORMAT,
|
|
246
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
247
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
248
|
+
view_formats: &[],
|
|
249
|
+
});
|
|
250
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
251
|
+
(texture, view)
|
|
252
|
+
};
|
|
253
|
+
let (t0, v0) = make();
|
|
254
|
+
let (t1, v1) = make();
|
|
255
|
+
([t0, t1], [v0, v1])
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/// Create the SSGI render target (half-res HDR — indirect diffuse bounce light).
|
|
259
|
+
/// Same half-res HDR strategy as SSR: keeps the per-pixel ray march cheap
|
|
260
|
+
/// while still providing enough color resolution for colored bounce light.
|
|
261
|
+
pub(super) fn create_ssgi_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
262
|
+
let w = (width / 2).max(1);
|
|
263
|
+
let h = (height / 2).max(1);
|
|
264
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
265
|
+
label: Some("ssgi_rt"),
|
|
266
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
267
|
+
mip_level_count: 1,
|
|
268
|
+
sample_count: 1,
|
|
269
|
+
dimension: wgpu::TextureDimension::D2,
|
|
270
|
+
format: HDR_FORMAT,
|
|
271
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
272
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
273
|
+
view_formats: &[],
|
|
274
|
+
});
|
|
275
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
276
|
+
(texture, view)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/// Probe grid = ceil(half_w / 16) × ceil(half_h / 16). 50×29 on a
|
|
280
|
+
/// 800×450 half-res Sponza RT = 1450 probes, each holding an 8×8
|
|
281
|
+
/// octahedral atlas = 64 radiance samples (ticket 007a).
|
|
282
|
+
pub(super) const PROBE_TILE_SIZE: u32 = 16;
|
|
283
|
+
pub(super) const PROBE_OCT_SIZE: u32 = 8;
|
|
284
|
+
pub(super) const PROBE_OCT_TEXELS: u32 = PROBE_OCT_SIZE * PROBE_OCT_SIZE;
|
|
285
|
+
|
|
286
|
+
pub(super) fn probe_grid_dims(width: u32, height: u32) -> (u32, u32) {
|
|
287
|
+
let half_w = (width / 2).max(1);
|
|
288
|
+
let half_h = (height / 2).max(1);
|
|
289
|
+
let gw = (half_w + PROBE_TILE_SIZE - 1) / PROBE_TILE_SIZE;
|
|
290
|
+
let gh = (half_h + PROBE_TILE_SIZE - 1) / PROBE_TILE_SIZE;
|
|
291
|
+
(gw.max(1), gh.max(1))
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/// 3D Rgba16Float texture with dimensions `(probe_grid_w, probe_grid_h,
|
|
295
|
+
/// 64)` — one voxel per probe × octahedral texel. Shared shape for the
|
|
296
|
+
/// trace output and the ping-pong history textures.
|
|
297
|
+
fn create_probe_3d_tex(
|
|
298
|
+
device: &wgpu::Device, label: &'static str, gw: u32, gh: u32,
|
|
299
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
300
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
301
|
+
label: Some(label),
|
|
302
|
+
size: wgpu::Extent3d { width: gw, height: gh, depth_or_array_layers: PROBE_OCT_TEXELS },
|
|
303
|
+
mip_level_count: 1,
|
|
304
|
+
sample_count: 1,
|
|
305
|
+
dimension: wgpu::TextureDimension::D3,
|
|
306
|
+
format: HDR_FORMAT,
|
|
307
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
308
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
309
|
+
view_formats: &[],
|
|
310
|
+
});
|
|
311
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
312
|
+
(texture, view)
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/// Per-frame trace output. The trace pass writes into this, the temporal
|
|
316
|
+
/// pass reads it as the "current" input. Not ping-pong because its
|
|
317
|
+
/// contents are fully regenerated every frame.
|
|
318
|
+
pub(super) fn create_probe_trace_tex(
|
|
319
|
+
device: &wgpu::Device, width: u32, height: u32,
|
|
320
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
321
|
+
let (gw, gh) = probe_grid_dims(width, height);
|
|
322
|
+
create_probe_3d_tex(device, "probe_trace", gw, gh)
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/// Ticket 014 V2/V5 — scene-wide SDF clipmap. 64³ R32Float covering
|
|
326
|
+
/// `SCENE_SDF_CLIPMAP_EXTENT` metres around the camera (V5). The
|
|
327
|
+
/// initial origin is the first-frame camera position, voxel-snapped.
|
|
328
|
+
/// Re-bakes when the camera has moved past
|
|
329
|
+
/// `SCENE_SDF_CLIPMAP_REBAKE_THRESHOLD` of the extent.
|
|
330
|
+
pub(super) const SCENE_SDF_CLIPMAP_RES: u32 = 64;
|
|
331
|
+
pub(super) const SCENE_SDF_CLIPMAP_EXTENT: f32 = 40.0;
|
|
332
|
+
/// V5 — voxel-size invalidation threshold, expressed as a fraction
|
|
333
|
+
/// of the full extent. 0.25 = rebake when the camera has moved more
|
|
334
|
+
/// than 10 m from the clipmap centre on a 40 m clipmap.
|
|
335
|
+
pub(super) const SCENE_SDF_CLIPMAP_REBAKE_THRESHOLD: f32 = 0.25;
|
|
336
|
+
|
|
337
|
+
pub(super) fn create_scene_sdf_clipmap(
|
|
338
|
+
device: &wgpu::Device,
|
|
339
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
340
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
341
|
+
label: Some("scene_sdf_clipmap"),
|
|
342
|
+
size: wgpu::Extent3d {
|
|
343
|
+
width: SCENE_SDF_CLIPMAP_RES,
|
|
344
|
+
height: SCENE_SDF_CLIPMAP_RES,
|
|
345
|
+
depth_or_array_layers: SCENE_SDF_CLIPMAP_RES,
|
|
346
|
+
},
|
|
347
|
+
mip_level_count: 1,
|
|
348
|
+
sample_count: 1,
|
|
349
|
+
dimension: wgpu::TextureDimension::D3,
|
|
350
|
+
format: wgpu::TextureFormat::R32Float,
|
|
351
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
352
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
353
|
+
view_formats: &[],
|
|
354
|
+
});
|
|
355
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
356
|
+
(texture, view)
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/// Ticket 014 V6/V10/V13 — World-Space Radiance Cache. 16³ grid of
|
|
360
|
+
/// octahedral probes per cascade, each an 8×8 slab of pre-integrated
|
|
361
|
+
/// distant lighting (padded to 10×10 in V10 for hardware bilinear).
|
|
362
|
+
/// V13 stacks `WSRC_CASCADE_COUNT` cascades in Z at a range of
|
|
363
|
+
/// extents so long-range bounces don't share one probe's coarse
|
|
364
|
+
/// cell with close bounces.
|
|
365
|
+
///
|
|
366
|
+
/// Cascade extents: near 30 m / mid 120 m / far 500 m. 16³ probes
|
|
367
|
+
/// per cascade → cell sizes of 1.875 / 7.5 / 31.25 m. The near
|
|
368
|
+
/// cascade re-bakes often as the camera moves (1.875 × 0.25 ≈
|
|
369
|
+
/// 0.47 m threshold → 7.5 m rebake extent; inverted: cascades with
|
|
370
|
+
/// larger extents rebake less often).
|
|
371
|
+
///
|
|
372
|
+
/// Atlas layout (rgba16float D3 at `(160, 160, 48)`):
|
|
373
|
+
/// probe `(gx, gy, gz)` in cascade `c ∈ [0, 3)`, padded octel
|
|
374
|
+
/// `(ox_pad, oy_pad) ∈ [0, 10)²` → texel
|
|
375
|
+
/// `(gx * 10 + ox_pad, gy * 10 + oy_pad, c * 16 + gz)`
|
|
376
|
+
///
|
|
377
|
+
/// Borders are octahedrally-wrapped at bake time (V11) so the
|
|
378
|
+
/// sampler's bilinear tap stays smooth across the silhouette.
|
|
379
|
+
pub(super) const WSRC_GRID_RES: u32 = 16;
|
|
380
|
+
pub(super) const WSRC_OCT_PAD: u32 = 1;
|
|
381
|
+
pub(super) const WSRC_OCT_PADDED: u32 = PROBE_OCT_SIZE + 2 * WSRC_OCT_PAD;
|
|
382
|
+
pub(super) const WSRC_CASCADE_COUNT: u32 = 3;
|
|
383
|
+
pub(super) const WSRC_CASCADE_EXTENTS: [f32; 3] = [30.0, 120.0, 500.0];
|
|
384
|
+
pub(super) const WSRC_REBAKE_THRESHOLD: f32 = 0.25;
|
|
385
|
+
|
|
386
|
+
pub(super) fn create_wsrc_atlas(
|
|
387
|
+
device: &wgpu::Device,
|
|
388
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
389
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
390
|
+
label: Some("wsrc_atlas"),
|
|
391
|
+
size: wgpu::Extent3d {
|
|
392
|
+
width: WSRC_GRID_RES * WSRC_OCT_PADDED,
|
|
393
|
+
height: WSRC_GRID_RES * WSRC_OCT_PADDED,
|
|
394
|
+
depth_or_array_layers: WSRC_GRID_RES * WSRC_CASCADE_COUNT,
|
|
395
|
+
},
|
|
396
|
+
mip_level_count: 1,
|
|
397
|
+
sample_count: 1,
|
|
398
|
+
dimension: wgpu::TextureDimension::D3,
|
|
399
|
+
format: HDR_FORMAT,
|
|
400
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
401
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
402
|
+
view_formats: &[],
|
|
403
|
+
});
|
|
404
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
405
|
+
(texture, view)
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/// Ticket 014 — per-mesh unsigned distance field. V1 is a fixed 32³
|
|
409
|
+
/// R32Float 3D texture per mesh (128 KB each). R32 instead of R16 so
|
|
410
|
+
/// `WriteOnly` storage binding is accepted on the core wgpu feature
|
|
411
|
+
/// set (R16Float storage-write would need an optional feature). Used
|
|
412
|
+
/// later by the SW probe trace for sphere-marching when HW ray query
|
|
413
|
+
/// isn't available. UDF (not SDF) — the march advances by the scalar
|
|
414
|
+
/// distance regardless of sign, which side-steps the inside/outside
|
|
415
|
+
/// problem on open-surface Sponza meshes (walls, banners, capitals).
|
|
416
|
+
pub(super) const MESH_SDF_RES: u32 = 32;
|
|
417
|
+
|
|
418
|
+
pub(super) fn create_mesh_sdf_texture(
|
|
419
|
+
device: &wgpu::Device,
|
|
420
|
+
label: &'static str,
|
|
421
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
422
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
423
|
+
label: Some(label),
|
|
424
|
+
size: wgpu::Extent3d {
|
|
425
|
+
width: MESH_SDF_RES,
|
|
426
|
+
height: MESH_SDF_RES,
|
|
427
|
+
depth_or_array_layers: MESH_SDF_RES,
|
|
428
|
+
},
|
|
429
|
+
mip_level_count: 1,
|
|
430
|
+
sample_count: 1,
|
|
431
|
+
dimension: wgpu::TextureDimension::D3,
|
|
432
|
+
format: wgpu::TextureFormat::R32Float,
|
|
433
|
+
// COPY_DST is needed by ticket 022's disk cache so a cached
|
|
434
|
+
// SDF can be uploaded via queue.write_texture instead of
|
|
435
|
+
// re-baked. COPY_SRC is needed by the same ticket's readback
|
|
436
|
+
// path on cache miss. Both have zero runtime cost when the
|
|
437
|
+
// cache isn't used (just usage-flag bits at allocation).
|
|
438
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
439
|
+
| wgpu::TextureUsages::TEXTURE_BINDING
|
|
440
|
+
| wgpu::TextureUsages::COPY_SRC
|
|
441
|
+
| wgpu::TextureUsages::COPY_DST,
|
|
442
|
+
view_formats: &[],
|
|
443
|
+
});
|
|
444
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
445
|
+
(texture, view)
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/// Ticket 013 — Mesh Cards. Shared 2D atlases sampled by the HW probe
|
|
449
|
+
/// trace at hit. V2 stores 6 signed-axis slots per mesh (±X ±Y ±Z)
|
|
450
|
+
/// at 64×64 each; 4096² atlas ⇒ 64×64 = 4096 slots ⇒ 682 meshes at
|
|
451
|
+
/// full 6-axis capture (Sponza's ~405 fits comfortably).
|
|
452
|
+
///
|
|
453
|
+
/// Two atlases are kept in lockstep:
|
|
454
|
+
/// - `mesh_card_albedo_atlas` — baked once per mesh at load.
|
|
455
|
+
/// - `mesh_card_radiance_atlas` — written every frame by the card-
|
|
456
|
+
/// lighting compute pass (albedo × sun × NdotL + sky × NdotUp).
|
|
457
|
+
/// The HW trace samples radiance directly at hit, amortising shading
|
|
458
|
+
/// cost across all rays that land in the same card texel.
|
|
459
|
+
pub(super) const CARD_ATLAS_SIZE: u32 = 4096;
|
|
460
|
+
pub(super) const CARD_SLOT_SIZE: u32 = 64;
|
|
461
|
+
pub(super) const CARD_SLOTS_PER_ROW: u32 = CARD_ATLAS_SIZE / CARD_SLOT_SIZE;
|
|
462
|
+
pub(super) const CARD_MAX_SLOTS: u32 = CARD_SLOTS_PER_ROW * CARD_SLOTS_PER_ROW;
|
|
463
|
+
/// V2: 6 directed axes per mesh (+X, -X, +Y, -Y, +Z, -Z).
|
|
464
|
+
pub(super) const CARD_AXES_PER_MESH: u32 = 6;
|
|
465
|
+
|
|
466
|
+
/// Create the mesh-card albedo atlas. `RENDER_ATTACHMENT` for capture,
|
|
467
|
+
/// `TEXTURE_BINDING` for both the card-lighting compute input and a
|
|
468
|
+
/// direct HW-trace fallback.
|
|
469
|
+
pub(super) fn create_mesh_card_atlas(
|
|
470
|
+
device: &wgpu::Device,
|
|
471
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
472
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
473
|
+
label: Some("mesh_card_albedo_atlas"),
|
|
474
|
+
size: wgpu::Extent3d {
|
|
475
|
+
width: CARD_ATLAS_SIZE,
|
|
476
|
+
height: CARD_ATLAS_SIZE,
|
|
477
|
+
depth_or_array_layers: 1,
|
|
478
|
+
},
|
|
479
|
+
mip_level_count: 1,
|
|
480
|
+
sample_count: 1,
|
|
481
|
+
dimension: wgpu::TextureDimension::D2,
|
|
482
|
+
format: wgpu::TextureFormat::Rgba8UnormSrgb,
|
|
483
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
484
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
485
|
+
view_formats: &[],
|
|
486
|
+
});
|
|
487
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
488
|
+
(texture, view)
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/// Ticket 013 V3 — emissive atlas. Same shape as the albedo atlas but
|
|
492
|
+
/// carries material emissive per card texel. Read by the card-lighting
|
|
493
|
+
/// pass to add as-is to the radiance output.
|
|
494
|
+
pub(super) fn create_mesh_card_emissive_atlas(
|
|
495
|
+
device: &wgpu::Device,
|
|
496
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
497
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
498
|
+
label: Some("mesh_card_emissive_atlas"),
|
|
499
|
+
size: wgpu::Extent3d {
|
|
500
|
+
width: CARD_ATLAS_SIZE,
|
|
501
|
+
height: CARD_ATLAS_SIZE,
|
|
502
|
+
depth_or_array_layers: 1,
|
|
503
|
+
},
|
|
504
|
+
mip_level_count: 1,
|
|
505
|
+
sample_count: 1,
|
|
506
|
+
dimension: wgpu::TextureDimension::D2,
|
|
507
|
+
format: wgpu::TextureFormat::Rgba8UnormSrgb,
|
|
508
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
509
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
510
|
+
view_formats: &[],
|
|
511
|
+
});
|
|
512
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
513
|
+
(texture, view)
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/// Create the mesh-card radiance atlas. Written every frame by the
|
|
517
|
+
/// card-lighting compute pass; sampled at hit by the HW probe trace.
|
|
518
|
+
/// Rgba16Float so we can carry multiplicatively-composed sun + sky
|
|
519
|
+
/// without banding. `STORAGE_BINDING` for the compute write,
|
|
520
|
+
/// `TEXTURE_BINDING` for the trace sample.
|
|
521
|
+
pub(super) fn create_mesh_card_radiance_atlas(
|
|
522
|
+
device: &wgpu::Device,
|
|
523
|
+
) -> (wgpu::Texture, wgpu::TextureView) {
|
|
524
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
525
|
+
label: Some("mesh_card_radiance_atlas"),
|
|
526
|
+
size: wgpu::Extent3d {
|
|
527
|
+
width: CARD_ATLAS_SIZE,
|
|
528
|
+
height: CARD_ATLAS_SIZE,
|
|
529
|
+
depth_or_array_layers: 1,
|
|
530
|
+
},
|
|
531
|
+
mip_level_count: 1,
|
|
532
|
+
sample_count: 1,
|
|
533
|
+
dimension: wgpu::TextureDimension::D2,
|
|
534
|
+
format: HDR_FORMAT,
|
|
535
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
536
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
537
|
+
view_formats: &[],
|
|
538
|
+
});
|
|
539
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
540
|
+
(texture, view)
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/// Ping-pong probe-radiance history. Each frame the temporal pass
|
|
544
|
+
/// reads `[prev_idx]` (last frame's blended history), blends it with
|
|
545
|
+
/// the fresh trace, and writes to `[write_idx]`. The resolve pass then
|
|
546
|
+
/// samples `[write_idx]`. Separate textures — the temporal pass cannot
|
|
547
|
+
/// bind the same view as both sampled input and storage-write output.
|
|
548
|
+
pub(super) fn create_probe_history_textures(
|
|
549
|
+
device: &wgpu::Device, width: u32, height: u32,
|
|
550
|
+
) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
|
|
551
|
+
let (gw, gh) = probe_grid_dims(width, height);
|
|
552
|
+
let (t0, v0) = create_probe_3d_tex(device, "probe_history_0", gw, gh);
|
|
553
|
+
let (t1, v1) = create_probe_3d_tex(device, "probe_history_1", gw, gh);
|
|
554
|
+
([t0, t1], [v0, v1])
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/// Create the DoF render target (full-res HDR, same format as TAA output).
|
|
558
|
+
/// DoF reads the TAA output + depth, writes the blurred result here.
|
|
559
|
+
/// Composite then reads this instead of the TAA output.
|
|
560
|
+
pub(super) fn create_dof_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
561
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
562
|
+
label: Some("dof_rt"),
|
|
563
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
564
|
+
mip_level_count: 1,
|
|
565
|
+
sample_count: 1,
|
|
566
|
+
dimension: wgpu::TextureDimension::D2,
|
|
567
|
+
format: HDR_FORMAT,
|
|
568
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
569
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
570
|
+
view_formats: &[],
|
|
571
|
+
});
|
|
572
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
573
|
+
(texture, view)
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/// Create the SSS render target (full-res HDR, same format as DoF/motion-blur).
|
|
577
|
+
pub(super) fn create_sss_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
578
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
579
|
+
label: Some("sss_rt"),
|
|
580
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
581
|
+
mip_level_count: 1,
|
|
582
|
+
sample_count: 1,
|
|
583
|
+
dimension: wgpu::TextureDimension::D2,
|
|
584
|
+
format: HDR_FORMAT,
|
|
585
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
586
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
587
|
+
view_formats: &[],
|
|
588
|
+
});
|
|
589
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
590
|
+
(texture, view)
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/// Halton low-discrepancy sequence (base `b`, index `i`, 1-based).
|
|
594
|
+
/// Returns a value in [0, 1). Used to generate sub-pixel jitter
|
|
595
|
+
/// offsets that are well-distributed across the pixel — the TAA
|
|
596
|
+
/// accumulation effectively integrates over those sample points
|
|
597
|
+
/// to produce a stably anti-aliased image.
|
|
598
|
+
pub(super) fn halton(mut i: u32, b: u32) -> f32 {
|
|
599
|
+
let mut f = 1.0_f32;
|
|
600
|
+
let mut r = 0.0_f32;
|
|
601
|
+
while i > 0 {
|
|
602
|
+
f /= b as f32;
|
|
603
|
+
r += f * (i % b) as f32;
|
|
604
|
+
i /= b;
|
|
605
|
+
}
|
|
606
|
+
r
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
/// Create the two TAA history textures (HDR format, surface size).
|
|
610
|
+
pub(super) fn create_taa_textures(device: &wgpu::Device, width: u32, height: u32) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
|
|
611
|
+
let make = |label: &str| -> (wgpu::Texture, wgpu::TextureView) {
|
|
612
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
613
|
+
label: Some(label),
|
|
614
|
+
size: wgpu::Extent3d { width, height, depth_or_array_layers: 1 },
|
|
615
|
+
mip_level_count: 1,
|
|
616
|
+
sample_count: 1,
|
|
617
|
+
dimension: wgpu::TextureDimension::D2,
|
|
618
|
+
format: HDR_FORMAT,
|
|
619
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
620
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
621
|
+
view_formats: &[],
|
|
622
|
+
});
|
|
623
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
624
|
+
(texture, view)
|
|
625
|
+
};
|
|
626
|
+
let (a, av) = make("taa_a");
|
|
627
|
+
let (b, bv) = make("taa_b");
|
|
628
|
+
([a, b], [av, bv])
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/// Create the SSAO render target. Written by the compute GTAO pass
|
|
632
|
+
/// (via `STORAGE_BINDING`) and sampled by the bilateral blur +
|
|
633
|
+
/// downstream passes.
|
|
634
|
+
pub(super) fn create_ssao_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
635
|
+
let w = (width / 2).max(1);
|
|
636
|
+
let h = (height / 2).max(1);
|
|
637
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
638
|
+
label: Some("ssao_rt"),
|
|
639
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
640
|
+
mip_level_count: 1,
|
|
641
|
+
sample_count: 1,
|
|
642
|
+
dimension: wgpu::TextureDimension::D2,
|
|
643
|
+
format: SSAO_FORMAT,
|
|
644
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
645
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
646
|
+
view_formats: &[],
|
|
647
|
+
});
|
|
648
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
649
|
+
(texture, view)
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
/// Ping-pong half-res SSAO history textures (temporal accumulation).
|
|
653
|
+
/// Same size/format as `ssao_rt`. The compute pass reads the previous
|
|
654
|
+
/// frame's history via `TEXTURE_BINDING` and writes the blended
|
|
655
|
+
/// current-frame result back via `STORAGE_BINDING`. Downstream the
|
|
656
|
+
/// bilateral blur samples the current-frame ssao_rt as before —
|
|
657
|
+
/// history is only used as an input to the GTAO compute.
|
|
658
|
+
pub(super) fn create_ssao_history_textures(
|
|
659
|
+
device: &wgpu::Device,
|
|
660
|
+
width: u32,
|
|
661
|
+
height: u32,
|
|
662
|
+
) -> ([wgpu::Texture; 2], [wgpu::TextureView; 2]) {
|
|
663
|
+
let w = (width / 2).max(1);
|
|
664
|
+
let h = (height / 2).max(1);
|
|
665
|
+
let make = |label: &str| -> (wgpu::Texture, wgpu::TextureView) {
|
|
666
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
667
|
+
label: Some(label),
|
|
668
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
669
|
+
mip_level_count: 1,
|
|
670
|
+
sample_count: 1,
|
|
671
|
+
dimension: wgpu::TextureDimension::D2,
|
|
672
|
+
format: SSAO_FORMAT,
|
|
673
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
674
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
675
|
+
view_formats: &[],
|
|
676
|
+
});
|
|
677
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
678
|
+
(texture, view)
|
|
679
|
+
};
|
|
680
|
+
let (a, av) = make("ssao_history_a");
|
|
681
|
+
let (b, bv) = make("ssao_history_b");
|
|
682
|
+
([a, b], [av, bv])
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
/// Create the SSAO bilateral-blur render target (same format/size as ssao_rt).
|
|
686
|
+
pub(super) fn create_ssao_blur_rt(device: &wgpu::Device, width: u32, height: u32) -> (wgpu::Texture, wgpu::TextureView) {
|
|
687
|
+
let w = (width / 2).max(1);
|
|
688
|
+
let h = (height / 2).max(1);
|
|
689
|
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
|
|
690
|
+
label: Some("ssao_blur_rt"),
|
|
691
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
692
|
+
mip_level_count: 1,
|
|
693
|
+
sample_count: 1,
|
|
694
|
+
dimension: wgpu::TextureDimension::D2,
|
|
695
|
+
format: SSAO_FORMAT,
|
|
696
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
697
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
698
|
+
view_formats: &[],
|
|
699
|
+
});
|
|
700
|
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
|
|
701
|
+
(texture, view)
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/// Build the linear-depth Hi-Z pyramid as `HIZ_MIP_COUNT` separate
|
|
705
|
+
/// single-mip textures. One multi-mip texture is cheaper on paper
|
|
706
|
+
/// but Metal's per-subresource state tracking trips when wgpu
|
|
707
|
+
/// writes one mip and samples another in the same encoder — the
|
|
708
|
+
/// bloom chain has the same issue and uses this same layout.
|
|
709
|
+
pub(super) fn create_linear_depth_hiz_chain(
|
|
710
|
+
device: &wgpu::Device,
|
|
711
|
+
width: u32,
|
|
712
|
+
height: u32,
|
|
713
|
+
) -> (Vec<wgpu::Texture>, Vec<wgpu::TextureView>) {
|
|
714
|
+
let mut textures = Vec::with_capacity(HIZ_MIP_COUNT as usize);
|
|
715
|
+
let mut views = Vec::with_capacity(HIZ_MIP_COUNT as usize);
|
|
716
|
+
for i in 0..HIZ_MIP_COUNT {
|
|
717
|
+
let w = ((width / 2) >> i).max(1);
|
|
718
|
+
let h = ((height / 2) >> i).max(1);
|
|
719
|
+
let tex = device.create_texture(&wgpu::TextureDescriptor {
|
|
720
|
+
label: Some("linear_depth_hiz_mip"),
|
|
721
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
722
|
+
mip_level_count: 1,
|
|
723
|
+
sample_count: 1,
|
|
724
|
+
dimension: wgpu::TextureDimension::D2,
|
|
725
|
+
format: HIZ_FORMAT,
|
|
726
|
+
usage: wgpu::TextureUsages::STORAGE_BINDING
|
|
727
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
728
|
+
view_formats: &[],
|
|
729
|
+
});
|
|
730
|
+
let view = tex.create_view(&wgpu::TextureViewDescriptor::default());
|
|
731
|
+
textures.push(tex);
|
|
732
|
+
views.push(view);
|
|
733
|
+
}
|
|
734
|
+
(textures, views)
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/// Create the bloom mip-chain texture + per-mip render views + a
|
|
738
|
+
/// full-chain view for sampling. Mip 0 starts at surface/2 size and
|
|
739
|
+
/// each subsequent mip halves down to ~surface/2^N. Caller is
|
|
740
|
+
/// responsible for deciding N (usually BLOOM_MIP_COUNT). At least
|
|
741
|
+
/// 1×1 is enforced per mip.
|
|
742
|
+
/// Build the bloom chain as N separate single-mip textures rather
|
|
743
|
+
/// than one multi-mip texture. Multi-mip textures with one mip
|
|
744
|
+
/// bound as render target while another mip is sampled in the
|
|
745
|
+
/// same encoder trips wgpu/Metal's per-subresource state tracking
|
|
746
|
+
/// — symptoms include large black bars in the sampled output. N
|
|
747
|
+
/// separate textures sidestep the problem entirely (each pass's
|
|
748
|
+
/// read/write hits a distinct texture). `bloom_full_view` is a
|
|
749
|
+
/// view onto mip 0's texture, kept for backward compatibility.
|
|
750
|
+
pub(super) fn create_bloom_chain(
|
|
751
|
+
device: &wgpu::Device,
|
|
752
|
+
width: u32,
|
|
753
|
+
height: u32,
|
|
754
|
+
mip_count: u32,
|
|
755
|
+
) -> (Vec<wgpu::Texture>, Vec<wgpu::TextureView>, wgpu::TextureView) {
|
|
756
|
+
let mut textures = Vec::with_capacity(mip_count as usize);
|
|
757
|
+
let mut views = Vec::with_capacity(mip_count as usize);
|
|
758
|
+
for i in 0..mip_count {
|
|
759
|
+
let w = ((width / 2) >> i).max(1);
|
|
760
|
+
let h = ((height / 2) >> i).max(1);
|
|
761
|
+
let tex = device.create_texture(&wgpu::TextureDescriptor {
|
|
762
|
+
label: Some("bloom_mip_tex"),
|
|
763
|
+
size: wgpu::Extent3d { width: w, height: h, depth_or_array_layers: 1 },
|
|
764
|
+
mip_level_count: 1,
|
|
765
|
+
sample_count: 1,
|
|
766
|
+
dimension: wgpu::TextureDimension::D2,
|
|
767
|
+
format: HDR_FORMAT,
|
|
768
|
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
|
769
|
+
| wgpu::TextureUsages::TEXTURE_BINDING,
|
|
770
|
+
view_formats: &[],
|
|
771
|
+
});
|
|
772
|
+
let view = tex.create_view(&wgpu::TextureViewDescriptor::default());
|
|
773
|
+
textures.push(tex);
|
|
774
|
+
views.push(view);
|
|
775
|
+
}
|
|
776
|
+
let full_view = textures[0].create_view(&wgpu::TextureViewDescriptor::default());
|
|
777
|
+
(textures, views, full_view)
|
|
778
|
+
}
|