mirror of
https://github.com/AssetRipper/AssetRipper.TextureDecoder.git
synced 2026-11-13 12:41:27 -10:00
Astc tests
This commit is contained in:
1 parent
8220d27370
commit
d416ad0318
13 files changed
+1063
-39
No files matched your search
+1
@@ -8,6 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AssetRipper.TextureDecoder.Paths\AssetRipper.TextureDecoder.Paths.csproj" />
|
||||
<ProjectReference Include="..\AssetRipper.TextureDecoder.SourceGeneration.Common\AssetRipper.TextureDecoder.SourceGeneration.Common.csproj" />
|
||||
<ProjectReference Include="..\AssetRipper.TextureDecoder\AssetRipper.TextureDecoder.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace AssetRipper.TextureDecoder.TestGenerator
|
||||
{
|
||||
TestClassGenerator.GenerateTestClasses();
|
||||
GenerateRgbConsoleMethod();
|
||||
TextureDataClassGenerator.Generate();
|
||||
Console.WriteLine("Done!");
|
||||
}
|
||||
|
||||
@@ -92,4 +93,4 @@ namespace AssetRipper.TextureDecoder.TestGenerator
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using AssetRipper.Text.SourceGeneration;
|
||||
using System.CodeDom.Compiler;
|
||||
|
||||
namespace AssetRipper.TextureDecoder.TestGenerator;
|
||||
|
||||
internal static class TextureDataClassGenerator
|
||||
{
|
||||
private const string TestFilesFolder = $"{nameof(TestFileFolders)}.{nameof(TestFileFolders.AndroidTestFiles)}";
|
||||
private const string TextureType = "TextureType";
|
||||
private const string TextureFormat = "TextureFormat";
|
||||
private const string ITexture = "ITexture";
|
||||
private const string Namespace = "AssetRipper.TextureDecoder.Tests";
|
||||
|
||||
public static void Generate()
|
||||
{
|
||||
IReadOnlyList<TextureMetadata> metadataList = LoadMetadata(TestFileFolders.AndroidTestFiles);
|
||||
GenerateTextureType(metadataList);
|
||||
GenerateTextureFormat(metadataList);
|
||||
GenerateITexture();
|
||||
GenerateAndroidTextures(metadataList);
|
||||
}
|
||||
|
||||
private static void GenerateTextureType(IReadOnlyList<TextureMetadata> metadataList)
|
||||
{
|
||||
GenerateEnum(TextureType, metadataList.Select(m => m.Type).Distinct().Order());
|
||||
}
|
||||
|
||||
private static void GenerateTextureFormat(IReadOnlyList<TextureMetadata> metadataList)
|
||||
{
|
||||
GenerateEnum(TextureFormat, metadataList.Select(m => m.Format).Distinct().Order());
|
||||
}
|
||||
|
||||
private static void GenerateEnum(string name, IEnumerable<string?> values)
|
||||
{
|
||||
using IndentedTextWriter writer = IndentedTextWriterFactory.Create(ProjectFolders.TestProject, name);
|
||||
writer.WriteGeneratedCodeWarning();
|
||||
writer.WriteLine();
|
||||
writer.WriteFileScopedNamespace(Namespace);
|
||||
writer.WriteLine();
|
||||
writer.WriteLine($"public enum {name}");
|
||||
using (new CurlyBrackets(writer))
|
||||
{
|
||||
foreach (string? value in values)
|
||||
{
|
||||
writer.WriteLine($"{value},");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void GenerateITexture()
|
||||
{
|
||||
using IndentedTextWriter writer = IndentedTextWriterFactory.Create(ProjectFolders.TestProject, ITexture);
|
||||
writer.WriteGeneratedCodeWarning();
|
||||
writer.WriteLine();
|
||||
writer.WriteFileScopedNamespace(Namespace);
|
||||
writer.WriteLine();
|
||||
writer.WriteLine($"public partial interface {ITexture}");
|
||||
using (new CurlyBrackets(writer))
|
||||
{
|
||||
writer.WriteLine($"static abstract {TextureType} {nameof(TextureMetadata.Type)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract {TextureFormat} {nameof(TextureMetadata.Format)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract int {nameof(TextureMetadata.FileSize)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract int {nameof(TextureMetadata.ImageSize)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract int {nameof(TextureMetadata.ImageCount)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract bool {nameof(TextureMetadata.Mips)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract int {nameof(TextureMetadata.Width)} {{ get; }}");
|
||||
writer.WriteLine($"static abstract int {nameof(TextureMetadata.Height)} {{ get; }}");
|
||||
writer.WriteLine("static abstract string Path { get; }");
|
||||
writer.WriteLine("static abstract byte[] Data { get; }");
|
||||
}
|
||||
}
|
||||
|
||||
private static IReadOnlyList<TextureMetadata> LoadMetadata(string directory)
|
||||
{
|
||||
string[] jsonFiles = Directory.GetFiles(directory, "*.json");
|
||||
List<TextureMetadata> metadataList = new(jsonFiles.Length);
|
||||
foreach (string jsonFile in jsonFiles)
|
||||
{
|
||||
metadataList.Add(TextureMetadata.FromFile(jsonFile));
|
||||
}
|
||||
return metadataList;
|
||||
}
|
||||
|
||||
private static void GenerateAndroidTextures(IReadOnlyList<TextureMetadata> metadataList)
|
||||
{
|
||||
const string AndroidTextures = "AndroidTextures";
|
||||
using IndentedTextWriter writer = IndentedTextWriterFactory.Create(ProjectFolders.TestProject, AndroidTextures);
|
||||
writer.WriteGeneratedCodeWarning();
|
||||
writer.WriteLine();
|
||||
writer.WriteFileScopedNamespace(Namespace);
|
||||
writer.WriteLine();
|
||||
writer.WriteLine($"public static partial class {AndroidTextures}");
|
||||
using (new CurlyBrackets(writer))
|
||||
{
|
||||
foreach (TextureMetadata metadata in metadataList)
|
||||
{
|
||||
string withOrWithout = metadata.Mips ? "with" : "without";
|
||||
writer.WriteSummaryDocumentation($"{metadata.Format} {metadata.Width}x{metadata.Height} {withOrWithout} mips");
|
||||
writer.WriteLine($"public sealed class {metadata.Name} : {ITexture}");
|
||||
using (new CurlyBrackets(writer))
|
||||
{
|
||||
writer.WriteLine($"public const {TextureType} {nameof(TextureMetadata.Type)} = {TextureType}.{metadata.Type};");
|
||||
writer.WriteLine($"public const {TextureFormat} {nameof(TextureMetadata.Format)} = {TextureFormat}.{metadata.Format};");
|
||||
writer.WriteLine($"public const int {nameof(TextureMetadata.FileSize)} = {metadata.FileSize};");
|
||||
writer.WriteLine($"public const int {nameof(TextureMetadata.ImageSize)} = {metadata.ImageSize};");
|
||||
writer.WriteLine($"public const int {nameof(TextureMetadata.ImageCount)} = {metadata.ImageCount};");
|
||||
writer.WriteLine($"public const bool {nameof(TextureMetadata.Mips)} = {metadata.Mips.ToString().ToLowerInvariant()};");
|
||||
writer.WriteLine($"public const int {nameof(TextureMetadata.Width)} = {metadata.Width};");
|
||||
writer.WriteLine($"public const int {nameof(TextureMetadata.Height)} = {metadata.Height};");
|
||||
writer.WriteLine($"public const string Path = {TestFilesFolder} + \"{metadata.Name}\";");
|
||||
writer.WriteSummaryDocumentation($"Length: {metadata.FileSize}");
|
||||
writer.WriteLine("public static byte[] Data => File.ReadAllBytes(Path);");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine($"private {metadata.Name}() {{ }}");
|
||||
writer.WriteLine($"static {TextureType} {ITexture}.{nameof(TextureMetadata.Type)} => {nameof(TextureMetadata.Type)};");
|
||||
writer.WriteLine($"static {TextureFormat} {ITexture}.{nameof(TextureMetadata.Format)} => {nameof(TextureMetadata.Format)};");
|
||||
writer.WriteLine($"static int {ITexture}.{nameof(TextureMetadata.FileSize)} => {nameof(TextureMetadata.FileSize)};");
|
||||
writer.WriteLine($"static int {ITexture}.{nameof(TextureMetadata.ImageSize)} => {nameof(TextureMetadata.ImageSize)};");
|
||||
writer.WriteLine($"static int {ITexture}.{nameof(TextureMetadata.ImageCount)} => {nameof(TextureMetadata.ImageCount)};");
|
||||
writer.WriteLine($"static bool {ITexture}.{nameof(TextureMetadata.Mips)} => {nameof(TextureMetadata.Mips)};");
|
||||
writer.WriteLine($"static int {ITexture}.{nameof(TextureMetadata.Width)} => {nameof(TextureMetadata.Width)};");
|
||||
writer.WriteLine($"static int {ITexture}.{nameof(TextureMetadata.Height)} => {nameof(TextureMetadata.Height)};");
|
||||
writer.WriteLine($"static string {ITexture}.Path => Path;");
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace AssetRipper.TextureDecoder.TestGenerator;
|
||||
|
||||
public sealed class TextureMetadata
|
||||
{
|
||||
[JsonIgnore]
|
||||
public string? Name { get; set; }
|
||||
public string? Type { get; set; }
|
||||
public string? Format { get; set; }
|
||||
public int FileSize { get; set; }
|
||||
public int ImageSize { get; set; }
|
||||
public int ImageCount { get; set; }
|
||||
public bool Mips { get; set; }
|
||||
public int Width { get; set; }
|
||||
public int Height { get; set; }
|
||||
|
||||
public static TextureMetadata FromFile(string path)
|
||||
{
|
||||
using FileStream stream = File.OpenRead(path);
|
||||
TextureMetadata result = JsonSerializer.Deserialize(stream, TextureMetadataSerializerContext.Default.TextureMetadata)
|
||||
?? throw new NullReferenceException(nameof(TextureMetadata));
|
||||
result.Name = Path.GetFileNameWithoutExtension(path);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace AssetRipper.TextureDecoder.TestGenerator;
|
||||
|
||||
[JsonSourceGenerationOptions(GenerationMode = JsonSourceGenerationMode.Metadata)]
|
||||
[JsonSerializable(typeof(TextureMetadata))]
|
||||
internal sealed partial class TextureMetadataSerializerContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
global using AssetRipper.TextureDecoder.Paths;
|
||||
Reference in new issue
Block a user