when streaming an asset with AssetType == AT_SkeletalMesh, NumStreamedMips was setted with NumStreamedMips_SkeletalMesh
int32 GetNumStreamedMipsArray(FStreamingRenderAsset::EAssetType AssetType, const int32*& OutArray)
{
switch (AssetType)
{
case FStreamingRenderAsset::AT_Texture:
OutArray = NumStreamedMips_Texture;
return TEXTUREGROUP_MAX;
case FStreamingRenderAsset::AT_StaticMesh:
OutArray = NumStreamedMips_StaticMesh.GetData();
return NumStreamedMips_StaticMesh.Num();
case FStreamingRenderAsset::AT_SkeletalMesh:
OutArray = NumStreamedMips_SkeletalMesh.GetData();
return NumStreamedMips_SkeletalMesh.Num();
default:
check(false);
OutArray = nullptr;
return -1;
}
}
but NumStreamedMips_SkeletalMesh was initialization as
// TODO: NumStreamedMips_StaticMesh, NumStreamedMips_SkeletalMesh
NumStreamedMips_StaticMesh.Empty(1);
NumStreamedMips_StaticMesh.Add(INT32_MAX);
NumStreamedMips_SkeletalMesh.Empty(1);
NumStreamedMips_SkeletalMesh.Add(INT32_MAX);
MinAllowedMips was computed by
check(LODGroup < NumLODGroups);
if (NumStreamedMips[LODGroup] > 0)
{
MinAllowedMips = FMath::Clamp<int32>(MipCount - NumStreamedMips[LODGroup], NumNonStreamingMips, MaxAllowedMips);
}
else
{
MinAllowedMips = NumNonStreamingMips;
}
in function FStreamingRenderAsset::UpdateDynamicData(…) . Obviously, MinAllowedMips = 0,
while it causes check(MinAllowedMips >= 1) failed in function FStreamingRenderAsset::GetWantedMipsFromSize(…)
so NumStreamedMips_SkeletalMesh should not be initialized with INT32_MAX?