summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewermenu.cpp')
-rwxr-xr-xindra/newview/llviewermenu.cpp186
1 files changed, 108 insertions, 78 deletions
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index c7c8da27f3..9c08ec7e77 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -126,6 +126,7 @@
#include "lltoolgrab.h"
#include "llwindow.h"
#include "llpathfindingmanager.h"
+#include "llstartup.h"
#include "boost/unordered_map.hpp"
using namespace LLAvatarAppearanceDefines;
@@ -482,14 +483,12 @@ void init_menus()
gAttachSubMenu = gMenuBarView->findChildMenuByName("Attach Object", TRUE);
gDetachSubMenu = gMenuBarView->findChildMenuByName("Detach Object", TRUE);
-#if !MEM_TRACK_MEM
// Don't display the Memory console menu if the feature is turned off
LLMenuItemCheckGL *memoryMenu = gMenuBarView->getChild<LLMenuItemCheckGL>("Memory", TRUE);
if (memoryMenu)
{
memoryMenu->setVisible(FALSE);
}
-#endif
gMenuBarView->createJumpKeys();
@@ -528,19 +527,13 @@ class LLAdvancedToggleConsole : public view_listener_t
}
else if ("fast timers" == console_type)
{
- LLFloaterReg::toggleInstance("fast_timers");
+ LLFloaterReg::toggleInstance("block_timers");
}
else if ("scene view" == console_type)
{
toggle_visibility( (void*)gSceneView);
}
-#if MEM_TRACK_MEM
- else if ("memory view" == console_type)
- {
- toggle_visibility( (void*)gDebugView->mMemoryView );
- }
-#endif
return true;
}
};
@@ -560,18 +553,12 @@ class LLAdvancedCheckConsole : public view_listener_t
}
else if ("fast timers" == console_type)
{
- new_value = LLFloaterReg::instanceVisible("fast_timers");
+ new_value = LLFloaterReg::instanceVisible("block_timers");
}
else if ("scene view" == console_type)
{
new_value = get_visibility( (void*) gSceneView);
}
-#if MEM_TRACK_MEM
- else if ("memory view" == console_type)
- {
- new_value = get_visibility( (void*)gDebugView->mMemoryView );
- }
-#endif
return new_value;
}
@@ -1660,7 +1647,7 @@ class LLAdvancedAnimTenFaster : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- //llinfos << "LLAdvancedAnimTenFaster" << llendl;
+ //LL_INFOS() << "LLAdvancedAnimTenFaster" << LL_ENDL;
F32 time_factor = LLMotionController::getCurrentTimeFactor();
time_factor = llmin(time_factor + 0.1f, 2.f); // Upper limit is 200% speed
set_all_animation_time_factors(time_factor);
@@ -1672,7 +1659,7 @@ class LLAdvancedAnimTenSlower : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- //llinfos << "LLAdvancedAnimTenSlower" << llendl;
+ //LL_INFOS() << "LLAdvancedAnimTenSlower" << LL_ENDL;
F32 time_factor = LLMotionController::getCurrentTimeFactor();
time_factor = llmax(time_factor - 0.1f, 0.1f); // Lower limit is at 10% of normal speed
set_all_animation_time_factors(time_factor);
@@ -1971,9 +1958,9 @@ class LLAdvancedViewerEventRecorder : public view_listener_t
std::string command = userdata.asString();
if ("start playback" == command)
{
- llinfos << "Event Playback starting" << llendl;
+ LL_INFOS() << "Event Playback starting" << LL_ENDL;
LLViewerEventRecorder::instance().playbackRecording();
- llinfos << "Event Playback completed" << llendl;
+ LL_INFOS() << "Event Playback completed" << LL_ENDL;
}
else if ("stop playback" == command)
{
@@ -1982,12 +1969,12 @@ class LLAdvancedViewerEventRecorder : public view_listener_t
else if ("start recording" == command)
{
LLViewerEventRecorder::instance().setEventLoggingOn();
- llinfos << "Event recording started" << llendl;
+ LL_INFOS() << "Event recording started" << LL_ENDL;
}
else if ("stop recording" == command)
{
LLViewerEventRecorder::instance().setEventLoggingOff();
- llinfos << "Event recording stopped" << llendl;
+ LL_INFOS() << "Event recording stopped" << LL_ENDL;
}
return true;
@@ -2594,11 +2581,11 @@ bool enable_object_touch(LLUICtrl* ctrl)
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
if (node && node->mValid && !node->mTouchName.empty())
{
- gMenuHolder->childSetText(item_name, node->mTouchName);
+ gMenuHolder->childSetValue(item_name, node->mTouchName);
}
else
{
- gMenuHolder->childSetText(item_name, get_default_item_label(item_name));
+ gMenuHolder->childSetValue(item_name, get_default_item_label(item_name));
}
return new_value;
@@ -3234,7 +3221,7 @@ class LLAvatarDebug : public view_listener_t
{
((LLVOAvatarSelf *)avatar)->dumpLocalTextures();
}
- llinfos << "Dumping temporary asset data to simulator logs for avatar " << avatar->getID() << llendl;
+ LL_INFOS() << "Dumping temporary asset data to simulator logs for avatar " << avatar->getID() << LL_ENDL;
std::vector<std::string> strings;
strings.push_back(avatar->getID().asString());
LLUUID invoice;
@@ -3508,7 +3495,7 @@ void handle_buy_contents(LLSaleInfo sale_info)
void handle_region_dump_temp_asset_data(void*)
{
- llinfos << "Dumping temporary asset data to simulator logs" << llendl;
+ LL_INFOS() << "Dumping temporary asset data to simulator logs" << LL_ENDL;
std::vector<std::string> strings;
LLUUID invoice;
send_generic_message("dumptempassetdata", strings, invoice);
@@ -3516,7 +3503,7 @@ void handle_region_dump_temp_asset_data(void*)
void handle_region_clear_temp_asset_data(void*)
{
- llinfos << "Clearing temporary asset data" << llendl;
+ LL_INFOS() << "Clearing temporary asset data" << LL_ENDL;
std::vector<std::string> strings;
LLUUID invoice;
send_generic_message("cleartempassetdata", strings, invoice);
@@ -3527,14 +3514,14 @@ void handle_region_dump_settings(void*)
LLViewerRegion* regionp = gAgent.getRegion();
if (regionp)
{
- llinfos << "Damage: " << (regionp->getAllowDamage() ? "on" : "off") << llendl;
- llinfos << "Landmark: " << (regionp->getAllowLandmark() ? "on" : "off") << llendl;
- llinfos << "SetHome: " << (regionp->getAllowSetHome() ? "on" : "off") << llendl;
- llinfos << "ResetHome: " << (regionp->getResetHomeOnTeleport() ? "on" : "off") << llendl;
- llinfos << "SunFixed: " << (regionp->getSunFixed() ? "on" : "off") << llendl;
- llinfos << "BlockFly: " << (regionp->getBlockFly() ? "on" : "off") << llendl;
- llinfos << "AllowP2P: " << (regionp->getAllowDirectTeleport() ? "on" : "off") << llendl;
- llinfos << "Water: " << (regionp->getWaterHeight()) << llendl;
+ LL_INFOS() << "Damage: " << (regionp->getAllowDamage() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "Landmark: " << (regionp->getAllowLandmark() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "SetHome: " << (regionp->getAllowSetHome() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "ResetHome: " << (regionp->getResetHomeOnTeleport() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "SunFixed: " << (regionp->getSunFixed() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "BlockFly: " << (regionp->getBlockFly() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "AllowP2P: " << (regionp->getAllowDirectTeleport() ? "on" : "off") << LL_ENDL;
+ LL_INFOS() << "Water: " << (regionp->getWaterHeight()) << LL_ENDL;
}
}
@@ -3565,7 +3552,7 @@ void handle_dump_focus()
{
LLUICtrl *ctrl = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
- llinfos << "Keyboard focus " << (ctrl ? ctrl->getName() : "(none)") << llendl;
+ LL_INFOS() << "Keyboard focus " << (ctrl ? ctrl->getName() : "(none)") << LL_ENDL;
}
class LLSelfStandUp : public view_listener_t
@@ -3777,7 +3764,7 @@ void process_grant_godlike_powers(LLMessageSystem* msg, void**)
}
else
{
- llwarns << "Grant godlike for wrong agent " << agent_id << llendl;
+ LL_WARNS() << "Grant godlike for wrong agent " << agent_id << LL_ENDL;
}
}
@@ -4119,7 +4106,7 @@ class LLEditEnableDuplicate : public view_listener_t
void handle_duplicate_in_place(void*)
{
- llinfos << "handle_duplicate_in_place" << llendl;
+ LL_INFOS() << "handle_duplicate_in_place" << LL_ENDL;
LLVector3 offset(0.f, 0.f, 0.f);
LLSelectMgr::getInstance()->selectDuplicate(offset, TRUE);
@@ -4290,13 +4277,16 @@ static bool get_derezzable_objects(
EDeRezDestination dest,
std::string& error,
LLViewerRegion*& first_region,
- LLDynamicArray<LLViewerObjectPtr>* derez_objectsp,
+ std::vector<LLViewerObjectPtr>* derez_objectsp,
bool only_check = false)
{
bool found = false;
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+ if (derez_objectsp)
+ derez_objectsp->reserve(selection->getRootObjectCount());
+
// Check conditions that we can't deal with, building a list of
// everything that we'll actually be derezzing.
for (LLObjectSelection::valid_root_iterator iter = selection->valid_root_begin();
@@ -4333,7 +4323,7 @@ static bool get_derezzable_objects(
&& dest != DRD_RETURN_TO_OWNER)
{
// this object is an asset container, derez its contents, not it
- llwarns << "Attempt to derez deprecated AssetContainer object type not supported." << llendl;
+ LL_WARNS() << "Attempt to derez deprecated AssetContainer object type not supported." << LL_ENDL;
/*
object->requestInventory(container_inventory_arrived,
(void *)(BOOL)(DRD_TAKE_INTO_AGENT_INVENTORY == dest));
@@ -4375,7 +4365,7 @@ static bool get_derezzable_objects(
break;
if (derez_objectsp)
- derez_objectsp->put(object);
+ derez_objectsp->push_back(object);
}
}
@@ -4395,16 +4385,16 @@ static void derez_objects(
const LLUUID& dest_id,
LLViewerRegion*& first_region,
std::string& error,
- LLDynamicArray<LLViewerObjectPtr>* objectsp)
+ std::vector<LLViewerObjectPtr>* objectsp)
{
- LLDynamicArray<LLViewerObjectPtr> derez_objects;
+ std::vector<LLViewerObjectPtr> derez_objects;
if (!objectsp) // if objects to derez not specified
{
// get them from selection
if (!get_derezzable_objects(dest, error, first_region, &derez_objects, false))
{
- llwarns << "No objects to derez" << llendl;
+ LL_WARNS() << "No objects to derez" << LL_ENDL;
return;
}
@@ -4424,13 +4414,13 @@ static void derez_objects(
// satisfy anybody.
const S32 MAX_ROOTS_PER_PACKET = 250;
const S32 MAX_PACKET_COUNT = 254;
- F32 packets = ceil((F32)objectsp->count() / (F32)MAX_ROOTS_PER_PACKET);
+ F32 packets = ceil((F32)objectsp->size() / (F32)MAX_ROOTS_PER_PACKET);
if(packets > (F32)MAX_PACKET_COUNT)
{
error = "AcquireErrorTooManyObjects";
}
- if(error.empty() && objectsp->count() > 0)
+ if(error.empty() && objectsp->size() > 0)
{
U8 d = (U8)dest;
LLUUID tid;
@@ -4455,11 +4445,11 @@ static void derez_objects(
msg->addU8Fast(_PREHASH_PacketCount, packet_count);
msg->addU8Fast(_PREHASH_PacketNumber, packet_number);
objects_in_packet = 0;
- while((object_index < objectsp->count())
+ while((object_index < objectsp->size())
&& (objects_in_packet++ < MAX_ROOTS_PER_PACKET))
{
- LLViewerObject* object = objectsp->get(object_index++);
+ LLViewerObject* object = objectsp->at(object_index++);
msg->nextBlockFast(_PREHASH_ObjectData);
msg->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID());
// VEFFECT: DerezObject
@@ -4539,7 +4529,7 @@ private:
LLObjectSelectionHandle mObjectSelection;
- LLDynamicArray<LLViewerObjectPtr> mReturnableObjects;
+ std::vector<LLViewerObjectPtr> mReturnableObjects;
std::string mError;
LLViewerRegion* mFirstRegion;
};
@@ -4892,7 +4882,7 @@ bool callback_show_buy_currency(const LLSD& notification, const LLSD& response)
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (0 == option)
{
- llinfos << "Loading page " << LLNotifications::instance().getGlobalString("BUY_CURRENCY_URL") << llendl;
+ LL_INFOS() << "Loading page " << LLNotifications::instance().getGlobalString("BUY_CURRENCY_URL") << LL_ENDL;
LLWeb::loadURL(LLNotifications::instance().getGlobalString("BUY_CURRENCY_URL"));
}
return false;
@@ -5411,7 +5401,7 @@ public:
};
LLObjectSelectionHandle mObjectSelection;
- LLDynamicArray<LLViewerObjectPtr> mReturnableObjects;
+ std::vector<LLViewerObjectPtr> mReturnableObjects;
std::string mError;
LLViewerRegion *mFirstRegion;
};
@@ -5579,7 +5569,7 @@ void print_agent_nvpairs(void*)
{
LLViewerObject *objectp;
- llinfos << "Agent Name Value Pairs" << llendl;
+ LL_INFOS() << "Agent Name Value Pairs" << LL_ENDL;
objectp = gObjectList.findObject(gAgentID);
if (objectp)
@@ -5588,10 +5578,10 @@ void print_agent_nvpairs(void*)
}
else
{
- llinfos << "Can't find agent object" << llendl;
+ LL_INFOS() << "Can't find agent object" << LL_ENDL;
}
- llinfos << "Camera at " << gAgentCamera.getCameraPositionGlobal() << llendl;
+ LL_INFOS() << "Camera at " << gAgentCamera.getCameraPositionGlobal() << LL_ENDL;
}
void show_debug_menus()
@@ -5644,7 +5634,7 @@ void toggle_debug_menus(void*)
// {
// return;
// }
-// llinfos << "Exporting selected objects:" << llendl;
+// LL_INFOS() << "Exporting selected objects:" << LL_ENDL;
// gExporterRequestID.generate();
// gExportDirectory = "";
@@ -5663,7 +5653,7 @@ void toggle_debug_menus(void*)
// LLViewerObject* object = node->getObject();
// msg->nextBlockFast(_PREHASH_ObjectData);
// msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
-// llinfos << "Object: " << object->getID() << llendl;
+// LL_INFOS() << "Object: " << object->getID() << LL_ENDL;
// }
// msg->sendReliable(gAgent.getRegion()->getHost());
@@ -6005,11 +5995,11 @@ bool enable_object_sit(LLUICtrl* ctrl)
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
if (node && node->mValid && !node->mSitName.empty())
{
- gMenuHolder->childSetText(item_name, node->mSitName);
+ gMenuHolder->childSetValue(item_name, node->mSitName);
}
else
{
- gMenuHolder->childSetText(item_name, get_default_item_label(item_name));
+ gMenuHolder->childSetValue(item_name, get_default_item_label(item_name));
}
}
return !sitting_on_sel && is_object_sittable();
@@ -6199,7 +6189,7 @@ class LLPromptShowURL : public view_listener_t
}
else
{
- llinfos << "PromptShowURL invalid parameters! Expecting \"ALERT,URL\"." << llendl;
+ LL_INFOS() << "PromptShowURL invalid parameters! Expecting \"ALERT,URL\"." << LL_ENDL;
}
return true;
}
@@ -6232,7 +6222,7 @@ class LLPromptShowFile : public view_listener_t
}
else
{
- llinfos << "PromptShowFile invalid parameters! Expecting \"ALERT,FILE\"." << llendl;
+ LL_INFOS() << "PromptShowFile invalid parameters! Expecting \"ALERT,FILE\"." << LL_ENDL;
}
return true;
}
@@ -6515,7 +6505,7 @@ void callback_attachment_drop(const LLSD& notification, const LLSD& response)
if (!object)
{
- llwarns << "handle_drop_attachment() - no object to drop" << llendl;
+ LL_WARNS() << "handle_drop_attachment() - no object to drop" << LL_ENDL;
return;
}
@@ -6532,13 +6522,13 @@ void callback_attachment_drop(const LLSD& notification, const LLSD& response)
if (!object)
{
- llwarns << "handle_detach() - no object to detach" << llendl;
+ LL_WARNS() << "handle_detach() - no object to detach" << LL_ENDL;
return;
}
if (object->isAvatar())
{
- llwarns << "Trying to detach avatar from avatar." << llendl;
+ LL_WARNS() << "Trying to detach avatar from avatar." << LL_ENDL;
return;
}
@@ -6563,7 +6553,7 @@ class LLAttachmentDrop : public view_listener_t
}
else
{
- llwarns << "Drop object not found" << llendl;
+ LL_WARNS() << "Drop object not found" << LL_ENDL;
return true;
}
@@ -6637,7 +6627,7 @@ class LLAttachmentDetach : public view_listener_t
LLViewerObject *object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
if (!object)
{
- llwarns << "handle_detach() - no object to detach" << llendl;
+ LL_WARNS() << "handle_detach() - no object to detach" << LL_ENDL;
return true;
}
@@ -6654,13 +6644,13 @@ class LLAttachmentDetach : public view_listener_t
if (!object)
{
- llwarns << "handle_detach() - no object to detach" << llendl;
+ LL_WARNS() << "handle_detach() - no object to detach" << LL_ENDL;
return true;
}
if (object->isAvatar())
{
- llwarns << "Trying to detach avatar from avatar." << llendl;
+ LL_WARNS() << "Trying to detach avatar from avatar." << LL_ENDL;
return true;
}
@@ -6924,14 +6914,14 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& msg)
}
else
{
- llerrs << "Bad logic." << llendl;
+ LL_ERRS() << "Bad logic." << LL_ENDL;
}
}
else
{
if (!q->start())
{
- llwarns << "Unexpected script compile failure." << llendl;
+ LL_WARNS() << "Unexpected script compile failure." << LL_ENDL;
}
}
}
@@ -6986,7 +6976,7 @@ class LLToolsSelectedScriptAction : public view_listener_t
}
else
{
- llwarns << "Failed to generate LLFloaterScriptQueue with action: " << action << llendl;
+ LL_WARNS() << "Failed to generate LLFloaterScriptQueue with action: " << action << LL_ENDL;
}
return true;
}
@@ -7118,12 +7108,12 @@ void handle_dump_attachments(void*)
!attached_object->mDrawable->isRenderType(0));
LLVector3 pos;
if (visible) pos = attached_object->mDrawable->getPosition();
- llinfos << "ATTACHMENT " << key << ": item_id=" << attached_object->getAttachmentItemID()
+ LL_INFOS() << "ATTACHMENT " << key << ": item_id=" << attached_object->getAttachmentItemID()
<< (attached_object ? " present " : " absent ")
<< (visible ? "visible " : "invisible ")
<< " at " << pos
<< " and " << (visible ? attached_object->getPosition() : LLVector3::zero)
- << llendl;
+ << LL_ENDL;
}
}
}
@@ -7556,7 +7546,7 @@ void handle_dump_avatar_local_textures(void*)
void handle_dump_timers()
{
- LLFastTimer::dumpCurTimes();
+ LLTrace::BlockTimer::dumpCurTimes();
}
void handle_debug_avatar_textures(void*)
@@ -7574,7 +7564,7 @@ void handle_grab_baked_texture(void* data)
if (!isAgentAvatarValid()) return;
const LLUUID& asset_id = gAgentAvatarp->grabBakedTexture(baked_tex_index);
- LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
+ LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << LL_ENDL;
LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type));
@@ -7630,7 +7620,7 @@ void handle_grab_baked_texture(void* data)
}
else
{
- llwarns << "Can't find a folder to put it in" << llendl;
+ LL_WARNS() << "Can't find a folder to put it in" << LL_ENDL;
}
}
@@ -7844,7 +7834,7 @@ void handle_buy_currency_test(void*)
replace["[LANGUAGE]"] = LLUI::getLanguage();
LLStringUtil::format(url, replace);
- llinfos << "buy currency url " << url << llendl;
+ LL_INFOS() << "buy currency url " << url << LL_ENDL;
LLFloaterReg::showInstance("buy_currency_html", LLSD(url));
}
@@ -8235,6 +8225,45 @@ class LLWorldEnvSettings : public view_listener_t
}
};
+class LLWorldEnableEnvSettings : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ bool result = false;
+ std::string tod = userdata.asString();
+
+ if (tod == "region")
+ {
+ return LLEnvManagerNew::instance().getUseRegionSettings();
+ }
+
+ if (LLEnvManagerNew::instance().getUseFixedSky())
+ {
+ if (tod == "sunrise")
+ {
+ result = (LLEnvManagerNew::instance().getSkyPresetName() == "Sunrise");
+ }
+ else if (tod == "noon")
+ {
+ result = (LLEnvManagerNew::instance().getSkyPresetName() == "Midday");
+ }
+ else if (tod == "sunset")
+ {
+ result = (LLEnvManagerNew::instance().getSkyPresetName() == "Sunset");
+ }
+ else if (tod == "midnight")
+ {
+ result = (LLEnvManagerNew::instance().getSkyPresetName() == "Midnight");
+ }
+ else
+ {
+ llwarns << "Unknown item" << llendl;
+ }
+ }
+ return result;
+ }
+};
+
class LLWorldEnvPreset : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -8279,7 +8308,7 @@ class LLWorldEnvPreset : public view_listener_t
}
else
{
- llwarns << "Unknown item selected" << llendl;
+ LL_WARNS() << "Unknown item selected" << LL_ENDL;
}
return true;
@@ -8312,7 +8341,7 @@ class LLWorldEnableEnvPreset : public view_listener_t
}
else
{
- llwarns << "Unknown item" << llendl;
+ LL_WARNS() << "Unknown item" << LL_ENDL;
}
return false;
@@ -8573,6 +8602,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLWorldCheckAlwaysRun(), "World.CheckAlwaysRun");
view_listener_t::addMenu(new LLWorldEnvSettings(), "World.EnvSettings");
+ view_listener_t::addMenu(new LLWorldEnableEnvSettings(), "World.EnableEnvSettings");
view_listener_t::addMenu(new LLWorldEnvPreset(), "World.EnvPreset");
view_listener_t::addMenu(new LLWorldEnableEnvPreset(), "World.EnableEnvPreset");
view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess");