@@ -87,39 +87,18 @@ void loader_core::log_text_fmt(gw2al_log_level level, const wchar_t * source, co
8787 gw2al_core__log_text (level, (wchar_t *)source, buf);
8888}
8989
90- IDirect3D9 * loader_core::OnD3DCreate (UINT sdkVer)
90+ IDirect3D9* loader_core::RouteD3DCreate (UINT sdkVer)
9191{
92- if (SwitchState (LDR_ADDON_LOAD))
93- {
94- bool isFirstLoad = gw2al_core__init ();
95-
96- LOG_INFO (L" core" , L" Addon loader v%u.%u (%S) %S" , LOADER_CORE_VER_MAJOR, LOADER_CORE_VER_MINOR, LOADER_CORE_VER_NAME,
97- isFirstLoad ? " initialized" : " reinit" );
98- }
99- else {
100- LOG_WARNING (L" core" , L" D3DCreate called twice without proper unload. Trying to unload addons." );
101-
102- SignalUnload ();
103-
104- if (!SwitchState (LDR_ADDON_LOAD))
105- {
106- LOG_ERROR (L" core" , L" Failed to unload addons, failing D3DCreate call" );
107- return nullptr ;
108- }
109-
110- }
111-
112- LoadAddonsFromDir (L" addons" );
113-
114- IDirect3D9* (*d3d9_create_hook)() = (IDirect3D9* (*)())gw2al_core__query_function (GW2AL_CORE_FUNN_D3DCREATE_HOOK);
92+ IDirect3D9* (*d3d9_create_hook)() = (IDirect3D9 * (*)())gw2al_core__query_function (GW2AL_CORE_FUNN_D3DCREATE_HOOK);
11593
11694 IDirect3D9* ret = NULL ;
11795
11896 if (d3d9_create_hook)
11997 {
12098 LOG_DEBUG (L" core" , L" Calling D3D9Create, hook = 0x%016llX" , d3d9_create_hook);
12199 ret = d3d9_create_hook ();
122- } else
100+ }
101+ else
123102 {
124103 LOG_DEBUG (L" core" , L" Loading system d3d9.dll" );
125104
@@ -132,18 +111,33 @@ IDirect3D9 * loader_core::OnD3DCreate(UINT sdkVer)
132111 typedef IDirect3D9* (WINAPI* Direct3DCreate9Func)(UINT sdkver);
133112
134113 Direct3DCreate9Func origDirect3DCreate9 = (Direct3DCreate9Func)GetProcAddress (sys_d3d9, " Direct3DCreate9" );
135- IDirect3D9* res = origDirect3DCreate9 (sdkVer);
136-
137- ret = res;
138- }
139-
140- SwitchState (LDR_INGAME);
114+ ret = origDirect3DCreate9 (sdkVer);
115+ }
141116
142117 LOG_DEBUG (L" core" , L" ID3D9 = 0x%016llX" , ret);
143118
144119 return ret;
145120}
146121
122+ IDirect3D9 * loader_core::OnD3DCreate (UINT sdkVer)
123+ {
124+ if (SwitchState (LDR_ADDON_LOAD))
125+ {
126+ bool isFirstLoad = gw2al_core__init ();
127+
128+ LOG_INFO (L" core" , L" Addon loader v%u.%u (%S) %S" , LOADER_CORE_VER_MAJOR, LOADER_CORE_VER_MINOR, LOADER_CORE_VER_NAME,
129+ isFirstLoad ? " initialized" : " reinit" );
130+
131+ LoadAddonsFromDir (L" addons" );
132+
133+ SwitchState (LDR_INGAME);
134+ }
135+ else
136+ LOG_WARNING (L" core" , L" D3DCreate called twice without proper unload. If your addon is not working, make sure you handle this situation!" );
137+
138+ return RouteD3DCreate (sdkVer);
139+ }
140+
147141void loader_core::SignalUnload ()
148142{
149143 if (SwitchState (LDR_UNLOAD))
0 commit comments