Add Texture2DArray loading via typetree

This commit is contained in:
VaDiM 2024-03-05 23:42:23 +03:00
parent bc9380b8be
commit 045f6c0ff4
2 changed files with 31 additions and 10 deletions

View File

@ -572,7 +572,9 @@ namespace AssetStudio
: new Texture2D(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)); : new Texture2D(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader));
break; break;
case ClassIDType.Texture2DArray: case ClassIDType.Texture2DArray:
obj = new Texture2DArray(objectReader); obj = objectReader.serializedType?.m_Type == null
? new Texture2DArray(objectReader)
: new Texture2DArray(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader));
break; break;
case ClassIDType.Transform: case ClassIDType.Transform:
obj = new Transform(objectReader); obj = new Transform(objectReader);

View File

@ -1,4 +1,6 @@
using System.Collections.Generic; using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
namespace AssetStudio namespace AssetStudio
{ {
@ -16,6 +18,8 @@ namespace AssetStudio
public StreamingInfo m_StreamData; public StreamingInfo m_StreamData;
public List<Texture2D> TextureList; public List<Texture2D> TextureList;
public Texture2DArray() { }
public Texture2DArray(ObjectReader reader) : base(reader) public Texture2DArray(ObjectReader reader) : base(reader)
{ {
m_ColorSpace = reader.ReadInt32(); m_ColorSpace = reader.ReadInt32();
@ -39,14 +43,29 @@ namespace AssetStudio
m_StreamData = new StreamingInfo(reader); m_StreamData = new StreamingInfo(reader);
} }
if (!string.IsNullOrEmpty(m_StreamData?.path)) image_data = !string.IsNullOrEmpty(m_StreamData?.path)
{ ? new ResourceReader(m_StreamData.path, assetsFile, m_StreamData.offset, (int)m_StreamData.size)
image_data = new ResourceReader(m_StreamData.path, assetsFile, m_StreamData.offset, (int)m_StreamData.size); : new ResourceReader(reader, reader.BaseStream.Position, image_data_size);
}
else TextureList = new List<Texture2D>();
{ }
image_data = new ResourceReader(reader, reader.BaseStream.Position, image_data_size);
} public Texture2DArray(ObjectReader reader, IDictionary typeDict) : base(reader)
{
var parsedTex2dArray = JsonConvert.DeserializeObject<Texture2DArray>(JsonConvert.SerializeObject(typeDict));
m_Width = parsedTex2dArray.m_Width;
m_Height = parsedTex2dArray.m_Height;
m_Depth = parsedTex2dArray.m_Depth;
m_Format = parsedTex2dArray.m_Format;
m_MipCount = parsedTex2dArray.m_MipCount;
m_DataSize = parsedTex2dArray.m_DataSize;
m_TextureSettings = parsedTex2dArray.m_TextureSettings;
m_StreamData = parsedTex2dArray.m_StreamData;
image_data = !string.IsNullOrEmpty(m_StreamData?.path)
? new ResourceReader(m_StreamData.path, assetsFile, m_StreamData.offset, m_StreamData.size)
: new ResourceReader(reader, parsedTex2dArray.image_data.Offset, parsedTex2dArray.image_data.Size);
typeDict.Clear();
TextureList = new List<Texture2D>(); TextureList = new List<Texture2D>();
} }