aboutsummaryrefslogtreecommitdiff
path: root/src/sst.c
diff options
context:
space:
mode:
authorGravatar Michael Smith <mikesmiffy128@gmail.com> 2025-10-05 18:01:35 +0100
committerGravatar Michael Smith <mikesmiffy128@gmail.com> 2025-10-05 18:36:46 +0100
commitde2a003cd9041c3e711147a4fe3a96a5b0564842 (patch)
tree91d9c5ecc401edd4668322326a5a37882de3c036 /src/sst.c
parentb3c359826ae519ea2816128dfe641032b9e9e97f (diff)
downloadsst-de2a003cd9041c3e711147a4fe3a96a5b0564842.tar.gz
sst-de2a003cd9041c3e711147a4fe3a96a5b0564842.zip
Fix deferred init in OE
Not really sure what was going on here. This is just a workaround, really, but it works well enough for the time being.
Diffstat (limited to 'src/sst.c')
-rw-r--r--src/sst.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/sst.c b/src/sst.c
index 7e1960e..fc35b53 100644
--- a/src/sst.c
+++ b/src/sst.c
@@ -395,8 +395,19 @@ static bool deferinit() {
// Arbitrary check to infer whether we've been early- or late-loaded.
// We used to just see whether gameui.dll/libgameui.so was loaded, but
// Portal 2 does away with the separate gameui library, so now we just call
- // CEngineVGui::IsInitialized() which works everywhere.
- if (VGuiIsInitialized(vgui)) return false;
+ // CEngineVGui::IsInitialized() which works everywhere on NE. On OE (Windows
+ // only), we still do the GameUI check, because I was struggling to get the
+ // vgui check to work consistently (maybe I just had the wrong vtable index
+ // for IsInitialized?). TODO(opt): I guess it would be faster to do the
+ // virtual call if we can figure out how to make it work...
+ if_hot (has_vtidx_VGuiIsInitialized) {
+ if (VGuiIsInitialized(vgui)) return false;
+ }
+#ifdef _WIN32
+ else {
+ if (GetModuleHandleW(L"GameUI.dll")) return false;
+ }
+#endif
sst_earlyloaded = true; // let other code know
if_cold (!os_mprot(vgui->vtable + vtidx_VGuiConnect, ssizeof(void *),
PAGE_READWRITE)) {