BOOL check_for_card(const char* RENDERER, const char* bad_card) { if (!strnicmp(RENDERER, bad_card, strlen(bad_card))) { std::string buffer = llformat( "Your video card appears to be a %s, which Firestorm does not support.\n" "\n" "Firestorm requires a video card with 32 Mb of memory or more, as well as\n" "multitexture support. We explicitly support nVidia GeForce 2 or better, \n" "and ATI Radeon 8500 or better.\n" "\n" "If you own a supported card and continue to receive this message, try \n" "updating to the latest video card drivers. Otherwise contact the\n" "Phoenix Viewer Support group in world, or visit www.phoenixviewer.com\n" "for support.\n" "\n" "You can try to run Firestorm, but it will probably crash or run\n" "very slowly. Try anyway?", bad_card); S32 button = OSMessageBox(buffer.c_str(), "Unsupported video card", OSMB_YESNO); if (OSBTN_YES == button) { return FALSE; } else { return TRUE; } } return FALSE; }
void LLCrashLogger::checkCrashDump() { #if LL_SEND_CRASH_REPORTS // 0 - ask, 1 - always send, 2 - never send S32 pref = gSavedSettings.getS32("CrashSubmitBehavior"); if (pref == 2) return; //never send mCrashHost = gSavedSettings.getString("CrashHostUrl"); std::string dumpDir = gDirUtilp->getDumpDir(); // Do we have something to send, and somewhere to send it if (!mCrashHost.empty() && miniDumpExists(dumpDir)) { if (pref == 1) // always send { sendCrashLog(dumpDir); } else // ask { U32 response = OSMessageBox(LLTrans::getString("MBFrozenCrashed"), LLTrans::getString("MBAlert"), OSMB_YESNO); if (response == OSBTN_YES) { sendCrashLog(dumpDir); } } } #endif }
void STDCALL TraceCrashEnd() { String strStackTrace = TEXT("\r\nException Fault - Stack Trace:"); for(unsigned int i=0; i<TraceFuncList.Num(); i++) { if(i) strStackTrace << TEXT(" -> "); if(!(i%10)) strStackTrace << TEXT("\r\n "); strStackTrace << TraceFuncList[i]; } if(TraceFuncList.Num() == MAX_STACK_TRACE) strStackTrace << TEXT(" -> ..."); String strOut = FormattedString(TEXT("%s\r\n"), strStackTrace.Array()); OpenLogFile(); LogFile.WriteAsUTF8(strOut, strOut.Length()); LogFile.WriteAsUTF8(TEXT("\r\n")); CloseLogFile(); OSMessageBox(TEXT("Error: Exception fault - More info in the log file.\r\n\r\nMake sure you're using the latest verison, otherwise send your log to [email protected]")); TraceFuncList.Clear(); CriticalExit(); }
void fetchScriptLimitsRegionInfoResponder::httpSuccess() { const LLSD& content = getContent(); if (!content.isMap()) { failureResult(HTTP_INTERNAL_ERROR_OTHER, "Malformed response contents", content); return; } //we don't need to test with a fake response here (shouldn't anyway) #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "main cap response:", 0); LL_INFOS() << "main cap response:" << content << LL_ENDL; #endif // at this point we have an llsd which should contain ether one or two urls to the services we want. // first we look for the details service: if(content.has("ScriptResourceDetails")) { LLHTTPClient::get(content["ScriptResourceDetails"], new fetchScriptLimitsRegionDetailsResponder(mInfo)); } else { LLFloaterScriptLimits* instance = LLFloaterScriptLimits::findInstance(); if(!instance) { LL_WARNS() << "Failed to get llfloaterscriptlimits instance" << LL_ENDL; } } // then the summary service: if(content.has("ScriptResourceSummary")) { LLHTTPClient::get(content["ScriptResourceSummary"], new fetchScriptLimitsRegionSummaryResponder(mInfo)); } }
void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content) { //we don't need to test with a fake respose here (shouldn't anyway) #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "main cap response:", 0); llinfos << "main cap response:" << content << llendl; #endif // at this point we have an llsd which should contain ether one or two urls to the services we want. // first we look for the details service: if(content.has("ScriptResourceDetails")) { LLHTTPClient::get(content["ScriptResourceDetails"], new fetchScriptLimitsRegionDetailsResponder(mInfo)); } else { LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(!instance) { llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } } // then the summary service: if(content.has("ScriptResourceSummary")) { LLHTTPClient::get(content["ScriptResourceSummary"], new fetchScriptLimitsRegionSummaryResponder(mInfo)); } }
void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref) { #ifdef USE_FAKE_RESPONSES // just add the summary, as that's all I'm testing currently! LLSD fake_content = LLSD::emptyMap(); LLSD summary = LLSD::emptyMap(); LLSD available = LLSD::emptyArray(); LLSD available_urls = LLSD::emptyMap(); LLSD available_memory = LLSD::emptyMap(); LLSD used = LLSD::emptyArray(); LLSD used_urls = LLSD::emptyMap(); LLSD used_memory = LLSD::emptyMap(); used_urls["type"] = "urls"; used_urls["amount"] = FAKE_NUMBER_OF_URLS; available_urls["type"] = "urls"; available_urls["amount"] = FAKE_AVAILABLE_URLS; used_memory["type"] = "memory"; used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY; available_memory["type"] = "memory"; available_memory["amount"] = FAKE_AVAILABLE_MEMORY; used.append(used_urls); used.append(used_memory); available.append(available_urls); available.append(available_memory); summary["available"] = available; summary["used"] = used; fake_content["summary"] = summary; fake_content["attachments"] = content_ref["attachments"]; const LLSD& content = fake_content; #else const LLSD& content = content_ref; #endif #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "attachment response:", 0); llinfos << "attachment response:" << content << llendl; #endif LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(!instance) { llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } else { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); if(tab) { LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); if(panel) { panel->childSetValue("loading_text", LLSD(std::string(""))); LLButton* btn = panel->getChild<LLButton>("refresh_list_btn"); if(btn) { btn->setEnabled(true); } panel->setAttachmentDetails(content); } else { llwarns << "Failed to get script_limits_my_avatar_panel" << llendl; } } else { llwarns << "Failed to get scriptlimits_panels" << llendl; } } }
void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref) { #ifdef USE_FAKE_RESPONSES /* Updated detail service, ** denotes field added: result (map) +-parcels (array of maps) +-id (uuid) +-local_id (S32)** +-name (string) +-owner_id (uuid) (in ERS as owner, but owner_id in code) +-objects (array of maps) +-id (uuid) +-name (string) +-owner_id (uuid) (in ERS as owner, in code as owner_id) +-owner_name (sting)** +-location (map)** +-x (float) +-y (float) +-z (float) +-resources (map) (this is wrong in the ERS but right in code) +-type (string) +-amount (int) */ LLSD fake_content; LLSD resource = LLSD::emptyMap(); LLSD location = LLSD::emptyMap(); LLSD object = LLSD::emptyMap(); LLSD objects = LLSD::emptyArray(); LLSD parcel = LLSD::emptyMap(); LLSD parcels = LLSD::emptyArray(); resource["urls"] = FAKE_NUMBER_OF_URLS; resource["memory"] = FAKE_AMOUNT_OF_MEMORY; location["x"] = 128.0f; location["y"] = 128.0f; location["z"] = 0.0f; object["id"] = LLUUID("d574a375-0c6c-fe3d-5733-da669465afc7"); object["name"] = "Gabs fake Object!"; object["owner_id"] = LLUUID("8dbf2d41-69a0-4e5e-9787-0c9d297bc570"); object["owner_name"] = "Gabs Linden"; object["location"] = location; object["resources"] = resource; objects.append(object); parcel["id"] = LLUUID("da05fb28-0d20-e593-2728-bddb42dd0160"); parcel["local_id"] = 42; parcel["name"] = "Gabriel Linden\'s Sub Plot"; parcel["objects"] = objects; parcels.append(parcel); fake_content["parcels"] = parcels; const LLSD& content = fake_content; #else const LLSD& content = content_ref; #endif #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "details response:", 0); llinfos << "details response:" << content << llendl; #endif LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(!instance) { llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } else { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); if(tab) { LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); if(panel_memory) { panel_memory->setRegionDetails(content); } else { llwarns << "Failed to get scriptlimits memory panel" << llendl; } } else { llwarns << "Failed to get scriptlimits_panels" << llendl; } } }
void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref) { #ifdef USE_FAKE_RESPONSES LLSD fake_content; LLSD summary = LLSD::emptyMap(); LLSD available = LLSD::emptyArray(); LLSD available_urls = LLSD::emptyMap(); LLSD available_memory = LLSD::emptyMap(); LLSD used = LLSD::emptyArray(); LLSD used_urls = LLSD::emptyMap(); LLSD used_memory = LLSD::emptyMap(); used_urls["type"] = "urls"; used_urls["amount"] = FAKE_NUMBER_OF_URLS; available_urls["type"] = "urls"; available_urls["amount"] = FAKE_AVAILABLE_URLS; used_memory["type"] = "memory"; used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY; available_memory["type"] = "memory"; available_memory["amount"] = FAKE_AVAILABLE_MEMORY; //summary response:{'summary':{'available':[{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'},{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'}],'used':[{'amount':i329,'type':'urls'},{'amount':i66741,'type':'memory'}]}} used.append(used_urls); used.append(used_memory); available.append(available_urls); available.append(available_memory); summary["available"] = available; summary["used"] = used; fake_content["summary"] = summary; const LLSD& content = fake_content; #else const LLSD& content = content_ref; #endif #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "summary response:", 0); llwarns << "summary response:" << *content << llendl; #endif LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(!instance) { llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } else { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); if(tab) { LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); if(panel_memory) { panel_memory->childSetValue("loading_text", LLSD(std::string(""))); LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); if(btn) { btn->setEnabled(true); } panel_memory->setRegionSummary(content); } } } }
bool LLAppViewerWin32::initHardwareTest() { // // Do driver verification and initialization based on DirectX // hardware polling and driver versions // if (gProbeHardware) { BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup"); LLSplashScreen::update("Detecting hardware..."); llinfos << "Attempting to poll DirectX for hardware info" << llendl; gDXHardware.setWriteDebugFunc(write_debug_dx); BOOL probe_ok = gDXHardware.getInfo(vram_only); if (!probe_ok && gSavedSettings.getWarning("AboutDirectX9")) { llinfos << "DirectX probe failed, alerting user." << llendl; // Warn them that runnin without DirectX 9 will // not allow us to tell them about driver issues std::ostringstream msg; msg << LLAppViewer::instance()->getSecondLifeTitle() << " is unable to detect DirectX 9.0b or greater.\n" "\n" << LLAppViewer::instance()->getSecondLifeTitle() << " uses DirectX to detect hardware and/or\n" "outdated drivers that can cause stability problems,\n" "poor performance and crashes. While you can run\n" << LLAppViewer::instance()->getSecondLifeTitle() << " without it, we highly recommend running\n" "with DirectX 9.0b\n" "\n" "Do you wish to continue?\n"; S32 button = OSMessageBox( msg.str().c_str(), "Warning", OSMB_YESNO); if (OSBTN_NO== button) { llinfos << "User quitting after failed DirectX 9 detection" << llendl; LLWeb::loadURLExternal(DIRECTX_9_URL); return false; } gSavedSettings.setWarning("AboutDirectX9", FALSE); } llinfos << "Done polling DirectX for hardware info" << llendl; // Only probe once after installation gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE); // Disable so debugger can work std::ostringstream splash_msg; splash_msg << "Loading " << LLAppViewer::instance()->getSecondLifeTitle() << "..."; LLSplashScreen::update(splash_msg.str().c_str()); } if (!LLWinDebug::setupExceptionHandler()) { llwarns << " Someone took over my exception handler (post hardware probe)!" << llendl; } gGLManager.mVRAM = gDXHardware.getVRAM(); llinfos << "Detected VRAM: " << gGLManager.mVRAM << llendl; return true; }
int ENGINEAPI EngineMain(TSTR *lp, int c) { int exitcode=0; dwIconID = IDI_GAME; //ugh. //CoInitializeEx(NULL, 0); if(InitBase(TEXT("Game"))) { DWORD newWidth, newHeight, newFreq; BOOL bUseFullscreen = AppConfig->GetInt(TEXT("Display"), TEXT("Fullscreen")); if(!bUseFullscreen) { DisplayMode currentMode; OSGetDisplaySettings(¤tMode); if(currentMode.dwBitsPerPixel != 32) ErrOut(TEXT("Your display settings must be set to 32bit mode.")); } SS->SetEffectsVol(AppConfig->GetFloat(TEXT("Sound"), TEXT("EffectsVolume"), 1.0f)); MM->SetVolume(AppConfig->GetFloat(TEXT("Sound"), TEXT("MusicVolume"), 1.0f)); List<DisplayMode> DisplayModes; zero(&DisplayModes, 8); OSEnumDisplayModes(DisplayModes); newWidth = AppConfig->GetInt(TEXT("Display"), TEXT("Width")); newHeight = AppConfig->GetInt(TEXT("Display"), TEXT("Height")); newFreq = AppConfig->GetInt(TEXT("Display"), TEXT("Frequency")); BOOL bFoundDisplayMode = FALSE; DisplayMode mode; for(int i=0; i<DisplayModes.Num(); i++) { if( (DisplayModes[i].dwHeight == newHeight) && (DisplayModes[i].dwWidth == newWidth) ) { if(DisplayModes[i].dwFrequency == newFreq) { bFoundDisplayMode = TRUE; mcpy(&mode, &DisplayModes[i], sizeof(DisplayMode)); break; } } } mode.dwBitsPerPixel = 32; if(!bFoundDisplayMode) { mode.dwFrequency = 60; mode.dwWidth = 640; mode.dwHeight = 480; Log(TEXT("Monitor does not support %dx%d resolution or doesn't support %d frequency"), newHeight, newWidth, newFreq); } SetResolution(mode, TRUE); if(bUseFullscreen) ToggleFullScreen(); DisplayModes.Clear(); float gamma = AppConfig->GetFloat(TEXT("Display"), TEXT("Gamma"), 1.0f); float brightness = AppConfig->GetFloat(TEXT("Display"), TEXT("Brightness"), 1.0f); float contrast = AppConfig->GetFloat(TEXT("Display"), TEXT("Contrast"), 1.0f); AdjustDisplayColors(gamma, brightness, contrast); GS->ClearColorBuffer(); GameModule *module = (GameModule*)CreateFactoryObject(TEXT("MainGameModule")); if(!module) OSMessageBox(TEXT("Could not load the class 'MainGameModule'.")); else { if(module->ModuleStartup(lp, c)) { //loop exitcode = BaseLoop(); module->ModuleExit(); } DestroyObject(module); } TerminateBase(); } //CoUninitialize(); return 0; }
void LLWindowMacOSX::setupFailure(const std::string& text, const std::string& caption, U32 type) { destroyContext(); OSMessageBox(text, caption, type); }
void fetchScriptLimitsAttachmentInfoResponder::httpSuccess() { const LLSD& content_ref = getContent(); #ifdef USE_FAKE_RESPONSES // just add the summary, as that's all I'm testing currently! LLSD fake_content = LLSD::emptyMap(); LLSD summary = LLSD::emptyMap(); LLSD available = LLSD::emptyArray(); LLSD available_urls = LLSD::emptyMap(); LLSD available_memory = LLSD::emptyMap(); LLSD used = LLSD::emptyArray(); LLSD used_urls = LLSD::emptyMap(); LLSD used_memory = LLSD::emptyMap(); used_urls["type"] = "urls"; used_urls["amount"] = FAKE_NUMBER_OF_URLS; available_urls["type"] = "urls"; available_urls["amount"] = FAKE_AVAILABLE_URLS; used_memory["type"] = "memory"; used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY; available_memory["type"] = "memory"; available_memory["amount"] = FAKE_AVAILABLE_MEMORY; used.append(used_urls); used.append(used_memory); available.append(available_urls); available.append(available_memory); summary["available"] = available; summary["used"] = used; fake_content["summary"] = summary; fake_content["attachments"] = content_ref["attachments"]; const LLSD& content = fake_content; #else const LLSD& content = content_ref; #endif if (!content.isMap()) { failureResult(HTTP_INTERNAL_ERROR_OTHER, "Malformed response contents", content); return; } #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "attachment response:", 0); LL_INFOS() << "attachment response:" << content << LL_ENDL; #endif LLFloaterScriptLimits* instance = LLFloaterScriptLimits::findInstance(); if(!instance) { LL_WARNS() << "Failed to get llfloaterscriptlimits instance" << LL_ENDL; } else { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); if(tab) { LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); if(panel) { panel->getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); LLButton* btn = panel->getChild<LLButton>("refresh_list_btn"); if(btn) { btn->setEnabled(true); } panel->setAttachmentDetails(content); } else { LL_WARNS() << "Failed to get script_limits_my_avatar_panel" << LL_ENDL; } } else { LL_WARNS() << "Failed to get scriptlimits_panels" << LL_ENDL; } } }
void fetchScriptLimitsRegionSummaryResponder::httpSuccess() { const LLSD& content_ref = getContent(); #ifdef USE_FAKE_RESPONSES LLSD fake_content; LLSD summary = LLSD::emptyMap(); LLSD available = LLSD::emptyArray(); LLSD available_urls = LLSD::emptyMap(); LLSD available_memory = LLSD::emptyMap(); LLSD used = LLSD::emptyArray(); LLSD used_urls = LLSD::emptyMap(); LLSD used_memory = LLSD::emptyMap(); used_urls["type"] = "urls"; used_urls["amount"] = FAKE_NUMBER_OF_URLS; available_urls["type"] = "urls"; available_urls["amount"] = FAKE_AVAILABLE_URLS; used_memory["type"] = "memory"; used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY; available_memory["type"] = "memory"; available_memory["amount"] = FAKE_AVAILABLE_MEMORY; //summary response:{'summary':{'available':[{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'},{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'}],'used':[{'amount':i329,'type':'urls'},{'amount':i66741,'type':'memory'}]}} used.append(used_urls); used.append(used_memory); available.append(available_urls); available.append(available_memory); summary["available"] = available; summary["used"] = used; fake_content["summary"] = summary; const LLSD& content = fake_content; #else const LLSD& content = content_ref; #endif if (!content.isMap()) { failureResult(HTTP_INTERNAL_ERROR_OTHER, "Malformed response contents", content); return; } #ifdef DUMP_REPLIES_TO_LLINFOS LLSDNotationStreamer notation_streamer(content); std::ostringstream nice_llsd; nice_llsd << notation_streamer; OSMessageBox(nice_llsd.str(), "summary response:", 0); LL_WARNS() << "summary response:" << *content << LL_ENDL; #endif LLFloaterScriptLimits* instance = LLFloaterScriptLimits::findInstance(); if(!instance) { LL_WARNS() << "Failed to get llfloaterscriptlimits instance" << LL_ENDL; } else { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); if(tab) { LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); if(panel_memory) { panel_memory->getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); if(btn) { btn->setEnabled(true); } panel_memory->setRegionSummary(content); } } } }