summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-20 16:26:16 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-11-15 13:06:16 -0500
commit4cd5b991a6c4cd3bd8f052a052df03485f1d8526 (patch)
tree37ab672c69854b4fae85e4de82844cd0c858e2f2
parent1513216876a0409f45d88cbad14ae8b48fca37e2 (diff)
add bullet dependency first pass
-rw-r--r--CMakeLists.txt26
-rw-r--r--src/ecs.cpp23
2 files changed, 49 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3b18024..df4fe1b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -143,6 +143,32 @@ FetchContent_Declare(cgltf URL https://github.com/jkuhlmann/cgltf/archive/271614
FetchContent_MakeAvailable(cgltf)
target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/cgltf-src")
+FetchContent_Declare(bullet
+ GIT_REPOSITORY https://github.com/bulletphysics/bullet3.git
+ GIT_TAG 3.25
+ OVERRIDE_FIND_PACKAGE
+)
+FetchContent_GetProperties(bullet)
+if(NOT bullet_POPULATED)
+ set(BUILD_SHARED_LIBS 1 CACHE STRING "" FORCE)
+ set(BUILD_BULLET2_DEMOS 0 CACHE STRING "" FORCE)
+ set(BUILD_CPU_DEMOS 0 CACHE STRING "" FORCE)
+ set(BUILD_UNIT_TESTS 0 CACHE STRING "" FORCE)
+ set(BUILD_OPENGL3_DEMOS 0 CACHE STRING "" FORCE)
+ set(BUILD_EXTRAS 0 CACHE STRING "" FORCE)
+ set(INSTALL_EXTRA_LIBS 0 CACHE STRING "" FORCE)
+ set(INSTALL_LIBS 0 CACHE STRING "" FORCE)
+ set(POSITION_INDEPENDENT_CODE O CACHE BOOL "" FORCE)
+ FetchContent_Populate(bullet)
+ add_subdirectory(${bullet_SOURCE_DIR} ${bullet_BINARY_DIR})
+ target_include_directories(pke PUBLIC BEFORE ${bullet_SOURCE_DIR}/src)
+ target_link_libraries(pke PUBLIC BulletDynamics BulletCollision LinearMath OpenGLWindow Bullet3Common)
+ message(STATUS "Bullet vars: " ${bullet_SOURCE_DIR} " - " ${bullet_BINARY_DIR})
+endif()
+find_package(Bullet REQUIRED
+ PATHS ${Bullet_SOURCE_DIR} ${Bullet_BINARY_DIR}
+)
+
target_include_directories(pke PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")
target_link_libraries(pke PUBLIC imguidocked)
diff --git a/src/ecs.cpp b/src/ecs.cpp
index b4207f8..17c5a89 100644
--- a/src/ecs.cpp
+++ b/src/ecs.cpp
@@ -1,9 +1,12 @@
#include "ecs.hpp"
+#include "memory.hpp"
#include "vendor/glm_include.hpp"
#include "window.hpp"
+#include <btBulletDynamicsCommon.h>
+
TypeSafeInt_B(EntityHandle);
const uint64_t maxBucketItemCount = 256;
@@ -28,6 +31,13 @@ BucketContainer<EntityBucket, EntityHandle_T> Entities_BucketContainer{};
BucketContainer<GrBindsBucket, GrBindsHandle_T> Comp_GrBinds_BucketContainer{};
BucketContainer<InstanceBucket, InstanceHandle_T> Comp_Instance_BucketContainer{};
+MemBucket *bulletBucket = nullptr;
+btDefaultCollisionConfiguration *btConfiguration = nullptr;
+btCollisionDispatcher *btDispatcher = nullptr;
+btBroadphaseInterface *btBroadphase = nullptr;
+btConstraintSolver *btSolver = nullptr;
+btDiscreteDynamicsWorld *btDynamicsWorld = nullptr;
+
void ECS_GetEntity_Inner(EntityHandle entHandle, Entity*& ent) {
EntityHandle_T entHandle_t{static_cast<EntityHandle_T>(entHandle)};
assert(entHandle_t != EntityHandle_T_MAX && "Unknown entity handle");
@@ -40,6 +50,18 @@ void ECS_Init() {
Buckets_Init(Entities_BucketContainer);
Buckets_Init(Comp_GrBinds_BucketContainer);
Buckets_Init(Comp_Instance_BucketContainer);
+ // bullet
+ {
+ bulletBucket = Pke_BeginTransientBucket();
+ btConfiguration = Pke_New<btDefaultCollisionConfiguration>(bulletBucket);
+ btDispatcher = Pke_New<btCollisionDispatcher>(bulletBucket);
+ new (btDispatcher) btCollisionDispatcher(btConfiguration);
+ btBroadphase = Pke_New<btDbvtBroadphase>(bulletBucket);
+ btSolver = Pke_New<btSequentialImpulseConstraintSolver>(bulletBucket);
+ btDynamicsWorld = Pke_New<btDiscreteDynamicsWorld>(bulletBucket);
+ new (btDynamicsWorld) btDiscreteDynamicsWorld(btDispatcher, btBroadphase, btSolver, btConfiguration);
+ btDynamicsWorld->setGravity(btVector3(0, -1, 0));
+ }
}
uint64_t ECS_GetEntities_BucketCount() {
@@ -401,6 +423,7 @@ CompInstance *ECS_GetInstances(uint64_t bucketIndex, uint64_t &itemCount) {
}
void ECS_Teardown() {
+ Pke_EndTransientBucket(bulletBucket);
EntitiesWithExcessInstances.~DynArray();
entitiesYetToBeRemoved.~DynArray();
EntitiesToBeRemoved.~DynArray();