llappviewer.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:12k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llappviewer.h
  3.  * @brief The LLAppViewer class declaration
  4.  *
  5.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2007-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLAPPVIEWER_H
  33. #define LL_LLAPPVIEWER_H
  34. #include "llallocator.h"
  35. #include "llcontrol.h"
  36. #include "llsys.h" // for LLOSInfo
  37. #include "lltimer.h"
  38. class LLCommandLineParser;
  39. class LLFrameTimer;
  40. class LLPumpIO;
  41. class LLTextureCache;
  42. class LLImageDecodeThread;
  43. class LLTextureFetch;
  44. class LLWatchdogTimeout;
  45. class LLCommandLineParser;
  46. struct apr_dso_handle_t;
  47. class LLAppViewer : public LLApp
  48. {
  49. public:
  50. LLAppViewer();
  51. virtual ~LLAppViewer();
  52.     /**
  53.      * @brief Access to the LLAppViewer singleton.
  54.      * 
  55.      * The LLAppViewer singleton is created in main()/WinMain().
  56.      * So don't use it in pre-entry (static initialization) code.
  57.      */
  58.     static LLAppViewer* instance() {return sInstance; } 
  59. //
  60. // Main application logic
  61. //
  62. virtual bool init(); // Override to do application initialization
  63. virtual bool cleanup(); // Override to do application cleanup
  64. virtual bool mainLoop(); // Override for the application main loop.  Needs to at least gracefully notice the QUITTING state and exit.
  65. // Application control
  66. void forceQuit(); // Puts the viewer into 'shutting down without error' mode.
  67. void requestQuit(); // Request a quit. A kinder, gentler quit.
  68. void userQuit(); // The users asks to quit. Confirm, then requestQuit()
  69.     void earlyExit(const std::string& name, 
  70.    const LLSD& substitutions = LLSD()); // Display an error dialog and forcibly quit.
  71.     void forceExit(S32 arg); // exit() immediately (after some cleanup).
  72.     void abortQuit();  // Called to abort a quit request.
  73.     bool quitRequested() { return mQuitRequested; }
  74.     bool logoutRequestSent() { return mLogoutRequestSent; }
  75. void writeDebugInfo();
  76. const LLOSInfo& getOSInfo() const { return mSysOSInfo; }
  77. // Report true if under the control of a debugger. A null-op default.
  78. virtual bool beingDebugged() { return false; } 
  79. virtual bool restoreErrorTrap() = 0; // Require platform specific override to reset error handling mechanism.
  80.                                      // return false if the error trap needed restoration.
  81. virtual void handleCrashReporting(bool reportFreeze = false) = 0; // What to do with crash report?
  82. virtual void handleSyncCrashTrace() = 0; // any low-level crash-prep that has to happen in the context of the crashing thread before the crash report is delivered.
  83. static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon.
  84. static void handleSyncViewerCrash(); // Hey! The viewer crashed. Do this right NOW in the context of the crashing thread.
  85.     void checkForCrash();
  86.     
  87. // Thread accessors
  88. static LLTextureCache* getTextureCache() { return sTextureCache; }
  89. static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; }
  90. static LLTextureFetch* getTextureFetch() { return sTextureFetch; }
  91. const std::string& getSerialNumber() { return mSerialNumber; }
  92. bool getPurgeCache() const { return mPurgeCache; }
  93. std::string getSecondLifeTitle() const; // The Second Life title.
  94. std::string getWindowTitle() const; // The window display name.
  95.     void forceDisconnect(const std::string& msg); // Force disconnection, with a message to the user.
  96.     void badNetworkHandler(); // Cause a crash state due to bad network packet.
  97. bool hasSavedFinalSnapshot() { return mSavedFinalSnapshot; }
  98. void saveFinalSnapshot(); 
  99.     void loadNameCache();
  100.     void saveNameCache();
  101. void removeMarkerFile(bool leave_logout_marker = false);
  102.     // LLAppViewer testing helpers.
  103.     // *NOTE: These will potentially crash the viewer. Only for debugging.
  104.     virtual void forceErrorLLError();
  105.     virtual void forceErrorBreakpoint();
  106.     virtual void forceErrorBadMemoryAccess();
  107.     virtual void forceErrorInfiniteLoop();
  108.     virtual void forceErrorSoftwareException();
  109.     virtual void forceErrorDriverCrash();
  110. // The list is found in app_settings/settings_files.xml
  111. // but since they are used explicitly in code,
  112. // the follow consts should also do the trick.
  113. static const std::string sGlobalSettingsName; 
  114. LLCachedControl<bool> mRandomizeFramerate; 
  115. LLCachedControl<bool> mPeriodicSlowFrame; 
  116. // Load settings from the location specified by loction_key.
  117. // Key availale and rules for loading, are specified in 
  118. // 'app_settings/settings_files.xml'
  119. bool loadSettingsFromDirectory(const std::string& location_key, 
  120.        bool set_defaults = false);
  121. std::string getSettingsFilename(const std::string& location_key,
  122. const std::string& file);
  123. void loadColorSettings();
  124. // For thread debugging. 
  125. // llstartup needs to control init.
  126. // llworld, send_agent_pause() also controls pause/resume.
  127. void initMainloopTimeout(const std::string& state, F32 secs = -1.0f);
  128. void destroyMainloopTimeout();
  129. void pauseMainloopTimeout();
  130. void resumeMainloopTimeout(const std::string& state = "", F32 secs = -1.0f);
  131. void pingMainloopTimeout(const std::string& state, F32 secs = -1.0f);
  132. // Handle the 'login completed' event.
  133. // *NOTE:Mani Fix this for login abstraction!!
  134. void handleLoginComplete();
  135.     LLAllocator & getAllocator() { return mAlloc; }
  136. // On LoginCompleted callback
  137. typedef boost::signals2::signal<void (void)> login_completed_signal_t;
  138. login_completed_signal_t mOnLoginCompleted;
  139. boost::signals2::connection setOnLoginCompletedCallback( const login_completed_signal_t::slot_type& cb ) { return mOnLoginCompleted.connect(cb); } 
  140. void purgeCache(); // Clear the local cache. 
  141. // mute/unmute the system's master audio
  142. virtual void setMasterSystemAudioMute(bool mute);
  143. virtual bool getMasterSystemAudioMute();
  144. protected:
  145. virtual bool initWindow(); // Initialize the viewer's window.
  146. virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
  147. virtual void initConsole() {}; // Initialize OS level debugging console.
  148. virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
  149. virtual bool initSLURLHandler();
  150. virtual bool sendURLToOtherInstance(const std::string& url);
  151. virtual bool initParseCommandLine(LLCommandLineParser& clp) 
  152.         { return true; } // Allow platforms to specify the command line args.
  153. virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
  154. private:
  155. bool initThreads(); // Initialize viewer threads, return false on failure.
  156. bool initConfiguration(); // Initialize settings from the command line/config file.
  157. void initGridChoice();
  158. bool initCache(); // Initialize local client cache.
  159. // We have switched locations of both Mac and Windows cache, make sure
  160. // files migrate and old cache is cleared out.
  161. void migrateCacheDirectory();
  162. void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.
  163. void removeCacheFiles(const std::string& filemask); // Deletes cached files the match the given wildcard.
  164. void writeSystemInfo(); // Write system info to "debug_info.log"
  165. bool anotherInstanceRunning(); 
  166. void initMarkerFile(); 
  167.     
  168.     void idle(); 
  169.     void idleShutdown();
  170.     void idleNetwork();
  171.     void sendLogoutRequest();
  172.     void disconnectViewer();
  173. void loadEventHostModule(S32 listen_port);
  174. // *FIX: the app viewer class should be some sort of singleton, no?
  175. // Perhaps its child class is the singleton and this should be an abstract base.
  176. static LLAppViewer* sInstance; 
  177.     bool mSecondInstance; // Is this a second instance of the app?
  178. std::string mMarkerFileName;
  179. LLAPRFile mMarkerFile; // A file created to indicate the app is running.
  180. std::string mLogoutMarkerFileName;
  181. apr_file_t* mLogoutMarkerFile; // A file created to indicate the app is running.
  182. LLOSInfo mSysOSInfo; 
  183. bool mReportedCrash;
  184. // Thread objects.
  185. static LLTextureCache* sTextureCache; 
  186. static LLImageDecodeThread* sImageDecodeThread; 
  187. static LLTextureFetch* sTextureFetch;
  188. S32 mNumSessions;
  189. std::string mSerialNumber;
  190. bool mPurgeCache;
  191.     bool mPurgeOnExit;
  192. bool mSavedFinalSnapshot;
  193. bool mForceGraphicsDetail;
  194.     bool mQuitRequested; // User wants to quit, may have modified documents open.
  195.     bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
  196.     S32 mYieldTime;
  197. LLSD mSettingsLocationList;
  198. LLWatchdogTimeout* mMainloopTimeout;
  199. LLThread* mFastTimerLogThread;
  200. // for tracking viewer<->region circuit death
  201. bool mAgentRegionLastAlive;
  202. LLUUID mAgentRegionLastID;
  203.     LLAllocator mAlloc;
  204. std::set<struct apr_dso_handle_t*> mPlugins;
  205. public:
  206. //some information for updater
  207. typedef struct
  208. {
  209. std::string mUpdateExePath;
  210. std::ostringstream mParams;
  211. }LLUpdaterInfo ;
  212. static LLUpdaterInfo *sUpdaterInfo ;
  213. void launchUpdater();
  214. };
  215. // consts from viewer.h
  216. const S32 AGENT_UPDATES_PER_SECOND  = 10;
  217. // Globals with external linkage. From viewer.h
  218. // *NOTE:Mani - These will be removed as the Viewer App Cleanup project continues.
  219. //
  220. // "// llstartup" indicates that llstartup is the only client for this global.
  221. extern LLSD gDebugInfo;
  222. extern BOOL gShowObjectUpdates;
  223. typedef enum 
  224. {
  225. LAST_EXEC_NORMAL = 0,
  226. LAST_EXEC_FROZE,
  227. LAST_EXEC_LLERROR_CRASH,
  228. LAST_EXEC_OTHER_CRASH,
  229. LAST_EXEC_LOGOUT_FROZE,
  230. LAST_EXEC_LOGOUT_CRASH
  231. } eLastExecEvent;
  232. extern eLastExecEvent gLastExecEvent; // llstartup
  233. extern U32 gFrameCount;
  234. extern U32 gForegroundFrameCount;
  235. extern LLPumpIO* gServicePump;
  236. extern U64      gFrameTime; // The timestamp of the most-recently-processed frame
  237. extern F32 gFrameTimeSeconds; // Loses msec precision after ~4.5 hours...
  238. extern F32 gFrameIntervalSeconds; // Elapsed time between current and previous gFrameTimeSeconds
  239. extern F32 gFPSClamped; // Frames per second, smoothed, weighted toward last frame
  240. extern F32 gFrameDTClamped;
  241. extern U64 gStartTime;
  242. extern U32  gFrameStalls;
  243. extern LLTimer gRenderStartTime;
  244. extern LLFrameTimer gForegroundTime;
  245. extern F32 gLogoutMaxTime;
  246. extern LLTimer gLogoutTimer;
  247. extern F32 gSimLastTime; 
  248. extern F32 gSimFrames;
  249. extern BOOL gDisconnected;
  250. extern LLFrameTimer gRestoreGLTimer;
  251. extern BOOL gRestoreGL;
  252. extern BOOL gUseWireframe;
  253. // VFS globals - gVFS is for general use
  254. // gStaticVFS is read-only and is shipped w/ the viewer
  255. // it has pre-cache data like the UI .TGAs
  256. class LLVFS;
  257. extern LLVFS *gStaticVFS;
  258. extern LLMemoryInfo gSysMemory;
  259. extern U64 gMemoryAllocated;
  260. extern std::string gLastVersionChannel;
  261. extern LLVector3 gWindVec;
  262. extern LLVector3 gRelativeWindVec;
  263. extern U32 gPacketsIn;
  264. extern BOOL gPrintMessagesThisFrame;
  265. extern LLUUID gSunTextureID;
  266. extern LLUUID gMoonTextureID;
  267. extern BOOL gRandomizeFramerate;
  268. extern BOOL gPeriodicSlowFrame;
  269. #endif // LL_LLAPPVIEWER_H