Skip to content

Commit 44dfa7e

Browse files
authored
Merge pull request #99895 from mihe/jolt-physics
Add Jolt Physics as an alternative 3D physics engine
2 parents a40fc23 + d470c2a commit 44dfa7e

File tree

531 files changed

+115764
-4
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

531 files changed

+115764
-4
lines changed

COPYRIGHT.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ Copyright: 2007, Starbreeze Studios
101101
2007-2014, Juan Linietsky, Ariel Manzur
102102
License: Expat and Zlib
103103

104+
Files: ./modules/jolt_physics/spaces/jolt_temp_allocator.cpp
105+
Comment: Jolt Physics
106+
Copyright: 2021, Jorrit Rouwe
107+
2014-present, Godot Engine contributors
108+
2007-2014, Juan Linietsky, Ariel Manzur
109+
License: Expat
110+
104111
Files: ./modules/lightmapper_rd/lm_compute.glsl
105112
Comment: Joint Non-Local Means (JNLM) denoiser
106113
Copyright: 2020, Manuel Prandini
@@ -294,6 +301,11 @@ Comment: International Components for Unicode
294301
Copyright: 2016-2024, Unicode, Inc.
295302
License: Unicode
296303

304+
Files: ./thirdparty/jolt_physics/
305+
Comment: Jolt Physics
306+
Copyright: 2021, Jorrit Rouwe
307+
License: Expat
308+
297309
Files: ./thirdparty/jpeg-compressor/
298310
Comment: jpeg-compressor
299311
Copyright: 2012, Rich Geldreich

core/os/memory.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ _ALWAYS_INLINE_ T *_post_initialize(T *p_obj) {
122122
return p_obj;
123123
}
124124

125-
#define memnew(m_class) _post_initialize(new ("") m_class)
125+
#define memnew(m_class) _post_initialize(::new ("") m_class)
126126

127-
#define memnew_allocator(m_class, m_allocator) _post_initialize(new (m_allocator::alloc) m_class)
128-
#define memnew_placement(m_placement, m_class) _post_initialize(new (m_placement) m_class)
127+
#define memnew_allocator(m_class, m_allocator) _post_initialize(::new (m_allocator::alloc) m_class)
128+
#define memnew_placement(m_placement, m_class) _post_initialize(::new (m_placement) m_class)
129129

130130
_ALWAYS_INLINE_ bool predelete_handler(void *) {
131131
return true;
@@ -189,7 +189,7 @@ T *memnew_arr_template(size_t p_elements) {
189189

190190
/* call operator new */
191191
for (size_t i = 0; i < p_elements; i++) {
192-
new (&elems[i]) T;
192+
::new (&elems[i]) T;
193193
}
194194
}
195195

doc/classes/ProjectSettings.xml

Lines changed: 131 additions & 0 deletions
Large diffs are not rendered by default.

modules/jolt_physics/SCsub

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
#!/usr/bin/env python
2+
from misc.utility.scons_hints import *
3+
4+
Import("env")
5+
Import("env_modules")
6+
7+
env_jolt = env_modules.Clone()
8+
9+
# Thirdparty source files
10+
11+
thirdparty_dir = "#thirdparty/jolt_physics/"
12+
thirdparty_sources = [
13+
"Jolt/RegisterTypes.cpp",
14+
"Jolt/AABBTree/AABBTreeBuilder.cpp",
15+
"Jolt/Core/Color.cpp",
16+
"Jolt/Core/Factory.cpp",
17+
"Jolt/Core/IssueReporting.cpp",
18+
"Jolt/Core/JobSystemSingleThreaded.cpp",
19+
"Jolt/Core/JobSystemThreadPool.cpp",
20+
"Jolt/Core/JobSystemWithBarrier.cpp",
21+
"Jolt/Core/LinearCurve.cpp",
22+
"Jolt/Core/Memory.cpp",
23+
"Jolt/Core/Profiler.cpp",
24+
"Jolt/Core/RTTI.cpp",
25+
"Jolt/Core/Semaphore.cpp",
26+
"Jolt/Core/StringTools.cpp",
27+
"Jolt/Core/TickCounter.cpp",
28+
"Jolt/Geometry/ConvexHullBuilder.cpp",
29+
"Jolt/Geometry/ConvexHullBuilder2D.cpp",
30+
"Jolt/Geometry/Indexify.cpp",
31+
"Jolt/Geometry/OrientedBox.cpp",
32+
"Jolt/Math/Vec3.cpp",
33+
"Jolt/ObjectStream/SerializableObject.cpp",
34+
"Jolt/Physics/DeterminismLog.cpp",
35+
"Jolt/Physics/IslandBuilder.cpp",
36+
"Jolt/Physics/LargeIslandSplitter.cpp",
37+
"Jolt/Physics/PhysicsScene.cpp",
38+
"Jolt/Physics/PhysicsSystem.cpp",
39+
"Jolt/Physics/PhysicsUpdateContext.cpp",
40+
"Jolt/Physics/StateRecorderImpl.cpp",
41+
"Jolt/Physics/Body/Body.cpp",
42+
"Jolt/Physics/Body/BodyCreationSettings.cpp",
43+
"Jolt/Physics/Body/BodyInterface.cpp",
44+
"Jolt/Physics/Body/BodyManager.cpp",
45+
"Jolt/Physics/Body/MassProperties.cpp",
46+
"Jolt/Physics/Body/MotionProperties.cpp",
47+
"Jolt/Physics/Character/Character.cpp",
48+
"Jolt/Physics/Character/CharacterBase.cpp",
49+
"Jolt/Physics/Character/CharacterVirtual.cpp",
50+
"Jolt/Physics/Collision/CastConvexVsTriangles.cpp",
51+
"Jolt/Physics/Collision/CastSphereVsTriangles.cpp",
52+
"Jolt/Physics/Collision/CollideConvexVsTriangles.cpp",
53+
"Jolt/Physics/Collision/CollideSphereVsTriangles.cpp",
54+
"Jolt/Physics/Collision/CollisionDispatch.cpp",
55+
"Jolt/Physics/Collision/CollisionGroup.cpp",
56+
"Jolt/Physics/Collision/EstimateCollisionResponse.cpp",
57+
"Jolt/Physics/Collision/GroupFilter.cpp",
58+
"Jolt/Physics/Collision/GroupFilterTable.cpp",
59+
"Jolt/Physics/Collision/ManifoldBetweenTwoFaces.cpp",
60+
"Jolt/Physics/Collision/NarrowPhaseQuery.cpp",
61+
"Jolt/Physics/Collision/NarrowPhaseStats.cpp",
62+
"Jolt/Physics/Collision/PhysicsMaterial.cpp",
63+
"Jolt/Physics/Collision/PhysicsMaterialSimple.cpp",
64+
"Jolt/Physics/Collision/TransformedShape.cpp",
65+
"Jolt/Physics/Collision/BroadPhase/BroadPhase.cpp",
66+
"Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp",
67+
"Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp",
68+
"Jolt/Physics/Collision/BroadPhase/QuadTree.cpp",
69+
"Jolt/Physics/Collision/Shape/BoxShape.cpp",
70+
"Jolt/Physics/Collision/Shape/CapsuleShape.cpp",
71+
"Jolt/Physics/Collision/Shape/CompoundShape.cpp",
72+
"Jolt/Physics/Collision/Shape/ConvexHullShape.cpp",
73+
"Jolt/Physics/Collision/Shape/ConvexShape.cpp",
74+
"Jolt/Physics/Collision/Shape/CylinderShape.cpp",
75+
"Jolt/Physics/Collision/Shape/DecoratedShape.cpp",
76+
"Jolt/Physics/Collision/Shape/EmptyShape.cpp",
77+
"Jolt/Physics/Collision/Shape/HeightFieldShape.cpp",
78+
"Jolt/Physics/Collision/Shape/MeshShape.cpp",
79+
"Jolt/Physics/Collision/Shape/MutableCompoundShape.cpp",
80+
"Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp",
81+
"Jolt/Physics/Collision/Shape/PlaneShape.cpp",
82+
"Jolt/Physics/Collision/Shape/RotatedTranslatedShape.cpp",
83+
"Jolt/Physics/Collision/Shape/ScaledShape.cpp",
84+
"Jolt/Physics/Collision/Shape/Shape.cpp",
85+
"Jolt/Physics/Collision/Shape/SphereShape.cpp",
86+
"Jolt/Physics/Collision/Shape/StaticCompoundShape.cpp",
87+
"Jolt/Physics/Collision/Shape/TaperedCapsuleShape.cpp",
88+
"Jolt/Physics/Collision/Shape/TaperedCylinderShape.cpp",
89+
"Jolt/Physics/Collision/Shape/TriangleShape.cpp",
90+
"Jolt/Physics/Constraints/ConeConstraint.cpp",
91+
"Jolt/Physics/Constraints/Constraint.cpp",
92+
"Jolt/Physics/Constraints/ConstraintManager.cpp",
93+
"Jolt/Physics/Constraints/ContactConstraintManager.cpp",
94+
"Jolt/Physics/Constraints/DistanceConstraint.cpp",
95+
"Jolt/Physics/Constraints/FixedConstraint.cpp",
96+
"Jolt/Physics/Constraints/GearConstraint.cpp",
97+
"Jolt/Physics/Constraints/HingeConstraint.cpp",
98+
"Jolt/Physics/Constraints/MotorSettings.cpp",
99+
"Jolt/Physics/Constraints/PathConstraint.cpp",
100+
"Jolt/Physics/Constraints/PathConstraintPath.cpp",
101+
"Jolt/Physics/Constraints/PathConstraintPathHermite.cpp",
102+
"Jolt/Physics/Constraints/PointConstraint.cpp",
103+
"Jolt/Physics/Constraints/PulleyConstraint.cpp",
104+
"Jolt/Physics/Constraints/RackAndPinionConstraint.cpp",
105+
"Jolt/Physics/Constraints/SixDOFConstraint.cpp",
106+
"Jolt/Physics/Constraints/SliderConstraint.cpp",
107+
"Jolt/Physics/Constraints/SpringSettings.cpp",
108+
"Jolt/Physics/Constraints/SwingTwistConstraint.cpp",
109+
"Jolt/Physics/Constraints/TwoBodyConstraint.cpp",
110+
"Jolt/Physics/Ragdoll/Ragdoll.cpp",
111+
"Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp",
112+
"Jolt/Physics/SoftBody/SoftBodyMotionProperties.cpp",
113+
"Jolt/Physics/SoftBody/SoftBodyShape.cpp",
114+
"Jolt/Physics/SoftBody/SoftBodySharedSettings.cpp",
115+
"Jolt/Physics/Vehicle/MotorcycleController.cpp",
116+
"Jolt/Physics/Vehicle/TrackedVehicleController.cpp",
117+
"Jolt/Physics/Vehicle/VehicleAntiRollBar.cpp",
118+
"Jolt/Physics/Vehicle/VehicleCollisionTester.cpp",
119+
"Jolt/Physics/Vehicle/VehicleConstraint.cpp",
120+
"Jolt/Physics/Vehicle/VehicleController.cpp",
121+
"Jolt/Physics/Vehicle/VehicleDifferential.cpp",
122+
"Jolt/Physics/Vehicle/VehicleEngine.cpp",
123+
"Jolt/Physics/Vehicle/VehicleTrack.cpp",
124+
"Jolt/Physics/Vehicle/VehicleTransmission.cpp",
125+
"Jolt/Physics/Vehicle/Wheel.cpp",
126+
"Jolt/Physics/Vehicle/WheeledVehicleController.cpp",
127+
"Jolt/Renderer/DebugRenderer.cpp",
128+
"Jolt/Renderer/DebugRendererPlayback.cpp",
129+
"Jolt/Renderer/DebugRendererRecorder.cpp",
130+
"Jolt/Renderer/DebugRendererSimple.cpp",
131+
"Jolt/Skeleton/SkeletalAnimation.cpp",
132+
"Jolt/Skeleton/Skeleton.cpp",
133+
"Jolt/Skeleton/SkeletonMapper.cpp",
134+
"Jolt/Skeleton/SkeletonPose.cpp",
135+
"Jolt/TriangleGrouper/TriangleGrouperClosestCentroid.cpp",
136+
"Jolt/TriangleGrouper/TriangleGrouperMorton.cpp",
137+
"Jolt/TriangleSplitter/TriangleSplitter.cpp",
138+
"Jolt/TriangleSplitter/TriangleSplitterBinning.cpp",
139+
"Jolt/TriangleSplitter/TriangleSplitterFixedLeafSize.cpp",
140+
"Jolt/TriangleSplitter/TriangleSplitterLongestAxis.cpp",
141+
"Jolt/TriangleSplitter/TriangleSplitterMean.cpp",
142+
"Jolt/TriangleSplitter/TriangleSplitterMorton.cpp",
143+
]
144+
145+
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
146+
147+
env_jolt.Prepend(CPPPATH=[thirdparty_dir])
148+
149+
if env.dev_build:
150+
env_jolt.Append(CPPDEFINES=["JPH_ENABLE_ASSERTS"])
151+
152+
if env.editor_build:
153+
env_jolt.Append(CPPDEFINES=["JPH_DEBUG_RENDERER"])
154+
155+
if env["precision"] == "double":
156+
env_jolt.Append(CPPDEFINES=["JPH_DOUBLE_PRECISION"])
157+
158+
env_thirdparty = env_jolt.Clone()
159+
env_thirdparty.disable_warnings()
160+
161+
thirdparty_obj = []
162+
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources)
163+
env.modules_sources += thirdparty_obj
164+
165+
# Godot source files
166+
167+
module_obj = []
168+
169+
env_jolt.add_source_files(module_obj, "*.cpp")
170+
env_jolt.add_source_files(module_obj, "joints/*.cpp")
171+
env_jolt.add_source_files(module_obj, "misc/*.cpp")
172+
env_jolt.add_source_files(module_obj, "objects/*.cpp")
173+
env_jolt.add_source_files(module_obj, "shapes/*.cpp")
174+
env_jolt.add_source_files(module_obj, "spaces/*.cpp")
175+
env.modules_sources += module_obj
176+
177+
# Needed to force rebuilding the module files when the thirdparty library is updated.
178+
env.Depends(module_obj, thirdparty_obj)

modules/jolt_physics/config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def can_build(env, platform):
2+
return not env["disable_3d"]
3+
4+
5+
def configure(env):
6+
pass

0 commit comments

Comments
 (0)