mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-07-14 02:54:16 -04:00
Add support for Texture2DArray
This commit is contained in:
@ -349,7 +349,7 @@ namespace AssetStudioGUI
|
||||
if (e.Control)
|
||||
{
|
||||
var need = false;
|
||||
if (lastSelectedItem?.Type == ClassIDType.Texture2D)
|
||||
if (lastSelectedItem?.Type == ClassIDType.Texture2D || lastSelectedItem?.Type == ClassIDType.Texture2DArrayImage)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
@ -810,8 +810,12 @@ namespace AssetStudioGUI
|
||||
switch (assetItem.Type)
|
||||
{
|
||||
case ClassIDType.Texture2D:
|
||||
case ClassIDType.Texture2DArrayImage:
|
||||
PreviewTexture2D(assetItem, assetItem.Asset as Texture2D);
|
||||
break;
|
||||
case ClassIDType.Texture2DArray:
|
||||
PreviewTexture2DArray(assetItem, assetItem.Asset as Texture2DArray);
|
||||
break;
|
||||
case ClassIDType.AudioClip:
|
||||
PreviewAudioClip(assetItem, assetItem.Asset as AudioClip);
|
||||
break;
|
||||
@ -870,6 +874,16 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
|
||||
private void PreviewTexture2DArray(AssetItem assetItem, Texture2DArray m_Texture2DArray)
|
||||
{
|
||||
assetItem.InfoText =
|
||||
$"Width: {m_Texture2DArray.m_Width}\n" +
|
||||
$"Height: {m_Texture2DArray.m_Height}\n" +
|
||||
$"Graphics Format: {m_Texture2DArray.m_Format}\n" +
|
||||
$"Texture Format: {m_Texture2DArray.m_Format.ToTextureFormat()}\n" +
|
||||
$"Texture count: {m_Texture2DArray.m_Depth}";
|
||||
}
|
||||
|
||||
private void PreviewTexture2D(AssetItem assetItem, Texture2D m_Texture2D)
|
||||
{
|
||||
var image = m_Texture2D.ConvertToImage(true);
|
||||
|
@ -38,6 +38,25 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
|
||||
public static bool ExportTexture2DArray(AssetItem item, string exportPath)
|
||||
{
|
||||
var m_Texture2DArray = (Texture2DArray)item.Asset;
|
||||
var count = 0;
|
||||
foreach(var texture in m_Texture2DArray.TextureList)
|
||||
{
|
||||
var fakeItem = new AssetItem(texture)
|
||||
{
|
||||
Text = texture.m_Name,
|
||||
Container = item.Container,
|
||||
};
|
||||
if (ExportTexture2D(fakeItem, exportPath))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count > 0;
|
||||
}
|
||||
|
||||
public static bool ExportAudioClip(AssetItem item, string exportPath)
|
||||
{
|
||||
var m_AudioClip = (AudioClip)item.Asset;
|
||||
@ -376,7 +395,10 @@ namespace AssetStudioGUI
|
||||
switch (item.Type)
|
||||
{
|
||||
case ClassIDType.Texture2D:
|
||||
case ClassIDType.Texture2DArrayImage:
|
||||
return ExportTexture2D(item, exportPath);
|
||||
case ClassIDType.Texture2DArray:
|
||||
return ExportTexture2DArray(item, exportPath);
|
||||
case ClassIDType.AudioClip:
|
||||
return ExportAudioClip(item, exportPath);
|
||||
case ClassIDType.Shader:
|
||||
|
@ -179,6 +179,7 @@ namespace AssetStudioGUI
|
||||
var objectCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
|
||||
var objectAssetItemDic = new Dictionary<Object, AssetItem>(objectCount);
|
||||
var containers = new List<(PPtr<Object>, string)>();
|
||||
var tex2dArrayAssetList = new List<AssetItem>();
|
||||
l2dResourceContainers.Clear();
|
||||
var i = 0;
|
||||
Progress.Reset();
|
||||
@ -206,6 +207,13 @@ namespace AssetStudioGUI
|
||||
assetItem.Text = m_Texture2D.m_Name;
|
||||
exportable = true;
|
||||
break;
|
||||
case Texture2DArray m_Texture2DArray:
|
||||
if (!string.IsNullOrEmpty(m_Texture2DArray.m_StreamData?.path))
|
||||
assetItem.FullSize = asset.byteSize + m_Texture2DArray.m_StreamData.size;
|
||||
assetItem.Text = m_Texture2DArray.m_Name;
|
||||
tex2dArrayAssetList.Add(assetItem);
|
||||
exportable = true;
|
||||
break;
|
||||
case AudioClip m_AudioClip:
|
||||
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
||||
assetItem.FullSize = asset.byteSize + m_AudioClip.m_Size;
|
||||
@ -310,11 +318,28 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (var tex2dAssetItem in tex2dArrayAssetList)
|
||||
{
|
||||
var m_Texture2DArray = (Texture2DArray)tex2dAssetItem.Asset;
|
||||
for (var layer = 0; layer < m_Texture2DArray.m_Depth; layer++)
|
||||
{
|
||||
var fakeObj = new Texture2D(m_Texture2DArray, layer);
|
||||
m_Texture2DArray.TextureList.Add(fakeObj);
|
||||
|
||||
var fakeItem = new AssetItem(fakeObj)
|
||||
{
|
||||
Text = fakeObj.m_Name,
|
||||
Container = tex2dAssetItem.Container
|
||||
};
|
||||
exportableAssets.Add(fakeItem);
|
||||
}
|
||||
}
|
||||
foreach (var tmp in exportableAssets)
|
||||
{
|
||||
tmp.SetSubItems();
|
||||
}
|
||||
containers.Clear();
|
||||
tex2dArrayAssetList.Clear();
|
||||
|
||||
visibleAssets = exportableAssets;
|
||||
|
||||
|
Reference in New Issue
Block a user