diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-20 16:26:16 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-15 13:06:16 -0500 |
| commit | 4cd5b991a6c4cd3bd8f052a052df03485f1d8526 (patch) | |
| tree | 37ab672c69854b4fae85e4de82844cd0c858e2f2 | |
| parent | 1513216876a0409f45d88cbad14ae8b48fca37e2 (diff) | |
add bullet dependency first pass
| -rw-r--r-- | CMakeLists.txt | 26 | ||||
| -rw-r--r-- | src/ecs.cpp | 23 |
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(); |
