mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-14 12:44:19 +01:00
Autoformat and remove nagging.
This commit is contained in:
parent
0758739666
commit
e73b3e85bd
2 changed files with 44 additions and 43 deletions
|
|
@ -14,8 +14,8 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
/// <remarks> This array must be sorted by CreationOrder ascending. </remarks>
|
/// <remarks> This array must be sorted by CreationOrder ascending. </remarks>
|
||||||
private static readonly ImmutableArray<ForcedTextureConfig> ForcedTextureConfigs =
|
private static readonly ImmutableArray<ForcedTextureConfig> ForcedTextureConfigs =
|
||||||
[
|
[
|
||||||
new(9, TextureFormat.R16G16B16A16_FLOAT, "Opaque Diffuse GBuffer"),
|
new ForcedTextureConfig(9, TextureFormat.R16G16B16A16_FLOAT, "Opaque Diffuse GBuffer"),
|
||||||
new(10, TextureFormat.R16G16B16A16_FLOAT, "Semitransparent Diffuse GBuffer"),
|
new ForcedTextureConfig(10, TextureFormat.R16G16B16A16_FLOAT, "Semitransparent Diffuse GBuffer"),
|
||||||
];
|
];
|
||||||
|
|
||||||
private static readonly IComparer<ForcedTextureConfig> ForcedTextureConfigComparer
|
private static readonly IComparer<ForcedTextureConfig> ForcedTextureConfigComparer
|
||||||
|
|
@ -23,16 +23,17 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
|
|
||||||
private readonly Configuration _config;
|
private readonly Configuration _config;
|
||||||
|
|
||||||
private readonly ThreadLocal<TextureIndices> _textureIndices = new(() => new(-1, -1));
|
private readonly ThreadLocal<TextureIndices> _textureIndices = new(() => new TextureIndices(-1, -1));
|
||||||
|
|
||||||
private readonly ThreadLocal<Dictionary<nint, (int TextureIndex, uint TextureFormat)>?> _textures = new(() => null);
|
private readonly ThreadLocal<Dictionary<nint, (int TextureIndex, uint TextureFormat)>?> _textures = new(() => null);
|
||||||
|
|
||||||
public TextureReportRecord[]? TextureReport { get; private set; }
|
public TextureReportRecord[]? TextureReport { get; private set; }
|
||||||
|
|
||||||
[Signature(Sigs.RenderTargetManagerInitialize, DetourName = nameof(RenderTargetManagerInitializeDetour))]
|
[Signature(Sigs.RenderTargetManagerInitialize, DetourName = nameof(RenderTargetManagerInitializeDetour))]
|
||||||
private Hook<RenderTargetManagerInitializeFunc> _renderTargetManagerInitialize = null!;
|
private readonly Hook<RenderTargetManagerInitializeFunc> _renderTargetManagerInitialize = null!;
|
||||||
|
|
||||||
[Signature(Sigs.DeviceCreateTexture2D, DetourName = nameof(CreateTexture2DDetour))]
|
[Signature(Sigs.DeviceCreateTexture2D, DetourName = nameof(CreateTexture2DDetour))]
|
||||||
private Hook<CreateTexture2DFunc> _createTexture2D = null!;
|
private readonly Hook<CreateTexture2DFunc> _createTexture2D = null!;
|
||||||
|
|
||||||
public RenderTargetHdrEnabler(IGameInteropProvider interop, Configuration config)
|
public RenderTargetHdrEnabler(IGameInteropProvider interop, Configuration config)
|
||||||
{
|
{
|
||||||
|
|
@ -47,7 +48,7 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
|
|
||||||
public static ForcedTextureConfig? GetForcedTextureConfig(int creationOrder)
|
public static ForcedTextureConfig? GetForcedTextureConfig(int creationOrder)
|
||||||
{
|
{
|
||||||
var i = ForcedTextureConfigs.BinarySearch(new(creationOrder, 0, string.Empty), ForcedTextureConfigComparer);
|
var i = ForcedTextureConfigs.BinarySearch(new ForcedTextureConfig(creationOrder, 0, string.Empty), ForcedTextureConfigComparer);
|
||||||
return i >= 0 ? ForcedTextureConfigs[i] : null;
|
return i >= 0 ? ForcedTextureConfigs[i] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -59,10 +60,6 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
|
|
||||||
private void Dispose(bool _)
|
private void Dispose(bool _)
|
||||||
{
|
{
|
||||||
_renderTargetManagerInitialize.Disable();
|
|
||||||
if (_createTexture2D.IsEnabled)
|
|
||||||
_createTexture2D.Disable();
|
|
||||||
|
|
||||||
_createTexture2D.Dispose();
|
_createTexture2D.Dispose();
|
||||||
_renderTargetManagerInitialize.Dispose();
|
_renderTargetManagerInitialize.Dispose();
|
||||||
}
|
}
|
||||||
|
|
@ -70,8 +67,8 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
private nint RenderTargetManagerInitializeDetour(RenderTargetManager* @this)
|
private nint RenderTargetManagerInitializeDetour(RenderTargetManager* @this)
|
||||||
{
|
{
|
||||||
_createTexture2D.Enable();
|
_createTexture2D.Enable();
|
||||||
_textureIndices.Value = new(0, 0);
|
_textureIndices.Value = new TextureIndices(0, 0);
|
||||||
_textures.Value = _config.DebugMode ? [] : null;
|
_textures.Value = _config.DebugMode ? [] : null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return _renderTargetManagerInitialize.Original(@this);
|
return _renderTargetManagerInitialize.Original(@this);
|
||||||
|
|
@ -80,10 +77,11 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
{
|
{
|
||||||
if (_textures.Value != null)
|
if (_textures.Value != null)
|
||||||
{
|
{
|
||||||
TextureReport = CreateTextureReport(@this, _textures.Value);
|
TextureReport = CreateTextureReport(@this, _textures.Value);
|
||||||
_textures.Value = null;
|
_textures.Value = null;
|
||||||
}
|
}
|
||||||
_textureIndices.Value = new(-1, -1);
|
|
||||||
|
_textureIndices.Value = new TextureIndices(-1, -1);
|
||||||
_createTexture2D.Disable();
|
_createTexture2D.Disable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -92,9 +90,10 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
Device* @this, int* size, byte mipLevel, uint textureFormat, uint flags, uint unk)
|
Device* @this, int* size, byte mipLevel, uint textureFormat, uint flags, uint unk)
|
||||||
{
|
{
|
||||||
var originalTextureFormat = textureFormat;
|
var originalTextureFormat = textureFormat;
|
||||||
var indices = _textureIndices.IsValueCreated ? _textureIndices.Value : new(-1, -1);
|
var indices = _textureIndices.IsValueCreated ? _textureIndices.Value : new TextureIndices(-1, -1);
|
||||||
if (indices.ConfigIndex >= 0 && indices.ConfigIndex < ForcedTextureConfigs.Length &&
|
if (indices.ConfigIndex >= 0
|
||||||
ForcedTextureConfigs[indices.ConfigIndex].CreationOrder == indices.CreationOrder)
|
&& indices.ConfigIndex < ForcedTextureConfigs.Length
|
||||||
|
&& ForcedTextureConfigs[indices.ConfigIndex].CreationOrder == indices.CreationOrder)
|
||||||
{
|
{
|
||||||
var config = ForcedTextureConfigs[indices.ConfigIndex++];
|
var config = ForcedTextureConfigs[indices.ConfigIndex++];
|
||||||
textureFormat = (uint)config.ForcedTextureFormat;
|
textureFormat = (uint)config.ForcedTextureFormat;
|
||||||
|
|
@ -112,15 +111,17 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TextureReportRecord[] CreateTextureReport(RenderTargetManager* renderTargetManager, Dictionary<nint, (int TextureIndex, uint TextureFormat)> textures)
|
private static TextureReportRecord[] CreateTextureReport(RenderTargetManager* renderTargetManager,
|
||||||
|
Dictionary<nint, (int TextureIndex, uint TextureFormat)> textures)
|
||||||
{
|
{
|
||||||
var rtmTextures = new Span<nint>(renderTargetManager, sizeof(RenderTargetManager) / sizeof(nint));
|
var rtmTextures = new Span<nint>(renderTargetManager, sizeof(RenderTargetManager) / sizeof(nint));
|
||||||
var report = new List<TextureReportRecord>();
|
var report = new List<TextureReportRecord>();
|
||||||
for (var i = 0; i < rtmTextures.Length; ++i)
|
for (var i = 0; i < rtmTextures.Length; ++i)
|
||||||
{
|
{
|
||||||
if (textures.TryGetValue(rtmTextures[i], out var texture))
|
if (textures.TryGetValue(rtmTextures[i], out var texture))
|
||||||
report.Add(new(i * sizeof(nint), texture.TextureIndex, (TextureFormat)texture.TextureFormat));
|
report.Add(new TextureReportRecord(i * sizeof(nint), texture.TextureIndex, (TextureFormat)texture.TextureFormat));
|
||||||
}
|
}
|
||||||
|
|
||||||
return report.ToArray();
|
return report.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,6 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
||||||
|
|
||||||
private readonly ResourceHandleDestructor _resourceHandleDestructor;
|
private readonly ResourceHandleDestructor _resourceHandleDestructor;
|
||||||
private readonly CommunicatorService _communicator;
|
private readonly CommunicatorService _communicator;
|
||||||
private readonly CharacterUtility _utility;
|
|
||||||
private readonly ModelRenderer _modelRenderer;
|
|
||||||
private readonly HumanSetupScalingHook _humanSetupScalingHook;
|
private readonly HumanSetupScalingHook _humanSetupScalingHook;
|
||||||
|
|
||||||
private readonly ModdedShaderPackageState _skinState;
|
private readonly ModdedShaderPackageState _skinState;
|
||||||
|
|
@ -111,31 +109,31 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
||||||
CommunicatorService communicator, HookManager hooks, CharacterBaseVTables vTables, HumanSetupScalingHook humanSetupScalingHook)
|
CommunicatorService communicator, HookManager hooks, CharacterBaseVTables vTables, HumanSetupScalingHook humanSetupScalingHook)
|
||||||
{
|
{
|
||||||
_resourceHandleDestructor = resourceHandleDestructor;
|
_resourceHandleDestructor = resourceHandleDestructor;
|
||||||
_utility = utility;
|
var utility1 = utility;
|
||||||
_modelRenderer = modelRenderer;
|
var modelRenderer1 = modelRenderer;
|
||||||
_communicator = communicator;
|
_communicator = communicator;
|
||||||
_humanSetupScalingHook = humanSetupScalingHook;
|
_humanSetupScalingHook = humanSetupScalingHook;
|
||||||
|
|
||||||
_skinState = new ModdedShaderPackageState(
|
_skinState = new ModdedShaderPackageState(
|
||||||
() => (ShaderPackageResourceHandle**)&_utility.Address->SkinShpkResource,
|
() => (ShaderPackageResourceHandle**)&utility1.Address->SkinShpkResource,
|
||||||
() => (ShaderPackageResourceHandle*)_utility.DefaultSkinShpkResource);
|
() => (ShaderPackageResourceHandle*)utility1.DefaultSkinShpkResource);
|
||||||
_characterStockingsState = new ModdedShaderPackageState(
|
_characterStockingsState = new ModdedShaderPackageState(
|
||||||
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterStockingsShpkResource,
|
() => (ShaderPackageResourceHandle**)&utility1.Address->CharacterStockingsShpkResource,
|
||||||
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterStockingsShpkResource);
|
() => (ShaderPackageResourceHandle*)utility1.DefaultCharacterStockingsShpkResource);
|
||||||
_characterLegacyState = new ModdedShaderPackageState(
|
_characterLegacyState = new ModdedShaderPackageState(
|
||||||
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterLegacyShpkResource,
|
() => (ShaderPackageResourceHandle**)&utility1.Address->CharacterLegacyShpkResource,
|
||||||
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterLegacyShpkResource);
|
() => (ShaderPackageResourceHandle*)utility1.DefaultCharacterLegacyShpkResource);
|
||||||
_irisState = new ModdedShaderPackageState(() => _modelRenderer.IrisShaderPackage, () => _modelRenderer.DefaultIrisShaderPackage);
|
_irisState = new ModdedShaderPackageState(() => modelRenderer1.IrisShaderPackage, () => modelRenderer1.DefaultIrisShaderPackage);
|
||||||
_characterGlassState = new ModdedShaderPackageState(() => _modelRenderer.CharacterGlassShaderPackage,
|
_characterGlassState = new ModdedShaderPackageState(() => modelRenderer1.CharacterGlassShaderPackage,
|
||||||
() => _modelRenderer.DefaultCharacterGlassShaderPackage);
|
() => modelRenderer1.DefaultCharacterGlassShaderPackage);
|
||||||
_characterTransparencyState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTransparencyShaderPackage,
|
_characterTransparencyState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTransparencyShaderPackage,
|
||||||
() => _modelRenderer.DefaultCharacterTransparencyShaderPackage);
|
() => modelRenderer1.DefaultCharacterTransparencyShaderPackage);
|
||||||
_characterTattooState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTattooShaderPackage,
|
_characterTattooState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTattooShaderPackage,
|
||||||
() => _modelRenderer.DefaultCharacterTattooShaderPackage);
|
() => modelRenderer1.DefaultCharacterTattooShaderPackage);
|
||||||
_characterOcclusionState = new ModdedShaderPackageState(() => _modelRenderer.CharacterOcclusionShaderPackage,
|
_characterOcclusionState = new ModdedShaderPackageState(() => modelRenderer1.CharacterOcclusionShaderPackage,
|
||||||
() => _modelRenderer.DefaultCharacterOcclusionShaderPackage);
|
() => modelRenderer1.DefaultCharacterOcclusionShaderPackage);
|
||||||
_hairMaskState =
|
_hairMaskState =
|
||||||
new ModdedShaderPackageState(() => _modelRenderer.HairMaskShaderPackage, () => _modelRenderer.DefaultHairMaskShaderPackage);
|
new ModdedShaderPackageState(() => modelRenderer1.HairMaskShaderPackage, () => modelRenderer1.DefaultHairMaskShaderPackage);
|
||||||
|
|
||||||
_humanSetupScalingHook.SetupReplacements += SetupHssReplacements;
|
_humanSetupScalingHook.SetupReplacements += SetupHssReplacements;
|
||||||
_humanOnRenderMaterialHook = hooks.CreateHook<CharacterBaseOnRenderMaterialDelegate>("Human.OnRenderMaterial", vTables.HumanVTable[64],
|
_humanOnRenderMaterialHook = hooks.CreateHook<CharacterBaseOnRenderMaterialDelegate>("Human.OnRenderMaterial", vTables.HumanVTable[64],
|
||||||
|
|
@ -463,6 +461,7 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
||||||
return mtrlResource;
|
return mtrlResource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
||||||
private static int GetDataSetExpectedSize(uint dataFlags)
|
private static int GetDataSetExpectedSize(uint dataFlags)
|
||||||
=> (dataFlags & 4) != 0
|
=> (dataFlags & 4) != 0
|
||||||
? ColorTable.Size + ((dataFlags & 8) != 0 ? ColorDyeTable.Size : 0)
|
? ColorTable.Size + ((dataFlags & 8) != 0 ? ColorDyeTable.Size : 0)
|
||||||
|
|
@ -471,7 +470,8 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
||||||
private Texture* PrepareColorTableDetour(MaterialResourceHandle* thisPtr, byte stain0Id, byte stain1Id)
|
private Texture* PrepareColorTableDetour(MaterialResourceHandle* thisPtr, byte stain0Id, byte stain1Id)
|
||||||
{
|
{
|
||||||
if (thisPtr->DataSetSize < GetDataSetExpectedSize(thisPtr->DataFlags))
|
if (thisPtr->DataSetSize < GetDataSetExpectedSize(thisPtr->DataFlags))
|
||||||
Penumbra.Log.Warning($"Material at {thisPtr->FileName} has data set of size {thisPtr->DataSetSize} bytes, but should have at least {GetDataSetExpectedSize(thisPtr->DataFlags)} bytes. This may cause crashes due to access violations.");
|
Penumbra.Log.Warning(
|
||||||
|
$"Material at {thisPtr->FileName} has data set of size {thisPtr->DataSetSize} bytes, but should have at least {GetDataSetExpectedSize(thisPtr->DataFlags)} bytes. This may cause crashes due to access violations.");
|
||||||
|
|
||||||
// If we don't have any on-screen instances of modded characterlegacy.shpk, we don't need the slow path at all.
|
// If we don't have any on-screen instances of modded characterlegacy.shpk, we don't need the slow path at all.
|
||||||
if (!Enabled || GetTotalMaterialCountForColorTable() == 0)
|
if (!Enabled || GetTotalMaterialCountForColorTable() == 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue