r5sdk/r5dev/core/dllmain.cpp
Kawe Mazidjatari 81adf428ff Add GPU model info on startup
Kept in for dedicated as the main executable imports the same DLL used for 'EnumDisplayDevices'. No GPU will be displayed if there is none installed or set as primary.
2022-12-27 17:39:00 +01:00

124 lines
3.1 KiB
C++

#include "core/stdafx.h"
#include "core/r5dev.h"
#include "core/init.h"
#include "core/logdef.h"
/*****************************************************************************/
#ifndef DEDICATED
#include "windows/id3dx.h"
#include "windows/input.h"
#endif // !DEDICATED
#include "windows/console.h"
#include "windows/system.h"
#include "mathlib/mathlib.h"
#include "launcher/launcher.h"
//#############################################################################
// INITIALIZATION
//#############################################################################
void SDK_Init()
{
CheckCPU(); // Check CPU as early as possible, SpdLog also uses SSE intrinsics.
MathLib_Init(); // Initialize Mathlib.
WinSock_Init(); // Initialize Winsock.
if (strstr(GetCommandLineA(), "-launcher"))
{
g_svCmdLine = GetCommandLineA();
}
else
{
g_svCmdLine = LoadConfigFile(SDK_DEFAULT_CFG);
}
#ifndef DEDICATED
if (g_svCmdLine.find("-wconsole") != std::string::npos)
{
Console_Init();
}
#else
Console_Init();
#endif // !DEDICATED
SpdLog_Init();
for (size_t i = 0; i < SDK_ARRAYSIZE(R5R_EMBLEM); i++)
{
std::string svEscaped = StringEscape(R5R_EMBLEM[i]);
spdlog::info("{:s}{:s}{:s}\n", g_svRedF, svEscaped, g_svReset);
}
spdlog::info("\n");
Systems_Init();
WinSys_Attach();
#ifndef DEDICATED
Input_Init();
DirectX_Init();
#endif // !DEDICATED
}
//#############################################################################
// SHUTDOWN
//#############################################################################
void SDK_Shutdown()
{
static bool bShutDown = false;
assert(!bShutDown);
if (bShutDown)
{
spdlog::error("Recursive shutdown!\n");
return;
}
bShutDown = true;
spdlog::info("Shutdown GameSDK\n");
WinSock_Shutdown();
Systems_Shutdown();
WinSys_Detach();
#ifndef DEDICATED
Input_Shutdown();
DirectX_Shutdown();
#endif // !DEDICATED
FreeConsole();
}
//#############################################################################
// ENTRYPOINT
//#############################################################################
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
#if !defined (DEDICATED) && !defined (CLIENT_DLL)
// This dll is imported by the game executable, we cannot circumvent it.
// To solve the recursive init problem, we check if -noworkerdll is passed.
// If this is passed, the worker dll will not be initialized, which allows
// us to load the client dll (or any other dll) instead, or load the game
// without the SDK.
s_bNoWorkerDll = !!strstr(GetCommandLineA(), "-noworkerdll");
#endif // !DEDICATED && CLIENT_DLL
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{
if (!s_bNoWorkerDll)
{
SDK_Init();
}
break;
}
case DLL_PROCESS_DETACH:
{
if (!s_bNoWorkerDll)
{
SDK_Shutdown();
}
break;
}
}
return TRUE;
}