From 0ab52f3e9632c2f61c504837274273bed0d22c00 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Thu, 4 Mar 2010 23:55:41 -0700 Subject: Applied Speed Rez v2 patch from Cool Viewer. Dynamically changes draw distance after teleporting. Patch by Henri Beauchamp. (slviewer-0-v12350-SpeedRez_v2.patch) --- linden/indra/newview/app_settings/settings.xml | 33 ++++++++++++++++++++++++++ linden/indra/newview/llagent.cpp | 15 ++++++++++-- linden/indra/newview/llstartup.cpp | 10 ++++++++ linden/indra/newview/llviewerdisplay.cpp | 27 +++++++++++++++++++++ linden/indra/newview/llviewerdisplay.h | 1 + 5 files changed, 84 insertions(+), 2 deletions(-) diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 29b3bcc..c35ae5b 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -7833,6 +7833,39 @@ Value 256.0 + SavedRenderFarClip + + Comment + Saved draw distance (used in case of logout during speed rezzing) + Persist + 1 + Type + F32 + Value + 0.0 + + SpeedRez + + Comment + Set to TRUE to increase rezzing speed via draw distance stepping + Persist + 1 + Type + Boolean + Value + 1 + + SpeedRezInterval + + Comment + Interval in seconds between each draw distance increment + Persist + 1 + Type + U32 + Value + 20 + RenderFastAlpha Comment diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index df3ab18..f40a2e8 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp @@ -6073,9 +6073,20 @@ bool LLAgent::teleportCore(bool is_local) //release geometry from old location gPipeline.resetVertexBuffers(); + + if (gSavedSettings.getBOOL("SpeedRez")) + { + F32 draw_distance = gSavedSettings.getF32("RenderFarClip"); + if (gSavedDrawDistance < draw_distance) + { + gSavedDrawDistance = draw_distance; + } + gSavedSettings.setF32("SavedRenderFarClip", gSavedDrawDistance); + gSavedSettings.setF32("RenderFarClip", 32.0f); + } + make_ui_sound("UISndTeleportOut"); } - make_ui_sound("UISndTeleportOut"); - + // MBW -- Let the voice client know a teleport has begun so it can leave the existing channel. // This was breaking the case of teleporting within a single sim. Backing it out for now. // gVoiceClient->leaveChannel(); diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index 7a7e023..11bd87b 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -2636,6 +2636,16 @@ bool idle_startup() LLStartUp::setStartupState( STATE_STARTED ); LLStartUp::setStartedOnce(true); + if (gSavedSettings.getBOOL("SpeedRez")) + { + // Speed up rezzing if requested. + F32 dist1 = gSavedSettings.getF32("RenderFarClip"); + F32 dist2 = gSavedSettings.getF32("SavedRenderFarClip"); + gSavedDrawDistance = (dist1 >= dist2 ? dist1 : dist2); + gSavedSettings.setF32("SavedRenderFarClip", gSavedDrawDistance); + gSavedSettings.setF32("RenderFarClip", 32.0f); + } + // Unmute audio if desired and setup volumes. // Unmute audio if desired and setup volumes. // This is a not-uncommon crash site, so surround it with diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp index 388ba73..28d048b 100644 --- a/linden/indra/newview/llviewerdisplay.cpp +++ b/linden/indra/newview/llviewerdisplay.cpp @@ -93,6 +93,7 @@ const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before rais BOOL gTeleportDisplay = FALSE; LLFrameTimer gTeleportDisplayTimer; LLFrameTimer gTeleportArrivalTimer; +F32 gSavedDrawDistance = 0.0f; const F32 RESTORE_GL_TIME = 5.f; // Wait this long while reloading textures before we raise the curtain BOOL gForceRenderLandFence = FALSE; @@ -398,6 +399,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) // No teleport in progress gViewerWindow->setShowProgress(FALSE); gTeleportDisplay = FALSE; + gTeleportArrivalTimer.reset(); break; } } @@ -439,6 +441,31 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) } } + // Progressively increase draw distance after TP when required. + if (gSavedDrawDistance > 0.0f && gAgent.getTeleportState() == LLAgent::TELEPORT_NONE) + { + if (gTeleportArrivalTimer.getElapsedTimeF32() >= + (F32)gSavedSettings.getU32("SpeedRezInterval")) + { + gTeleportArrivalTimer.reset(); + F32 current = gSavedSettings.getF32("RenderFarClip"); + if (gSavedDrawDistance > current) + { + current *= 2.0; + if (current > gSavedDrawDistance) + { + current = gSavedDrawDistance; + } + gSavedSettings.setF32("RenderFarClip", current); + } + if (current >= gSavedDrawDistance) + { + gSavedDrawDistance = 0.0f; + gSavedSettings.setF32("SavedRenderFarClip", 0.0f); + } + } + } + ////////////////////////// // // Prepare for the next frame diff --git a/linden/indra/newview/llviewerdisplay.h b/linden/indra/newview/llviewerdisplay.h index 0d60403..4d650de 100644 --- a/linden/indra/newview/llviewerdisplay.h +++ b/linden/indra/newview/llviewerdisplay.h @@ -46,5 +46,6 @@ extern BOOL gTeleportDisplay; extern LLFrameTimer gTeleportDisplayTimer; extern BOOL gForceRenderLandFence; extern BOOL gResizeScreenTexture; +extern F32 gSavedDrawDistance; #endif // LL_LLVIEWERDISPLAY_H -- cgit v1.1