20 void ReloadQueuedAssets();
23 template<
typename AssetImporterClass>
24 AssetImporterClass* GetManager() {
25 static_assert(std::is_base_of_v<Grindstone::AssetImporter, AssetImporterClass>,
"AssetImporterClass not derived from Grindstone::AssetImporter");
26 return static_cast<AssetImporterClass*
>(GetManager(AssetImporterClass::GetStaticAssetType()));
29 virtual void QueueReloadAsset(AssetType assetType,
Uuid uuid);
30 virtual void* GetAssetByUuid(AssetType assetType,
Uuid uuid);
31 virtual Grindstone::Uuid GetUuidByAddress(AssetType assetType, std::string_view address);
35 virtual const std::string& GetTypeName(AssetType assetType)
const;
37 virtual void* GetAndIncrementAssetCount(Grindstone::AssetType assetType,
Grindstone::Uuid uuid);
38 virtual void IncrementAssetCount(Grindstone::AssetType assetType,
Grindstone::Uuid uuid);
39 virtual void DecrementAssetCount(Grindstone::AssetType assetType,
Grindstone::Uuid uuid);
41 template<
typename AssetImporterClass>
42 void RegisterAssetType() {
43 static_assert(std::is_base_of_v<Grindstone::AssetImporter, AssetImporterClass>,
"AssetImporterClass not derived from Grindstone::AssetImporter");
44 RegisterAssetType(AssetImporterClass::GetStaticAssetType(), AssetImporterClass::GetStaticAssetTypeName(), Grindstone::Memory::AllocatorCore::Allocate<AssetImporterClass>());
49 static_assert(std::is_base_of_v<Grindstone::Asset, T>,
"T not derived from Grindstone::Asset");
51 if (!uuid.IsValid()) {
55 const size_t assetTypeSizeT =
static_cast<size_t>(T::GetStaticType());
56 if (assetTypeSizeT < 1 || assetTypeSizeT >= assetTypeImporters.size()) {
60 AssetImporter* assetImporter = assetTypeImporters[assetTypeSizeT];
62 return Grindstone::AssetReference<T>::CreateAndIncrement(uuid);
67 static_assert(std::is_base_of_v<Grindstone::Asset, T>,
"T not derived from Grindstone::Asset");
69 return GetAssetReferenceByUuid<T>(uuid);
73 T* GetAssetByUuid(
Uuid uuid) {
74 static_assert(std::is_base_of_v<Grindstone::Asset, T>,
"T not derived from Grindstone::Asset");
75 void* assetPtr = GetAssetByUuid(T::GetStaticType(), uuid);
76 return static_cast<T*
>(assetPtr);
79 virtual void RegisterAssetType(AssetType assetType,
const char* typeName,
AssetImporter* importer);
80 virtual void UnregisterAssetType(AssetType assetType);
83 bool ownsAssetLoader =
false;
85 std::vector<std::string> assetTypeNames;
86 std::vector<AssetImporter*> assetTypeImporters;
87 std::vector<std::pair<AssetType, Uuid>> queuedAssetReloads;
88 std::mutex reloadMutex;
Definition AssetLoader.hpp:26