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));
}
}
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));
}
}