diff --git a/AssetStudio/Classes/Mesh.cs b/AssetStudio/Classes/Mesh.cs index ce145d5..cb08129 100644 --- a/AssetStudio/Classes/Mesh.cs +++ b/AssetStudio/Classes/Mesh.cs @@ -174,7 +174,7 @@ namespace AssetStudio GetStreams(version); } - m_DataSize = reader.ReadBytes(reader.ReadInt32()); + m_DataSize = reader.ReadUInt8Array(); reader.AlignStream(); } @@ -653,9 +653,9 @@ namespace AssetStudio if (version[0] >= 5) //5.0 and up { - var m_BakedConvexCollisionMesh = reader.ReadBytes(reader.ReadInt32()); + var m_BakedConvexCollisionMesh = reader.ReadUInt8Array(); reader.AlignStream(); - var m_BakedTriangleCollisionMesh = reader.ReadBytes(reader.ReadInt32()); + var m_BakedTriangleCollisionMesh = reader.ReadUInt8Array(); reader.AlignStream(); } diff --git a/AssetStudio/Classes/MovieTexture.cs b/AssetStudio/Classes/MovieTexture.cs index 0293457..8fd9207 100644 --- a/AssetStudio/Classes/MovieTexture.cs +++ b/AssetStudio/Classes/MovieTexture.cs @@ -15,7 +15,7 @@ namespace AssetStudio var m_Loop = reader.ReadBoolean(); reader.AlignStream(); m_AudioClip = new PPtr(reader); - m_MovieData = reader.ReadBytes(reader.ReadInt32()); + m_MovieData = reader.ReadUInt8Array(); } } } diff --git a/AssetStudio/Classes/Shader.cs b/AssetStudio/Classes/Shader.cs index 57f91a7..5f8d458 100644 --- a/AssetStudio/Classes/Shader.cs +++ b/AssetStudio/Classes/Shader.cs @@ -5,6 +5,16 @@ using System.Linq; namespace AssetStudio { + public class Hash128 + { + public byte[] bytes; + + public Hash128(BinaryReader reader) + { + bytes = reader.ReadBytes(16); + } + } + public class StructParameter { public MatrixParameter[] m_MatrixParams; @@ -438,33 +448,33 @@ namespace AssetStudio kShaderGpuProgramGLES31AEP = 2, kShaderGpuProgramGLES31 = 3, kShaderGpuProgramGLES3 = 4, - kShaderGpuProgramGLES = 5, - kShaderGpuProgramGLCore32 = 6, - kShaderGpuProgramGLCore41 = 7, - kShaderGpuProgramGLCore43 = 8, - kShaderGpuProgramDX9VertexSM20 = 9, - kShaderGpuProgramDX9VertexSM30 = 10, - kShaderGpuProgramDX9PixelSM20 = 11, - kShaderGpuProgramDX9PixelSM30 = 12, - kShaderGpuProgramDX10Level9Vertex = 13, + kShaderGpuProgramGLES = 5, + kShaderGpuProgramGLCore32 = 6, + kShaderGpuProgramGLCore41 = 7, + kShaderGpuProgramGLCore43 = 8, + kShaderGpuProgramDX9VertexSM20 = 9, + kShaderGpuProgramDX9VertexSM30 = 10, + kShaderGpuProgramDX9PixelSM20 = 11, + kShaderGpuProgramDX9PixelSM30 = 12, + kShaderGpuProgramDX10Level9Vertex = 13, kShaderGpuProgramDX10Level9Pixel = 14, - kShaderGpuProgramDX11VertexSM40 = 15, + kShaderGpuProgramDX11VertexSM40 = 15, kShaderGpuProgramDX11VertexSM50 = 16, kShaderGpuProgramDX11PixelSM40 = 17, - kShaderGpuProgramDX11PixelSM50 = 18, + kShaderGpuProgramDX11PixelSM50 = 18, kShaderGpuProgramDX11GeometrySM40 = 19, kShaderGpuProgramDX11GeometrySM50 = 20, - kShaderGpuProgramDX11HullSM50 = 21, - kShaderGpuProgramDX11DomainSM50 = 22, - kShaderGpuProgramMetalVS = 23, + kShaderGpuProgramDX11HullSM50 = 21, + kShaderGpuProgramDX11DomainSM50 = 22, + kShaderGpuProgramMetalVS = 23, kShaderGpuProgramMetalFS = 24, - kShaderGpuProgramSPIRV = 25, + kShaderGpuProgramSPIRV = 25, kShaderGpuProgramConsoleVS = 26, - kShaderGpuProgramConsoleFS = 27, - kShaderGpuProgramConsoleHS = 28, + kShaderGpuProgramConsoleFS = 27, + kShaderGpuProgramConsoleHS = 28, kShaderGpuProgramConsoleDS = 29, - kShaderGpuProgramConsoleGS = 30, - kShaderGpuProgramRayTracing = 31, + kShaderGpuProgramConsoleGS = 30, + kShaderGpuProgramRayTracing = 31, }; public class SerializedSubProgram @@ -599,6 +609,10 @@ namespace AssetStudio public class SerializedPass { + public Hash128[] m_EditorDataHash; + public byte[] m_Platforms; + public ushort[] m_LocalKeywordMask; + public ushort[] m_GlobalKeywordMask; public KeyValuePair[] m_NameIndices; public PassType m_Type; public SerializedShaderState m_State; @@ -619,6 +633,23 @@ namespace AssetStudio { var version = reader.version; + if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up + { + int numEditorDataHash = reader.ReadInt32(); + m_EditorDataHash = new Hash128[numEditorDataHash]; + for (int i = 0; i < numEditorDataHash; i++) + { + m_EditorDataHash[i] = new Hash128(reader); + } + reader.AlignStream(); + m_Platforms = reader.ReadUInt8Array(); + reader.AlignStream(); + m_LocalKeywordMask = reader.ReadUInt16Array(); + reader.AlignStream(); + m_GlobalKeywordMask = reader.ReadUInt16Array(); + reader.AlignStream(); + } + int numIndices = reader.ReadInt32(); m_NameIndices = new KeyValuePair[numIndices]; for (int i = 0; i < numIndices; i++) @@ -793,17 +824,17 @@ namespace AssetStudio compressedLengths = reader.ReadUInt32Array(); decompressedLengths = reader.ReadUInt32Array(); } - compressedBlob = reader.ReadBytes(reader.ReadInt32()); + compressedBlob = reader.ReadUInt8Array(); } else { - m_Script = reader.ReadBytes(reader.ReadInt32()); + m_Script = reader.ReadUInt8Array(); reader.AlignStream(); var m_PathName = reader.ReadAlignedString(); if (version[0] == 5 && version[1] >= 3) //5.3 - 5.4 { decompressedSize = reader.ReadUInt32(); - m_SubProgramBlob = reader.ReadBytes(reader.ReadInt32()); + m_SubProgramBlob = reader.ReadUInt8Array(); } } } diff --git a/AssetStudio/Classes/Sprite.cs b/AssetStudio/Classes/Sprite.cs index e03890d..44794d7 100644 --- a/AssetStudio/Classes/Sprite.cs +++ b/AssetStudio/Classes/Sprite.cs @@ -124,7 +124,7 @@ namespace AssetStudio m_SubMeshes[i] = new SubMesh(reader); } - m_IndexBuffer = reader.ReadBytes(reader.ReadInt32()); + m_IndexBuffer = reader.ReadUInt8Array(); reader.AlignStream(); m_VertexData = new VertexData(reader); diff --git a/AssetStudio/Classes/SpriteAtlas.cs b/AssetStudio/Classes/SpriteAtlas.cs index 7ec795e..93bccfc 100644 --- a/AssetStudio/Classes/SpriteAtlas.cs +++ b/AssetStudio/Classes/SpriteAtlas.cs @@ -13,6 +13,7 @@ namespace AssetStudio public Vector4 uvTransform; public float downscaleMultiplier; public SpriteSettings settingsRaw; + public SecondarySpriteTexture[] secondaryTextures; public SpriteAtlasData(ObjectReader reader) { @@ -28,6 +29,16 @@ namespace AssetStudio uvTransform = reader.ReadVector4(); downscaleMultiplier = reader.ReadSingle(); settingsRaw = new SpriteSettings(reader); + if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up + { + var secondaryTexturesSize = reader.ReadInt32(); + secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize]; + for (int i = 0; i < secondaryTexturesSize; i++) + { + secondaryTextures[i] = new SecondarySpriteTexture(reader); + } + reader.AlignStream(); + } } } diff --git a/AssetStudio/Classes/TextAsset.cs b/AssetStudio/Classes/TextAsset.cs index 32ecd3c..ff47780 100644 --- a/AssetStudio/Classes/TextAsset.cs +++ b/AssetStudio/Classes/TextAsset.cs @@ -12,7 +12,7 @@ namespace AssetStudio public TextAsset(ObjectReader reader) : base(reader) { - m_Script = reader.ReadBytes(reader.ReadInt32()); + m_Script = reader.ReadUInt8Array(); } } } diff --git a/AssetStudio/Classes/Texture.cs b/AssetStudio/Classes/Texture.cs index bcd2196..8da11a8 100644 --- a/AssetStudio/Classes/Texture.cs +++ b/AssetStudio/Classes/Texture.cs @@ -13,6 +13,10 @@ namespace AssetStudio { var m_ForcedFallbackFormat = reader.ReadInt32(); var m_DownscaleFallback = reader.ReadBoolean(); + if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up + { + var m_IsAlphaChannelOptional = reader.ReadBoolean(); + } reader.AlignStream(); } } diff --git a/AssetStudio/Classes/Texture2D.cs b/AssetStudio/Classes/Texture2D.cs index 583f9c7..c296e8b 100644 --- a/AssetStudio/Classes/Texture2D.cs +++ b/AssetStudio/Classes/Texture2D.cs @@ -120,6 +120,11 @@ namespace AssetStudio { var m_ColorSpace = reader.ReadInt32(); } + if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up + { + var m_PlatformBlob = reader.ReadUInt8Array(); + reader.AlignStream(); + } var image_data_size = reader.ReadInt32(); if (image_data_size == 0 && ((version[0] == 5 && version[1] >= 3) || version[0] > 5))//5.3.0 and up { diff --git a/AssetStudio/Extensions/BinaryReaderExtensions.cs b/AssetStudio/Extensions/BinaryReaderExtensions.cs index 90ee086..94c99d3 100644 --- a/AssetStudio/Extensions/BinaryReaderExtensions.cs +++ b/AssetStudio/Extensions/BinaryReaderExtensions.cs @@ -102,6 +102,11 @@ namespace AssetStudio return ReadArray(reader.ReadBoolean, reader.ReadInt32()); } + public static byte[] ReadUInt8Array(this BinaryReader reader) + { + return reader.ReadBytes(reader.ReadInt32()); + } + public static ushort[] ReadUInt16Array(this BinaryReader reader) { return ReadArray(reader.ReadUInt16, reader.ReadInt32()); diff --git a/AssetStudioUtility/ShaderConverter.cs b/AssetStudioUtility/ShaderConverter.cs index e2ed8aa..cf9fec2 100644 --- a/AssetStudioUtility/ShaderConverter.cs +++ b/AssetStudioUtility/ShaderConverter.cs @@ -663,7 +663,7 @@ namespace AssetStudio m_LocalKeywords[i] = reader.ReadAlignedString(); } } - m_ProgramCode = reader.ReadBytes(reader.ReadInt32()); + m_ProgramCode = reader.ReadUInt8Array(); reader.AlignStream(); //TODO