mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 10:17:22 +01:00
Some cleanup and add option to disable skin material attribute scanning.
This commit is contained in:
parent
83a36ed4cb
commit
23257f94a4
4 changed files with 23 additions and 18 deletions
|
|
@ -2,5 +2,6 @@ namespace Penumbra;
|
|||
|
||||
public class DebugConfiguration
|
||||
{
|
||||
public static bool WriteImcBytesToLog = false;
|
||||
public static bool WriteImcBytesToLog = false;
|
||||
public static bool UseSkinMaterialProcessing = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ public sealed unsafe class ResolvePathHooksBase : IDisposable
|
|||
private nint ResolveSkinMtrl(nint drawObject, nint pathBuffer, nint pathBufferSize, uint slotIndex)
|
||||
{
|
||||
var finalPathBuffer = _resolveSkinMtrlPathHook.Original(drawObject, pathBuffer, pathBufferSize, slotIndex);
|
||||
if (finalPathBuffer != 0 && finalPathBuffer == pathBuffer)
|
||||
if (DebugConfiguration.UseSkinMaterialProcessing && finalPathBuffer != nint.Zero && finalPathBuffer == pathBuffer)
|
||||
SkinMtrlPathEarlyProcessing.Process(new Span<byte>((void*)pathBuffer, (int)pathBufferSize), (CharacterBase*)drawObject, slotIndex);
|
||||
|
||||
return ResolvePath(drawObject, finalPathBuffer);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ public static unsafe class SkinMtrlPathEarlyProcessing
|
|||
{
|
||||
public static void Process(Span<byte> path, CharacterBase* character, uint slotIndex)
|
||||
{
|
||||
var end = path.IndexOf(".mtrl\0"u8);
|
||||
var end = path.IndexOf(MaterialExtension());
|
||||
if (end < 0)
|
||||
return;
|
||||
|
||||
|
|
@ -23,16 +23,22 @@ public static unsafe class SkinMtrlPathEarlyProcessing
|
|||
if (skinSuffix.IsEmpty || skinSuffix.Length > path.Length - suffixPos - 7)
|
||||
return;
|
||||
|
||||
skinSuffix.CopyTo(path[(suffixPos + 1)..]);
|
||||
".mtrl\0"u8.CopyTo(path[(suffixPos + 1 + skinSuffix.Length)..]);
|
||||
++suffixPos;
|
||||
skinSuffix.CopyTo(path[suffixPos..]);
|
||||
suffixPos += skinSuffix.Length;
|
||||
MaterialExtension().CopyTo(path[suffixPos..]);
|
||||
return;
|
||||
|
||||
static ReadOnlySpan<byte> MaterialExtension()
|
||||
=> ".mtrl\0"u8;
|
||||
}
|
||||
|
||||
private static ModelResourceHandle* GetModelResourceHandle(CharacterBase* character, uint slotIndex)
|
||||
{
|
||||
if (character == null)
|
||||
if (character is null)
|
||||
return null;
|
||||
|
||||
if (character->TempSlotData != null)
|
||||
if (character->TempSlotData is not null)
|
||||
{
|
||||
// TODO ClientStructs-ify
|
||||
var handle = *(ModelResourceHandle**)((nint)character->TempSlotData + 0xE0 * slotIndex + 0x8);
|
||||
|
|
@ -41,10 +47,7 @@ public static unsafe class SkinMtrlPathEarlyProcessing
|
|||
}
|
||||
|
||||
var model = character->Models[slotIndex];
|
||||
if (model == null)
|
||||
return null;
|
||||
|
||||
return model->ModelResourceHandle;
|
||||
return model is null ? null : model->ModelResourceHandle;
|
||||
}
|
||||
|
||||
private static ReadOnlySpan<byte> GetSkinSuffix(ModelResourceHandle* handle)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,16 @@
|
|||
using OtterGui.Text;
|
||||
|
||||
namespace Penumbra.UI.Tabs.Debug;
|
||||
|
||||
using OtterGui.Text;
|
||||
|
||||
namespace Penumbra.UI.Tabs.Debug;
|
||||
|
||||
public static class DebugConfigurationDrawer
|
||||
{
|
||||
public static void Draw()
|
||||
{
|
||||
using var id = ImUtf8.CollapsingHeaderId("Debug Logging Options"u8);
|
||||
using var id = ImUtf8.CollapsingHeaderId("Debugging Options"u8);
|
||||
if (!id)
|
||||
return;
|
||||
|
||||
ImUtf8.Checkbox("Log IMC File Replacements"u8, ref DebugConfiguration.WriteImcBytesToLog);
|
||||
ImUtf8.Checkbox("Log IMC File Replacements"u8, ref DebugConfiguration.WriteImcBytesToLog);
|
||||
ImUtf8.Checkbox("Scan for Skin Material Attributes"u8, ref DebugConfiguration.UseSkinMaterialProcessing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue