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

其他游戏

开发平台:

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_VISUALIZE__VISUAL_DEBUGGER
  9. #define HK_VISUALIZE__VISUAL_DEBUGGER
  10. #include <Common/Base/System/Stopwatch/hkStopwatch.h>
  11. #include <Common/Visualize/hkVisualDebuggerDebugOutput.h>
  12. #include <Common/Visualize/hkDebugDisplay.h>
  13. #include <Common/Visualize/hkProcessContext.h>
  14. class hkStreamReader;
  15. class hkStreamWriter;
  16. static const hkUint32 HK_VISUAL_DEBUGGER_DEFAULT_PORT = 25001;
  17. /// This is the main visual debugger class on the server side.  It takes care of all
  18. /// clients attaching them as listeners to the world and creating the appropriate
  19. /// display handlers to send the display information over the network.  A plugin handler
  20. /// is also created to allow the client to create and delete viewers remotely.
  21. // Client tracking 
  22. struct hkVisualDebuggerClient
  23. {
  24. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_UTILITIES, hkVisualDebuggerClient );
  25. class hkSocket* m_socket;
  26. class hkServerProcessHandler* m_processHandler; // one per client
  27. };
  28. // Object tracking (objects that can be inspected, which must have a hkClass)
  29. struct hkVisualDebuggerTrackedObject
  30. {
  31. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_UTILITIES, hkVisualDebuggerTrackedObject );
  32. void* m_ptr;
  33. const class hkClass* m_class; 
  34. };
  35. // klass will be null on remove callback ( when 'added' == false )
  36. typedef void (HK_CALL* hkVisualDebuggerTrackedObjectCallback)( void* ptr, const hkClass* klass, hkBool wasAdded, void* userCallbackHandle );
  37. /// Visual Debugger server interface.
  38. class hkVisualDebugger : public hkReferencedObject
  39. {
  40. public:
  41. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_VDB);
  42. /// Creates a visual debugger for a given set of contexts
  43. /// A context is a container for hkWorlds, or user / animation data for instance
  44. /// Constructor. See the hkVisualDebugger::create.
  45. /// Will set the context owner as this vdb (assumes only one vdb)
  46. /// If you don
  47. hkVisualDebugger( const hkArray<hkProcessContext*>& contexts, const class hkVtableClassRegistry* classReg = HK_NULL );
  48. /// Instructs the visual debugger to start listening for client connections
  49. /// from the given TCP/IP port number.  For the server to actually work the
  50. /// world associated with this hkVisualDebugger instance must have its
  51. /// hkpWorld::stepDeltaTime called as it uses the post simulation callback
  52. /// to poll for new clients.
  53. void serve(int listenPort = HK_VISUAL_DEBUGGER_DEFAULT_PORT);
  54. /// Instructs the visual debugger to start capturing the output of all
  55. /// of the default viewers to the specified filename.  Note you do not
  56. /// have to call hkVisualDebugger::serve this is completely independent
  57. /// and can be used without any network serving.
  58. void capture(const char* captureFilename);
  59. /// End (all) captures to file.
  60. void endCapture();
  61. /// Shutdown the vdb. Can call shutdown and then serve again later. 
  62. /// It removes all clients and shutsdown the server.
  63. /// Shutdown is called automatically by the dtor, but is safe to call more than once.
  64. void shutdown();
  65. /// Added a process to the list of default process.  All process in this
  66. /// list will be selected by a client when a new connection is established.
  67. void addDefaultProcess(const char* processName);
  68. /// Removes a viewer from the list of default viewers.  If a viewer is not
  69. /// in this list it will not be selected by a client when a new connection 
  70. /// is established.
  71. void removeDefaultProcess(const char* viewerName);
  72. /// Added an object (with associated class) to the top level
  73. /// objects that can be inspected by clients.
  74. /// Group string currently ignored.
  75. void addTrackedObject(void* obj, const hkClass& klass, const char* group);
  76. /// Removes an object from the top level
  77. /// objects that can be inspected by clients (removed by listeners
  78. /// in the code that added the object on deletion usually).
  79. void removeTrackedObject(void* obj);
  80. /// Called when the macro HK_STEP_DISPLAY(frameTimeInMs) is called, this
  81. /// macro must be called for the visual debugger to function properly.
  82. virtual void step(hkReal frameTimeInMs = 0); // advances all clients to the next frame
  83. /// Called at the end of a world simulation step.
  84. /// WAS postSimulationCallback(world)
  85. virtual void pollForNewClients();
  86. /// Destructor.
  87. virtual ~hkVisualDebugger();
  88. /// Get the contexts that the Processes can run under
  89. /// such as a context that lists hkWorlds, or one that has animation data for instance
  90. /// It is up to the Processes if they want to use the data in any to set themselves up
  91. const hkArray<hkProcessContext*>& getContexts() { return m_contexts; }
  92. void getCurrentProcesses( hkArray< class hkProcess* >& process ); 
  93. // Internal used by the inspection process:
  94. /// Get the list of tracjked objects. Use add and remove tracked object to change (eg. upon deletion)
  95. const hkArray<hkVisualDebuggerTrackedObject>& getTrackedObjects() const { return m_trackedObjects; }
  96. void addTrackedObjectCallback( hkVisualDebuggerTrackedObjectCallback callback, void* userHandle);
  97. void removeTrackedObjectCallback( hkVisualDebuggerTrackedObjectCallback callback );
  98. inline const hkVtableClassRegistry* getClassReg() const { return m_classReg; }
  99. void SupressPollForNewClient(bool val);
  100. protected:
  101. void deleteClient(int i);
  102. void createClient( hkSocket* socket, hkStreamReader* reader, hkStreamWriter* writer );
  103. void writeStep(int i, float t);  // step cmd to given client id.
  104. // Server socket (we listen for new Clients on it)
  105. hkSocket* m_server;
  106. bool s_SuppressPollForNewClients;
  107. // All clients get a seperate process handler.
  108. hkArray<hkVisualDebuggerClient> m_clients; 
  109. hkArray<hkProcessContext*> m_contexts;
  110. // Master list of currently tracked objects. Any changes raise the callbacks
  111. hkArray<hkVisualDebuggerTrackedObject> m_trackedObjects;
  112. hkArray<hkVisualDebuggerTrackedObjectCallback> m_trackCallbacks;
  113. hkArray<void*> m_trackCallbackHandles;
  114. const hkVtableClassRegistry* m_classReg;
  115. hkArray<hkString*> m_defaultProcesses; // Process that will always service a Client (auto created)
  116. hkBool m_amTimingFrame;
  117. hkStopwatch m_frameTimer;
  118. };
  119. #endif // HK_VISUALIZE__VISUAL_DEBUGGER
  120. /*
  121. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  122. * Confidential Information of Havok.  (C) Copyright 1999-2009
  123. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  124. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  125. * rights, and intellectual property rights in the Havok software remain in
  126. * Havok and/or its suppliers.
  127. * Use of this software for evaluation purposes is subject to and indicates
  128. * acceptance of the End User licence Agreement for this product. A copy of
  129. * the license is included with this software and is also available at www.havok.com/tryhavok.
  130. */