From dd743885e41c7d0ca7a1b921b84c0561ec09ae77 Mon Sep 17 00:00:00 2001 From: D-AIRY <admin@ds-servers.com> Date: Thu, 2 Apr 2020 00:03:23 +0300 Subject: [PATCH] Some optimizations --- source/game/BaseAnimating.cpp | 10 ++-------- source/game/BaseAnimating.h | 4 ++-- source/game/BaseTrigger.cpp | 23 +++++++++++++++++++++++ source/game/BaseTrigger.h | 3 +++ source/physics/PhyWorld.cpp | 18 +++++++++++++----- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/source/game/BaseAnimating.cpp b/source/game/BaseAnimating.cpp index 6b5fa83fe..f9831e33e 100644 --- a/source/game/BaseAnimating.cpp +++ b/source/game/BaseAnimating.cpp @@ -450,10 +450,7 @@ void CBaseAnimating::setPos(const float3 & pos) { m_pRigidBody->getWorldTransform().setOrigin(F3_BTVEC(pos)); - if(m_pMgr->isEditorMode()) - { - SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); - } + SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); } } @@ -464,10 +461,7 @@ void CBaseAnimating::setOrient(const SMQuaternion & q) { m_pRigidBody->getWorldTransform().setRotation(Q4_BTQUAT(q)); - if(m_pMgr->isEditorMode()) - { - SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); - } + SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); } } diff --git a/source/game/BaseAnimating.h b/source/game/BaseAnimating.h index a31b2fdff..30195eb79 100644 --- a/source/game/BaseAnimating.h +++ b/source/game/BaseAnimating.h @@ -54,8 +54,8 @@ public: void cancelNextAnimation(int iSlot = -1); bool playingAnimations(const char* name); - void setPos(const float3 & pos); - void setOrient(const SMQuaternion & q); + void setPos(const float3 & pos) override; + void setOrient(const SMQuaternion & q) override; void setSkin(int iSkin); diff --git a/source/game/BaseTrigger.cpp b/source/game/BaseTrigger.cpp index d274e13c6..c70c45e16 100644 --- a/source/game/BaseTrigger.cpp +++ b/source/game/BaseTrigger.cpp @@ -229,3 +229,26 @@ void CBaseTrigger::update(float dt) } m_aTouches.swap(m_aNewTouches); } + + +void CBaseTrigger::setPos(const float3 & pos) +{ + BaseClass::setPos(pos); + if(m_pGhostObject) + { + m_pGhostObject->getWorldTransform().setOrigin(F3_BTVEC(pos)); + + SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject); + } +} + +void CBaseTrigger::setOrient(const SMQuaternion & q) +{ + BaseClass::setOrient(q); + if(m_pGhostObject) + { + m_pGhostObject->getWorldTransform().setRotation(Q4_BTQUAT(q)); + + SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject); + } +} diff --git a/source/game/BaseTrigger.h b/source/game/BaseTrigger.h index 722df46cf..fd281672d 100644 --- a/source/game/BaseTrigger.h +++ b/source/game/BaseTrigger.h @@ -35,6 +35,9 @@ public: void disable(); void toggle(); + void setPos(const float3 & pos) override; + void setOrient(const SMQuaternion & q) override; + protected: bool m_bEnabled; ID m_idUpdateInterval; diff --git a/source/physics/PhyWorld.cpp b/source/physics/PhyWorld.cpp index 70248b799..c5e173441 100644 --- a/source/physics/PhyWorld.cpp +++ b/source/physics/PhyWorld.cpp @@ -34,9 +34,9 @@ public: void forLoop(int iStart, int iEnd) const { - Core_PStartSection(PERF_SECTION_PHYS_UPDATE); + // Core_PStartSection(PERF_SECTION_PHYS_UPDATE); m_pBody->forLoop(iStart, iEnd); - Core_PEndSection(PERF_SECTION_PHYS_UPDATE); + // Core_PEndSection(PERF_SECTION_PHYS_UPDATE); }; protected: @@ -46,7 +46,13 @@ public: virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE { BT_PROFILE("parallelFor_SkyXEngine"); - if(Core_MGetThreadID() == 0) + + if(iBegin >= iEnd) + { + return; + } + + if(Core_MGetThreadID() == 0 && (iEnd - iBegin) > grainSize) { CBody cbody(&body); Core_MWaitFor(Core_MForLoop(iBegin, iEnd, &cbody, grainSize)); @@ -96,6 +102,8 @@ CPhyWorld::CPhyWorld(): m_pDynamicsWorld = new btDiscreteDynamicsWorldMt(m_pDispatcher, m_pBroadphase, pSolverPool, m_pSolver, m_pCollisionConfiguration); + m_pDynamicsWorld->setForceUpdateAllAabbs(false); + m_pDynamicsWorld->getSolverInfo().m_numIterations = 30; //btCreateDefaultTaskScheduler(); @@ -115,8 +123,8 @@ CPhyWorld::CPhyWorld(): Core_0RegisterCVarBool("r_physdebug", false, "Debug drawing physics shapes"); m_bDebugDraw = GET_PCVAR_BOOL("r_physdebug"); - //btSetCustomEnterProfileZoneFunc(CProfileManager::Start_Profile); - //btSetCustomLeaveProfileZoneFunc(CProfileManager::Stop_Profile); + btSetCustomEnterProfileZoneFunc(CProfileManager::Start_Profile); + btSetCustomLeaveProfileZoneFunc(CProfileManager::Stop_Profile); #if 0 Core_GetIXCore()->getEventChannel<XEventLevel>(EVENT_LEVEL_GUID)->addListener([](const XEventLevel *pData) -- GitLab