Update Addon Inspector for variant image node types (#1941)

Now prints texture information for `AtkNineGridNode` and `AtkClippingMaskNode`
This commit is contained in:
ItsBexy 2024-07-21 09:40:15 -06:00 committed by GitHub
parent 521cbf472e
commit 42c728ec6c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -189,6 +189,7 @@ internal unsafe class UiDebug
case NodeType.Image: Util.ShowStruct(*(AtkImageNode*)node, (ulong)node); break; case NodeType.Image: Util.ShowStruct(*(AtkImageNode*)node, (ulong)node); break;
case NodeType.Collision: Util.ShowStruct(*(AtkCollisionNode*)node, (ulong)node); break; case NodeType.Collision: Util.ShowStruct(*(AtkCollisionNode*)node, (ulong)node); break;
case NodeType.NineGrid: Util.ShowStruct(*(AtkNineGridNode*)node, (ulong)node); break; case NodeType.NineGrid: Util.ShowStruct(*(AtkNineGridNode*)node, (ulong)node); break;
case NodeType.ClippingMask: Util.ShowStruct(*(AtkClippingMaskNode*)node, (ulong)node); break;
case NodeType.Counter: Util.ShowStruct(*(AtkCounterNode*)node, (ulong)node); break; case NodeType.Counter: Util.ShowStruct(*(AtkCounterNode*)node, (ulong)node); break;
default: Util.ShowStruct(*node, (ulong)node); break; default: Util.ShowStruct(*node, (ulong)node); break;
} }
@ -233,48 +234,15 @@ internal unsafe class UiDebug
break; break;
case NodeType.Image: case NodeType.Image:
var imageNode = (AtkImageNode*)node; var imageNode = (AtkImageNode*)node;
if (imageNode->PartsList != null) PrintTextureInfo(imageNode->PartsList, imageNode->PartId);
{ break;
if (imageNode->PartId > imageNode->PartsList->PartCount) case NodeType.NineGrid:
{ var ngNode = (AtkNineGridNode*)node;
ImGui.Text("part id > part count?"); PrintTextureInfo(ngNode->PartsList, ngNode->PartId);
} break;
else case NodeType.ClippingMask:
{ var cmNode = (AtkClippingMaskNode*)node;
var textureInfo = imageNode->PartsList->Parts[imageNode->PartId].UldAsset; PrintTextureInfo(cmNode->PartsList, cmNode->PartId);
var texType = textureInfo->AtkTexture.TextureType;
ImGui.Text($"texture type: {texType} part_id={imageNode->PartId} part_id_count={imageNode->PartsList->PartCount}");
if (texType == TextureType.Resource)
{
var texFileNameStdString = &textureInfo->AtkTexture.Resource->TexFileResourceHandle->ResourceHandle.FileName;
var texString = texFileNameStdString->Length < 16
? MemoryHelper.ReadSeStringAsString(out _, (nint)texFileNameStdString->Buffer)
: MemoryHelper.ReadSeStringAsString(out _, (nint)texFileNameStdString->BufferPtr);
ImGui.Text($"texture path: {texString}");
var kernelTexture = textureInfo->AtkTexture.Resource->KernelTextureObject;
if (ImGui.TreeNode($"Texture##{(ulong)kernelTexture->D3D11ShaderResourceView:X}"))
{
ImGui.Image(new IntPtr(kernelTexture->D3D11ShaderResourceView), new Vector2(kernelTexture->Width, kernelTexture->Height));
ImGui.TreePop();
}
}
else if (texType == TextureType.KernelTexture)
{
if (ImGui.TreeNode($"Texture##{(ulong)textureInfo->AtkTexture.KernelTexture->D3D11ShaderResourceView:X}"))
{
ImGui.Image(new IntPtr(textureInfo->AtkTexture.KernelTexture->D3D11ShaderResourceView), new Vector2(textureInfo->AtkTexture.KernelTexture->Width, textureInfo->AtkTexture.KernelTexture->Height));
ImGui.TreePop();
}
}
}
}
else
{
ImGui.Text("no texture loaded");
}
break; break;
} }
@ -287,8 +255,64 @@ internal unsafe class UiDebug
if (isVisible && !popped) if (isVisible && !popped)
ImGui.PopStyleColor(); ImGui.PopStyleColor();
static void PrintTextureInfo(AtkUldPartsList* partsList, uint partId)
{
if (partsList != null)
{
if (partId > partsList->PartCount)
{
ImGui.Text("part id > part count?");
}
else
{
var textureInfo = partsList->Parts[partId].UldAsset;
var texType = textureInfo->AtkTexture.TextureType;
ImGui.Text(
$"texture type: {texType} part_id={partId} part_id_count={partsList->PartCount}");
if (texType == TextureType.Resource)
{
var texFileNameStdString =
&textureInfo->AtkTexture.Resource->TexFileResourceHandle->ResourceHandle.FileName;
var texString = texFileNameStdString->Length < 16
? MemoryHelper.ReadSeStringAsString(out _, (nint)texFileNameStdString->Buffer)
: MemoryHelper.ReadSeStringAsString(out _, (nint)texFileNameStdString->BufferPtr);
ImGui.Text($"texture path: {texString}");
var kernelTexture = textureInfo->AtkTexture.Resource->KernelTextureObject;
if (ImGui.TreeNode($"Texture##{(ulong)kernelTexture->D3D11ShaderResourceView:X}"))
{
ImGui.Image(
new IntPtr(kernelTexture->D3D11ShaderResourceView),
new Vector2(kernelTexture->Width, kernelTexture->Height));
ImGui.TreePop();
}
}
else if (texType == TextureType.KernelTexture)
{
if (ImGui.TreeNode(
$"Texture##{(ulong)textureInfo->AtkTexture.KernelTexture->D3D11ShaderResourceView:X}"))
{
ImGui.Image(
new IntPtr(textureInfo->AtkTexture.KernelTexture->D3D11ShaderResourceView),
new Vector2(
textureInfo->AtkTexture.KernelTexture->Width,
textureInfo->AtkTexture.KernelTexture->Height));
ImGui.TreePop();
}
}
}
}
else
{
ImGui.Text("no texture loaded");
}
}
} }
private void PrintComponentNode(AtkResNode* node, string treePrefix) private void PrintComponentNode(AtkResNode* node, string treePrefix)
{ {
var compNode = (AtkComponentNode*)node; var compNode = (AtkComponentNode*)node;