From 228b6181fcaa4f643e77273597df60b5bb0a5fc3 Mon Sep 17 00:00:00 2001 From: envision3d Date: Sat, 19 Sep 2026 12:49:16 -0500 Subject: [PATCH] MaterialInstance: save virtual assets via temp chunk --- .../Engine/Content/Assets/MaterialInstance.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Content/Assets/MaterialInstance.cpp b/Source/Engine/Content/Assets/MaterialInstance.cpp index 61d5c5b62..d0e7bf77c 100644 --- a/Source/Engine/Content/Assets/MaterialInstance.cpp +++ b/Source/Engine/Content/Assets/MaterialInstance.cpp @@ -332,7 +332,18 @@ bool MaterialInstance::Save(const StringView& path) // Save parameters Params.Save(&stream); } - SetChunk(0, ToSpan(stream)); + // Virtual assets don't own a storage container, so SetChunk/GetOrCreateChunk are a no-op for them. + // Wire a temporary chunk into the header for the duration of the save (mirrors ModelBase::Save). + FlaxChunk tmpChunk; + if (IsVirtual()) + { + tmpChunk.Data.Copy(ToSpan(stream)); + _header.Chunks[0] = &tmpChunk; + } + else + { + SetChunk(0, ToSpan(stream)); + } // Setup asset data AssetInitData data; @@ -340,6 +351,11 @@ bool MaterialInstance::Save(const StringView& path) // Save data const bool saveResult = path.HasChars() ? SaveAsset(path, data) : SaveAsset(data, true); + if (IsVirtual()) + { + // Release the temporary chunk reference (points to stack memory) + _header.Chunks[0] = nullptr; + } if (saveResult) { LOG(Error, "Cannot save \'{0}\'", ToString());