mirror of
https://github.com/4sval/FModel.git
synced 2026-06-13 11:30:46 -05:00
Merge remote-tracking branch 'origin/master' into master
# Conflicts: # FModel/MainWindow.xaml.cs
This commit is contained in:
commit
3f3a9f8551
|
|
@ -41,29 +41,29 @@
|
|||
|
||||
public enum ELanguage : long
|
||||
{
|
||||
English,
|
||||
AustralianEnglish,
|
||||
BritishEnglish,
|
||||
French,
|
||||
German,
|
||||
Italian,
|
||||
Spanish,
|
||||
SpanishLatin,
|
||||
SpanishMexico,
|
||||
Arabic,
|
||||
Japanese,
|
||||
Korean,
|
||||
Polish,
|
||||
PortugueseBrazil,
|
||||
PortuguesePortugal,
|
||||
Russian,
|
||||
Turkish,
|
||||
Chinese,
|
||||
TraditionalChinese,
|
||||
Swedish,
|
||||
Thai,
|
||||
Indonesian,
|
||||
VietnameseVietnam
|
||||
English = 0,
|
||||
AustralianEnglish = 15,
|
||||
BritishEnglish = 16,
|
||||
French = 1,
|
||||
German = 2,
|
||||
Italian = 3,
|
||||
Spanish = 4,
|
||||
SpanishLatin = 5,
|
||||
SpanishMexico = 17,
|
||||
Arabic = 6,
|
||||
Japanese = 7,
|
||||
Korean = 8,
|
||||
Polish = 9,
|
||||
PortugueseBrazil = 10,
|
||||
PortuguesePortugal = 18,
|
||||
Russian = 11,
|
||||
Turkish = 12,
|
||||
Chinese = 13,
|
||||
TraditionalChinese = 14,
|
||||
Swedish = 19,
|
||||
Thai = 20,
|
||||
Indonesian = 21,
|
||||
VietnameseVietnam = 22
|
||||
}
|
||||
|
||||
public enum EJsonType: long
|
||||
|
|
|
|||
|
|
@ -127,6 +127,8 @@
|
|||
<EmbeddedResource Include="Resources\Ini.xshd" />
|
||||
<EmbeddedResource Include="Resources\Json.xshd" />
|
||||
<EmbeddedResource Include="Resources\Xml.xshd" />
|
||||
<None Remove="Resources\Detex.dll" />
|
||||
<EmbeddedResource Include="Resources\Detex.dll" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace PakReader.Parsers.Class
|
||||
{
|
||||
public sealed class UAkAudioEvent : IUExport
|
||||
{
|
||||
readonly Dictionary<string, object> Map;
|
||||
|
||||
internal UAkAudioEvent(PackageReader reader)
|
||||
{
|
||||
_ = new UObject(reader, true);
|
||||
Map = new Dictionary<string, object>(1)
|
||||
{
|
||||
{ "MaxAttenuationRadius", reader.ReadFloat() }
|
||||
};
|
||||
}
|
||||
|
||||
public object this[string key] => Map[key];
|
||||
public IEnumerable<string> Keys => Map.Keys;
|
||||
public IEnumerable<object> Values => Map.Values;
|
||||
public int Count => Map.Count;
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public bool ContainsKey(string key) => Map.ContainsKey(key);
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public IEnumerator<KeyValuePair<string, object>> GetEnumerator() => Map.GetEnumerator();
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
IEnumerator IEnumerable.GetEnumerator() => Map.GetEnumerator();
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public bool TryGetValue(string key, out object value) => Map.TryGetValue(key, out value);
|
||||
}
|
||||
}
|
||||
40
FModel/PakReader/Parsers/Class/UAkMediaAssetData.cs
Normal file
40
FModel/PakReader/Parsers/Class/UAkMediaAssetData.cs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace PakReader.Parsers.Class
|
||||
{
|
||||
public sealed class UAkMediaAssetData : UObject
|
||||
{
|
||||
public FAkMediaDataChunk[] DataChunks { get; }
|
||||
|
||||
byte[] sound;
|
||||
public byte[] Sound
|
||||
{
|
||||
get
|
||||
{
|
||||
if (sound == null)
|
||||
{
|
||||
sound = new byte[this.DataChunks.Sum(x => x.Data.Data.Length)];
|
||||
int offset = 0;
|
||||
for (int i = 0; i < this.DataChunks.Length; i++)
|
||||
{
|
||||
Buffer.BlockCopy(this.DataChunks[i].Data.Data, 0, sound, offset, this.DataChunks[i].Data.Data.Length);
|
||||
offset += this.DataChunks[i].Data.Data.Length;
|
||||
}
|
||||
}
|
||||
return sound;
|
||||
}
|
||||
}
|
||||
|
||||
internal UAkMediaAssetData(PackageReader reader, Stream ubulk, long bulkOffset) : base(reader)
|
||||
{
|
||||
DataChunks = new FAkMediaDataChunk[reader.ReadInt32()];
|
||||
for (int i = 0; i < DataChunks.Length; ++i)
|
||||
{
|
||||
DataChunks[i] = new FAkMediaDataChunk(reader, ubulk, bulkOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
FModel/PakReader/Parsers/Objects/FAkMediaDataChunk.cs
Normal file
16
FModel/PakReader/Parsers/Objects/FAkMediaDataChunk.cs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
using System.IO;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public readonly struct FAkMediaDataChunk : IUStruct
|
||||
{
|
||||
public readonly FByteBulkData Data;
|
||||
public readonly bool IsPrefetch;
|
||||
|
||||
internal FAkMediaDataChunk(PackageReader reader, Stream ubulk, long bulkOffset)
|
||||
{
|
||||
IsPrefetch = reader.ReadInt32() != 0;
|
||||
Data = new FByteBulkData(reader, ubulk, bulkOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -57,7 +57,7 @@ namespace PakReader.Parsers
|
|||
"FontFace" => new UFontFace(this, ubulk),
|
||||
"SoundWave" => new USoundWave(this, ubulk, ExportMap.Sum(e => e.SerialSize) + PackageFileSummary.TotalHeaderSize),
|
||||
"StringTable" => new UStringTable(this),
|
||||
//"AkAudioEvent" => new UAkAudioEvent(this),
|
||||
"AkMediaAssetData" => new UAkMediaAssetData(this, ubulk, ExportMap.Sum(e => e.SerialSize) + PackageFileSummary.TotalHeaderSize),
|
||||
_ => new UObject(this),
|
||||
};
|
||||
|
||||
|
|
|
|||
106
FModel/PakReader/Textures/BC/Detex.cs
Normal file
106
FModel/PakReader/Textures/BC/Detex.cs
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace PakReader.Textures.BC
|
||||
{
|
||||
public static class Detex
|
||||
{
|
||||
private const string DETEX_DLL_NAME = "Detex.dll";
|
||||
|
||||
static Detex()
|
||||
{
|
||||
PrepareDllFile();
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private unsafe struct detexTexture
|
||||
{
|
||||
public uint format;
|
||||
public byte* data;
|
||||
public int width;
|
||||
public int height;
|
||||
public int width_in_blocks;
|
||||
public int height_in_blocks;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static byte[] DecodeDetexLinear(byte[] inp, int width, int height, bool isFloat, DetexTextureFormat inputFormat,
|
||||
DetexPixelFormat outputPixelFormat, int blockSizeX = 4, int blockSizeY = 4)
|
||||
{
|
||||
var dst = new byte[width * height * (isFloat ? 16 : 4)];
|
||||
DecodeDetexLinear(inp, dst, width, height, inputFormat, outputPixelFormat, blockSizeX, blockSizeY);
|
||||
return dst;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static bool DecodeDetexLinear(byte[] inp, byte[] dst, int width, int height, DetexTextureFormat inputFormat, DetexPixelFormat outputPixelFormat, int blockSizeX = 4, int blockSizeY = 4)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
detexTexture tex;
|
||||
tex.format = (uint) inputFormat;
|
||||
tex.data = (byte*) Unsafe.AsPointer(ref inp[0]);
|
||||
tex.width = width;
|
||||
tex.height = height;
|
||||
tex.width_in_blocks = width / 4;
|
||||
tex.height_in_blocks = height / 4;
|
||||
return detexDecompressTextureLinear(&tex, (byte*) Unsafe.AsPointer(ref dst[0]),
|
||||
(uint) outputPixelFormat);
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] DecodeBC6H(byte[] inp, int width, int height)
|
||||
{
|
||||
const int PIXEL_SIZE = 16;
|
||||
var dst = new byte[width * height * PIXEL_SIZE];
|
||||
|
||||
DecodeDetexLinear(inp, dst, width, height, DetexTextureFormat.DETEX_TEXTURE_FORMAT_BPTC_FLOAT,
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBX8);
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
[DllImport(DETEX_DLL_NAME)]
|
||||
private static extern unsafe bool detexDecompressTextureLinear(detexTexture* texture, byte* pixelBuffer,
|
||||
uint pixelFormat);
|
||||
|
||||
private static void PrepareDllFile()
|
||||
{
|
||||
using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("FModel.Resources.Detex.dll");
|
||||
if (stream == null)
|
||||
throw new MissingManifestResourceException("Couldn't find Detex.dll in Embedded Resources");
|
||||
var ba = new byte[(int) stream.Length];
|
||||
stream.Read(ba, 0, (int) stream.Length);
|
||||
|
||||
bool fileOk;
|
||||
var dllFile = DETEX_DLL_NAME;
|
||||
|
||||
using (var sha1 = new SHA1CryptoServiceProvider())
|
||||
{
|
||||
var fileHash = BitConverter.ToString(sha1.ComputeHash(ba)).Replace("-", string.Empty);
|
||||
|
||||
if (File.Exists(dllFile))
|
||||
{
|
||||
var bb = File.ReadAllBytes(dllFile);
|
||||
var fileHash2 = BitConverter.ToString(sha1.ComputeHash(bb)).Replace("-", string.Empty);
|
||||
|
||||
fileOk = fileHash == fileHash2;
|
||||
}
|
||||
else
|
||||
{
|
||||
fileOk = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fileOk)
|
||||
{
|
||||
File.WriteAllBytes(dllFile, ba);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
namespace PakReader.Textures.BC
|
||||
{
|
||||
internal enum DetexCompressedTextureFormatIndex : uint
|
||||
{
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_UNCOMPRESSED = 0,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1 = 1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_DXT1 = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_S3TC = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1A,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_DXT1A = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1A,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_DXT3 = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC3,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_DXT5 = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC3,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_RGTC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC4_UNORM = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_RGTC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_SIGNED_RGTC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC4_SNORM = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_SIGNED_RGTC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_RGTC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC5_UNORM = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_RGTC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_SIGNED_RGTC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC5_SNORM = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_SIGNED_RGTC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC_FLOAT,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC6H_UF16 = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC_FLOAT,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC_SIGNED_FLOAT,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC6H_SF16 = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC_SIGNED_FLOAT,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC7 = DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC1,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC2,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC2_PUNCHTHROUGH,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC2_EAC,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_R11,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_SIGNED_R11,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_RG11,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_SIGNED_RG11,
|
||||
DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ASTC_4X4,
|
||||
}
|
||||
}
|
||||
361
FModel/PakReader/Textures/BC/DetexPixelFormat.cs
Normal file
361
FModel/PakReader/Textures/BC/DetexPixelFormat.cs
Normal file
|
|
@ -0,0 +1,361 @@
|
|||
namespace PakReader.Textures.BC
|
||||
{
|
||||
public enum DetexPixelFormat : uint
|
||||
{
|
||||
/* The format has 16-bit components. */
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT = 0x1,
|
||||
|
||||
/* The format has 32-bit components. */
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT = 0x2,
|
||||
|
||||
/* The format has an alpha component. */
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT = 0x4,
|
||||
|
||||
/* The sequential component order is RGB. */
|
||||
DETEX_PIXEL_FORMAT_RGB_COMPONENT_ORDER_BIT = 0x0,
|
||||
|
||||
/* The sequential component order is BGR. */
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT = 0x8,
|
||||
|
||||
/* The format has one component. */
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS = 0x0,
|
||||
|
||||
/* The format has two components. */
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS = 0x10,
|
||||
|
||||
/* The format has three components. */
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS = 0x20,
|
||||
|
||||
/* The format has four components. */
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS = 0x30,
|
||||
|
||||
/* The format is stored as 8-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS = 0x000,
|
||||
|
||||
/* The format is stored as 16-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS = 0x100,
|
||||
|
||||
/* The format is stored as 24-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_24BIT_PIXEL_BITS = 0x200,
|
||||
|
||||
/* The format is stored as 32-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS = 0x300,
|
||||
|
||||
/* The format is stored as 48-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS = 0x500,
|
||||
|
||||
/* The format is stored as 64-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS = 0x700,
|
||||
|
||||
/* The format is stored as 96-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_96BIT_PIXEL_BITS = 0xB00,
|
||||
|
||||
/* The format is stored as 128-bit pixels. */
|
||||
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS = 0xF00,
|
||||
|
||||
/* The format has signed integer components. */
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT = 0x1000,
|
||||
|
||||
/* The format has (half-)float components. */
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT = 0x2000,
|
||||
|
||||
/* The fomat is HDR (high dynamic range). */
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT = 0x4000,
|
||||
|
||||
DETEX_PIXEL_FORMAT_RGBA8 = (
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_BGRA8 = (
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RGBX8 = (
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_BGRX8 = (
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RGB8 = (
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_24BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_BGR8 = (
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_24BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_R8 = (
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_SIGNED_R8 = (
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RG8 = (
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_SIGNED_RG8 = (
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_R16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_SIGNED_R16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RG16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_SIGNED_RG16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RGB16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RGBX16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_RGBA16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_R16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_R16_HDR = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_16BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RG16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RG16_HDR = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBX16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBX16_HDR = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBA16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBA16_HDR = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGB16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGB16_HDR = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_48BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BGRX16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BGRX16_HDR = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_SIGNED_FLOAT_RGBX16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_SIGNED_FLOAT_BGRX16 = (
|
||||
DETEX_PIXEL_FORMAT_16BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_BGR_COMPONENT_ORDER_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_SIGNED_BIT |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_R32 = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_R32_HDR = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_32BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RG32 = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RG32_HDR = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_TWO_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_64BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGB32 = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_96BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGB32_HDR = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_96BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBX32 = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBX32_HDR = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_THREE_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBA32 = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_FLOAT_RGBA32_HDR = (
|
||||
DETEX_PIXEL_FORMAT_32BIT_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_FOUR_COMPONENTS_BITS |
|
||||
DETEX_PIXEL_FORMAT_128BIT_PIXEL_BITS |
|
||||
DETEX_PIXEL_FORMAT_FLOAT_BIT |
|
||||
DETEX_PIXEL_FORMAT_HDR_BIT
|
||||
),
|
||||
|
||||
DETEX_PIXEL_FORMAT_A8 = (
|
||||
DETEX_PIXEL_FORMAT_ALPHA_COMPONENT_BIT |
|
||||
DETEX_PIXEL_FORMAT_ONE_COMPONENT_BITS |
|
||||
DETEX_PIXEL_FORMAT_8BIT_PIXEL_BITS
|
||||
),
|
||||
}
|
||||
}
|
||||
119
FModel/PakReader/Textures/BC/DetexTextureFormat.cs
Normal file
119
FModel/PakReader/Textures/BC/DetexTextureFormat.cs
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
namespace PakReader.Textures.BC
|
||||
{
|
||||
public enum DetexTextureFormat : uint
|
||||
{
|
||||
DETEX_TEXTURE_FORMAT_PIXEL_FORMAT_MASK = 0x0000FFFF,
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT = 0x00800000,
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BC1 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBX8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BC1A = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC1A << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BC2 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC2 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BC3 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BC3 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_RGTC1 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_RGTC1 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_R8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_SIGNED_RGTC1 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_SIGNED_RGTC1 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_SIGNED_R16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_RGTC2 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_RGTC2 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RG8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_SIGNED_RGTC2 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_SIGNED_RGTC2 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_SIGNED_RG16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BPTC_FLOAT = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC_FLOAT << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_FLOAT_RGBX16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BPTC_SIGNED_FLOAT = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC_SIGNED_FLOAT << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_SIGNED_FLOAT_RGBX16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_BPTC = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_BPTC << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_ETC1 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC1 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBX8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_ETC2 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC2 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBX8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_ETC2_PUNCHTHROUGH = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC2_PUNCHTHROUGH << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_ETC2_EAC = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ETC2_EAC << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_EAC_R11 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_R11 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_R16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_EAC_SIGNED_R11 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_SIGNED_R11 << 24) |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_SIGNED_R16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_EAC_RG11 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_RG11 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RG16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_EAC_SIGNED_RG11 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_EAC_SIGNED_RG11 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_SIGNED_RG16
|
||||
),
|
||||
|
||||
DETEX_TEXTURE_FORMAT_ASTC_4X4 = (
|
||||
(DetexCompressedTextureFormatIndex.DETEX_COMPRESSED_TEXTURE_FORMAT_INDEX_ASTC_4X4 << 24) |
|
||||
DETEX_TEXTURE_FORMAT_128BIT_BLOCK_BIT |
|
||||
DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8
|
||||
),
|
||||
}
|
||||
}
|
||||
|
|
@ -50,6 +50,37 @@ namespace PakReader.Textures
|
|||
data = sequence;
|
||||
colorType = SKColorType.RgbaF16;
|
||||
break;
|
||||
case EPixelFormat.PF_BC7:
|
||||
data = Detex.DecodeDetexLinear(sequence, width, height, isFloat: false,
|
||||
inputFormat: DetexTextureFormat.DETEX_TEXTURE_FORMAT_BPTC,
|
||||
outputPixelFormat: DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8);
|
||||
colorType = SKColorType.Rgba8888;
|
||||
break;
|
||||
case EPixelFormat.PF_BC6H:
|
||||
data = Detex.DecodeDetexLinear(sequence, width, height, isFloat: true,
|
||||
inputFormat: DetexTextureFormat.DETEX_TEXTURE_FORMAT_BPTC_FLOAT,
|
||||
outputPixelFormat: DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBX8); // Not sure whether that works, would actually be DETEX_PIXEL_FORMAT_FLOAT_RGBX32
|
||||
data = Detex.DecodeBC6H(sequence, width, height);
|
||||
colorType = SKColorType.Rgb888x;
|
||||
break;
|
||||
case EPixelFormat.PF_ETC1:
|
||||
data = Detex.DecodeDetexLinear(sequence, width, height, isFloat: false,
|
||||
inputFormat: DetexTextureFormat.DETEX_TEXTURE_FORMAT_ETC1,
|
||||
outputPixelFormat: DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8);
|
||||
colorType = SKColorType.Rgba8888;
|
||||
break;
|
||||
case EPixelFormat.PF_ETC2_RGB:
|
||||
data = Detex.DecodeDetexLinear(sequence, width, height, isFloat: false,
|
||||
inputFormat: DetexTextureFormat.DETEX_TEXTURE_FORMAT_ETC2,
|
||||
outputPixelFormat: DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8);
|
||||
colorType = SKColorType.Rgba8888;
|
||||
break;
|
||||
case EPixelFormat.PF_ETC2_RGBA:
|
||||
data = Detex.DecodeDetexLinear(sequence, width, height, isFloat: false,
|
||||
inputFormat: DetexTextureFormat.DETEX_TEXTURE_FORMAT_ETC2_EAC,
|
||||
outputPixelFormat: DetexPixelFormat.DETEX_PIXEL_FORMAT_RGBA8);
|
||||
colorType = SKColorType.Rgba8888;
|
||||
break;
|
||||
default:
|
||||
throw new NotImplementedException($"Cannot decode {format} format");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -792,5 +792,59 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
</data>
|
||||
<data name="NoKeyWarning" xml:space="preserve">
|
||||
<value>يعمل (AES)مشفر لفك تشفيرها يرجى تحديد مفتاح تشفير (.pak) تم العثور على ملف </value>
|
||||
</data>
|
||||
<data name="ResetSettings" xml:space="preserve">
|
||||
<value>اعادة ضبط الاعدادات</value>
|
||||
</data>
|
||||
<data name="GameName_Fortnite" xml:space="preserve">
|
||||
<value>Fortnite</value>
|
||||
</data>
|
||||
<data name="GameName_Valorant" xml:space="preserve">
|
||||
<value>Valorant</value>
|
||||
</data>
|
||||
<data name="GameName_DeadByDaylight" xml:space="preserve">
|
||||
<value>Dead By Daylight</value>
|
||||
</data>
|
||||
<data name="GameName_Borderlands3" xml:space="preserve">
|
||||
<value>Borderlands 3</value>
|
||||
</data>
|
||||
<data name="GameName_MinecraftDungeons" xml:space="preserve">
|
||||
<value>Minecraft Dungeons</value>
|
||||
</data>
|
||||
<data name="AustralianEnglish" xml:space="preserve">
|
||||
<value>انكليزي استرالي</value>
|
||||
</data>
|
||||
<data name="BritishEnglish" xml:space="preserve">
|
||||
<value>انكليزي بريطاني</value>
|
||||
</data>
|
||||
<data name="PortuguesePortugal" xml:space="preserve">
|
||||
<value>اللغة البرتغالية</value>
|
||||
</data>
|
||||
<data name="SpanishMexico" xml:space="preserve">
|
||||
<value>اللغة الاسبانية / المكسيكية</value>
|
||||
</data>
|
||||
<data name="Swedish" xml:space="preserve">
|
||||
<value>اللغة السويدية</value>
|
||||
</data>
|
||||
<data name="Thai" xml:space="preserve">
|
||||
<value>اللغة التايلاندية</value>
|
||||
</data>
|
||||
<data name="Indonesian" xml:space="preserve">
|
||||
<value>اللغة الأندونيسية</value>
|
||||
</data>
|
||||
<data name="VietnameseVietnam" xml:space="preserve">
|
||||
<value>اللغة الفيتنامية</value>
|
||||
</data>
|
||||
<data name="GameName_BattleBreakers" xml:space="preserve">
|
||||
<value>Battle Breakers</value>
|
||||
</data>
|
||||
<data name="GameName_Spellbreak" xml:space="preserve">
|
||||
<value>Spellbreak</value>
|
||||
</data>
|
||||
<data name="GameName_StateofDecay2" xml:space="preserve">
|
||||
<value>State of Decay 2</value>
|
||||
</data>
|
||||
<data name="GameName_TheCycle" xml:space="preserve">
|
||||
<value>The Cycle</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -279,14 +279,6 @@
|
|||
<data name="ContributorsF" xml:space="preserve">
|
||||
<value>Contribuidoras</value>
|
||||
</data>
|
||||
<data name="ContributorsFDetails" xml:space="preserve">
|
||||
<value>• Waddlesworth • Maiky
|
||||
• FunGames • Not Officer
|
||||
• PsychoPast • TSG
|
||||
• GMatrixGames • Jackson
|
||||
• XTigerHyperX • FireMonkey</value>
|
||||
<comment>Do not translate</comment>
|
||||
</data>
|
||||
<data name="CopySuccess" xml:space="preserve">
|
||||
<value>Copiado!</value>
|
||||
</data>
|
||||
|
|
@ -345,14 +337,6 @@
|
|||
<data name="DonatorsF" xml:space="preserve">
|
||||
<value>Doadores</value>
|
||||
</data>
|
||||
<data name="DonatorsFDetails" xml:space="preserve">
|
||||
<value>• Yanteh • Maiky
|
||||
• FunGames • HYPEX ♥
|
||||
• Alexander • Netu ♥
|
||||
• SexyNutella • imatrix
|
||||
• Frenzy Leaks • LlamaLeaks</value>
|
||||
<comment>Do not translate</comment>
|
||||
</data>
|
||||
<data name="DownloadError" xml:space="preserve">
|
||||
<value>Erro Ao Fazer Download De {0}</value>
|
||||
</data>
|
||||
|
|
@ -738,9 +722,7 @@ FModel Lançador</value>
|
|||
<comment>General Settings Window</comment>
|
||||
</data>
|
||||
<data name="PathChangedRestart" xml:space="preserve">
|
||||
<value>FModel Está Prestes A Reiniciar Porque Você Aplicou Seu (s) Novo (s) Caminho (
|
||||
FModel está prestes a reiniciar porque você aplicou seu (s) novo (s) caminho
|
||||
FModel está prestes a reiniciar porque você aplicou seu (s) novo (s) caminho (s)</value>
|
||||
<value>FModel está prestes a reiniciar porque você aplicou seu (s) novo (s) caminho (s)</value>
|
||||
<comment>General Settings Window</comment>
|
||||
</data>
|
||||
<data name="pause" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
|
|
@ -933,14 +915,6 @@ FModel está prestes a reiniciar porque você aplicou seu (s) novo (s) caminho (
|
|||
<data name="TranslatorsF" xml:space="preserve">
|
||||
<value>Tradutores</value>
|
||||
</data>
|
||||
<data name="TranslatorsFDetails" xml:space="preserve">
|
||||
<value>• EN: Asval#2291 • FR: Asval#2291
|
||||
• DE: FunGames#6822 • IT: arianaglande#5581
|
||||
• ES: Maiky.M#9879 • AR: PsychoPast#0001
|
||||
• JA: FNJPNews#7820 • RU: Seawod#4311
|
||||
• CN: GMatrixGames#6929</value>
|
||||
<comment>Do not translate</comment>
|
||||
</data>
|
||||
<data name="Turkish" xml:space="preserve">
|
||||
<value>Turco</value>
|
||||
</data>
|
||||
|
|
@ -1063,9 +1037,6 @@ FModel está prestes a reiniciar porque você aplicou seu (s) novo (s) caminho (
|
|||
<data name="Xml" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Xml.xshd;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="Trello" xml:space="preserve">
|
||||
<value>Trello</value>
|
||||
</data>
|
||||
<data name="trello1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\trello.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ namespace FModel.Properties
|
|||
public sealed partial class Settings
|
||||
{
|
||||
private static string _userSettings = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FModel\\DoNotDelete.json";
|
||||
private static readonly Regex _pakFileRegex = new Regex(@"^FortniteGame/Content/Paks/pakchunk(?:0|10.*|\w+)-WindowsClient\.pak$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
|
||||
|
||||
/// <summary>
|
||||
/// IMPORTANT: i believe Upgrade doesn't like int32 so use int64 (maybe because it's for x64?) for all int values
|
||||
|
|
|
|||
BIN
FModel/Resources/Detex.dll
Normal file
BIN
FModel/Resources/Detex.dll
Normal file
Binary file not shown.
|
|
@ -219,6 +219,23 @@ namespace FModel.Utils
|
|||
return p;
|
||||
}
|
||||
|
||||
var ak = p.GetExport<UAkMediaAssetData>();
|
||||
if (ak != null)
|
||||
{
|
||||
if (Properties.Settings.Default.AutoOpenSounds)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(delegate
|
||||
{
|
||||
DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", $"Opening Audio Player for {entry.GetNameWithExtension()}");
|
||||
if (!FWindows.IsWindowOpen<Window>(Properties.Resources.AudioPlayer))
|
||||
new AudioPlayer().LoadFile(ak.Sound, entry.GetNameWithoutExtension() + ".wem", mount + entry.GetPathWithoutFile());
|
||||
else
|
||||
((AudioPlayer)FWindows.GetOpenedWindow<Window>(Properties.Resources.AudioPlayer)).LoadFile(ak.Sound, entry.GetNameWithoutExtension() + ".wem", mount + entry.GetPathWithoutFile());
|
||||
});
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
// Sound
|
||||
var s = p.GetExport<USoundWave>();
|
||||
if (s != null && (s.AudioFormat.String.Equals("OGG") || s.AudioFormat.String.Equals("OGG10000-1-1-1-1-1")))
|
||||
|
|
|
|||
|
|
@ -18,10 +18,10 @@ namespace FModel.Utils
|
|||
using Stream stream = new BufferedStream(new FileInfo(configFile).Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
|
||||
using BinaryReader reader = new BinaryReader(stream, Encoding.Default);
|
||||
if (reader.ReadUInt32() != FILE_CONFIG_MAGIC)
|
||||
throw new FileLoadException("Invalid EGL2 Config Magic");
|
||||
return string.Empty;
|
||||
|
||||
if (reader.ReadUInt16BE() < FILE_CONFIG_VERSION)
|
||||
throw new FileLoadException("Invalid EGL2 Config Version");
|
||||
return string.Empty;
|
||||
|
||||
int stringLength = reader.ReadUInt16BE();
|
||||
string cacheDirectory = Encoding.UTF8.GetString(reader.ReadBytes(stringLength));
|
||||
|
|
|
|||
|
|
@ -52,24 +52,24 @@ namespace FModel.ViewModels.ComboBox
|
|||
public static ObservableCollection<ComboBoxViewModel> languageCbViewModel = new ObservableCollection<ComboBoxViewModel>
|
||||
{
|
||||
new ComboBoxViewModel { Id = 0, Content = Properties.Resources.English, Property = ELanguage.English },
|
||||
new ComboBoxViewModel { Id = 1, Content = Properties.Resources.AustralianEnglish, Property = ELanguage.AustralianEnglish },
|
||||
new ComboBoxViewModel { Id = 2, Content = Properties.Resources.BritishEnglish, Property = ELanguage.BritishEnglish },
|
||||
new ComboBoxViewModel { Id = 3, Content = Properties.Resources.French, Property = ELanguage.French },
|
||||
new ComboBoxViewModel { Id = 4, Content = Properties.Resources.German, Property = ELanguage.German },
|
||||
new ComboBoxViewModel { Id = 5, Content = Properties.Resources.Italian, Property = ELanguage.Italian },
|
||||
new ComboBoxViewModel { Id = 6, Content = Properties.Resources.Spanish, Property = ELanguage.Spanish },
|
||||
new ComboBoxViewModel { Id = 7, Content = Properties.Resources.SpanishLatin, Property = ELanguage.SpanishLatin },
|
||||
new ComboBoxViewModel { Id = 8, Content = Properties.Resources.SpanishMexico, Property = ELanguage.SpanishMexico },
|
||||
new ComboBoxViewModel { Id = 9, Content = Properties.Resources.Arabic, Property = ELanguage.Arabic },
|
||||
new ComboBoxViewModel { Id = 10, Content = Properties.Resources.Japanese, Property = ELanguage.Japanese },
|
||||
new ComboBoxViewModel { Id = 11, Content = Properties.Resources.Korean, Property = ELanguage.Korean },
|
||||
new ComboBoxViewModel { Id = 12, Content = Properties.Resources.Polish, Property = ELanguage.Polish },
|
||||
new ComboBoxViewModel { Id = 13, Content = Properties.Resources.PortugueseBrazil, Property = ELanguage.PortugueseBrazil },
|
||||
new ComboBoxViewModel { Id = 14, Content = Properties.Resources.PortuguesePortugal, Property = ELanguage.PortuguesePortugal },
|
||||
new ComboBoxViewModel { Id = 15, Content = Properties.Resources.Russian, Property = ELanguage.Russian },
|
||||
new ComboBoxViewModel { Id = 16, Content = Properties.Resources.Turkish, Property = ELanguage.Turkish },
|
||||
new ComboBoxViewModel { Id = 17, Content = Properties.Resources.Chinese, Property = ELanguage.Chinese },
|
||||
new ComboBoxViewModel { Id = 18, Content = Properties.Resources.TraditionalChinese, Property = ELanguage.TraditionalChinese },
|
||||
new ComboBoxViewModel { Id = 15, Content = Properties.Resources.AustralianEnglish, Property = ELanguage.AustralianEnglish },
|
||||
new ComboBoxViewModel { Id = 16, Content = Properties.Resources.BritishEnglish, Property = ELanguage.BritishEnglish },
|
||||
new ComboBoxViewModel { Id = 1, Content = Properties.Resources.French, Property = ELanguage.French },
|
||||
new ComboBoxViewModel { Id = 2, Content = Properties.Resources.German, Property = ELanguage.German },
|
||||
new ComboBoxViewModel { Id = 3, Content = Properties.Resources.Italian, Property = ELanguage.Italian },
|
||||
new ComboBoxViewModel { Id = 4, Content = Properties.Resources.Spanish, Property = ELanguage.Spanish },
|
||||
new ComboBoxViewModel { Id = 5, Content = Properties.Resources.SpanishLatin, Property = ELanguage.SpanishLatin },
|
||||
new ComboBoxViewModel { Id = 17, Content = Properties.Resources.SpanishMexico, Property = ELanguage.SpanishMexico },
|
||||
new ComboBoxViewModel { Id = 6, Content = Properties.Resources.Arabic, Property = ELanguage.Arabic },
|
||||
new ComboBoxViewModel { Id = 7, Content = Properties.Resources.Japanese, Property = ELanguage.Japanese },
|
||||
new ComboBoxViewModel { Id = 8, Content = Properties.Resources.Korean, Property = ELanguage.Korean },
|
||||
new ComboBoxViewModel { Id = 9, Content = Properties.Resources.Polish, Property = ELanguage.Polish },
|
||||
new ComboBoxViewModel { Id = 10, Content = Properties.Resources.PortugueseBrazil, Property = ELanguage.PortugueseBrazil },
|
||||
new ComboBoxViewModel { Id = 18, Content = Properties.Resources.PortuguesePortugal, Property = ELanguage.PortuguesePortugal },
|
||||
new ComboBoxViewModel { Id = 11, Content = Properties.Resources.Russian, Property = ELanguage.Russian },
|
||||
new ComboBoxViewModel { Id = 12, Content = Properties.Resources.Turkish, Property = ELanguage.Turkish },
|
||||
new ComboBoxViewModel { Id = 13, Content = Properties.Resources.Chinese, Property = ELanguage.Chinese },
|
||||
new ComboBoxViewModel { Id = 14, Content = Properties.Resources.TraditionalChinese, Property = ELanguage.TraditionalChinese },
|
||||
new ComboBoxViewModel { Id = 19, Content = Properties.Resources.Swedish, Property = ELanguage.Swedish },
|
||||
new ComboBoxViewModel { Id = 20, Content = Properties.Resources.Thai, Property = ELanguage.Thai },
|
||||
new ComboBoxViewModel { Id = 21, Content = Properties.Resources.Indonesian, Property = ELanguage.Indonesian },
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ namespace FModel.Windows.Launcher
|
|||
{
|
||||
if (e.Source is TextBox text)
|
||||
{
|
||||
bool m = Regex.IsMatch(text.Text, @"^donotedit-youcanteditanyway-(?:\w+)\.manifest$");
|
||||
bool m = Regex.IsMatch(text.Text, @"^donotedit-youcanteditanyway-\w+\.manifest$");
|
||||
BrowsePath.IsEnabled = !m;
|
||||
text.IsReadOnly = m;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,6 +121,18 @@ namespace FModel.Windows.SoundPlayer
|
|||
}
|
||||
}
|
||||
|
||||
public void LoadFile(byte[] sound, string assetName, string gameFolder)
|
||||
{
|
||||
Focus();
|
||||
ListBoxVm.soundFiles.Add(new ListBoxViewModel2
|
||||
{
|
||||
Content = assetName,
|
||||
Data = sound,
|
||||
FullPath = string.Empty,
|
||||
Folder = gameFolder
|
||||
});
|
||||
}
|
||||
|
||||
public void LoadFile(string filepath)
|
||||
{
|
||||
ListBoxViewModel2 item = ListBoxVm.soundFiles.Where(x => x.FullPath.Equals(filepath)).FirstOrDefault();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user