hkDebugDisplayHandler.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_DISPLAY_HANDLER
  9. #define HK_VISUALIZE_DISPLAY_HANDLER
  10. class hkDisplayGeometry;
  11. #include <Common/Base/hkBase.h>
  12. /// This class defines the graphical interface to the visual debugger.
  13. /// It is also used to display worlds with the Havok demos.
  14. ///
  15. /// IDs: IDs are used to manage persistent objects which are added/updated
  16. /// and removed.  It is the responsibility of the user to supply a unique
  17. /// id for every persistent object added and to use this id consistently when
  18. /// updating and removing objects.
  19. /// The current convention when supplying ids is to supply the
  20. /// address of the hkpCollidable where the geometries came from.
  21. /// Geometries are built using the hkpShapeDisplayBuilder class in
  22. /// hkvisualize/hkpShapeDisplayBuilder.h/cpp.
  23. ///
  24. /// TAGs: Unique tags can be obtained form the hkViewerFactory::getTag().
  25. /// These can are used for separating display information into different
  26. /// categories so that they can be configured and filtered independently.
  27. /// For example, each Viewer has one or more unique tags.
  28. ///
  29. class hkDebugDisplayHandler
  30. {
  31. public:
  32. enum Command
  33. {
  34. HK_STEP = 0x00,
  35. HK_ADD_GEOMETRY,
  36. HK_UPDATE_GEOMETRY,
  37. HK_SET_COLOR_GEOMETRY,
  38. HK_REMOVE_GEOMETRY,
  39. HK_DISPLAY_GEOMETRY_WITH_TRANSFORM,
  40. HK_DISPLAY_GEOMETRY,
  41. HK_DISPLAY_POINT,
  42. HK_DISPLAY_LINE,
  43. HK_DISPLAY_TEXT, // These may move into a separate interface later
  44. HK_SEND_STATISTICS_DUMP_DEPRICATED, // moved in to stat handler itself
  45. HK_HOLD_IMMEDIATE,
  46. HK_ADD_CAMERA,
  47. HK_UPDATE_CAMERA,
  48. HK_REMOVE_CAMERA,
  49. HK_SEND_MEMSTATS_DUMP,  // Added for 3.0.0
  50. HK_ADD_GEOMETRY_INSTANCE, // Added for 4.5.0
  51. HK_DISPLAY_TEXT_3D, // Added for 4.6.0
  52. HK_UPDATE_BEHAVIOR, // Added in 6.5
  53. HK_LIST_BEHAVIORS, // Added in 6.5
  54. };
  55. /// virtual Destructor
  56. virtual ~hkDebugDisplayHandler() {} 
  57. //
  58. // Geometry functions
  59. //
  60. /// Adds a geometry to the display world managed by this display handler.
  61. /// Please refer to the class description for the meaning of id and tag.
  62. virtual hkResult addGeometry(const hkArray<hkDisplayGeometry*>& geometries, const hkTransform& transform, hkUlong id, int tag, hkUlong shapeIdHint) = 0;
  63. /// Adds an instanced of a geometry that has already been added to the display world managed by this display handler.
  64. /// Please refer to the class description for the meaning of id and tag.
  65. virtual hkResult addGeometryInstance(hkUlong origianalGeomId, const hkTransform& transform, hkUlong id, int tag, hkUlong shapeIdHint) = 0;
  66. /// Sets the color of a geometry previously added to the display world.
  67. /// Please refer to the class description for the meaning of id and tag.
  68. virtual hkResult setGeometryColor(int color, hkUlong id, int tag) = 0;
  69. /// Updates the transform of a body in the display world.
  70. /// Please refer to the class description for the meaning of id and tag.
  71. virtual hkResult updateGeometry(const hkTransform& transform, hkUlong id, int tag) = 0;
  72. /// Removes a geometry from the display world managed by this display handler.
  73. /// Please refer to the class description for the meaning of id and tag.
  74. virtual hkResult removeGeometry(hkUlong id, int tag, hkUlong shapeIdHint) = 0;
  75. //
  76. // Camera Functionality
  77. //
  78. virtual hkResult updateCamera(const hkVector4& from, const hkVector4& to, const hkVector4& up, hkReal nearPlane, hkReal farPlane, hkReal fov, const char* name) = 0;
  79. //
  80. // Behavior Temp callbacks
  81. //
  82. virtual hkResult updateBehavior(hkArray<int>& wordVarIdx, hkArray<int>& wordStack, hkArray<int>& quadVarIdx, hkArray<hkVector4>& quadStack,
  83. hkArray<char*>& activeNodes, hkArray<int>& activeStateIds, hkArray<int>& activeTransitions, hkArray<hkQsTransform>& transforms) = 0;
  84. //
  85. // Immediate Mode Functions
  86. //
  87. /// Puts a display point into the display buffer for display in the next frame.
  88. virtual hkResult displayPoint(const hkVector4& position, int colour, int tag) = 0;
  89. /// Puts a display line into the display buffer for display in the next frame.
  90. virtual hkResult displayLine(const hkVector4& start, const hkVector4& end, int color, int tag) = 0;
  91. /// Puts a display triangle into the display buffer for display in the next frame.
  92. virtual hkResult displayTriangle(const hkVector4& a, const hkVector4& b, const hkVector4& c, int colour, int tag) = 0;
  93. /// Outputs user text to the display.  (The manner in which the text
  94. /// is displayed depends on the implementation of the display handler.)
  95. virtual hkResult displayText(const char* text, int color, int tag) = 0;
  96. // Outputs 3D text
  97. virtual hkResult display3dText(const char* text, const hkVector4& pos, int color, int tag) = 0;
  98. /// Displays the geometries
  99. virtual hkResult displayGeometry(const hkArray<hkDisplayGeometry*>& geometries, const hkTransform& transform, int color, int tag) = 0;
  100. /// Displays the geometries without transform
  101. virtual hkResult displayGeometry(const hkArray<hkDisplayGeometry*>& geometries, int color, int tag) = 0;
  102. // Utility functions (just call displayLine etc above)
  103. void displayFrame( const hkQsTransform& worldFromLocal, hkReal size, int tag );
  104. void displayFrame( const hkTransform& worldFromLocal, hkReal size, int tag );
  105. void displayArrow( const hkVector4& from, const hkVector4& dir, int color, int tag );
  106. //
  107. // Statistics functions (ideally these would be in a separate interface to the display handler)
  108. //
  109. virtual hkResult sendMemStatsDump(const char* data, int length) = 0;
  110. /// Ensures that the current immediate mode display information
  111. /// will be preserved and merged with all new immediate mode data
  112. /// for the next step/frame.
  113. virtual hkResult holdImmediate() = 0;
  114. /// Batch update speed increases
  115. virtual void lockForUpdate() { }
  116. virtual void unlockForUpdate() { }
  117. };
  118. #endif // HK_VISUALIZE_DISPLAY_HANDLER
  119. /*
  120. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  121. * Confidential Information of Havok.  (C) Copyright 1999-2009
  122. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  123. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  124. * rights, and intellectual property rights in the Havok software remain in
  125. * Havok and/or its suppliers.
  126. * Use of this software for evaluation purposes is subject to and indicates
  127. * acceptance of the End User licence Agreement for this product. A copy of
  128. * the license is included with this software and is also available at www.havok.com/tryhavok.
  129. */