Upgraded Microsoft.NET.Test.Sdk, NUnit, NUnit3TestAdapter, and NUnit.Analyzers in AssetRipper.TextureDecoder.Tests.csproj. Removed coverlet.collector package reference. Updated Microsoft.SourceLink.GitHub from 10.0.103 to 10.0.400 in AssetRipper.TextureDecoder.csproj.
OpenEXRFileLayout defines a chlist attribute value as "A sequence of channels
followed by a null byte (0x00)", and the attribute size as "the size (in bytes)
of the attribute value". Size left out the terminating null byte, so a reader
that trusts the declared size lands on that byte and reads it as an empty
attribute name, which terminates the header after the first attribute.
The same document defines a regular scan line block as "y coordinate | pixel
data size | pixel data", and an offset table entry as "the distance, in bytes,
between the start of the file and the start of the chunk". The table advanced
by one int plus the pixel data, leaving out the y coordinate, so every entry
after the first pointed four bytes past the start of its chunk.
https://openexr.com/en/latest/OpenEXRFileLayout.html
Replaced manual for loop with Span.Fill to efficiently assign a color value to the output span in ASTC block decoding. This improves code readability and performance.
Updated several NuGet dependencies to their latest versions:
- AssetRipper.Text.SourceGeneration to 1.2.3
- Microsoft.SourceLink.GitHub to 10.0.103
- Microsoft.NET.Test.Sdk to 18.3.0
- NUnit to 4.5.0
- coverlet.collector to 8.0.0
These updates provide bug fixes, new features, and improved compatibility.
I currently don't use any API above .NET 8, so multi-targeting 8 and 10 is fine for now. However, if I later need a higher .NET version, I won't hesitate to drop support.
Upgraded BenchmarkDotNet, Microsoft.NET.Test.Sdk, NUnit3TestAdapter, and NUnit.Analyzers to latest versions in project files. Updated Microsoft.SourceLink.GitHub and extended copyright to 2026.
Replaced the traditional `TextureDecoder.sln` file with a new `TextureDecoder.slnx` file, which uses a hierarchical XML-based format. The new format organizes solution items and project references more cleanly, removing verbose configuration details like `SolutionConfigurationPlatforms` and `NestedProjects`. This transition simplifies the solution structure and enhances maintainability.
Updated the `<Version>` property in `Directory.Build.props`
from `2.3.0` to `2.4.0`. This version increment reflects
new features, improvements, or bug fixes introduced in
the project.
Updated the `BenchmarkDotNet` package in `AssetRipper.TextureDecoder.Benchmarks.csproj` to version `0.15.4`.
Updated test-related dependencies in `AssetRipper.TextureDecoder.Tests.csproj`:
- `Microsoft.NET.Test.Sdk` to version `17.14.1`
- `NUnit` to version `4.4.0`
- `NUnit3TestAdapter` to version `5.1.0`
- `NUnit.Analyzers` to version `4.10.0`
Retained `<PrivateAssets>` and `<IncludeAssets>` metadata for `NUnit.Analyzers`. No functional changes were made to the `coverlet.collector` package.
Removed the custom WriteAllBytes method from the Program class,
which handled writing a ReadOnlySpan<byte> to a file. Updated
the code to use the built-in File.WriteAllBytes method instead.
This change simplifies the codebase by leveraging .NET's
standard library functionality and eliminates redundant code.
Replaced `#define ASSUME_IMAGE_TILING` with a runtime parameter
to control coordinate wrapping or clamping behavior. Renamed
`LimitCoord` to `LimitCoordinate` for clarity and added an
optional `assumeImageTiling` parameter. Updated all method
calls to reflect the new name and behavior. Removed inline
and optimization attributes from `LimitCoordinate`. Improved
method documentation for better readability.
The `DISABLE_TWINDDLING_ROUTINE` preprocessor directive and its associated code have been removed from `PvrtcDecoder.cs`. This directive was previously used to conditionally disable the twiddling routine with a simplified calculation.
The removal simplifies the codebase by eliminating conditional logic, ensuring the twiddling routine is always executed. The `#else` block containing the twiddling logic remains intact, and the `#endif` directive has been removed as it is no longer necessary.