init 2
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Penumbra.Api.Enums;
|
||||
|
||||
namespace LightlessSync.Services.TextureCompression;
|
||||
|
||||
internal static class TextureCompressionCapabilities
|
||||
{
|
||||
private static readonly ImmutableDictionary<TextureCompressionTarget, TextureType> TexTargets =
|
||||
new Dictionary<TextureCompressionTarget, TextureType>
|
||||
{
|
||||
[TextureCompressionTarget.BC7] = TextureType.Bc7Tex,
|
||||
[TextureCompressionTarget.BC3] = TextureType.Bc3Tex,
|
||||
}.ToImmutableDictionary();
|
||||
|
||||
private static readonly ImmutableDictionary<TextureCompressionTarget, TextureType> DdsTargets =
|
||||
new Dictionary<TextureCompressionTarget, TextureType>
|
||||
{
|
||||
[TextureCompressionTarget.BC7] = TextureType.Bc7Dds,
|
||||
[TextureCompressionTarget.BC3] = TextureType.Bc3Dds,
|
||||
}.ToImmutableDictionary();
|
||||
|
||||
private static readonly TextureCompressionTarget[] SelectableTargetsCache = TexTargets
|
||||
.Select(kvp => kvp.Key)
|
||||
.OrderBy(t => t)
|
||||
.ToArray();
|
||||
|
||||
private static readonly HashSet<TextureCompressionTarget> SelectableTargetSet = SelectableTargetsCache.ToHashSet();
|
||||
|
||||
public static IReadOnlyList<TextureCompressionTarget> SelectableTargets => SelectableTargetsCache;
|
||||
|
||||
public static TextureCompressionTarget DefaultTarget => TextureCompressionTarget.BC7;
|
||||
|
||||
public static bool IsSelectable(TextureCompressionTarget target) => SelectableTargetSet.Contains(target);
|
||||
|
||||
public static TextureCompressionTarget Normalize(TextureCompressionTarget? desired)
|
||||
{
|
||||
if (desired.HasValue && IsSelectable(desired.Value))
|
||||
{
|
||||
return desired.Value;
|
||||
}
|
||||
|
||||
return DefaultTarget;
|
||||
}
|
||||
|
||||
public static bool TryGetPenumbraTarget(TextureCompressionTarget target, string? outputPath, out TextureType textureType)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(outputPath) &&
|
||||
string.Equals(Path.GetExtension(outputPath), ".dds", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return DdsTargets.TryGetValue(target, out textureType);
|
||||
}
|
||||
|
||||
return TexTargets.TryGetValue(target, out textureType);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user