(Unity): adjusted texture entries deserialization.

This commit is contained in:
morkt
2018-04-20 21:20:50 +04:00
parent 7bbaa26051
commit 1392dc61d3
4 changed files with 40 additions and 34 deletions

View File

@@ -79,27 +79,29 @@ namespace GameRes.Formats.Unity
return base.OpenImage (arc, entry);
var obj = aent.AssetObject;
using (var stream = arc.File.CreateStream (obj.Offset, obj.Size))
using (var reader = new AssetReader (stream))
var stream = arc.File.CreateStream (obj.Offset, obj.Size);
var reader = new AssetReader (stream);
try
{
reader.SetupReaders (obj.Asset);
var tex = new Texture2D();
tex.Load (reader);
var input = OpenEntry (arc, entry);
try
if (0 == tex.m_DataLength)
{
tex.m_Data = new byte[entry.Size];
input.Read (tex.m_Data, 0, tex.m_Data.Length);
var tex_reader = new AssetReader (input, entry.Name);
tex_reader.SetupReaders (obj.Asset);
return new Texture2DDecoder (tex, tex_reader);
}
catch
{
input.Dispose();
throw;
reader.Dispose();
var input = OpenEntry (arc, entry);
reader = new AssetReader (input, entry.Name);
reader.SetupReaders (obj.Asset);
tex.m_DataLength = (int)entry.Size;
}
var decoder = new Texture2DDecoder (tex, reader);
reader = null;
return decoder;
}
finally
{
if (reader != null)
reader.Dispose();
}
}
}
@@ -165,7 +167,7 @@ namespace GameRes.Formats.Unity
{
var tex = new Texture2D();
tex.Load (input);
if (null == tex.m_Data || 0 == tex.m_Data.Length)
if (0 == tex.m_DataLength)
{
if (asset.Tree.Version == "2017.2.0f3")
input.ReadInt64();
@@ -182,6 +184,15 @@ namespace GameRes.Formats.Unity
};
}
}
else
{
entry = new AssetEntry {
Name = tex.m_Name,
Type = "image",
Offset = obj.Offset,
Size = obj.Size,
};
}
break;
}
case 83: // AudioClip