88 lines
2.2 KiB
C++
88 lines
2.2 KiB
C++
// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
|
|
|
|
#include "RawDataAsset.h"
|
|
#include "Engine/Content/Factories/BinaryAssetFactory.h"
|
|
#include "Engine/Platform/FileSystem.h"
|
|
#if USE_EDITOR
|
|
#include "Engine/Threading/Threading.h"
|
|
#endif
|
|
|
|
REGISTER_BINARY_ASSET(RawDataAsset, "FlaxEngine.RawDataAsset", true);
|
|
|
|
RawDataAsset::RawDataAsset(const SpawnParams& params, const AssetInfo* info)
|
|
: BinaryAsset(params, info)
|
|
{
|
|
}
|
|
|
|
#if USE_EDITOR
|
|
|
|
bool RawDataAsset::Save(const StringView& path)
|
|
{
|
|
if (OnCheckSave(path))
|
|
return true;
|
|
ScopeLock lock(Locker);
|
|
|
|
bool result;
|
|
if (IsVirtual())
|
|
{
|
|
FlaxChunk* tmpChunks[ASSET_FILE_DATA_CHUNKS];
|
|
Platform::MemoryClear(tmpChunks, sizeof(tmpChunks));
|
|
FlaxChunk chunk;
|
|
tmpChunks[0] = &chunk;
|
|
tmpChunks[0]->Data.Link(Data);
|
|
|
|
AssetInitData initData;
|
|
initData.SerializedVersion = SerializedVersion;
|
|
Platform::MemoryCopy(_header.Chunks, tmpChunks, sizeof(_header.Chunks));
|
|
result = path.HasChars() ? SaveAsset(path, initData) : SaveAsset(initData, true);
|
|
Platform::MemoryClear(_header.Chunks, sizeof(_header.Chunks));
|
|
}
|
|
else
|
|
{
|
|
auto chunk0 = GetChunk(0);
|
|
chunk0->Data.Link(Data);
|
|
|
|
AssetInitData initData;
|
|
initData.SerializedVersion = SerializedVersion;
|
|
result = path.HasChars() ? SaveAsset(path, initData) : SaveAsset(initData, true);
|
|
|
|
chunk0->Data.Unlink();
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
#endif
|
|
|
|
uint64 RawDataAsset::GetMemoryUsage() const
|
|
{
|
|
Locker.Lock();
|
|
uint64 result = BinaryAsset::GetMemoryUsage();
|
|
result += sizeof(RawDataAsset) - sizeof(BinaryAsset);
|
|
result += Data.Capacity();
|
|
Locker.Unlock();
|
|
return result;
|
|
}
|
|
|
|
Asset::LoadResult RawDataAsset::load()
|
|
{
|
|
auto chunk0 = GetChunk(0);
|
|
if (chunk0 == nullptr || chunk0->IsMissing())
|
|
return LoadResult::MissingDataChunk;
|
|
|
|
// TODO: swap memory alloc pointer to optimize this asset
|
|
Data.Set(chunk0->Data.Get(), chunk0->Data.Length());
|
|
|
|
return LoadResult::Ok;
|
|
}
|
|
|
|
void RawDataAsset::unload(bool isReloading)
|
|
{
|
|
Data.Resize(0);
|
|
}
|
|
|
|
AssetChunksFlag RawDataAsset::getChunksToPreload() const
|
|
{
|
|
return GET_CHUNK_FLAG(0);
|
|
}
|