mirror of
https://github.com/barkeser2002/flower.git
synced 2026-09-25 15:36:14 +03:00
133 lines
2.1 KiB
C++
133 lines
2.1 KiB
C++
#pragma once
|
|
#include "../Pch.h"
|
|
#include "../Core/Core.h"
|
|
#include "../Core/UUID.h"
|
|
#include "../RHI/RHI.h"
|
|
|
|
namespace Flower
|
|
{
|
|
constexpr size_t GAssetTextureChannels = 4;
|
|
constexpr size_t GAssetSnapshotMaxDim = 128;
|
|
|
|
enum class EAssetType : size_t
|
|
{
|
|
StaticMesh = 0,
|
|
Texture,
|
|
Material,
|
|
Max
|
|
};
|
|
|
|
using AssetHeaderUUID = UUID;
|
|
using AssetBinUUID = UUID;
|
|
|
|
class AssetBinInterface
|
|
{
|
|
ARCHIVE_DECLARE;
|
|
protected:
|
|
AssetBinUUID m_uuid;
|
|
|
|
public:
|
|
AssetBinInterface() = default;
|
|
|
|
AssetBinInterface(AssetBinUUID uuid, const std::string& name)
|
|
: m_uuid(uuid)
|
|
{
|
|
|
|
}
|
|
|
|
const AssetBinUUID& getBinUUID() const
|
|
{
|
|
return m_uuid;
|
|
}
|
|
|
|
virtual EAssetType getType() const = 0;
|
|
};
|
|
|
|
|
|
class AssetHeaderInterface
|
|
{
|
|
ARCHIVE_DECLARE;
|
|
protected:
|
|
std::string m_assetName;
|
|
|
|
// Header UUID.
|
|
AssetHeaderUUID m_uuid;
|
|
|
|
// Bin UUID.
|
|
AssetBinUUID m_binDataUUID;
|
|
|
|
protected:
|
|
// Some runtime states.
|
|
bool m_bDirty = true;
|
|
|
|
std::shared_ptr<AssetBinInterface> m_cacheBinData = nullptr;
|
|
std::weak_ptr<AssetBinInterface> m_cacheBinDataRef;
|
|
|
|
public:
|
|
AssetHeaderInterface() = default;
|
|
AssetHeaderInterface(AssetHeaderUUID uuid, const std::string& name)
|
|
: m_uuid(uuid), m_assetName(name)
|
|
{
|
|
|
|
}
|
|
|
|
void setDirty(bool bState)
|
|
{
|
|
m_bDirty = bState;
|
|
}
|
|
|
|
const bool isDirty() const
|
|
{
|
|
return m_bDirty;
|
|
}
|
|
|
|
const AssetHeaderUUID& getHeaderUUID() const
|
|
{
|
|
return m_uuid;
|
|
}
|
|
|
|
const AssetBinUUID& getBinUUID() const
|
|
{
|
|
return m_binDataUUID;
|
|
}
|
|
|
|
const std::string& getName() const
|
|
{
|
|
return m_assetName;
|
|
}
|
|
|
|
void markDirty()
|
|
{
|
|
m_bDirty = true;
|
|
}
|
|
|
|
virtual EAssetType getType() const
|
|
{
|
|
return EAssetType::Max;
|
|
}
|
|
|
|
virtual void saveCallback()
|
|
{
|
|
|
|
}
|
|
|
|
void freeBinData()
|
|
{
|
|
m_cacheBinData = nullptr;
|
|
}
|
|
|
|
// Return cache bin data, if no cache return nullptr.
|
|
std::shared_ptr<AssetBinInterface> getBinData();
|
|
|
|
// Load bin data.
|
|
std::shared_ptr<AssetBinInterface> loadBinData();
|
|
|
|
void setCacheBinData(std::shared_ptr<AssetBinInterface> inBin);
|
|
|
|
template<typename T>
|
|
std::shared_ptr<T> getBinData()
|
|
{
|
|
return std::dynamic_pointer_cast<T>(getBinData());
|
|
}
|
|
};
|
|
} |