Infinity Engine v0.6.20
C++ API Documentation
Loading...
Searching...
No Matches
AssetPlugin.hpp
1#pragma once
2
3#include <Infinity/api.h>
4#include <Infinity/Assets/Asset.hpp>
5#include <Infinity/Assets/AssetLoadInfo.hpp>
6
7#include <Infinity/Types/All.hpp>
8
9#include <string>
10#include <string_view>
11#include <type_traits>
12#include <functional>
13#include <unordered_map>
14
15namespace Infinity::Assets
16{
25 {
26 V1 = 1
27 };
28
51 class INFINITY_API_PUBLIC AssetPlugin
52 {
53 public:
60
66 virtual ~AssetPlugin();
67
79 Asset load(const AssetLoadInfo& loadInfo);
80
91 Asset load(const Infinity::Types::TypeID& type, const std::string& path);
92
99
108 virtual std::string getPluginName() = 0;
109
115 virtual std::string getPluginVendor() = 0;
116
117 protected:
128 virtual Asset load_Text(const AssetLoadInfo& loadInfo);
129
130 // Array2D loaders
131
138 virtual Asset load_Array2D_ubyte(const AssetLoadInfo& loadInfo);
139
146 virtual Asset load_Array2D_float(const AssetLoadInfo& loadInfo);
147
155
162 virtual Asset load_Array2D_Vector3(const AssetLoadInfo& loadInfo);
163
171
178 virtual Asset load_Array2D_Vector4(const AssetLoadInfo& loadInfo);
179
180 // Array3D loaders
181
188 virtual Asset load_Array3D_ubyte(const AssetLoadInfo& loadInfo);
189
196 virtual Asset load_Array3D_float(const AssetLoadInfo& loadInfo);
197
205
212 virtual Asset load_Array3D_Vector3(const AssetLoadInfo& loadInfo);
213
221
228 virtual Asset load_Array3D_Vector4(const AssetLoadInfo& loadInfo);
229
230 // Mesh loader
231
242 virtual Asset load_Mesh(const AssetLoadInfo& loadInfo);
243
244 // Material loader
245
256 virtual Asset load_Material(const AssetLoadInfo& loadInfo);
257
258 // RenderObject loader
259
270 virtual Asset load_RenderObject(const AssetLoadInfo& loadInfo);
271
272 private:
279 std::unordered_map<Infinity::Types::TypeID, std::function<Asset(const AssetLoadInfo&)>> _loaderMap;
280 };
281
293
304
312 extern "C" INFINITY_API_PLUGIN CreateAssetPluginFunction CreateAssetPlugin;
313
321 extern "C" INFINITY_API_PLUGIN DestroyAssetPluginFunction DestroyAssetPlugin;
322}
Abstract base class for source-specific asset loading plugins.
Definition AssetPlugin.hpp:52
virtual Asset load_Material(const AssetLoadInfo &loadInfo)
Loads a material asset from this plugin's source.
virtual Asset load_Array3D_Vector3ub(const AssetLoadInfo &loadInfo)
Loads a 3D array of 3-component unsigned byte vectors from this plugin's source.
virtual Asset load_Array3D_ubyte(const AssetLoadInfo &loadInfo)
Loads a 3D array of unsigned bytes from this plugin's source.
virtual Asset load_Array3D_Vector4ub(const AssetLoadInfo &loadInfo)
Loads a 3D array of 4-component unsigned byte vectors from this plugin's source.
Asset load(const AssetLoadInfo &loadInfo)
Loads an asset using the provided load information.
virtual Asset load_Array2D_Vector4ub(const AssetLoadInfo &loadInfo)
Loads a 2D array of 4-component unsigned byte vectors from this plugin's source.
virtual AssetPluginAPIVer getPluginAPIVersion()=0
Gets the plugin API version this plugin implements.
virtual ~AssetPlugin()
Virtual destructor.
virtual std::string getPluginVendor()=0
Gets the vendor/author of this plugin.
virtual Asset load_Array2D_Vector3(const AssetLoadInfo &loadInfo)
Loads a 2D array of 3-component float vectors from this plugin's source.
virtual Asset load_Array3D_Vector3(const AssetLoadInfo &loadInfo)
Loads a 3D array of 3-component float vectors from this plugin's source.
virtual Asset load_Array2D_Vector3ub(const AssetLoadInfo &loadInfo)
Loads a 2D array of 3-component unsigned byte vectors from this plugin's source.
virtual std::string getPluginName()=0
Gets the name of this plugin.
virtual Asset load_RenderObject(const AssetLoadInfo &loadInfo)
Loads a render object asset from this plugin's source.
AssetPlugin()
Default constructor.
virtual Asset load_Array2D_ubyte(const AssetLoadInfo &loadInfo)
Loads a 2D array of unsigned bytes from this plugin's source.
Asset load(const Infinity::Types::TypeID &type, const std::string &path)
Convenience function to load an asset with a full path.
virtual Asset load_Mesh(const AssetLoadInfo &loadInfo)
Loads a mesh asset from this plugin's source.
virtual Asset load_Array2D_Vector4(const AssetLoadInfo &loadInfo)
Loads a 2D array of 4-component float vectors from this plugin's source.
virtual Asset load_Array3D_Vector4(const AssetLoadInfo &loadInfo)
Loads a 3D array of 4-component float vectors from this plugin's source.
virtual Asset load_Array2D_float(const AssetLoadInfo &loadInfo)
Loads a 2D array of floats from this plugin's source.
virtual Asset load_Text(const AssetLoadInfo &loadInfo)
Loads a text asset from this plugin's source.
virtual Asset load_Array3D_float(const AssetLoadInfo &loadInfo)
Loads a 3D array of floats from this plugin's source.
Type-erased container for loaded asset data.
Definition Asset.hpp:40
Definition Asset.hpp:11
void() DestroyAssetPluginFunction(AssetPlugin *)
Function signature for destroying an AssetPlugin instance.
Definition AssetPlugin.hpp:303
INFINITY_API_PLUGIN CreateAssetPluginFunction CreateAssetPlugin
Plugin entry point for creating an AssetPlugin instance.
Definition AssetPlugin.hpp:312
AssetPluginAPIVer
Versioning for the AssetPlugin API.
Definition AssetPlugin.hpp:25
@ V1
Version 1 of the AssetPlugin API.
Definition AssetPlugin.hpp:26
AssetPlugin *() CreateAssetPluginFunction(void)
Function signature for creating an AssetPlugin instance.
Definition AssetPlugin.hpp:292
INFINITY_API_PLUGIN DestroyAssetPluginFunction DestroyAssetPlugin
Plugin entry point for destroying an AssetPlugin instance.
Definition AssetPlugin.hpp:321
Encapsulates the information required to load an asset in the Infinity engine.
Definition AssetLoadInfo.hpp:23
Runtime type identifier for the Infinity type system.
Definition TypeID.hpp:71