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 GalaxyOriginalCoreTests
{
    [Test] public void AuthoredCoreRetainsPackedMeshTopologyAndOriginalWorldTransform()
    {
        var source=GalaxyOriginalCore.Reference;
        Check.Equal(150,source.Positions.Count);Check.Equal(576,source.Indices.Count);
        Check.Equal(40000f,GalaxyOriginalCoreResources.WorldScale);
        Check.Equal(new System.Numerics.Vector3(50000,40955,50000),GalaxyOriginalCoreResources.WorldCentre);
        Check.That(source.Positions.All(v=>float.IsFinite(v.X+v.Y+v.Z)));
        Check.That(Math.Abs(source.Positions.Min(v=>v.X)+2.5467932f)<.000001f);
        Check.That(Math.Abs(source.Positions.Max(v=>v.Z)-2.5467894f)<.000001f);
        // These are the actual source indices, including the authored seam.
        Check.That(source.Indices.Take(12).SequenceEqual(new ushort[]{0,1,2,2,3,0,0,3,4,4,5,0}));
        Check.That(source.Indices.All(index=>index<source.Positions.Count));
        Check.Equal(new System.Numerics.Vector4(50000,40955,50000,20000),source.MaterialConstants[3]);
        Check.Equal(80000f,source.MaterialConstants[4].X);
        Check.Equal(.874f,source.MaterialConstants[0].X);Check.Equal(.407f,source.MaterialConstants[0].W);
    }
    [Test] public void SourceNoiseRetainsEveryPaddedBc1MipRatherThanAProceduralReplacement()
    {
        var source=GalaxyOriginalCore.Reference;Check.Equal(3072,source.NoisePayload.Length);Check.Equal(5,source.NoiseMips.Count);
        Check.Equal(256,source.NoiseMips[0].RowPitch);Check.Equal(1024,source.NoiseMips[0].SliceBytes);
        Check.Equal(2560,source.NoiseMips[^1].Offset);Check.Equal(512,source.NoiseMips[^1].Size);
        var compact=new byte[128];for(var row=0;row<4;row++)source.NoisePayload.Span.Slice(row*256,32).CopyTo(compact.AsSpan(row*32));
        var noise=new BcDecoder().DecodeRaw(compact,16,16,CompressionFormat.Bc1);
        Check.Equal(256,noise.Length);
        Check.That(noise.Min(p=>p.r)<noise.Max(p=>p.r));Check.That(noise.Min(p=>p.g)<noise.Max(p=>p.g));
        Check.That(noise.All(p=>p.a==255));
    }
}