diff options
Diffstat (limited to 'src/camera.cpp')
| -rw-r--r-- | src/camera.cpp | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index ef00b6e..134e9f7 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -12,7 +12,10 @@ PkeCamera NullCamera {}; CompInstance NullCameraInstance{}; PkeCamera *ActiveCamera = &NullCamera; -pk_bkt_arr_t<PkeCamera> bktc_cameras{}; +struct pke_camera_master { + pk_membucket *bkt; + pk_bkt_arr_t<PkeCamera> bktc_cameras{}; +} cam_mstr; btSphereShape CameraShape{1.f}; @@ -45,10 +48,10 @@ PkeCamera &PkeCamera_Register_Inner(PkeCamera &cam, CompInstance &inst, const In } PkeCamera &PkeCamera_Register(pk_uuid uuid, const InstPos &instPos) { - CameraHandle cameraHandle{pk_bkt_arr_new_handle(&bktc_cameras)}; + CameraHandle cameraHandle{pk_bkt_arr_new_handle(&cam_mstr.bktc_cameras)}; CompInstance *inst; - auto &cam = bktc_cameras[cameraHandle]; + auto &cam = cam_mstr.bktc_cameras[cameraHandle]; new (&cam) PkeCamera{}; cam.uuid = uuid; @@ -61,7 +64,7 @@ PkeCamera &PkeCamera_Register(pk_uuid uuid, const InstPos &instPos) { PkeCamera *PkeCamera_Get(CameraHandle cameraHandle) { assert(cameraHandle != CameraHandle_MAX); - return &bktc_cameras[cameraHandle]; + return &cam_mstr.bktc_cameras[cameraHandle]; } PkeCamera *PkeCamera_Get(EntityHandle handle) { @@ -72,16 +75,16 @@ PkeCamera *PkeCamera_Get(EntityHandle handle) { (void)user_obj_data; return arr_obj_data->handle == handle; }; - pk_bkt_arr_handle cam_handle = pk_bkt_arr_find_first_handle(&bktc_cameras, &CamFindFn::invoke, &cam_find_cb, NULL); + pk_bkt_arr_handle cam_handle = pk_bkt_arr_find_first_handle(&cam_mstr.bktc_cameras, &CamFindFn::invoke, &cam_find_cb, NULL); if (cam_handle == CameraHandle_MAX) { return nullptr; } - return &bktc_cameras[cam_handle]; + return &cam_mstr.bktc_cameras[cam_handle]; } void PkeCamera_TargetInstance(CameraHandle cameraHandle, CompInstance *inst) { assert(cameraHandle != CameraHandle_MAX); - auto &cam = bktc_cameras[cameraHandle]; + auto &cam = cam_mstr.bktc_cameras[cameraHandle]; CompInstance *selfInstance = ECS_GetInstance(cam.phys.instHandle); if (cam.phys.constraint != nullptr && cam.phys.constraint != CAFE_BABE(btTypedConstraint)) { @@ -131,7 +134,7 @@ void PkeCamera_TargetInstance(CameraHandle cameraHandle, CompInstance *inst) { void PkeCamera_UntargetInstance(CameraHandle cameraHandle) { assert(cameraHandle != CameraHandle_MAX); - auto &cam = bktc_cameras[cameraHandle]; + auto &cam = cam_mstr.bktc_cameras[cameraHandle]; BtDynamicsWorld->removeConstraint(cam.phys.constraint); pk_delete<btTypedConstraint>(cam.phys.constraint, MemBkt_Bullet); cam.phys.constraint = CAFE_BABE(btTypedConstraint); @@ -150,12 +153,12 @@ void PkeCamera_SetPrimary(CameraHandle cameraHandle) { // Instead, should be a per-viewport or per-world check? cam.isPrimary = (cam.camHandle == handle); }; - pk_bkt_arr_iterate(&bktc_cameras, check_stale, &cameraHandle); + pk_bkt_arr_iterate(&cam_mstr.bktc_cameras, check_stale, &cameraHandle); } void PkeCamera_Destroy(CameraHandle cameraHandle) { assert(cameraHandle != CameraHandle_MAX); - auto *camPtr = &bktc_cameras[cameraHandle]; + auto *camPtr = &cam_mstr.bktc_cameras[cameraHandle]; auto &cam = *camPtr; if (cam.phys.constraint != nullptr && cam.phys.constraint != CAFE_BABE(btTypedConstraint)) { @@ -175,11 +178,12 @@ void PkeCamera_Destroy(CameraHandle cameraHandle) { } pk_bkt_arr &PkeCamera_GetPkBktArr() { - return bktc_cameras; + return cam_mstr.bktc_cameras; } void PkeCamera_Init() { - new (&bktc_cameras) pk_bkt_arr_t<PkeCamera>{ pk_bkt_arr_handle_MAX_constexpr }; + cam_mstr.bkt = pk_mem_bucket_create("pk_bkt_arr cam", 1024 * 1024, PK_MEMBUCKET_FLAG_NONE); + new (&cam_mstr.bktc_cameras) pk_bkt_arr_t<PkeCamera>{ pk_bkt_arr_handle_MAX_constexpr, cam_mstr.bkt, cam_mstr.bkt }; NullCamera.type = PKE_CAMERA_TYPE_ORTHOGONAL; NullCamera.view = PKE_CAMERA_VIEW_TARGET; NullCamera.stale = PKE_CAMERA_STALE_ALL; @@ -197,7 +201,8 @@ void PkeCamera_Teardown() { pk_delete<btRigidBody>(NullCameraInstance.bt.rigidBody, MemBkt_Bullet); NullCameraInstance.bt.motionState = CAFE_BABE(btDefaultMotionState); NullCameraInstance.bt.rigidBody = CAFE_BABE(btRigidBody); - bktc_cameras.~pk_bkt_arr_t<PkeCamera>(); + cam_mstr.bktc_cameras.~pk_bkt_arr_t<PkeCamera>(); + pk_mem_bucket_destroy(cam_mstr.bkt); } void PkeCamera_Tick(double delta) { @@ -231,6 +236,6 @@ void PkeCamera_Tick(double delta) { } cam.stale = cam.stale | PKE_CAMERA_STALE_POSROT; }; - pk_bkt_arr_iterate(&bktc_cameras, check_stale, NULL); + pk_bkt_arr_iterate(&cam_mstr.bktc_cameras, check_stale, NULL); } |
