mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-13 12:14:17 +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>
|
||||
private static readonly ImmutableArray<ForcedTextureConfig> ForcedTextureConfigs =
|
||||
[
|
||||
new(9, TextureFormat.R16G16B16A16_FLOAT, "Opaque Diffuse GBuffer"),
|
||||
new(10, TextureFormat.R16G16B16A16_FLOAT, "Semitransparent Diffuse GBuffer"),
|
||||
new ForcedTextureConfig(9, TextureFormat.R16G16B16A16_FLOAT, "Opaque Diffuse GBuffer"),
|
||||
new ForcedTextureConfig(10, TextureFormat.R16G16B16A16_FLOAT, "Semitransparent Diffuse GBuffer"),
|
||||
];
|
||||
|
||||
private static readonly IComparer<ForcedTextureConfig> ForcedTextureConfigComparer
|
||||
|
|
@ -23,16 +23,17 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
|
||||
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);
|
||||
|
||||
public TextureReportRecord[]? TextureReport { get; private set; }
|
||||
|
||||
[Signature(Sigs.RenderTargetManagerInitialize, DetourName = nameof(RenderTargetManagerInitializeDetour))]
|
||||
private Hook<RenderTargetManagerInitializeFunc> _renderTargetManagerInitialize = null!;
|
||||
private readonly Hook<RenderTargetManagerInitializeFunc> _renderTargetManagerInitialize = null!;
|
||||
|
||||
[Signature(Sigs.DeviceCreateTexture2D, DetourName = nameof(CreateTexture2DDetour))]
|
||||
private Hook<CreateTexture2DFunc> _createTexture2D = null!;
|
||||
private readonly Hook<CreateTexture2DFunc> _createTexture2D = null!;
|
||||
|
||||
public RenderTargetHdrEnabler(IGameInteropProvider interop, Configuration config)
|
||||
{
|
||||
|
|
@ -47,7 +48,7 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -59,10 +60,6 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
|
||||
private void Dispose(bool _)
|
||||
{
|
||||
_renderTargetManagerInitialize.Disable();
|
||||
if (_createTexture2D.IsEnabled)
|
||||
_createTexture2D.Disable();
|
||||
|
||||
_createTexture2D.Dispose();
|
||||
_renderTargetManagerInitialize.Dispose();
|
||||
}
|
||||
|
|
@ -70,8 +67,8 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
private nint RenderTargetManagerInitializeDetour(RenderTargetManager* @this)
|
||||
{
|
||||
_createTexture2D.Enable();
|
||||
_textureIndices.Value = new(0, 0);
|
||||
_textures.Value = _config.DebugMode ? [] : null;
|
||||
_textureIndices.Value = new TextureIndices(0, 0);
|
||||
_textures.Value = _config.DebugMode ? [] : null;
|
||||
try
|
||||
{
|
||||
return _renderTargetManagerInitialize.Original(@this);
|
||||
|
|
@ -80,10 +77,11 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
{
|
||||
if (_textures.Value != null)
|
||||
{
|
||||
TextureReport = CreateTextureReport(@this, _textures.Value);
|
||||
TextureReport = CreateTextureReport(@this, _textures.Value);
|
||||
_textures.Value = null;
|
||||
}
|
||||
_textureIndices.Value = new(-1, -1);
|
||||
|
||||
_textureIndices.Value = new TextureIndices(-1, -1);
|
||||
_createTexture2D.Disable();
|
||||
}
|
||||
}
|
||||
|
|
@ -92,9 +90,10 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
Device* @this, int* size, byte mipLevel, uint textureFormat, uint flags, uint unk)
|
||||
{
|
||||
var originalTextureFormat = textureFormat;
|
||||
var indices = _textureIndices.IsValueCreated ? _textureIndices.Value : new(-1, -1);
|
||||
if (indices.ConfigIndex >= 0 && indices.ConfigIndex < ForcedTextureConfigs.Length &&
|
||||
ForcedTextureConfigs[indices.ConfigIndex].CreationOrder == indices.CreationOrder)
|
||||
var indices = _textureIndices.IsValueCreated ? _textureIndices.Value : new TextureIndices(-1, -1);
|
||||
if (indices.ConfigIndex >= 0
|
||||
&& indices.ConfigIndex < ForcedTextureConfigs.Length
|
||||
&& ForcedTextureConfigs[indices.ConfigIndex].CreationOrder == indices.CreationOrder)
|
||||
{
|
||||
var config = ForcedTextureConfigs[indices.ConfigIndex++];
|
||||
textureFormat = (uint)config.ForcedTextureFormat;
|
||||
|
|
@ -112,15 +111,17 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
|
|||
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 report = new List<TextureReportRecord>();
|
||||
var report = new List<TextureReportRecord>();
|
||||
for (var i = 0; i < rtmTextures.Length; ++i)
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,8 +64,6 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
|||
|
||||
private readonly ResourceHandleDestructor _resourceHandleDestructor;
|
||||
private readonly CommunicatorService _communicator;
|
||||
private readonly CharacterUtility _utility;
|
||||
private readonly ModelRenderer _modelRenderer;
|
||||
private readonly HumanSetupScalingHook _humanSetupScalingHook;
|
||||
|
||||
private readonly ModdedShaderPackageState _skinState;
|
||||
|
|
@ -111,31 +109,31 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
|||
CommunicatorService communicator, HookManager hooks, CharacterBaseVTables vTables, HumanSetupScalingHook humanSetupScalingHook)
|
||||
{
|
||||
_resourceHandleDestructor = resourceHandleDestructor;
|
||||
_utility = utility;
|
||||
_modelRenderer = modelRenderer;
|
||||
_communicator = communicator;
|
||||
_humanSetupScalingHook = humanSetupScalingHook;
|
||||
var utility1 = utility;
|
||||
var modelRenderer1 = modelRenderer;
|
||||
_communicator = communicator;
|
||||
_humanSetupScalingHook = humanSetupScalingHook;
|
||||
|
||||
_skinState = new ModdedShaderPackageState(
|
||||
() => (ShaderPackageResourceHandle**)&_utility.Address->SkinShpkResource,
|
||||
() => (ShaderPackageResourceHandle*)_utility.DefaultSkinShpkResource);
|
||||
() => (ShaderPackageResourceHandle**)&utility1.Address->SkinShpkResource,
|
||||
() => (ShaderPackageResourceHandle*)utility1.DefaultSkinShpkResource);
|
||||
_characterStockingsState = new ModdedShaderPackageState(
|
||||
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterStockingsShpkResource,
|
||||
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterStockingsShpkResource);
|
||||
() => (ShaderPackageResourceHandle**)&utility1.Address->CharacterStockingsShpkResource,
|
||||
() => (ShaderPackageResourceHandle*)utility1.DefaultCharacterStockingsShpkResource);
|
||||
_characterLegacyState = new ModdedShaderPackageState(
|
||||
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterLegacyShpkResource,
|
||||
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterLegacyShpkResource);
|
||||
_irisState = new ModdedShaderPackageState(() => _modelRenderer.IrisShaderPackage, () => _modelRenderer.DefaultIrisShaderPackage);
|
||||
_characterGlassState = new ModdedShaderPackageState(() => _modelRenderer.CharacterGlassShaderPackage,
|
||||
() => _modelRenderer.DefaultCharacterGlassShaderPackage);
|
||||
_characterTransparencyState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTransparencyShaderPackage,
|
||||
() => _modelRenderer.DefaultCharacterTransparencyShaderPackage);
|
||||
_characterTattooState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTattooShaderPackage,
|
||||
() => _modelRenderer.DefaultCharacterTattooShaderPackage);
|
||||
_characterOcclusionState = new ModdedShaderPackageState(() => _modelRenderer.CharacterOcclusionShaderPackage,
|
||||
() => _modelRenderer.DefaultCharacterOcclusionShaderPackage);
|
||||
() => (ShaderPackageResourceHandle**)&utility1.Address->CharacterLegacyShpkResource,
|
||||
() => (ShaderPackageResourceHandle*)utility1.DefaultCharacterLegacyShpkResource);
|
||||
_irisState = new ModdedShaderPackageState(() => modelRenderer1.IrisShaderPackage, () => modelRenderer1.DefaultIrisShaderPackage);
|
||||
_characterGlassState = new ModdedShaderPackageState(() => modelRenderer1.CharacterGlassShaderPackage,
|
||||
() => modelRenderer1.DefaultCharacterGlassShaderPackage);
|
||||
_characterTransparencyState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTransparencyShaderPackage,
|
||||
() => modelRenderer1.DefaultCharacterTransparencyShaderPackage);
|
||||
_characterTattooState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTattooShaderPackage,
|
||||
() => modelRenderer1.DefaultCharacterTattooShaderPackage);
|
||||
_characterOcclusionState = new ModdedShaderPackageState(() => modelRenderer1.CharacterOcclusionShaderPackage,
|
||||
() => modelRenderer1.DefaultCharacterOcclusionShaderPackage);
|
||||
_hairMaskState =
|
||||
new ModdedShaderPackageState(() => _modelRenderer.HairMaskShaderPackage, () => _modelRenderer.DefaultHairMaskShaderPackage);
|
||||
new ModdedShaderPackageState(() => modelRenderer1.HairMaskShaderPackage, () => modelRenderer1.DefaultHairMaskShaderPackage);
|
||||
|
||||
_humanSetupScalingHook.SetupReplacements += SetupHssReplacements;
|
||||
_humanOnRenderMaterialHook = hooks.CreateHook<CharacterBaseOnRenderMaterialDelegate>("Human.OnRenderMaterial", vTables.HumanVTable[64],
|
||||
|
|
@ -463,6 +461,7 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
|
|||
return mtrlResource;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
||||
private static int GetDataSetExpectedSize(uint dataFlags)
|
||||
=> (dataFlags & 4) != 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)
|
||||
{
|
||||
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 (!Enabled || GetTotalMaterialCountForColorTable() == 0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue