public static bool EnsureMipInImage(long streamLength, int mainWidth, int mainHeight, int desiredMipDimension, ImageEngineFormat format, out int mipOffset)
{
if (mainWidth <= desiredMipDimension && mainHeight <= desiredMipDimension)
{
mipOffset = 128;
return true; // One mip only
// TODO: DX10
}
int dependentDimension = mainWidth > mainHeight ? mainWidth : mainHeight;
int mipIndex = (int)Math.Log((dependentDimension / desiredMipDimension), 2);
if (mipIndex < -1)
throw new InvalidDataException($"Invalid dimensions for mipmapping. Got desired: {desiredMipDimension} and dependent: {dependentDimension}");
int requiredOffset = GetMipOffset(mipIndex, format, mainHeight, mainWidth); // +128 for header
// KFreon: Something wrong with the count here by 1 i.e. the estimate is 1 more than it should be
if (format == ImageEngineFormat.DDS_ARGB)
requiredOffset -= 2;
mipOffset = requiredOffset;
// Should only occur when an image has 0 or 1 mipmap.
if (streamLength <= requiredOffset)
return false;
return true;
}