hctFilterProcessingUtil.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_SCENE_EXPORT_FILTERS_H
  9. #define HK_SCENE_EXPORT_FILTERS_H
  10. #include <ContentTools/Common/Filters/Common/Memory/hctFilterMemoryTracker.h> // all inline, no lib linkage required
  11. #include <ContentTools/Common/Filters/Common/FilterManager/hctFilterManagerInterface.h>
  12. /// Use an instance of this class to work with the filter manager dll.
  13. /// The class provides methods to load the filter manager, open its UI, execute it and save and load options.
  14. class hctFilterProcessingUtil
  15. {
  16. public: 
  17. /// If you have an window handle, give it to the ctor so that any dialogs will be 
  18. /// properly parented.
  19. hctFilterProcessingUtil( void* ownerWindowHandle = HK_NULL ); 
  20. /// Sets the handle to the owner window.
  21. void setOwnerHandle( void* handle ) { m_ownerHwnd = handle; }
  22. void* getOwnerHandle() const { return m_ownerHwnd; }
  23. /// Load the filter manager and the associated filters.
  24. /// The havokPath is the absolute path to the Havok directory where the 
  25. /// filterManager DLL and the filters can be found, such as "d:\Programs\Maya6\Havok" etc.
  26. hkBool load( const char* havokPath );
  27. /// Merges a custom class registry with that defined by the filters. This is used in order
  28. /// to register extra classes from the scene exporters - for example, classes created by the legacy
  29. /// exporters dll. Needs to be called after the filter manager is loaded.
  30. void mergeRegistry (const hctFilterClassRegistry& otherRegistry);
  31. /// Merges the contents of another error handler's log with that of the filter managers.
  32. /// Needs to be called after the filter manager is loaded.
  33. void mergeErrors (const class hctSceneExportError* otherErrorHandler);
  34. /// Release the last setup filter manager.
  35. /// This will unload all DLLs (manager and also the filters) so all hkClass data
  36. /// that came from the filters will become invalid, so make sure to call process()
  37. /// before you call this.
  38. hkBool unload();
  39. /// Opens the filter manager in interactive mode.
  40. /// Returns whether changes to the configuration should be saved with the scene or not (depending on
  41. /// whether the user chose to do so).
  42. void openFilterManager( class hkRootLevelContainer& data, hkBool& shouldSaveConfigOut );
  43. /// Process a given container of data (from file or mem) using Filters, in batch mode. All configurations
  44. /// will be processed.
  45. /// 
  46. /// If you don't give a memory tracker then the contents of the hkRootLevelContainer post process 
  47. /// may be invalid as the internal tracker will have deleted the data. If you supply a tracker the
  48. /// hkRootLevelContainer will still have valid data (until you dealloc the tracker of course, or 
  49. /// call release() ).
  50. ///
  51. /// Filters can add arbitrary objects to a scene, some of which may be based on abstract 
  52. /// classes, and so they will register those classes the class registry so that you can
  53. /// look up types based on the vtables etc. As such a class registry is required if you want to 
  54. /// be able to use the scene fully afterwards (save it to file yourself for instance) but 
  55. /// if you are just saving to file and have not added any abstract types to the hkRootLevelContainer 
  56. /// already (by default the the classes in hkSceneData are concrete) then supplying an 
  57. /// empty class registry is fine.
  58. void processBatch ( class hkRootLevelContainer& data, class hctFilterMemoryTracker* tracker /*can be null*/, int configToRun = -1, bool allowModelessFilters = false); 
  59. hkRootLevelContainer* processBatchReturnData( hkRootLevelContainer& data, hctFilterMemoryTracker& tracker, int configToRun, bool allowModelessFilters, hkArray<char>& sceneCopyStorage );
  60. //
  61. // Access to options
  62. //
  63. /// Retrieves a version associated with the filter configuration
  64. unsigned int getCurrentOptionsVersion () const;
  65. /// Retrieve the size of the current options (filter setup). Use this in order to allocate memory before calling getOptions()
  66. int getOptionsSize() const; 
  67. /// Retrieves the current options (filter setup). The buffer to store them needs to be preallocated (use getOptionsSize() to query for its size).
  68. /// Use this, for example, if you want to store the setup with an asset (modeller file).
  69. void getOptions(void* buf) const; 
  70. /// Sets the options (filter setup). You can call this, for example, using saved option information you stored with the asset.
  71. void setOptions(const void* buf, int bufSize); 
  72. /// Get the path used to load the filters
  73. const char* getFilterManagerPath() const;
  74. /// Get the path used to load attribute descriptions (for processing)
  75. const char* getAttributeProcessingPath() const;
  76. /// Get the path used to load attribute selections
  77. const char* getAttributeSelectionPath() const;
  78. /// Registers a thread callback. Check hctFilterManagerInterface::registerThreadCallback() for details).
  79. void registerThreadCallback( const hctFilterThreadCallback* cb );
  80. static hctFilterThreadCallback* getDefaultThreadCallback();
  81. /// Will be null until load() is called.
  82. hctFilterManagerInterface* getFilterManagerInterface();
  83. static void mergeAllLocalClassTypes (class hctFilterClassRegistry& classReg);
  84. // Load all DLLs we may want. This will cause them to cache and be much faster to load
  85. // when actually required.
  86. static void startBackgroundFilterLoad(const char* havokPath);
  87. static void waitOnBackgroundFilterLoad();
  88. private:
  89. void registerDefaultThreadCallback ();
  90. class hctFilterManagerDll* m_filterManagerDll;
  91. class hctFilterManagerInterface* m_filterManager;
  92. void* m_ownerHwnd;
  93. hkString m_filterManagerPath;
  94. mutable hkString m_attributeProcessingPath;
  95. mutable hkString m_attributeSelectionPath;
  96. };
  97. #endif // HK_SCENE_EXPORT_FILTERS_H
  98. /*
  99. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  100. * Confidential Information of Havok.  (C) Copyright 1999-2009
  101. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  102. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  103. * rights, and intellectual property rights in the Havok software remain in
  104. * Havok and/or its suppliers.
  105. * Use of this software for evaluation purposes is subject to and indicates
  106. * acceptance of the End User licence Agreement for this product. A copy of
  107. * the license is included with this software and is also available at www.havok.com/tryhavok.
  108. */