int VM::LoadModules(VMStartParams ¶ms) { try { // Set up some stuff first this->startupPath = Box<PathName>(new PathName(params.startupFile)); this->startupPath->RemoveFileName(); this->startupPathLib = Box<PathName>(new PathName(*this->startupPath)); this->startupPathLib->Join(OVUM_PATH("lib")); this->modulePath = Box<PathName>(new PathName(params.modulePath)); // And now we can start opening modules! Hurrah! PathName startupFile(params.startupFile, std::nothrow); if (!startupFile.IsValid()) return OVUM_ERROR_NO_MEMORY; PartiallyOpenedModulesList partiallyOpenedModules; this->startupModule = Module::Open( this, startupFile, nullptr, partiallyOpenedModules ); } catch (ModuleLoadException &e) { const PathName &fileName = e.GetFileName(); if (fileName.GetLength() > 0) fwprintf(stderr, L"Error loading module '" OVUM_PATHNWF L"': " CSTR L"\n", fileName.GetDataPointer(), e.what()); else fwprintf(stderr, L"Error loading module: " CSTR L"\n", e.what()); return OVUM_ERROR_MODULE_LOAD; } catch (std::bad_alloc&) { return OVUM_ERROR_NO_MEMORY; } size_t stdTypeCount = standardTypeCollection->GetCount(); for (size_t i = 0; i < stdTypeCount; i++) { StandardTypeInfo type; standardTypeCollection->GetByIndex(i, type); if (this->types.*(type.member) == nullptr) { PrintInternal(stderr, L"Startup error: standard type not loaded: %ls\n", type.name); return OVUM_ERROR_MODULE_LOAD; } } RETURN_SUCCESS; }
bool gkGameFramework::InitGame(const TCHAR* dllname) { gkLogMessage(_T("load Game...")); // ensure destroyed DestroyGameImmediate(); #ifndef _STATIC_LIB // check the dll name TCHAR name[MAX_PATH]; gkIniParser startupFile( _T("config/startup.cfg") ); startupFile.Parse(); gkStdString ret = startupFile.FetchValue( _T("launcher"), _T("gamedll") ); if(ret != _T("")) { _tcscpy(name, ret.c_str()); } else { _tcscpy(name, _T("TestCases")); } gkLogMessage(_T("load Game: %s"), name); gkStdString dllPath = gEnv->rootPath; dllPath += "\\bin64\\"; // create system.dll first gkOpenModule( m_hHandleGame, name, dllPath.c_str()); if (m_hHandleGame) { m_pFuncGameStart = (GET_GAMEDLL)DLL_GETSYM(m_hHandleGame, "gkModuleInitialize"); m_pFuncGameEnd = (DESTROY_GAMEDLL)DLL_GETSYM(m_hHandleGame, "gkModuleUnload"); m_pGame = m_pFuncGameStart(gEnv); m_pGame->OnInit(); } else { gkLogWarning(_T("gkFramework::Load GameDll %s failed."), name ); } #else m_pGame = gkLoadStaticModule_gkGame(gEnv); m_pGame->OnInit(); #endif return true; }
bool gkSystem::Init( ISystemInitInfo& sii ) { gkLogMessage(_T("Initializing gkSystem...")); std::vector<gkStdString> result; gkStdString path; #ifdef OS_IOS path = gkGetExecRootDir(); #else path = gkGetExecRootDir() + _T("paks/"); #endif enum_all_files_in_folder(path.c_str(), result, false); for (int i=0; i < result.size(); ++i) { gkStdString file = result[i]; const TCHAR* strLastSlash = _tcsrchr( file.c_str(), _T( '.' ) ); if( strLastSlash ) { if ( !_tcsicmp( strLastSlash, _T(".gpk") ) ) { gkNormalizePath(file); gkStdString filename = gkGetFilename( file.c_str() ); #ifdef OS_IOS #else file = _T("/paks") + file; #endif gkLogMessage( _T("pak file [%s] loaded."), filename.c_str() ); m_ResFileManager.openPak( file.c_str() ); } } } #ifdef OS_WIN32 m_fileMonitor = new FileChangeMonitor(); m_fileMonitor->StartMonitor(); gEnv->pFileChangeMonitor = m_fileMonitor; #endif m_bEditor = (sii.hInstance != 0); //CrashRptHead(); m_bIsSceneEmpty = true; /************************************************************************/ /* Module Loading /************************************************************************/ #ifdef WIN32 TCHAR wszRenderDll[MAX_PATH] = _T("gkRendererD3D9"); if (!IsEditor()) { gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg"); GetPrivateProfileString( _T("launcher"), _T("renderer"), _T("gkRendererD3D9"), wszRenderDll, MAX_PATH, cfgfile.c_str() ); } #else TCHAR wszRenderDll[MAX_PATH] = _T("gkRendererGLES2"); #endif #ifndef _STATIC_LIB if ( !_tcsicmp( wszRenderDll, _T("gkRendererD3D9") )) { LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererD3D9 ); } else if ( !_tcsicmp( wszRenderDll, _T("gkRendererGLES2") ) ) { LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGLES2 ); } else if ( !_tcsicmp( wszRenderDll, _T("gkRendererGL330") ) ) { LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGL330 ); } #else //LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGLES2 ); #ifdef OS_APPLE LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGL330 ); #elif defined( OS_IOS ) LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGLES2 ); #else LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererD3D9 ); #endif #endif LOAD_MODULE_GLOBAL(m_moduleHandles.h3DEngine, gkCore); gEnv->p3DEngine->Init(); LOAD_MODULE_GLOBAL(m_moduleHandles.hInputLayer, gkInput); //LoadLib(m_moduleHandles.hNetworkLayer, _T("gkNetwork")); ////////////////////////////////////////////////////////////////////////// // load physics module #ifndef MUTE_PHYSICS # ifdef WIN32 TCHAR wszPhysicDll[MAX_PATH] = _T(""); gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg"); GetPrivateProfileString( _T("launcher"), _T("physicsengine"), _T(""), wszPhysicDll, MAX_PATH, cfgfile.c_str() ); # else TCHAR wszPhysicDll[MAX_PATH] = _T("gkHavok"); # endif // WIN32 # ifndef _STATIC_LIB gkLoadModule( m_moduleHandles.hPhysics, wszPhysicDll ); # else //LOAD_MODULE_GLOBAL( m_moduleHandles.hPhysics, gkHavok ); # endif // _STATIC_LIB #endif // MUTE_PHYSICS ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // load animation module { # ifdef WIN32 TCHAR wszAnimationDll[MAX_PATH] = _T("gkAnimationHavok"); gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg"); GetPrivateProfileString( _T("launcher"), _T("animationengine"), _T("gkAnimationHavok"), wszAnimationDll, MAX_PATH, cfgfile.c_str() ); # else TCHAR wszAnimationDll[MAX_PATH] = _T("gkAnimationHavok"); # endif // WIN32 #ifdef OS_APPLE #else # ifndef _STATIC_LIB gkLoadModule( m_moduleHandles.hAnimation, wszAnimationDll ); # else #if TARGET_OS_IPHONE LOAD_MODULE_GLOBAL( m_moduleHandles.hAnimation, gkAnimation ); #endif # endif // _STATIC_LIB #endif } ////////////////////////////////////////////////////////////////////////// LOAD_MODULE_GLOBAL(m_moduleHandles.hGameObjectSystem, gkGameObjectSystem); LOAD_MODULE_GLOBAL(m_moduleHandles.hFont, gkFont); #ifdef OS_WIN32 LOAD_MODULE_GLOBAL(m_moduleHandles.hTrackBus, gkTrackBus); LOAD_MODULE_GLOBAL(m_moduleHandles.hSound, gkSound); //LOAD_MODULE_GLOBAL(m_moduleHandles.hVideo, gkVideo); //LOAD_MODULE_GLOBAL(m_moduleHandles.hStereoDevice, gkStereoDevice); { TCHAR wszStereoDevDll[MAX_PATH] = _T("null"); gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg"); GetPrivateProfileString( _T("launcher"), _T("stereodevice"), _T("null"), wszStereoDevDll, MAX_PATH, cfgfile.c_str() ); gkLoadModule( m_moduleHandles.hStereoDevice, wszStereoDevDll ); } #endif m_CVManager.initInput(); gkLogMessage(_T("CVar Manager Initialized.")); m_pSystemCVars = new gkSystemCVars; g_pSystemCVars = m_pSystemCVars; gkLogMessage(_T("System CVar Initialized.")); m_CVManager.reloadAllParameters(); // init Timer if (!m_Timer.Init(this)) return (false); m_Timer.ResetTimer(); gkLogMessage(_T("Timer Initialized.")); gkIniParser startupFile( _T("config/startup.cfg") ); startupFile.Parse(); gkStdString ret = startupFile.FetchValue( _T("launcher"), _T("width") ); if( !ret.empty() ) { gkStdStringstream ss(ret); ss >> sii.fWidth; }