XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using BCnEncoder.Decoder;
using BCnEncoder.Shared;
using XFEEDToolBox.Core.Rendering;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyOriginalTerritoryGlowTests
{
    [Test] public void OriginalBc4TextureHasAContinuousGlowAndAllTenPaddedMipLevels()
    {
        var source=GalaxyOriginalTerritoryGlow.Reference;var mip=source.Mips[0];
        var pixels=new BcDecoder().DecodeRaw(source.Payload.Slice(mip.Offset,mip.SliceBytes).ToArray(),512,512,CompressionFormat.Bc4);
        var centre=pixels[256*512+256].r;var middle=pixels[256*512+320].r;var outer=pixels[256*512+440].r;
        Check.That(centre>middle&&middle>outer&&outer>=pixels[0].r,"Original single-channel texture must decode as a centred continuous glow.");
        Check.Equal(10,source.Mips.Count);Check.Equal(181248,source.Payload.Length);
        foreach(var level in Enumerable.Range(0,10))
        {
            var m=source.Mips[level];var size=Math.Max(1,512>>level);var blocks=(size+3)/4;
            var packed=new byte[blocks*blocks*8];
            for(var row=0;row<blocks;row++)source.Payload.Span.Slice(m.Offset+row*m.RowPitch,blocks*8).CopyTo(packed.AsSpan(row*blocks*8));
            Check.Equal(size*size,new BcDecoder().DecodeRaw(packed,size,size,CompressionFormat.Bc4).Length);
        }
    }
}