7
7
using FFXIVClientStructs . FFXIV . Client . Graphics . Render ;
8
8
using OtterGui . Services ;
9
9
using Penumbra . GameData ;
10
+ using Penumbra . Interop . Hooks . ResourceLoading ;
10
11
using Penumbra . Services ;
11
12
12
13
namespace Penumbra . Interop . Hooks . PostProcessing ;
@@ -31,19 +32,23 @@ private static readonly IComparer<ForcedTextureConfig> ForcedTextureConfigCompar
31
32
32
33
public TextureReportRecord [ ] ? TextureReport { get ; private set ; }
33
34
34
- [ Signature ( Sigs . RenderTargetManagerInitialize , DetourName = nameof ( RenderTargetManagerInitializeDetour ) ) ]
35
- private readonly Hook < RenderTargetManagerInitializeFunc > _renderTargetManagerInitialize = null ! ;
36
-
37
- [ Signature ( Sigs . DeviceCreateTexture2D , DetourName = nameof ( CreateTexture2DDetour ) ) ]
38
- private readonly Hook < CreateTexture2DFunc > _createTexture2D = null ! ;
35
+ private readonly Hook < RenderTargetManagerInitializeFunc > ? _renderTargetManagerInitialize ;
36
+ private readonly Hook < CreateTexture2DFunc > ? _createTexture2D ;
39
37
40
38
public RenderTargetHdrEnabler ( IGameInteropProvider interop , Configuration config , IDalamudPluginInterface pi ,
41
- DalamudConfigService dalamudConfig )
39
+ DalamudConfigService dalamudConfig , PeSigScanner peScanner )
42
40
{
43
41
_config = config ;
44
- interop . InitializeFromAttributes ( this ) ;
45
- if ( config . HdrRenderTargets && ! HookOverrides . Instance . PostProcessing . RenderTargetManagerInitialize )
46
- _renderTargetManagerInitialize . Enable ( ) ;
42
+ if ( peScanner . TryScanText ( Sigs . RenderTargetManagerInitialize , out var initializeAddress )
43
+ && peScanner . TryScanText ( Sigs . DeviceCreateTexture2D , out var createAddress ) )
44
+ {
45
+ _renderTargetManagerInitialize =
46
+ interop . HookFromAddress < RenderTargetManagerInitializeFunc > ( initializeAddress , RenderTargetManagerInitializeDetour ) ;
47
+ _createTexture2D = interop . HookFromAddress < CreateTexture2DFunc > ( createAddress , CreateTexture2DDetour ) ;
48
+
49
+ if ( config . HdrRenderTargets && ! HookOverrides . Instance . PostProcessing . RenderTargetManagerInitialize )
50
+ _renderTargetManagerInitialize . Enable ( ) ;
51
+ }
47
52
48
53
_share = pi . GetOrCreateData ( "Penumbra.RenderTargetHDR.V1" , ( ) =>
49
54
{
@@ -87,19 +92,19 @@ public void Dispose()
87
92
88
93
private void Dispose ( bool _ )
89
94
{
90
- _createTexture2D . Dispose ( ) ;
91
- _renderTargetManagerInitialize . Dispose ( ) ;
95
+ _createTexture2D ? . Dispose ( ) ;
96
+ _renderTargetManagerInitialize ? . Dispose ( ) ;
92
97
}
93
98
94
99
private nint RenderTargetManagerInitializeDetour ( RenderTargetManager * @this )
95
100
{
96
- _createTexture2D . Enable ( ) ;
101
+ _createTexture2D ! . Enable ( ) ;
97
102
_share . Item5 [ 0 ] = true ;
98
103
_textureIndices . Value = new TextureIndices ( 0 , 0 ) ;
99
104
_textures . Value = _config . DebugMode ? [ ] : null ;
100
105
try
101
106
{
102
- return _renderTargetManagerInitialize . Original ( @this ) ;
107
+ return _renderTargetManagerInitialize ! . Original ( @this ) ;
103
108
}
104
109
finally
105
110
{
@@ -133,7 +138,7 @@ private nint RenderTargetManagerInitializeDetour(RenderTargetManager* @this)
133
138
_textureIndices . Value = indices ;
134
139
}
135
140
136
- var texture = _createTexture2D . Original ( @this , size , mipLevel , textureFormat , flags , unk ) ;
141
+ var texture = _createTexture2D ! . Original ( @this , size , mipLevel , textureFormat , flags , unk ) ;
137
142
if ( _textures . IsValueCreated )
138
143
_textures . Value ? . Add ( ( nint ) texture , ( indices . CreationOrder - 1 , originalTextureFormat ) ) ;
139
144
return texture ;
0 commit comments