diff -wru -X x.txt linden-orig\/indra/newview/llcontroldef.cpp linden\/indra/newview/llcontroldef.cpp --- linden-orig\/indra/newview/llcontroldef.cpp 2008-04-07 19:45:42.000000000 -0400 +++ linden\/indra/newview/llcontroldef.cpp 2008-04-14 00:53:48.069000000 -0400 @@ -1535,6 +1535,10 @@ //cheesy beacon effects gSavedSettings.declareBOOL("CheesyBeacon", FALSE, "Enable cheesy beacon effects"); + //attachment rendering options + gSavedSettings.declareBOOL("RenderAttachedLights", TRUE, "Render lighted prims that are attached to avatars"); + gSavedSettings.declareBOOL("RenderAttachedParticles", TRUE, "Render particle systems that are attached to avatars"); + //flycam controls and joystick mapping gSavedSettings.declareS32("FlycamAxis0", 0, "Flycam hardware axis mapping for internal axis 0 ([0, 5])."); gSavedSettings.declareS32("FlycamAxis1", 1, "Flycam hardware axis mapping for internal axis 1 ([0, 5])."); diff -wru -X x.txt linden-orig\/indra/newview/llviewermenu.cpp linden\/indra/newview/llviewermenu.cpp --- linden-orig\/indra/newview/llviewermenu.cpp 2008-04-07 19:45:42.000000000 -0400 +++ linden\/indra/newview/llviewermenu.cpp 2008-04-14 02:36:11.501000000 -0400 @@ -500,6 +500,8 @@ BOOL enable_have_card(void*); BOOL enable_detach(void*); BOOL enable_region_owner(void*); +void menu_toggle_attached_lights(void* user_data); +void menu_toggle_attached_particles(void* user_data); class LLLandmarkObserver : public LLInventoryObserver { @@ -1450,6 +1452,12 @@ item = new LLMenuItemCheckGL("Cheesy Beacon", menu_toggle_control, NULL, menu_check_control, (void*)"CheesyBeacon"); menu->append(item); + item = new LLMenuItemCheckGL("Attached Lights", menu_toggle_attached_lights, NULL, menu_check_control, (void*)"RenderAttachedLights"); + menu->append(item); + + item = new LLMenuItemCheckGL("Attached Particles", menu_toggle_attached_particles, NULL, menu_check_control, (void*)"RenderAttachedParticles"); + menu->append(item); + menu->createJumpKeys(); } @@ -6400,6 +6408,18 @@ return gParcelMgr && !(gParcelMgr->selectionEmpty()); } +void menu_toggle_attached_lights(void* user_data) +{ + menu_toggle_control(user_data); + LLPipeline::sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights"); +} + +void menu_toggle_attached_particles(void* user_data) +{ + menu_toggle_control(user_data); + LLPipeline::sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles"); +} + class LLSomethingSelected : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) diff -wru -X x.txt linden-orig\/indra/newview/llviewerpartsim.cpp linden\/indra/newview/llviewerpartsim.cpp --- linden-orig\/indra/newview/llviewerpartsim.cpp 2008-04-07 19:45:42.000000000 -0400 +++ linden\/indra/newview/llviewerpartsim.cpp 2008-04-14 12:59:11.571000000 -0400 @@ -44,6 +44,7 @@ #include "llworld.h" #include "pipeline.h" #include "llspatialpartition.h" +#include "llvovolume.h" const F32 PART_SIM_BOX_SIDE = 16.f; const F32 PART_SIM_BOX_OFFSET = 0.5f*PART_SIM_BOX_SIDE; @@ -614,8 +615,25 @@ if (!mViewerPartSources[i]->isDead()) { + BOOL upd = TRUE; + if (!LLPipeline::sRenderAttachedParticles) + { + LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp; + if (vobj && (vobj->getPCode() == LL_PCODE_VOLUME)) + { + LLVOVolume* vvo = (LLVOVolume *)vobj; + if (vvo && vvo->isAttachment()) + { + upd = FALSE; + } + } + } + + if (upd) + { mViewerPartSources[i]->update(dt); } + } if (mViewerPartSources[i]->isDead()) { @@ -630,12 +648,24 @@ num_updates++; } - count = (S32) mViewerPartGroups.size(); for (i = 0; i < count; i++) { LLViewerObject* vobj = mViewerPartGroups[i]->mVOPartGroupp; + if (!LLPipeline::sRenderAttachedParticles) + { + if (vobj && vobj->getPCode() == LL_PCODE_VOLUME) + { + LLVOVolume* vvo = (LLVOVolume *)vobj; + if (vvo && vvo->isAttachment()) + { + mViewerPartGroups[i]->mSkippedTime+=dt; + continue; + } + } + } + S32 visirate = 1; if (vobj) { diff -wru -X x.txt linden-orig\/indra/newview/llvopartgroup.cpp linden\/indra/newview/llvopartgroup.cpp --- linden-orig\/indra/newview/llvopartgroup.cpp 2008-04-07 19:45:42.000000000 -0400 +++ linden\/indra/newview/llvopartgroup.cpp 2008-04-14 02:26:21.213000000 -0400 @@ -48,6 +48,7 @@ #include "llviewerregion.h" #include "pipeline.h" #include "llspatialpartition.h" +#include "llvovolume.h" const F32 MAX_PART_LIFETIME = 120.f; @@ -168,6 +169,12 @@ return TRUE; } + LLVOVolume* vobj = drawable->getVOVolume(); + if (!gPipeline.sRenderAttachedParticles && vobj && vobj->isAttachment()) + { + return TRUE; + } + if (num_parts > drawable->getNumFaces()) { drawable->setNumFacesFast(num_parts+num_parts/4, NULL, getTEImage(0)); diff -wru -X x.txt linden-orig\/indra/newview/pipeline.cpp linden\/indra/newview/pipeline.cpp --- linden-orig\/indra/newview/pipeline.cpp 2008-04-07 19:45:42.000000000 -0400 +++ linden\/indra/newview/pipeline.cpp 2008-04-14 02:36:11.610000000 -0400 @@ -225,6 +225,8 @@ BOOL LLPipeline::sUnderWaterRender = FALSE; BOOL LLPipeline::sTextureBindTest = FALSE; BOOL LLPipeline::sRenderFrameTest = FALSE; +BOOL LLPipeline::sRenderAttachedLights = TRUE; +BOOL LLPipeline::sRenderAttachedParticles = TRUE; static LLCullResult* sCull = NULL; @@ -274,6 +276,8 @@ sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD"); sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); + sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights"); + sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles"); mInitialized = TRUE; @@ -3167,6 +3171,8 @@ F32 max_dist = LIGHT_MAX_RADIUS * 4.f; // ignore enitrely lights > 4 * max light rad + BOOL renderattach = sRenderAttachedLights; + // UPDATE THE EXISTING NEARBY LIGHTS if (!LLPipeline::sSkipUpdate) { @@ -3182,16 +3188,22 @@ drawable->clearState(LLDrawable::NEARBY_LIGHT); continue; } + if (light->fade <= -LIGHT_FADE_TIME) { drawable->clearState(LLDrawable::NEARBY_LIGHT); + continue; } - else + + if (!renderattach && volight && volight->isAttachment()) { + drawable->clearState(LLDrawable::NEARBY_LIGHT); + continue; + } + F32 dist = calc_light_dist(volight, cam_pos, max_dist); cur_nearby_lights.insert(Light(drawable, dist, light->fade)); } - } mNearbyLights = cur_nearby_lights; } diff -wru -X x.txt linden-orig\/indra/newview/pipeline.h linden\/indra/newview/pipeline.h --- linden-orig\/indra/newview/pipeline.h 2008-04-07 19:45:40.000000000 -0400 +++ linden\/indra/newview/pipeline.h 2008-04-14 01:34:07.073000000 -0400 @@ -377,6 +377,8 @@ static BOOL sRenderGlow; static BOOL sTextureBindTest; static BOOL sRenderFrameTest; + static BOOL sRenderAttachedLights; + static BOOL sRenderAttachedParticles; //screen texture LLRenderTarget mScreen;