Fix crash when existing engine while content streaming is active

This commit is contained in:
Wojtek Figat
2025-04-22 16:16:46 +02:00
parent 4f3fbe89f2
commit d77024bbf1
4 changed files with 21 additions and 20 deletions

View File

@@ -322,15 +322,17 @@ class StreamTextureMipTask : public GPUUploadTextureMipTask
{
private:
StreamingTexture* _streamingTexture;
Task* _rootTask;
FlaxStorage::LockData _dataLock;
public:
StreamTextureMipTask(StreamingTexture* texture, int32 mipIndex)
StreamTextureMipTask(StreamingTexture* texture, int32 mipIndex, Task* rootTask)
: GPUUploadTextureMipTask(texture->GetTexture(), mipIndex, Span<byte>(nullptr, 0), 0, 0, false)
, _streamingTexture(texture)
, _rootTask(rootTask ? rootTask : this)
, _dataLock(_streamingTexture->GetOwner()->LockData())
{
_streamingTexture->_streamingTasks.Add(this);
_streamingTexture->_streamingTasks.Add(_rootTask);
_texture.Released.Bind<StreamTextureMipTask, &StreamTextureMipTask::OnResourceReleased2>(this);
}
@@ -341,7 +343,7 @@ private:
if (_streamingTexture)
{
ScopeLock lock(_streamingTexture->GetOwner()->GetOwnerLocker());
_streamingTexture->_streamingTasks.Remove(this);
_streamingTexture->_streamingTasks.Remove(_rootTask);
_streamingTexture = nullptr;
}
}
@@ -393,7 +395,7 @@ protected:
if (_streamingTexture)
{
ScopeLock lock(_streamingTexture->GetOwner()->GetOwnerLocker());
_streamingTexture->_streamingTasks.Remove(this);
_streamingTexture->_streamingTasks.Remove(_rootTask);
_streamingTexture = nullptr;
}
@@ -443,7 +445,7 @@ Task* StreamingTexture::CreateStreamingTask(int32 residency)
// Add upload data task
const int32 allocatedMipIndex = TotalIndexToTextureMipIndex(mipIndex);
task = New<StreamTextureMipTask>(this, allocatedMipIndex);
task = New<StreamTextureMipTask>(this, allocatedMipIndex, result);
if (result)
result->ContinueWith(task);
else