| 1 | //************************************ bs::framework - Copyright 2018 Marko Pintera **************************************// |
| 2 | //*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********// |
| 3 | #pragma once |
| 4 | |
| 5 | #include "BsCorePrerequisites.h" |
| 6 | |
| 7 | namespace bs |
| 8 | { |
| 9 | /** @addtogroup Importer-Internal |
| 10 | * @{ |
| 11 | */ |
| 12 | |
| 13 | /** |
| 14 | * Contains a resource that was imported from a file that contains multiple resources (for example an animation from an |
| 15 | * FBX file). |
| 16 | */ |
| 17 | struct SubResourceRaw |
| 18 | { |
| 19 | String name; /**< Unique name of the sub-resource. */ |
| 20 | SPtr<Resource> value; /**< Contents of the sub-resource. */ |
| 21 | }; |
| 22 | |
| 23 | /** Modes signififying the level of asynchronous functionality provided by a SpecificImporter. */ |
| 24 | enum class ImporterAsyncMode |
| 25 | { |
| 26 | /** Asynchronous import is supported but only on a single thread. */ |
| 27 | Single, |
| 28 | /** Asynchronous import for multiple simultaneous threads is supported. */ |
| 29 | Multi |
| 30 | }; |
| 31 | |
| 32 | /** |
| 33 | * Abstract class that is to be specialized for converting a certain asset type into an engine usable resource |
| 34 | * (for example a .png file into an engine usable texture). |
| 35 | * |
| 36 | * On initialization this class must register itself with the Importer module, which delegates asset import calls to a |
| 37 | * specific importer. |
| 38 | */ |
| 39 | class BS_CORE_EXPORT SpecificImporter |
| 40 | { |
| 41 | public: |
| 42 | SpecificImporter() {} |
| 43 | virtual ~SpecificImporter() {} |
| 44 | |
| 45 | /** |
| 46 | * Check is the provided extension supported by this importer. |
| 47 | * |
| 48 | * @note Provided extension should be without the leading dot. |
| 49 | */ |
| 50 | virtual bool isExtensionSupported(const String& ext) const = 0; |
| 51 | |
| 52 | /** Check if the provided magic number is supported by this importer. */ |
| 53 | virtual bool isMagicNumberSupported(const UINT8* magicNumPtr, UINT32 numBytes) const = 0; |
| 54 | |
| 55 | /** Returns the level of asynchronous import supported by this importer. */ |
| 56 | virtual ImporterAsyncMode getAsyncMode() const { return ImporterAsyncMode::Multi; } |
| 57 | |
| 58 | /** |
| 59 | * Imports the given file. If file contains more than one resource only the primary resource is imported (for |
| 60 | * example for an FBX a mesh would be imported, but animations ignored). |
| 61 | * |
| 62 | * @param[in] filePath Pathname of the file, with file extension. |
| 63 | * @param[in] importOptions Options that can control how is the resource imported. |
| 64 | * @return null if it fails, otherwise the loaded object. |
| 65 | */ |
| 66 | virtual SPtr<Resource> import(const Path& filePath, SPtr<const ImportOptions> importOptions) = 0; |
| 67 | |
| 68 | /** |
| 69 | * Imports the given file. This method returns all imported resources, which is relevant for files that can contain |
| 70 | * multiple resources (for example an FBX which may contain both a mesh and animations). |
| 71 | * |
| 72 | * @param[in] filePath Pathname of the file, with file extension. |
| 73 | * @param[in] importOptions Options that can control how are the resources imported. |
| 74 | * @return Empty array if it fails, otherwise the loaded objects. First element is always the |
| 75 | * primary resource. |
| 76 | */ |
| 77 | virtual Vector<SubResourceRaw> importAll(const Path& filePath, SPtr<const ImportOptions> importOptions); |
| 78 | |
| 79 | /** |
| 80 | * Creates import options specific for this importer. Import options are provided when calling import() in order |
| 81 | * to customize the import, and provide additional information. |
| 82 | */ |
| 83 | virtual SPtr<ImportOptions> createImportOptions() const; |
| 84 | |
| 85 | /** |
| 86 | * Gets the default import options. |
| 87 | * |
| 88 | * @return The default import options. |
| 89 | */ |
| 90 | SPtr<const ImportOptions> getDefaultImportOptions() const; |
| 91 | |
| 92 | private: |
| 93 | mutable SPtr<const ImportOptions> mDefaultImportOptions; |
| 94 | }; |
| 95 | |
| 96 | /** @} */ |
| 97 | } |