From f7cf69ec954f6e4a94dd460934aabd2564c483cd Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Tue, 10 Sep 2013 03:53:03 +0200 Subject: [PATCH] Possible fix for "4096 bug" affecting long Opensim teleports Patch by Tonya Souther (Firestorm) Refereces: https://jira.secondlife.com/browse/SVC-2941 http://redmine.kokuaviewer.org/issues/465 http://jira.phoenixviewer.com/browse/FIRE-11593 --- indra/newview/pipeline.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c57ab4219..4b2b52d76 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -155,6 +155,10 @@ const U32 DEFERRED_VB_MASK = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TE // Max number of occluders to search for. JC const S32 MAX_OCCLUDER_COUNT = 2; +// FIRE-11593: Teleporting more than 4096 regions away clears screen +const F32 MAX_SHIFT_DISTANCE = 256.f * 4095; //maximum distance to shift spatial partitions +// FIRE-11593 + extern S32 gBoxFrame; //extern BOOL gHideSelectedObjects; extern BOOL gDisplaySwapBuffers; @@ -4004,6 +4008,17 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) //LLGLState::checkTextureChannels(); //LLGLState::checkClientArrays(); + // FIRE-11593: Teleporting more than 4096 regions away clears screen + // The spatial partition octree shift code has problems with + // shifts of more than 4096 regions (1M meters). We shift just + // less than that distance, and let later processing deal with + // all the spatial partitions that are shifted far enough away + // that we'll never see them anyway. + if (offset.length() > MAX_SHIFT_DISTANCE) + { + offseta.splat(MAX_SHIFT_DISTANCE); + } + // FIRE-11593 //stop_glerror();