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

其他游戏

开发平台:

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 HAVOK_FILTER_MANAGER_INTERFACE__H
  9. #define HAVOK_FILTER_MANAGER_INTERFACE__H
  10. /// The interface to the filter manager.
  11. /// Use the function createFilterManager() exposed in hctFilterManagerDll to do that.
  12. /// We make this pure virtual so that the actual implementation can be havok memory managed etc..
  13. /// and this interface is still clean. It also avoids static linkage with the implementation.
  14. /// Some methods are used by applications calling the filter manager (exporters for example), while other
  15. /// will mostly be used by filters during processing.
  16. class hctFilterManagerInterface
  17. {
  18. public:
  19. /// Virtual destructor
  20. virtual ~hctFilterManagerInterface() {} 
  21. /// Returns a version associated with the filter manager.
  22. /// This version is used to check compatibility between configurations.
  23. virtual unsigned int getFilterManagerVersion() const = 0;
  24. /*
  25. * Configuration options : Called by application (exporter)
  26. */
  27. /// Get the current configuration set, including all the filters for each configuration.
  28. /// This data is usually saved with the original asset, or saved explicitly by the user to file.
  29. /// Pass in a NULL to retrieve the required size of the buffer.
  30. virtual int getConfigurationSet(void* optionData) const = 0;
  31. /// Initialize a configuration set.
  32. virtual void setConfigurationSet(const void* optionData, int optionDataSize) = 0;
  33. /*
  34. * Interaction and processing, called by the application (exporter)
  35. */
  36. /// Bring up a dialog box to allow the user to organize which filters to use.
  37. /// The selected filters and configuration are remembered between runs.
  38. /// It returns whether the configuration should be executed and whether it should be saved.
  39. virtual void openFilterManager ( HWND owner, const class hkRootLevelContainer& data, hkBool& shouldSaveConfigOut ) = 0;
  40. /// Process a scene in batch mode. All configurations will be executed.
  41.     /// It will alter a copy of the data (one per config) in place as much as possible and all allocations into the hkRootLevelContainer
  42. /// will be through the memory tracker. As such the contents of the scene post process will be 
  43. /// valid until you delete the memory tracker (will deallocate all tracked mem) or you shut down
  44. /// this manager instance (it will unload all the filter DLLs and hence all the hkClasses from
  45. /// those DLLs will be unloaded too and the pointers in any registry etc ).
  46. virtual void processBatch ( HWND owner, const class hkRootLevelContainer& data, class hctFilterMemoryTracker& sceneMemory, int configToRun = -1, bool allowModlessFilters = false  ) = 0;
  47. /// Process a scene in batch mode. Only specific configuration will be executed.
  48. /// It will alter a copy of the data in place as much as possible and all allocations into the hkRootLevelContainer
  49. /// will be through the memory tracker. As such the contents of the scene post process will be 
  50. /// valid until you delete the memory tracker (will deallocate all tracked mem) or you shut down
  51. /// this manager instance (it will unload all the filter DLLs and hence all the hkClasses from
  52. /// those DLLs will be unloaded too and the pointers in any registry etc ).
  53. /// It will only return the modified (copied) data if you provide a sceneCopyStorage array to hold the original deep copy
  54. virtual hkRootLevelContainer* processBatchReturnData( HWND owner, const class hkRootLevelContainer& data, class hctFilterMemoryTracker& sceneMemory, int configToRun, bool allowModelessFilters, hkArray<char>* sceneCopyStorage ) = 0;
  55. /// Accesses (non-const access) the global registry of classes.
  56. /// Allows for registration of classes not added by filter DLLS (added by exporters for example).
  57. virtual hctFilterClassRegistry& accessFilterClassRegistry() = 0;
  58. /*
  59. ** Methods useful for filters
  60. */
  61. /// Some filters may want to access the contents that is going to be processed in order to show their options
  62. /// (for example in order to present picking dialogs). Notice that this is not necessarily the contents that
  63. /// will reach the filter (as it may be modified by any filter preceding this one)
  64. virtual const class hkRootLevelContainer* getOriginalContents() const = 0;
  65. /// Get the filter manager's error handler.
  66. /// Allows for merging with other error handlers (from the exporters for example).
  67. virtual class hctSceneExportError* getErrorHandler() = 0;
  68. /// Retrieves (const access) the global registry of classes (gathered from all filter DLLs).
  69. /// Filter DLLs register their classes implementing hkFilterDLL::registerClasses().
  70. virtual const hctFilterClassRegistry& getFilterClassRegistry () const = 0;
  71. /// Some complicated filter setups require some knowledge on what 
  72. /// data they will get upon process(), so this will process up
  73. /// to the given filter, in the current filter configuration. 
  74. /// It's up to the filter to manage the memory of this contents, hence the storageTempMem parameter.
  75. virtual bool getInputContentsToCurrentFilter ( hkRootLevelContainer** outputData, hctFilterMemoryTracker& storageTempMem ) const = 0;
  76. /// Returns the HWND of the filter manager main window (or HK_NULL if no UI is shown).
  77. virtual HWND getMainWindowHandle () const = 0;
  78. /// Returns the HWND of the application (owner) that called the filter manager
  79. virtual HWND getOwnerWindowHandle () const = 0;
  80. enum ProcessMode
  81. {
  82. PROCESS_NONE = 0, // not in process of any type
  83. PROCESS_INTERACTIVE, // full interactive run
  84. PROCESS_BATCH, // batch (so no ui) and do full writes etc
  85. PROCESS_BATCH_UI, // batch (but with ui / modeless filters) and do full writes etc
  86. OPTIONS_BATCH  // batch mode for options to current dialog etc, write any scene mutating data, but do not alter external files 
  87. };
  88. virtual ProcessMode getProcessMode() const = 0;
  89. /* 
  90. * Thread utils
  91. */
  92. /// Register a thread callback. DLLs creating objects with virtual methods need to register themselves
  93. /// so their threadback data is updated when a new thread is created. The filter manager automatically
  94. /// registers filter DLLS, but if you have another module taking part (a non-filter DLL, like hkpreview)
  95. /// you can register a callback to ensure thread information is registered in that module. The scene exporters
  96. /// register themselves using this mechanism.
  97. virtual void registerThreadCallback (const class hctFilterThreadCallback* cb)= 0;
  98. /// If you create a thread that will use code from a another filter (by means
  99. /// of vtable calls for instance) you must propagate your thread data (esp thread mem)
  100. /// It will set the thread data for all filters, but also whatever callback
  101. /// is registered too (just one)
  102. virtual void setThreadData (hkThreadMemory* threadMemory) const = 0;
  103. /* 
  104. * Utility dialogs, called by filters
  105. */
  106. /// Bring up a modal dialog to select a given node, mesh, whatever from the scene.
  107. /// A tree view manager may be implemented to limit the selection to a specific root node
  108. /// and/or specific class types. If the user successfully selected an object, the
  109. /// function returns true and the selected object is returned as the variant.
  110. virtual bool selectObjectFromTree( HWND owner, const char* title, class hctTreeViewManager* tvManager, struct hkVariant& selected ) const = 0;
  111. /// Bring up a modal dialog to select one item from a list of items.
  112. /// Returns the index of the selected item, or -1 if the user hit cancel or escape.
  113. virtual int selectItemFromList( HWND owner, const char* title, const hkArray<const char*>& items ) const = 0;
  114. /// Bring up a modal dialog to show a list of item names.
  115. /// Only action available to the user is to close the dialog.
  116. virtual void showItems( HWND owner, const char* title, const hkArray<const char*>& items ) const = 0;
  117. };
  118. /// Thread callback : Registered through hctFilterManagerInterface::registerThreadCallback, these objects will
  119. /// be called each time a new thread is created by any filter.
  120. class hctFilterThreadCallback
  121. {
  122. public:
  123. /// This method will be called each time a new thread is created by any filter.
  124. virtual void newThreadCreated (hkThreadMemory* threadMemory) const = 0;
  125. };
  126. #endif // HAVOK_FILTER_MANAGER_INTERFACE__H
  127. /*
  128. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  129. * Confidential Information of Havok.  (C) Copyright 1999-2009
  130. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  131. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  132. * rights, and intellectual property rights in the Havok software remain in
  133. * Havok and/or its suppliers.
  134. * Use of this software for evaluation purposes is subject to and indicates
  135. * acceptance of the End User licence Agreement for this product. A copy of
  136. * the license is included with this software and is also available at www.havok.com/tryhavok.
  137. */