Fix issues with model data storage when doing long actions in async (eg. SDF generation)

This commit is contained in:
Wojtek Figat
2025-11-10 15:02:33 +01:00
parent 62424215c1
commit 4805dfbdba
6 changed files with 9 additions and 10 deletions

View File

@@ -74,11 +74,6 @@ struct TextureDataResult
PixelFormat Format;
Int2 Mip0Size;
BytesContainer* Mip0DataPtr;
TextureDataResult()
: Lock(FlaxStorage::LockData::Invalid)
{
}
};
bool GetTextureDataForSampling(Texture* texture, TextureDataResult& data, bool hdr = false)

View File

@@ -262,6 +262,7 @@ bool Model::GenerateSDF(float resolutionScale, int32 lodIndex, bool cacheData, f
LOG(Warning, "Cannot generate SDF for virtual models on a main thread.");
return true;
}
auto chunkLocks = Storage ? Storage->Lock() : FlaxStorage::LockData();
lodIndex = Math::Clamp(lodIndex, HighestResidentLODIndex(), LODs.Count() - 1);
// Generate SDF

View File

@@ -61,7 +61,7 @@ public:
model->GetLODData(_lodIndex, data);
if (data.IsInvalid())
{
LOG(Warning, "Missing data chunk");
LOG(Warning, "Missing data chunk with LOD{} for model '{}'", _lodIndex, model->ToString());
return true;
}
MemoryReadStream stream(data.Get(), data.Length());
@@ -234,6 +234,7 @@ bool ModelBase::Save(bool withMeshDataFromGpu, const StringView& path)
LOG(Error, "To save virtual model asset you need to specify 'withMeshDataFromGpu' (it has no other storage container to get data).");
return true;
}
auto chunkLocks = Storage ? Storage->Lock() : FlaxStorage::LockData();
ScopeLock lock(Locker);
// Use a temporary chunks for data storage for virtual assets

View File

@@ -75,8 +75,6 @@ FlaxChunk* FlaxChunk::Clone() const
const int32 FlaxStorage::MagicCode = 1180124739;
FlaxStorage::LockData FlaxStorage::LockData::Invalid(nullptr);
struct Header
{
int32 MagicCode;

View File

@@ -146,7 +146,6 @@ public:
struct LockData
{
friend FlaxStorage;
static LockData Invalid;
private:
FlaxStorage* _storage;
@@ -159,6 +158,11 @@ public:
}
public:
LockData()
: _storage(nullptr)
{
}
LockData(const LockData& other)
: _storage(other._storage)
{

View File

@@ -771,7 +771,7 @@ Task* TextureBase::RequestMipDataAsync(int32 mipIndex)
FlaxStorage::LockData TextureBase::LockData()
{
return _parent->Storage ? _parent->Storage->Lock() : FlaxStorage::LockData::Invalid;
return _parent->Storage ? _parent->Storage->Lock() : FlaxStorage::LockData();
}
void TextureBase::GetMipData(int32 mipIndex, BytesContainer& data) const