hkpSuspendInactiveAgentsUtil.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_UTILITIES2_SUSPEND_INACTIVE_AGENTS_H
  9. #define HK_UTILITIES2_SUSPEND_INACTIVE_AGENTS_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Physics/Dynamics/World/Listener/hkpIslandActivationListener.h>
  12. #include <Physics/Dynamics/World/Listener/hkpWorldDeletionListener.h>
  13. /// A class which tries to free collision cache memory for inactive islands
  14. /// Note: this class works because of the current implementation of hkpBvTreeStreamAgent::updateShapeCollectionFilter
  15. class hkpSuspendInactiveAgentsUtil : public hkReferencedObject, hkpIslandActivationListener, hkpWorldDeletionListener
  16. {
  17. public:
  18. enum OperationMode
  19. {
  20. /// Remove all collision agents which are a subagent of the bvtreestream agent.
  21. /// Typically this are the agents between moving bodies and the triangles of the
  22. /// landscape. Note: This type of agents account for most collision agent memory in most games.
  23. /// Using this mode you will see small artifacts when objects wake 
  24. SUSPEND_1N_AGENT_TRACKS,
  25. /// Removes all child agents for shape collections. This performs another explicit call to updateCollisionFilter on collections
  26. /// when the island is activated. 
  27. /// Note:This call is not safe if that update call would remove agents, or in multithreaded simulation.
  28. SUSPEND_ALL_COLLECTION_AGENTS,
  29. };
  30. /// This deterimines how contacts are found when an island activates
  31. enum InitContactsMode
  32. {
  33. /// This is the default. When an island activates, it does extra work to try to find more contact points between colliding
  34. /// pairs whose agents were deleted.
  35. INIT_CONTACTS_FIND,
  36. /// This setting disables the extra work on activation. It is faster, but may result in some extra initial jitter as objects
  37. /// activate.
  38. INIT_CONTACTS_DO_NOT_FIND
  39. };
  40. //
  41. // Public functions.
  42. //
  43. /// Constructor takes a pointer to an hkpWorld and a flag indicating
  44. /// how aggressively you want to remove agents.
  45. /// It automatically adds itself to the world and increases its own reference count.
  46. /// When the world is deleted, it decreases its own reference count.
  47. hkpSuspendInactiveAgentsUtil(hkpWorld* world, OperationMode mode = SUSPEND_1N_AGENT_TRACKS, InitContactsMode initContactsMode = INIT_CONTACTS_FIND );
  48. ~hkpSuspendInactiveAgentsUtil();
  49. public:
  50. /// Called when an island is activated. Simply does nothing.
  51. /// ###ACCESS_CHECKS###( [island->getWorld(),HK_ACCESS_RW] );
  52. virtual void islandActivatedCallback( hkpSimulationIsland* island );
  53. /// Called when an island is deactivated
  54. /// ###ACCESS_CHECKS###( [island->getWorld(),HK_ACCESS_RW] );
  55. virtual void islandDeactivatedCallback( hkpSimulationIsland* island );
  56. /// Called when the hkpWorld is deleted.
  57. virtual void worldDeletedCallback( hkpWorld* world);
  58. public:
  59. hkpWorld* m_world;
  60. OperationMode m_mode;
  61. InitContactsMode m_initContactsMode;
  62. };
  63. #endif // HK_UTILITIES2_SUSPEND_INACTIVE_AGENTS_H
  64. /*
  65. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  66. * Confidential Information of Havok.  (C) Copyright 1999-2009
  67. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  68. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  69. * rights, and intellectual property rights in the Havok software remain in
  70. * Havok and/or its suppliers.
  71. * Use of this software for evaluation purposes is subject to and indicates
  72. * acceptance of the End User licence Agreement for this product. A copy of
  73. * the license is included with this software and is also available at www.havok.com/tryhavok.
  74. */