From ce28e056c20bf2723f565bbf464b87781ec248a2 Mon Sep 17 00:00:00 2001
From: Jacek Antonelli
Date: Fri, 15 Aug 2008 23:45:42 -0500
Subject: Second Life viewer sources 1.20.2
---
linden/indra/SConstruct | 85 +-
linden/indra/indra_complete/indra_complete.sln | 58 +-
linden/indra/indra_complete/indra_complete_vc8.sln | 46 -
linden/indra/indra_complete/indra_complete_vc9.sln | 36 +-
linden/indra/lib/python/indra/base/llsd.py | 12 -
linden/indra/lib/python/indra/ipc/llsdhttp.py | 31 +-
linden/indra/lib/python/indra/util/llmanifest.py | 2 +-
linden/indra/llcharacter/lljoint.cpp | 9 +-
linden/indra/llcharacter/llstatemachine.h | 4 +-
linden/indra/llcommon/imageids.h | 38 +-
linden/indra/llcommon/indra_constants.h | 9 +-
linden/indra/llcommon/llagentconstants.h | 74 +-
linden/indra/llcommon/llapp.cpp | 24 +-
linden/indra/llcommon/llapp.h | 5 +-
linden/indra/llcommon/llapr.cpp | 2 +
linden/indra/llcommon/llcommon.vcproj | 7 +-
linden/indra/llcommon/lldarray.h | 3 +-
linden/indra/llcommon/lldefs.h | 11 +-
linden/indra/llcommon/llerror.cpp | 57 +-
linden/indra/llcommon/llevent.h | 7 -
linden/indra/llcommon/llfile.cpp | 11 +-
linden/indra/llcommon/llframetimer.cpp | 15 +
linden/indra/llcommon/llframetimer.h | 6 +
linden/indra/llcommon/lllslconstants.h | 1 +
linden/indra/llcommon/llmemory.h | 27 +
linden/indra/llcommon/llpreprocessor.h | 9 +-
linden/indra/llcommon/llptrskiplist.h | 1 +
linden/indra/llcommon/llskiplist.h | 1 +
linden/indra/llcommon/llsmoothstep.h | 50 +
linden/indra/llcommon/llstatenums.h | 8 +-
linden/indra/llcommon/llstl.h | 3 +
linden/indra/llcommon/llstreamtools.cpp | 81 +-
linden/indra/llcommon/llstreamtools.h | 5 -
linden/indra/llcommon/llstring.cpp | 21 +-
linden/indra/llcommon/llversionserver.h | 6 +-
linden/indra/llcommon/llversionviewer.h | 6 +-
linden/indra/llimage/llimage.cpp | 27 +-
linden/indra/llimage/llimage.h | 6 +-
linden/indra/llimagej2coj/llimagej2coj.cpp | 12 +
linden/indra/llinventory/lleconomy.cpp | 31 +-
linden/indra/llinventory/lleconomy.h | 11 +-
linden/indra/llinventory/llinventory.cpp | 1 +
linden/indra/llinventory/llinventory.h | 34 +-
linden/indra/llinventory/llparcel.cpp | 8 +-
linden/indra/llinventory/llparcelflags.h | 2 +-
linden/indra/llmath/files.lst | 2 +
linden/indra/llmath/llline.cpp | 189 +
linden/indra/llmath/llline.h | 75 +
linden/indra/llmath/llmath.h | 33 +
linden/indra/llmath/llmath.vcproj | 12 +
linden/indra/llmath/llquaternion.cpp | 186 +-
linden/indra/llmath/llquaternion.h | 164 +-
linden/indra/llmath/llrect.h | 5 +
linden/indra/llmath/llsphere.cpp | 364 +
linden/indra/llmath/llsphere.h | 72 +
linden/indra/llmath/lluuid.cpp | 5 +
linden/indra/llmath/lluuid.h | 1 +
linden/indra/llmath/llvolume.cpp | 269 +-
linden/indra/llmath/llvolume.h | 35 +-
linden/indra/llmath/llvolumemgr.cpp | 182 +-
linden/indra/llmath/llvolumemgr.h | 47 +-
linden/indra/llmath/m3math.cpp | 91 +-
linden/indra/llmath/m3math.h | 24 +-
linden/indra/llmath/m4math.cpp | 2 +-
linden/indra/llmath/m4math.h | 8 +-
linden/indra/llmath/v2math.h | 95 +-
linden/indra/llmath/v3dmath.h | 13 +-
linden/indra/llmath/v3math.cpp | 16 +
linden/indra/llmath/v3math.h | 123 +-
linden/indra/llmath/v4math.cpp | 8 +-
linden/indra/llmath/v4math.h | 127 +-
linden/indra/llmath/xform.h | 10 +-
linden/indra/llmedia/llmediaimplllmozlib.cpp | 2 +-
linden/indra/llmedia/llmediaimplquicktime.cpp | 35 +-
linden/indra/llmedia/llmediaobserver.h | 11 +
linden/indra/llmessage/llcachename.cpp | 7 +-
linden/indra/llmessage/llhttpnode.h | 1 -
linden/indra/llmessage/llinstantmessage.h | 2 +-
linden/indra/llmessage/lliohttpserver.cpp | 8 +-
linden/indra/llmessage/llmessageconfig.cpp | 8 +
linden/indra/llmessage/llmessageconfig.h | 1 +
linden/indra/llmessage/llmessagetemplate.h | 6 +-
linden/indra/llmessage/llnamevalue.cpp | 1216 +--
linden/indra/llmessage/llnamevalue.h | 53 +-
linden/indra/llmessage/llregionflags.h | 5 +-
linden/indra/llmessage/llservicebuilder.cpp | 7 +-
linden/indra/llmessage/llurlrequest.cpp | 6 +-
linden/indra/llmessage/llurlrequest.h | 5 +
linden/indra/llmessage/message.cpp | 163 +-
linden/indra/llmessage/message.h | 9 +-
linden/indra/llmessage/message_prehash.cpp | 4000 +++-----
linden/indra/llmessage/message_prehash.h | 6 -
linden/indra/llmessage/message_string_table.cpp | 2 -
linden/indra/llprimitive/llmaterialtable.cpp | 48 +
linden/indra/llprimitive/llmaterialtable.h | 57 +-
linden/indra/llprimitive/llprimitive.cpp | 45 +-
linden/indra/llprimitive/llprimitive.h | 54 +-
linden/indra/llprimitive/llprimitive.vcproj | 15 +-
linden/indra/llprimitive/llprimlinkinfo.h | 388 +
linden/indra/llrender/llfontgl.cpp | 6 +
linden/indra/llrender/llfontgl.h | 5 +-
linden/indra/llrender/llrendertarget.cpp | 59 +-
linden/indra/llrender/llrendertarget.h | 27 +-
linden/indra/llui/llalertdialog.cpp | 58 +-
linden/indra/llui/llalertdialog.h | 7 +-
linden/indra/llui/llbutton.cpp | 578 +-
linden/indra/llui/llbutton.h | 8 +-
linden/indra/llui/llcheckboxctrl.cpp | 3 +-
linden/indra/llui/llcheckboxctrl.h | 3 +-
linden/indra/llui/llcombobox.cpp | 75 +-
linden/indra/llui/llcombobox.h | 15 +-
linden/indra/llui/lldraghandle.cpp | 26 +-
linden/indra/llui/lldraghandle.h | 6 -
linden/indra/llui/llfloater.cpp | 265 +-
linden/indra/llui/llfloater.h | 14 +-
linden/indra/llui/llfocusmgr.cpp | 5 +-
linden/indra/llui/llfocusmgr.h | 7 +-
linden/indra/llui/llhtmlhelp.h | 3 +-
linden/indra/llui/lliconctrl.cpp | 59 +-
linden/indra/llui/lliconctrl.h | 6 +-
linden/indra/llui/lllineeditor.cpp | 216 +-
linden/indra/llui/lllineeditor.h | 40 +-
linden/indra/llui/llmenugl.cpp | 279 +-
linden/indra/llui/llmenugl.h | 50 +-
linden/indra/llui/llmodaldialog.cpp | 49 +-
linden/indra/llui/llmodaldialog.h | 2 +-
linden/indra/llui/llmultislider.cpp | 308 +-
linden/indra/llui/llmultislider.h | 4 +-
linden/indra/llui/llmultisliderctrl.cpp | 2 +
linden/indra/llui/llmultisliderctrl.h | 2 -
linden/indra/llui/llpanel.cpp | 320 +-
linden/indra/llui/llpanel.h | 40 +-
linden/indra/llui/llradiogroup.cpp | 5 +-
linden/indra/llui/llradiogroup.h | 4 +-
linden/indra/llui/llresizebar.cpp | 15 +-
linden/indra/llui/llresizebar.h | 3 -
linden/indra/llui/llresizehandle.cpp | 27 +-
linden/indra/llui/llresizehandle.h | 5 +-
linden/indra/llui/llresmgr.cpp | 2 -
linden/indra/llui/llresmgr.h | 66 +-
linden/indra/llui/llrootview.h | 3 -
linden/indra/llui/llscrollbar.cpp | 191 +-
linden/indra/llui/llscrollbar.h | 5 +-
linden/indra/llui/llscrollcontainer.cpp | 176 +-
linden/indra/llui/llscrollcontainer.h | 4 +-
linden/indra/llui/llscrollingpanellist.cpp | 9 +-
linden/indra/llui/llscrollingpanellist.h | 2 -
linden/indra/llui/llscrolllistctrl.cpp | 288 +-
linden/indra/llui/llscrolllistctrl.h | 35 +-
linden/indra/llui/llslider.cpp | 134 +-
linden/indra/llui/llslider.h | 10 +-
linden/indra/llui/llsliderctrl.cpp | 1 +
linden/indra/llui/llsliderctrl.h | 3 +-
linden/indra/llui/llspinctrl.cpp | 22 +-
linden/indra/llui/llspinctrl.h | 5 +-
linden/indra/llui/llstyle.cpp | 32 +-
linden/indra/llui/llstyle.h | 17 +-
linden/indra/llui/lltabcontainer.cpp | 213 +-
linden/indra/llui/lltabcontainer.h | 10 +-
linden/indra/llui/lltextbox.cpp | 95 +-
linden/indra/llui/lltextbox.h | 3 +-
linden/indra/llui/lltexteditor.cpp | 166 +-
linden/indra/llui/lltexteditor.h | 7 +-
linden/indra/llui/llui.cpp | 175 +-
linden/indra/llui/llui.h | 127 +-
linden/indra/llui/lluictrl.cpp | 22 +-
linden/indra/llui/lluictrl.h | 4 +-
linden/indra/llui/lluictrlfactory.cpp | 301 +-
linden/indra/llui/lluictrlfactory.h | 64 +-
linden/indra/llui/llview.cpp | 215 +-
linden/indra/llui/llview.h | 177 +-
linden/indra/llui/llviewborder.cpp | 81 +-
linden/indra/llui/llviewborder.h | 4 +-
linden/indra/llui/llviewquery.cpp | 5 -
linden/indra/llui/llviewquery.h | 10 +-
linden/indra/llvfs/llvfile.cpp | 1 -
linden/indra/llvfs/llvfile.h | 2 -
linden/indra/llwindow/lldxhardware.cpp | 37 +-
linden/indra/llwindow/lldxhardware.h | 7 +-
linden/indra/llwindow/llgl.cpp | 4 +-
linden/indra/llwindow/llglstates.h | 20 +-
linden/indra/llwindow/llkeyboard.cpp | 1 +
linden/indra/llwindow/llkeyboardmacosx.cpp | 4 +-
linden/indra/llwindow/llkeyboardsdl.cpp | 4 +-
linden/indra/llwindow/llkeyboardwin32.cpp | 6 +-
linden/indra/llwindow/lllogitechlcd.cpp | 5 +-
linden/indra/llwindow/llpreeditor.h | 2 +-
linden/indra/llwindow/llwindow.cpp | 50 +-
linden/indra/llwindow/llwindow.h | 15 +-
linden/indra/llwindow/llwindowheadless.h | 4 +-
linden/indra/llwindow/llwindowlinux.h | 2 +-
linden/indra/llwindow/llwindowmacosx.cpp | 30 +-
linden/indra/llwindow/llwindowmacosx.h | 13 +-
linden/indra/llwindow/llwindowmesaheadless.h | 4 +-
linden/indra/llwindow/llwindowsdl.cpp | 45 +-
linden/indra/llwindow/llwindowsdl.h | 7 +-
linden/indra/llwindow/llwindowsolaris.h | 4 +-
linden/indra/llwindow/llwindowwin32.cpp | 1074 +-
linden/indra/llwindow/llwindowwin32.h | 7 +-
linden/indra/llxml/llcontrol.cpp | 817 +-
linden/indra/llxml/llcontrol.h | 210 +-
linden/indra/lscript/lscript_byteconvert.h | 41 +-
linden/indra/lscript/lscript_compile/indra.l | 1 +
linden/indra/mac_updater/mac_updater.cpp | 1 +
linden/indra/newview/app_settings/cmd_line.xml | 335 +
linden/indra/newview/app_settings/colors.ini | 20 -
linden/indra/newview/app_settings/colors_base.xml | 344 +-
linden/indra/newview/app_settings/grass.xml | 12 +-
linden/indra/newview/app_settings/keys.ini | 18 +
linden/indra/newview/app_settings/keywords.ini | 5 +-
linden/indra/newview/app_settings/role_actions.xml | 314 -
linden/indra/newview/app_settings/settings.xml | 10129 +++++++++++++++++++
.../app_settings/settings_crash_behavior.xml | 15 +
.../indra/newview/app_settings/settings_files.xml | 22 +
.../newview/app_settings/settings_per_account.xml | 114 +
.../shaders/class1/deferred/diffuseF.glsl | 16 +
.../shaders/class1/deferred/diffuseV.glsl | 22 +
.../shaders/class1/environment/waterF.glsl | 2 +-
.../shaders/class1/environment/waterFogF.glsl | 4 +-
.../shaders/class1/environment/waterV.glsl | 5 +-
.../shaders/class1/lighting/lightF.glsl | 2 +-
.../shaders/class1/lighting/lightShinyF.glsl | 2 +-
.../shaders/class1/lighting/lightShinyWaterF.glsl | 2 +-
linden/indra/newview/app_settings/std_bump.ini | 30 +-
linden/indra/newview/audiosettings.h | 41 -
linden/indra/newview/fakevoicesoundsignal.cpp | 76 -
linden/indra/newview/fakevoicesoundsignal.h | 52 -
linden/indra/newview/featuretable.txt | 19 +
linden/indra/newview/featuretable_linux.txt | 1 +
linden/indra/newview/featuretable_mac.txt | 59 +-
linden/indra/newview/featuretable_solaris.txt | 1 +
linden/indra/newview/files.lst | 32 +-
linden/indra/newview/gpu_table.txt | 12 +-
linden/indra/newview/head.cpp | 153 -
linden/indra/newview/head.h | 63 -
.../installers/windows/installer_template.nsi | 16 +-
.../indra/newview/installers/windows/lang_de.nsi | 114 +-
.../newview/installers/windows/lang_en-us.nsi | 109 +-
.../indra/newview/installers/windows/lang_ja.nsi | 114 +-
.../indra/newview/installers/windows/lang_ko.nsi | 114 +-
linden/indra/newview/linux_tools/client-readme.txt | 5 +-
linden/indra/newview/linux_tools/wrapper.sh | 3 +-
linden/indra/newview/llagent.cpp | 404 +-
linden/indra/newview/llagent.h | 71 +-
linden/indra/newview/llappviewer.cpp | 1643 ++-
linden/indra/newview/llappviewer.h | 78 +-
linden/indra/newview/llappviewerlinux.cpp | 103 +-
linden/indra/newview/llappviewerlinux.h | 4 +
linden/indra/newview/llappviewermacosx.cpp | 101 +-
linden/indra/newview/llappviewermacosx.h | 3 +
linden/indra/newview/llappviewerwin32.cpp | 92 +-
linden/indra/newview/llappviewerwin32.h | 8 +-
linden/indra/newview/llassetuploadresponders.cpp | 4 +-
linden/indra/newview/llaudiosourcevo.cpp | 46 +-
linden/indra/newview/llcallingcard.cpp | 13 +
linden/indra/newview/llcameraview.cpp | 259 -
linden/indra/newview/llcameraview.h | 92 -
linden/indra/newview/llchatbar.cpp | 81 +-
linden/indra/newview/llchatbar.h | 4 +-
linden/indra/newview/llcloud.cpp | 2 +-
linden/indra/newview/llcolorswatch.cpp | 73 +-
linden/indra/newview/llcolorswatch.h | 7 +-
linden/indra/newview/llcommandlineparser.cpp | 543 +
linden/indra/newview/llcommandlineparser.h | 166 +
linden/indra/newview/llcompilequeue.cpp | 21 +-
linden/indra/newview/llconsole.cpp | 20 +-
linden/indra/newview/llconsole.h | 2 -
linden/indra/newview/llcontainerview.cpp | 108 +-
linden/indra/newview/llcontainerview.h | 12 +-
linden/indra/newview/llcontroldef.cpp | 2159 ----
linden/indra/newview/llcubemap.cpp | 8 +-
linden/indra/newview/llcurrencyuimanager.cpp | 4 +-
linden/indra/newview/lldebugview.cpp | 28 +-
linden/indra/newview/lldebugview.h | 7 +-
linden/indra/newview/lldelayedgestureerror.cpp | 125 +
linden/indra/newview/lldelayedgestureerror.h | 82 +
linden/indra/newview/lldrawable.cpp | 2 +-
linden/indra/newview/lldrawpoolalpha.cpp | 2 +-
linden/indra/newview/lldrawpoolavatar.cpp | 2 +-
linden/indra/newview/lldrawpoolbump.cpp | 7 +-
linden/indra/newview/lldrawpoolground.cpp | 2 +-
linden/indra/newview/lldrawpoolsky.cpp | 4 +-
linden/indra/newview/lldrawpoolterrain.cpp | 10 +-
linden/indra/newview/lldrawpoolwater.cpp | 24 +-
linden/indra/newview/lldrawpoolwater.h | 1 +
linden/indra/newview/lldrawpoolwlsky.cpp | 4 +-
linden/indra/newview/lldynamictexture.cpp | 20 +-
linden/indra/newview/llface.cpp | 6 +-
linden/indra/newview/llfasttimerview.cpp | 36 +-
linden/indra/newview/llfasttimerview.h | 3 -
linden/indra/newview/llfeaturemanager.cpp | 4 +-
linden/indra/newview/llfeaturemanager.h | 5 +-
linden/indra/newview/llfirstuse.cpp | 16 +-
linden/indra/newview/llfirstuse.h | 1 -
linden/indra/newview/llflexibleobject.cpp | 9 +-
linden/indra/newview/llfloaterabout.cpp | 19 +-
linden/indra/newview/llfloateractivespeakers.cpp | 114 +-
linden/indra/newview/llfloateractivespeakers.h | 8 +-
linden/indra/newview/llfloateranimpreview.cpp | 18 +-
linden/indra/newview/llfloaterauction.cpp | 10 +-
linden/indra/newview/llfloateravatarinfo.cpp | 26 +-
linden/indra/newview/llfloateravatarpicker.cpp | 12 +-
linden/indra/newview/llfloateravatarpicker.h | 2 +-
linden/indra/newview/llfloateravatartextures.cpp | 4 +-
linden/indra/newview/llfloaterbuildoptions.cpp | 4 +-
linden/indra/newview/llfloaterbump.cpp | 6 +-
linden/indra/newview/llfloaterbuy.cpp | 28 +-
linden/indra/newview/llfloaterbuycontents.cpp | 24 +-
linden/indra/newview/llfloaterbuycurrency.cpp | 6 +-
linden/indra/newview/llfloaterbuyland.cpp | 55 +-
linden/indra/newview/llfloatercamera.cpp | 119 +
linden/indra/newview/llfloatercamera.h | 60 +
linden/indra/newview/llfloaterchat.cpp | 70 +-
linden/indra/newview/llfloaterchat.h | 7 +-
linden/indra/newview/llfloaterchatterbox.cpp | 51 +-
linden/indra/newview/llfloaterchatterbox.h | 3 +-
linden/indra/newview/llfloaterclassified.cpp | 4 +-
linden/indra/newview/llfloaterclothing.cpp | 13 +-
linden/indra/newview/llfloatercolorpicker.cpp | 34 +-
linden/indra/newview/llfloatercustomize.cpp | 377 +-
linden/indra/newview/llfloaterdaycycle.cpp | 92 +-
linden/indra/newview/llfloaterdirectory.cpp | 12 +-
linden/indra/newview/llfloatereditui.cpp | 34 +-
linden/indra/newview/llfloatereditui.h | 2 +-
linden/indra/newview/llfloaterenvsettings.cpp | 33 +-
linden/indra/newview/llfloaterevent.cpp | 6 +-
linden/indra/newview/llfloaterfriends.cpp | 65 +-
linden/indra/newview/llfloatergesture.cpp | 15 +-
linden/indra/newview/llfloatergodtools.cpp | 26 +-
linden/indra/newview/llfloatergroups.cpp | 13 +-
linden/indra/newview/llfloatergroups.h | 2 +-
linden/indra/newview/llfloaterhardwaresettings.cpp | 42 +-
linden/indra/newview/llfloaterhardwaresettings.h | 1 +
linden/indra/newview/llfloaterhtml.cpp | 26 +-
linden/indra/newview/llfloaterhtml.h | 8 +-
linden/indra/newview/llfloaterhtmlhelp.cpp | 42 +-
linden/indra/newview/llfloaterhtmlhelp.h | 5 +-
linden/indra/newview/llfloaterhud.cpp | 140 +
linden/indra/newview/llfloaterhud.h | 66 +
linden/indra/newview/llfloaterimagepreview.cpp | 24 +-
linden/indra/newview/llfloaterinspect.cpp | 22 +-
linden/indra/newview/llfloaterjoystick.cpp | 272 +
linden/indra/newview/llfloaterjoystick.h | 78 +
linden/indra/newview/llfloaterlagmeter.cpp | 53 +-
linden/indra/newview/llfloaterlagmeter.h | 9 +-
linden/indra/newview/llfloaterland.cpp | 262 +-
linden/indra/newview/llfloaterland.h | 8 +-
linden/indra/newview/llfloaterlandholdings.cpp | 6 +-
linden/indra/newview/llfloaterlandmark.cpp | 20 +-
linden/indra/newview/llfloaterlandmark.h | 2 +-
linden/indra/newview/llfloatermap.cpp | 25 +-
linden/indra/newview/llfloatermute.cpp | 45 +-
linden/indra/newview/llfloatermute.h | 7 +-
linden/indra/newview/llfloaternamedesc.cpp | 6 +-
linden/indra/newview/llfloaternewim.cpp | 45 +-
linden/indra/newview/llfloaternewim.h | 2 +-
linden/indra/newview/llfloateropenobject.cpp | 8 +-
linden/indra/newview/llfloaterparcel.cpp | 6 +-
linden/indra/newview/llfloaterpermissionsmgr.cpp | 10 -
linden/indra/newview/llfloaterpermissionsmgr.h | 3 -
linden/indra/newview/llfloaterpostcard.cpp | 10 +-
linden/indra/newview/llfloaterpostprocess.cpp | 37 +-
linden/indra/newview/llfloaterpreference.cpp | 41 +-
linden/indra/newview/llfloaterpreference.h | 1 -
linden/indra/newview/llfloaterproperties.cpp | 39 +-
linden/indra/newview/llfloaterregioninfo.cpp | 307 +-
linden/indra/newview/llfloaterregioninfo.h | 1 -
linden/indra/newview/llfloaterreleasemsg.cpp | 6 +-
linden/indra/newview/llfloaterreporter.cpp | 26 +-
linden/indra/newview/llfloaterscriptdebug.cpp | 8 +-
linden/indra/newview/llfloatersellland.cpp | 38 +-
linden/indra/newview/llfloatersettingsdebug.cpp | 492 +
linden/indra/newview/llfloatersettingsdebug.h | 61 +
linden/indra/newview/llfloatersnapshot.cpp | 809 +-
linden/indra/newview/llfloatersnapshot.h | 10 +-
linden/indra/newview/llfloaterstats.cpp | 87 +
linden/indra/newview/llfloaterstats.h | 56 +
linden/indra/newview/llfloatertelehub.cpp | 34 +-
linden/indra/newview/llfloatertest.cpp | 10 +-
linden/indra/newview/llfloatertools.cpp | 203 +-
linden/indra/newview/llfloatertopobjects.cpp | 14 +-
linden/indra/newview/llfloatertos.cpp | 16 +-
linden/indra/newview/llfloaterurldisplay.cpp | 6 +-
linden/indra/newview/llfloaterurlentry.cpp | 6 +-
.../indra/newview/llfloatervoicedevicesettings.cpp | 323 +
.../indra/newview/llfloatervoicedevicesettings.h | 82 +
linden/indra/newview/llfloatervoicewizard.cpp | 499 -
linden/indra/newview/llfloatervoicewizard.h | 108 -
linden/indra/newview/llfloaterwater.cpp | 31 +-
linden/indra/newview/llfloaterwindlight.cpp | 35 +-
linden/indra/newview/llfloaterworldmap.cpp | 137 +-
linden/indra/newview/llfolderview.cpp | 446 +-
linden/indra/newview/llfolderview.h | 31 +-
linden/indra/newview/llframestatview.cpp | 10 -
linden/indra/newview/llframestatview.h | 3 -
linden/indra/newview/llgesturemgr.cpp | 16 +-
linden/indra/newview/llgivemoney.cpp | 24 +-
linden/indra/newview/llglsandbox.cpp | 82 +-
linden/indra/newview/llglslshader.cpp | 61 +-
linden/indra/newview/llglslshader.h | 5 +
linden/indra/newview/llgroupmgr.cpp | 46 +-
linden/indra/newview/llgroupmgr.h | 7 +-
linden/indra/newview/llgroupnotify.cpp | 79 +-
linden/indra/newview/llhoverview.cpp | 56 +-
linden/indra/newview/llhoverview.h | 5 +-
linden/indra/newview/llhudeffect.cpp | 2 +-
linden/indra/newview/llhudeffectbeam.cpp | 4 +-
linden/indra/newview/llhudeffectlookat.cpp | 31 +-
linden/indra/newview/llhudeffectlookat.h | 2 +-
linden/indra/newview/llhudeffectpointat.cpp | 21 +-
linden/indra/newview/llhudeffectpointat.h | 2 +-
linden/indra/newview/llhudeffecttrail.cpp | 6 +-
linden/indra/newview/llhudicon.cpp | 10 +-
linden/indra/newview/llhudmanager.cpp | 25 +-
linden/indra/newview/llhudmanager.h | 6 +-
linden/indra/newview/llhudrender.cpp | 12 +-
linden/indra/newview/llhudtext.cpp | 43 +-
linden/indra/newview/llhudtext.h | 2 +
linden/indra/newview/llhudview.cpp | 10 -
linden/indra/newview/llhudview.h | 3 -
linden/indra/newview/llimpanel.cpp | 91 +-
linden/indra/newview/llimpanel.h | 5 +-
linden/indra/newview/llimview.cpp | 41 +-
linden/indra/newview/llinventoryactions.cpp | 2 +-
linden/indra/newview/llinventorybridge.cpp | 63 +-
linden/indra/newview/llinventorybridge.h | 30 +-
linden/indra/newview/llinventorymodel.cpp | 5 +
linden/indra/newview/llinventorymodel.h | 1 +
linden/indra/newview/llinventoryview.cpp | 55 +-
linden/indra/newview/llinventoryview.h | 8 +-
linden/indra/newview/lljoystickbutton.cpp | 87 +-
linden/indra/newview/lljoystickbutton.h | 11 +-
linden/indra/newview/lllandmarklist.cpp | 5 +-
linden/indra/newview/lllcd.cpp | 17 +-
linden/indra/newview/lllogchat.cpp | 12 +-
linden/indra/newview/lllogchat.h | 10 +-
linden/indra/newview/llmanip.cpp | 63 +-
linden/indra/newview/llmanip.h | 2 +-
linden/indra/newview/llmaniprotate.cpp | 59 +-
linden/indra/newview/llmanipscale.cpp | 100 +-
linden/indra/newview/llmaniptranslate.cpp | 88 +-
linden/indra/newview/llmapresponders.cpp | 48 +-
linden/indra/newview/llmediaremotectrl.cpp | 33 +-
linden/indra/newview/llmemoryview.cpp | 10 -
linden/indra/newview/llmemoryview.h | 3 -
linden/indra/newview/llmenucommands.cpp | 2 +-
linden/indra/newview/llmimetypes.cpp | 4 +-
linden/indra/newview/llmorphview.cpp | 16 +-
linden/indra/newview/llmorphview.h | 3 -
linden/indra/newview/llmoveview.cpp | 94 +-
linden/indra/newview/llmoveview.h | 24 +-
linden/indra/newview/llmutelist.cpp | 52 +-
linden/indra/newview/llmutelist.h | 8 +-
linden/indra/newview/llnameeditor.cpp | 33 +-
linden/indra/newview/llnameeditor.h | 7 +-
linden/indra/newview/llnamelistctrl.cpp | 2 +
linden/indra/newview/llnamelistctrl.h | 3 +-
linden/indra/newview/llnetmap.cpp | 91 +-
linden/indra/newview/llnetmap.h | 11 -
linden/indra/newview/llnotify.cpp | 23 +-
linden/indra/newview/llnotify.h | 2 -
linden/indra/newview/lloverlaybar.cpp | 36 +-
linden/indra/newview/lloverlaybar.h | 3 -
linden/indra/newview/llpanelLCD.cpp | 18 +-
linden/indra/newview/llpanelaudioprefs.cpp | 4 +-
linden/indra/newview/llpanelaudiovolume.cpp | 2 +-
linden/indra/newview/llpanelavatar.cpp | 117 +-
linden/indra/newview/llpanelclassified.cpp | 60 +-
linden/indra/newview/llpanelcontents.cpp | 12 +-
linden/indra/newview/llpaneldebug.cpp | 2 +-
linden/indra/newview/llpaneldirbrowser.cpp | 68 +-
linden/indra/newview/llpaneldirbrowser.h | 2 -
linden/indra/newview/llpaneldirclassified.cpp | 2 +-
linden/indra/newview/llpaneldirfind.cpp | 4 +-
linden/indra/newview/llpaneldisplay.cpp | 191 +-
linden/indra/newview/llpanelevent.cpp | 42 +-
linden/indra/newview/llpanelevent.h | 1 -
linden/indra/newview/llpanelface.cpp | 125 +-
linden/indra/newview/llpanelgeneral.cpp | 52 +-
linden/indra/newview/llpanelgroup.cpp | 21 +-
linden/indra/newview/llpanelgroupgeneral.cpp | 35 +-
linden/indra/newview/llpanelgroupinvite.cpp | 81 +-
linden/indra/newview/llpanelgrouplandmoney.cpp | 2 +-
linden/indra/newview/llpanelgroupnotices.cpp | 28 +-
linden/indra/newview/llpanelgrouproles.cpp | 82 +-
linden/indra/newview/llpanelgrouproles.h | 2 +-
linden/indra/newview/llpanelgroupvoting.cpp | 4 +-
linden/indra/newview/llpanelinput.cpp | 30 +-
linden/indra/newview/llpanelinput.h | 3 +
linden/indra/newview/llpanelinventory.cpp | 120 +-
linden/indra/newview/llpanelland.cpp | 32 +-
linden/indra/newview/llpanellandmedia.cpp | 51 +-
linden/indra/newview/llpanellogin.cpp | 435 +-
linden/indra/newview/llpanellogin.h | 5 +-
linden/indra/newview/llpanelmorph.cpp | 2 +-
linden/indra/newview/llpanelmsgs.cpp | 8 +-
linden/indra/newview/llpanelnetwork.cpp | 4 +-
linden/indra/newview/llpanelobject.cpp | 172 +-
linden/indra/newview/llpanelpermissions.cpp | 134 +-
linden/indra/newview/llpanelpick.cpp | 35 +-
linden/indra/newview/llpanelplace.cpp | 24 +-
linden/indra/newview/llpanelvolume.cpp | 38 +-
linden/indra/newview/llpanelweb.cpp | 6 +-
linden/indra/newview/llprefschat.cpp | 8 +-
linden/indra/newview/llprefsim.cpp | 6 +-
linden/indra/newview/llprefsvoice.cpp | 68 +-
linden/indra/newview/llprefsvoice.h | 7 +-
linden/indra/newview/llpreview.cpp | 16 +-
linden/indra/newview/llpreviewanim.cpp | 8 +-
linden/indra/newview/llpreviewgesture.cpp | 82 +-
linden/indra/newview/llpreviewgesture.h | 2 +-
linden/indra/newview/llpreviewlandmark.cpp | 35 +-
linden/indra/newview/llpreviewnotecard.cpp | 50 +-
linden/indra/newview/llpreviewnotecard.h | 2 +-
linden/indra/newview/llpreviewscript.cpp | 173 +-
linden/indra/newview/llpreviewscript.h | 5 +-
linden/indra/newview/llpreviewsound.cpp | 8 +-
linden/indra/newview/llpreviewtexture.cpp | 204 +-
linden/indra/newview/llpreviewtexture.h | 4 +-
linden/indra/newview/llprogressview.cpp | 235 +-
linden/indra/newview/llprogressview.h | 11 +-
linden/indra/newview/llregionposition.cpp | 2 +-
linden/indra/newview/llrendersphere.cpp | 171 +
linden/indra/newview/llrendersphere.h | 47 +
linden/indra/newview/llselectmgr.cpp | 288 +-
linden/indra/newview/llselectmgr.h | 11 +-
linden/indra/newview/llspatialpartition.cpp | 12 +-
linden/indra/newview/llsphere.cpp | 183 -
linden/indra/newview/llsphere.h | 58 -
linden/indra/newview/llsprite.cpp | 2 +-
linden/indra/newview/llstartup.cpp | 487 +-
linden/indra/newview/llstatbar.cpp | 10 -
linden/indra/newview/llstatbar.h | 3 -
linden/indra/newview/llstatgraph.cpp | 100 +-
linden/indra/newview/llstatgraph.h | 2 -
linden/indra/newview/llstatusbar.cpp | 55 +-
linden/indra/newview/llstatusbar.h | 3 -
linden/indra/newview/llstatview.cpp | 10 -
linden/indra/newview/llstatview.h | 2 -
linden/indra/newview/llsurface.cpp | 2 +-
linden/indra/newview/llsurfacepatch.cpp | 2 +-
linden/indra/newview/lltexlayer.cpp | 2 +-
linden/indra/newview/lltexturecache.cpp | 214 +-
linden/indra/newview/lltexturecache.h | 5 +
linden/indra/newview/lltexturectrl.cpp | 124 +-
linden/indra/newview/lltexturectrl.h | 4 +-
linden/indra/newview/lltexturefetch.cpp | 84 +-
linden/indra/newview/lltexturefetch.h | 2 +
linden/indra/newview/lltextureview.cpp | 21 +-
linden/indra/newview/lltextureview.h | 3 -
linden/indra/newview/lltool.cpp | 2 +-
linden/indra/newview/lltoolbar.cpp | 165 +-
linden/indra/newview/lltoolbrush.cpp | 28 +-
linden/indra/newview/lltoolbrush.h | 3 +-
linden/indra/newview/lltoolcomp.cpp | 133 +-
linden/indra/newview/lltoolcomp.h | 18 +-
linden/indra/newview/lltooldraganddrop.cpp | 167 +-
linden/indra/newview/lltooldraganddrop.h | 5 +-
linden/indra/newview/lltoolface.cpp | 23 +-
linden/indra/newview/lltoolface.h | 4 +-
linden/indra/newview/lltoolfocus.cpp | 29 +-
linden/indra/newview/lltoolfocus.h | 4 +-
linden/indra/newview/lltoolgrab.cpp | 37 +-
linden/indra/newview/lltoolgrab.h | 4 +-
linden/indra/newview/lltoolgun.cpp | 29 +-
linden/indra/newview/lltoolgun.h | 5 +-
linden/indra/newview/lltoolindividual.cpp | 13 +-
linden/indra/newview/lltoolindividual.h | 4 +-
linden/indra/newview/lltoolmgr.cpp | 217 +-
linden/indra/newview/lltoolmgr.h | 8 +-
linden/indra/newview/lltoolmorph.cpp | 16 +-
linden/indra/newview/lltoolmorph.h | 2 +-
linden/indra/newview/lltoolobjpicker.cpp | 5 +-
linden/indra/newview/lltoolobjpicker.h | 3 +-
linden/indra/newview/lltoolpie.cpp | 71 +-
linden/indra/newview/lltoolpie.h | 4 +-
linden/indra/newview/lltoolpipette.cpp | 17 +-
linden/indra/newview/lltoolpipette.h | 4 +-
linden/indra/newview/lltoolplacer.cpp | 16 +-
linden/indra/newview/lltoolselect.cpp | 33 +-
linden/indra/newview/lltoolselect.h | 3 +-
linden/indra/newview/lltoolselectland.cpp | 13 +-
linden/indra/newview/lltoolselectland.h | 3 +-
linden/indra/newview/lltoolselectrect.cpp | 6 +-
linden/indra/newview/lltoolview.cpp | 6 +-
linden/indra/newview/lltracker.cpp | 29 +-
linden/indra/newview/lluploaddialog.cpp | 4 +-
linden/indra/newview/llurldispatcher.cpp | 65 +-
linden/indra/newview/llurlsimstring.cpp | 10 +-
linden/indra/newview/llurlsimstring.h | 2 +-
linden/indra/newview/lluserauth.cpp | 18 +-
linden/indra/newview/lluserauth.h | 9 +-
linden/indra/newview/llvectorperfoptions.cpp | 99 +-
linden/indra/newview/llvectorperfoptions.h | 6 +-
linden/indra/newview/llvelocitybar.cpp | 15 -
linden/indra/newview/llvelocitybar.h | 3 -
linden/indra/newview/llviewchildren.cpp | 32 +-
linden/indra/newview/llvieweraudio.cpp | 15 +-
linden/indra/newview/llvieweraudio.h | 6 +
linden/indra/newview/llviewercamera.cpp | 13 +-
linden/indra/newview/llviewercamera.h | 3 +-
linden/indra/newview/llviewercontrol.cpp | 894 +-
linden/indra/newview/llviewercontrol.h | 34 +-
linden/indra/newview/llviewerdisplay.cpp | 93 +-
linden/indra/newview/llviewerimage.cpp | 59 +-
linden/indra/newview/llviewerimage.h | 10 +
linden/indra/newview/llviewerimagelist.cpp | 627 +-
linden/indra/newview/llviewerimagelist.h | 77 +-
linden/indra/newview/llviewerjoint.cpp | 2 +-
linden/indra/newview/llviewerjointmesh.cpp | 55 +-
linden/indra/newview/llviewerjointmesh.h | 3 +
linden/indra/newview/llviewerjoystick.cpp | 993 +-
linden/indra/newview/llviewerjoystick.h | 73 +-
linden/indra/newview/llviewerkeyboard.cpp | 114 +-
linden/indra/newview/llviewerkeyboard.h | 3 +-
linden/indra/newview/llviewermedia.cpp | 5 +-
linden/indra/newview/llviewermenu.cpp | 684 +-
linden/indra/newview/llviewermenu.h | 1 +
linden/indra/newview/llviewermenufile.cpp | 32 +-
linden/indra/newview/llviewermessage.cpp | 226 +-
linden/indra/newview/llviewernetwork.cpp | 7 +-
linden/indra/newview/llviewernetwork.h | 7 +-
linden/indra/newview/llviewerobject.cpp | 99 +-
linden/indra/newview/llviewerobject.h | 2 -
linden/indra/newview/llviewerobjectlist.cpp | 24 +-
linden/indra/newview/llviewerparcelmedia.cpp | 6 +-
.../indra/newview/llviewerparcelmediaautoplay.cpp | 5 +-
linden/indra/newview/llviewerparcelmgr.cpp | 270 +-
linden/indra/newview/llviewerparcelmgr.h | 9 +-
linden/indra/newview/llviewerparceloverlay.cpp | 12 +-
linden/indra/newview/llviewerparceloverlay.h | 1 -
linden/indra/newview/llviewerpartsim.cpp | 10 +-
linden/indra/newview/llviewerpartsim.h | 8 +-
linden/indra/newview/llviewerpartsource.cpp | 42 +-
linden/indra/newview/llviewerregion.cpp | 13 +-
linden/indra/newview/llviewerstats.cpp | 91 +-
linden/indra/newview/llviewerstats.h | 12 +-
linden/indra/newview/llviewertexteditor.cpp | 178 +-
linden/indra/newview/llviewertexteditor.h | 3 +-
linden/indra/newview/llviewerthrottle.cpp | 4 +-
linden/indra/newview/llvieweruictrlfactory.cpp | 128 -
linden/indra/newview/llvieweruictrlfactory.h | 71 -
linden/indra/newview/llviewerwindow.cpp | 756 +-
linden/indra/newview/llviewerwindow.h | 8 +-
linden/indra/newview/llvlcomposition.cpp | 22 +-
linden/indra/newview/llvoavatar.cpp | 313 +-
linden/indra/newview/llvoavatar.h | 10 +-
linden/indra/newview/llvoclouds.cpp | 4 +-
linden/indra/newview/llvograss.cpp | 7 +-
linden/indra/newview/llvoground.cpp | 4 +-
linden/indra/newview/llvoiceclient.cpp | 52 +-
linden/indra/newview/llvoiceremotectrl.cpp | 42 +-
linden/indra/newview/llvoicevisualizer.cpp | 26 +-
linden/indra/newview/llvopartgroup.cpp | 10 +-
linden/indra/newview/llvosky.cpp | 20 +-
linden/indra/newview/llvotextbubble.cpp | 2 +-
linden/indra/newview/llvotree.cpp | 4 +-
linden/indra/newview/llvovolume.cpp | 56 +-
linden/indra/newview/llvowater.cpp | 3 +-
linden/indra/newview/llwaterparammanager.cpp | 4 +-
linden/indra/newview/llwaterparamset.cpp | 4 +-
linden/indra/newview/llwearablelist.cpp | 38 +-
linden/indra/newview/llwearablelist.h | 2 -
linden/indra/newview/llwebbrowserctrl.cpp | 83 +-
linden/indra/newview/llwebbrowserctrl.h | 22 +-
linden/indra/newview/llwind.cpp | 4 +-
linden/indra/newview/llwlparammanager.cpp | 4 +-
linden/indra/newview/llworld.cpp | 101 +-
linden/indra/newview/llworld.h | 20 +-
linden/indra/newview/llworldmap.cpp | 119 +-
linden/indra/newview/llworldmap.h | 9 +-
linden/indra/newview/llworldmapview.cpp | 253 +-
linden/indra/newview/llworldmapview.h | 38 +-
linden/indra/newview/llxmlrpctransaction.cpp | 5 +-
linden/indra/newview/lsl_guide.html | 61 +-
.../newview/macview.xcodeproj/project.pbxproj | 189 +-
linden/indra/newview/macview_Prefix.h | 7 +-
linden/indra/newview/moviemaker.cpp | 811 --
linden/indra/newview/moviemaker.h | 143 -
linden/indra/newview/newview.vcproj | 114 +-
linden/indra/newview/newview_vc8.vcproj | 169 +-
linden/indra/newview/newview_vc9.vcproj | 166 +-
linden/indra/newview/pipeline.cpp | 295 +-
linden/indra/newview/pipeline.h | 6 +-
linden/indra/newview/releasenotes.txt | 1564 ++-
.../newview/secondlife setup build dazzle.bat | 4 +
linden/indra/newview/skins/textures/textures.xml | 838 +-
.../newview/skins/xui/de/floater_about_land.xml | 5 +-
.../newview/skins/xui/de/floater_critical.xml | 3 -
.../indra/newview/skins/xui/de/floater_friends.xml | 35 -
.../indra/newview/skins/xui/de/floater_groups.xml | 19 -
.../xui/de/floater_instant_message_ad_hoc.xml | 2 +-
.../skins/xui/de/floater_instant_message_group.xml | 2 +-
.../newview/skins/xui/de/floater_joystick.xml | 53 +-
.../skins/xui/de/floater_preview_new_landmark.xml | 9 -
linden/indra/newview/skins/xui/de/floater_rate.xml | 44 -
linden/indra/newview/skins/xui/de/menu_viewer.xml | 12 +-
.../indra/newview/skins/xui/de/panel_friends.xml | 3 +-
.../newview/skins/xui/de/panel_music_remote.xml | 15 -
.../newview/skins/xui/de/panel_overlaybar.xml | 4 +-
.../skins/xui/de/panel_preferences_graphics2.xml | 59 -
.../skins/xui/de/panel_preferences_graphics3.xml | 54 -
.../newview/skins/xui/de/panel_settings_chat.xml | 57 -
.../newview/skins/xui/de/panel_settings_im.xml | 13 -
.../newview/skins/xui/de/panel_settings_msgbox.xml | 12 -
.../skins/xui/de/panel_settings_network.xml | 56 -
.../newview/skins/xui/de/panel_settings_web.xml | 50 -
.../skins/xui/de/panel_speaker_controls.xml | 6 +-
.../indra/newview/skins/xui/de/panel_toolbar.xml | 6 +-
linden/indra/newview/skins/xui/en-us/alerts.xml | 116 +-
.../newview/skins/xui/en-us/floater_about.xml | 53 +-
.../newview/skins/xui/en-us/floater_about_land.xml | 109 +-
.../skins/xui/en-us/floater_avatar_textures.xml | 4 +-
.../skins/xui/en-us/floater_buy_contents.xml | 5 +-
.../skins/xui/en-us/floater_buy_currency.xml | 28 +-
.../newview/skins/xui/en-us/floater_buy_land.xml | 96 +-
.../newview/skins/xui/en-us/floater_buy_object.xml | 10 +-
.../newview/skins/xui/en-us/floater_camera.xml | 19 +
.../skins/xui/en-us/floater_chat_history.xml | 40 +-
.../newview/skins/xui/en-us/floater_chatterbox.xml | 9 +-
.../newview/skins/xui/en-us/floater_critical.xml | 21 +-
.../newview/skins/xui/en-us/floater_customize.xml | 4 +-
.../skins/xui/en-us/floater_day_cycle_options.xml | 68 +-
.../newview/skins/xui/en-us/floater_directory.xml | 37 +-
.../skins/xui/en-us/floater_env_settings.xml | 14 +-
.../newview/skins/xui/en-us/floater_friends.xml | 65 -
.../newview/skins/xui/en-us/floater_gesture.xml | 16 +-
.../newview/skins/xui/en-us/floater_groups.xml | 39 -
.../skins/xui/en-us/floater_hardware_settings.xml | 91 +-
.../indra/newview/skins/xui/en-us/floater_html.xml | 6 +-
.../indra/newview/skins/xui/en-us/floater_hud.xml | 9 +
.../skins/xui/en-us/floater_instant_message.xml | 32 +-
.../xui/en-us/floater_instant_message_ad_hoc.xml | 28 +-
.../xui/en-us/floater_instant_message_group.xml | 26 +-
.../newview/skins/xui/en-us/floater_inventory.xml | 10 +-
.../newview/skins/xui/en-us/floater_joystick.xml | 223 +-
.../newview/skins/xui/en-us/floater_lagmeter.xml | 2 +-
.../skins/xui/en-us/floater_live_lsleditor.xml | 4 +-
.../newview/skins/xui/en-us/floater_moveview.xml | 7 +-
.../indra/newview/skins/xui/en-us/floater_mute.xml | 5 +-
.../skins/xui/en-us/floater_mute_object.xml | 2 +-
.../newview/skins/xui/en-us/floater_my_friends.xml | 4 +-
.../skins/xui/en-us/floater_post_process.xml | 38 +-
.../skins/xui/en-us/floater_preview_gesture.xml | 8 +-
.../xui/en-us/floater_preview_new_landmark.xml | 28 -
.../floater_preview_notecard_keep_discard.xml | 2 +-
.../indra/newview/skins/xui/en-us/floater_rate.xml | 81 -
.../skins/xui/en-us/floater_report_abuse.xml | 16 +-
.../newview/skins/xui/en-us/floater_report_bug.xml | 8 +-
.../skins/xui/en-us/floater_script_ed_panel.xml | 8 +-
.../skins/xui/en-us/floater_script_preview.xml | 2 +-
.../newview/skins/xui/en-us/floater_sell_land.xml | 24 +-
.../skins/xui/en-us/floater_settings_debug.xml | 2 +-
.../newview/skins/xui/en-us/floater_snapshot.xml | 4 +-
.../newview/skins/xui/en-us/floater_tools.xml | 118 +-
.../skins/xui/en-us/floater_top_objects.xml | 12 +-
.../indra/newview/skins/xui/en-us/floater_tos.xml | 6 +-
.../newview/skins/xui/en-us/floater_water.xml | 56 +-
.../skins/xui/en-us/floater_windlight_options.xml | 114 +-
.../newview/skins/xui/en-us/floater_world_map.xml | 7 +-
.../newview/skins/xui/en-us/menu_inventory.xml | 6 +-
.../indra/newview/skins/xui/en-us/menu_login.xml | 2 +-
.../indra/newview/skins/xui/en-us/menu_viewer.xml | 150 +-
.../indra/newview/skins/xui/en-us/mime_types.xml | 6 +-
.../indra/newview/skins/xui/en-us/panel_audio.xml | 14 +-
.../indra/newview/skins/xui/en-us/panel_avatar.xml | 62 +-
.../skins/xui/en-us/panel_avatar_classified.xml | 16 +-
.../newview/skins/xui/en-us/panel_avatar_pick.xml | 12 +-
.../indra/newview/skins/xui/en-us/panel_bg_tab.xml | 11 +-
.../newview/skins/xui/en-us/panel_bg_toolbar.xml | 7 +
.../newview/skins/xui/en-us/panel_chat_bar.xml | 24 +-
.../newview/skins/xui/en-us/panel_classified.xml | 18 +-
.../newview/skins/xui/en-us/panel_friends.xml | 2 +-
.../indra/newview/skins/xui/en-us/panel_group.xml | 2 +-
.../skins/xui/en-us/panel_group_general.xml | 14 +-
.../newview/skins/xui/en-us/panel_group_invite.xml | 20 +-
.../skins/xui/en-us/panel_group_land_money.xml | 16 +-
.../skins/xui/en-us/panel_group_notices.xml | 20 +-
.../newview/skins/xui/en-us/panel_group_roles.xml | 52 +-
.../newview/skins/xui/en-us/panel_group_voting.xml | 11 +-
.../skins/xui/en-us/panel_land_covenant.xml | 28 +-
.../indra/newview/skins/xui/en-us/panel_login.xml | 55 +-
.../skins/xui/en-us/panel_master_volume.xml | 2 +-
.../skins/xui/en-us/panel_media_controls.xml | 92 +-
.../newview/skins/xui/en-us/panel_media_remote.xml | 8 +-
.../xui/en-us/panel_media_remote_expanded.xml | 32 +-
.../newview/skins/xui/en-us/panel_music_remote.xml | 23 -
.../newview/skins/xui/en-us/panel_overlaybar.xml | 18 +-
.../indra/newview/skins/xui/en-us/panel_place.xml | 18 +-
.../newview/skins/xui/en-us/panel_place_small.xml | 16 +-
.../skins/xui/en-us/panel_preferences_audio.xml | 2 +-
.../skins/xui/en-us/panel_preferences_chat.xml | 30 +-
.../skins/xui/en-us/panel_preferences_general.xml | 87 +-
.../xui/en-us/panel_preferences_graphics1.xml | 104 +-
.../skins/xui/en-us/panel_preferences_input.xml | 48 +-
.../skins/xui/en-us/panel_preferences_popups.xml | 4 +-
.../skins/xui/en-us/panel_preferences_voice.xml | 5 +-
.../skins/xui/en-us/panel_region_covenant.xml | 24 +-
.../newview/skins/xui/en-us/panel_region_debug.xml | 8 +-
.../skins/xui/en-us/panel_region_estate.xml | 16 +-
.../skins/xui/en-us/panel_region_general.xml | 11 +-
.../skins/xui/en-us/panel_region_terrain.xml | 2 +-
.../skins/xui/en-us/panel_settings_chat.xml | 76 -
.../newview/skins/xui/en-us/panel_settings_im.xml | 18 -
.../skins/xui/en-us/panel_settings_network.xml | 71 -
.../newview/skins/xui/en-us/panel_settings_web.xml | 72 -
.../skins/xui/en-us/panel_speaker_controls.xml | 14 +-
.../newview/skins/xui/en-us/panel_status_bar.xml | 51 +-
.../newview/skins/xui/en-us/panel_toolbar.xml | 105 +-
.../newview/skins/xui/en-us/panel_top_pick.xml | 12 +-
.../skins/xui/en-us/panel_voice_controls.xml | 22 +-
.../newview/skins/xui/en-us/panel_voice_enable.xml | 2 +-
.../newview/skins/xui/en-us/panel_voice_remote.xml | 8 +-
.../xui/en-us/panel_voice_remote_expanded.xml | 24 +-
.../newview/skins/xui/es/floater_critical.xml | 3 -
.../indra/newview/skins/xui/es/floater_friends.xml | 28 -
.../indra/newview/skins/xui/es/floater_groups.xml | 15 -
.../skins/xui/es/floater_preview_new_landmark.xml | 9 -
linden/indra/newview/skins/xui/es/floater_rate.xml | 44 -
linden/indra/newview/skins/xui/es/menu_viewer.xml | 3 +-
.../newview/skins/xui/es/panel_music_remote.xml | 13 -
.../skins/xui/es/panel_preferences_graphics2.xml | 57 -
.../skins/xui/es/panel_preferences_graphics3.xml | 50 -
.../newview/skins/xui/es/panel_settings_chat.xml | 56 -
.../newview/skins/xui/es/panel_settings_im.xml | 13 -
.../newview/skins/xui/es/panel_settings_msgbox.xml | 12 -
.../skins/xui/es/panel_settings_network.xml | 59 -
.../newview/skins/xui/es/panel_settings_web.xml | 53 -
.../indra/newview/skins/xui/es/panel_toolbar.xml | 2 +
.../newview/skins/xui/fr/floater_critical.xml | 3 -
.../indra/newview/skins/xui/fr/floater_friends.xml | 19 -
.../indra/newview/skins/xui/fr/floater_groups.xml | 15 -
.../skins/xui/fr/floater_preview_new_landmark.xml | 10 -
linden/indra/newview/skins/xui/fr/floater_rate.xml | 44 -
linden/indra/newview/skins/xui/fr/menu_viewer.xml | 3 +-
.../newview/skins/xui/fr/panel_music_remote.xml | 10 -
.../skins/xui/fr/panel_preferences_graphics2.xml | 57 -
.../skins/xui/fr/panel_preferences_graphics3.xml | 50 -
.../newview/skins/xui/fr/panel_settings_chat.xml | 58 -
.../newview/skins/xui/fr/panel_settings_im.xml | 15 -
.../newview/skins/xui/fr/panel_settings_msgbox.xml | 12 -
.../skins/xui/fr/panel_settings_network.xml | 59 -
.../newview/skins/xui/fr/panel_settings_web.xml | 52 -
.../indra/newview/skins/xui/fr/panel_toolbar.xml | 2 +
.../newview/skins/xui/ja/floater_about_land.xml | 5 +-
.../newview/skins/xui/ja/floater_critical.xml | 3 -
.../indra/newview/skins/xui/ja/floater_friends.xml | 37 -
.../indra/newview/skins/xui/ja/floater_groups.xml | 17 -
.../xui/ja/floater_instant_message_ad_hoc.xml | 2 +-
.../skins/xui/ja/floater_instant_message_group.xml | 2 +-
.../newview/skins/xui/ja/floater_joystick.xml | 55 +-
.../skins/xui/ja/floater_preview_new_landmark.xml | 9 -
linden/indra/newview/skins/xui/ja/floater_rate.xml | 44 -
linden/indra/newview/skins/xui/ja/menu_viewer.xml | 16 +-
.../newview/skins/xui/ja/panel_music_remote.xml | 18 -
.../newview/skins/xui/ja/panel_overlaybar.xml | 4 +-
.../skins/xui/ja/panel_preferences_graphics2.xml | 59 -
.../skins/xui/ja/panel_preferences_graphics3.xml | 57 -
.../newview/skins/xui/ja/panel_settings_chat.xml | 58 -
.../newview/skins/xui/ja/panel_settings_im.xml | 13 -
.../newview/skins/xui/ja/panel_settings_msgbox.xml | 12 -
.../skins/xui/ja/panel_settings_network.xml | 58 -
.../newview/skins/xui/ja/panel_settings_web.xml | 54 -
.../skins/xui/ja/panel_speaker_controls.xml | 6 +-
.../indra/newview/skins/xui/ja/panel_toolbar.xml | 6 +-
.../newview/skins/xui/ko/floater_about_land.xml | 5 +-
.../newview/skins/xui/ko/floater_critical.xml | 3 -
.../indra/newview/skins/xui/ko/floater_friends.xml | 36 -
.../indra/newview/skins/xui/ko/floater_groups.xml | 16 -
.../xui/ko/floater_instant_message_ad_hoc.xml | 2 +-
.../skins/xui/ko/floater_instant_message_group.xml | 2 +-
.../newview/skins/xui/ko/floater_joystick.xml | 97 +-
.../skins/xui/ko/floater_preview_new_landmark.xml | 9 -
linden/indra/newview/skins/xui/ko/floater_rate.xml | 44 -
linden/indra/newview/skins/xui/ko/menu_viewer.xml | 13 +-
.../newview/skins/xui/ko/panel_music_remote.xml | 16 -
.../newview/skins/xui/ko/panel_overlaybar.xml | 4 +-
.../skins/xui/ko/panel_preferences_graphics2.xml | 59 -
.../skins/xui/ko/panel_preferences_graphics3.xml | 54 -
.../newview/skins/xui/ko/panel_settings_chat.xml | 55 -
.../newview/skins/xui/ko/panel_settings_im.xml | 13 -
.../newview/skins/xui/ko/panel_settings_msgbox.xml | 11 -
.../skins/xui/ko/panel_settings_network.xml | 57 -
.../newview/skins/xui/ko/panel_settings_web.xml | 50 -
.../skins/xui/ko/panel_speaker_controls.xml | 6 +-
.../newview/skins/xui/zh/floater_critical.xml | 3 -
.../indra/newview/skins/xui/zh/floater_friends.xml | 34 -
.../indra/newview/skins/xui/zh/floater_groups.xml | 15 -
.../skins/xui/zh/floater_preview_new_landmark.xml | 10 -
linden/indra/newview/skins/xui/zh/floater_rate.xml | 44 -
linden/indra/newview/skins/xui/zh/menu_viewer.xml | 3 +-
.../newview/skins/xui/zh/panel_music_remote.xml | 10 -
.../skins/xui/zh/panel_preferences_graphics2.xml | 57 -
.../skins/xui/zh/panel_preferences_graphics3.xml | 50 -
.../newview/skins/xui/zh/panel_settings_chat.xml | 54 -
.../newview/skins/xui/zh/panel_settings_im.xml | 13 -
.../newview/skins/xui/zh/panel_settings_msgbox.xml | 11 -
.../skins/xui/zh/panel_settings_network.xml | 57 -
.../newview/skins/xui/zh/panel_settings_web.xml | 48 -
.../indra/newview/skins/xui/zh/panel_toolbar.xml | 2 +
linden/indra/newview/viewer_manifest.py | 51 +-
linden/indra/test/files.lst | 2 +
linden/indra/test/inventory.cpp | 4 +-
linden/indra/test/io.cpp | 2 +-
linden/indra/test/llcontrol_tut.cpp | 147 +
linden/indra/test/llmessageconfig_tut.cpp | 24 +-
linden/indra/test/llmessagetemplateparser_tut.cpp | 2 +-
linden/indra/test/llnamevalue_tut.cpp | 550 +-
linden/indra/test/llsdmessagereader_tut.cpp | 2 +-
linden/indra/test/llstreamtools_tut.cpp | 42 +-
linden/indra/test/lltemplatemessagebuilder_tut.cpp | 2 +-
linden/indra/test/lltut.h | 10 +
linden/indra/test/mass_properties_tut.cpp | 1008 ++
linden/indra/test/math.cpp | 442 +-
linden/indra/test/message_tut.cpp | 2 +-
linden/indra/test/prim_linkability_tut.cpp | 490 +
linden/indra/test/test.vcproj | 19 +-
linden/indra/test/test_vc8.vcproj | 6 +-
linden/indra/test/test_vc9.vcproj | 2 +-
919 files changed, 39427 insertions(+), 31569 deletions(-)
create mode 100644 linden/indra/llcommon/llsmoothstep.h
create mode 100644 linden/indra/llmath/llline.cpp
create mode 100644 linden/indra/llmath/llline.h
create mode 100644 linden/indra/llmath/llsphere.cpp
create mode 100644 linden/indra/llmath/llsphere.h
create mode 100644 linden/indra/llprimitive/llprimlinkinfo.h
create mode 100644 linden/indra/newview/app_settings/cmd_line.xml
delete mode 100644 linden/indra/newview/app_settings/colors.ini
delete mode 100644 linden/indra/newview/app_settings/role_actions.xml
create mode 100644 linden/indra/newview/app_settings/settings.xml
create mode 100644 linden/indra/newview/app_settings/settings_crash_behavior.xml
create mode 100644 linden/indra/newview/app_settings/settings_files.xml
create mode 100644 linden/indra/newview/app_settings/settings_per_account.xml
create mode 100644 linden/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
create mode 100644 linden/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
delete mode 100644 linden/indra/newview/audiosettings.h
delete mode 100644 linden/indra/newview/fakevoicesoundsignal.cpp
delete mode 100644 linden/indra/newview/fakevoicesoundsignal.h
delete mode 100644 linden/indra/newview/head.cpp
delete mode 100644 linden/indra/newview/head.h
delete mode 100644 linden/indra/newview/llcameraview.cpp
delete mode 100644 linden/indra/newview/llcameraview.h
create mode 100644 linden/indra/newview/llcommandlineparser.cpp
create mode 100644 linden/indra/newview/llcommandlineparser.h
delete mode 100644 linden/indra/newview/llcontroldef.cpp
create mode 100644 linden/indra/newview/lldelayedgestureerror.cpp
create mode 100644 linden/indra/newview/lldelayedgestureerror.h
create mode 100644 linden/indra/newview/llfloatercamera.cpp
create mode 100644 linden/indra/newview/llfloatercamera.h
create mode 100644 linden/indra/newview/llfloaterhud.cpp
create mode 100644 linden/indra/newview/llfloaterhud.h
create mode 100644 linden/indra/newview/llfloaterjoystick.cpp
create mode 100644 linden/indra/newview/llfloaterjoystick.h
create mode 100644 linden/indra/newview/llfloatersettingsdebug.cpp
create mode 100644 linden/indra/newview/llfloatersettingsdebug.h
create mode 100644 linden/indra/newview/llfloaterstats.cpp
create mode 100644 linden/indra/newview/llfloaterstats.h
create mode 100644 linden/indra/newview/llfloatervoicedevicesettings.cpp
create mode 100644 linden/indra/newview/llfloatervoicedevicesettings.h
delete mode 100644 linden/indra/newview/llfloatervoicewizard.cpp
delete mode 100644 linden/indra/newview/llfloatervoicewizard.h
create mode 100644 linden/indra/newview/llrendersphere.cpp
create mode 100644 linden/indra/newview/llrendersphere.h
delete mode 100644 linden/indra/newview/llsphere.cpp
delete mode 100644 linden/indra/newview/llsphere.h
delete mode 100644 linden/indra/newview/llvieweruictrlfactory.cpp
delete mode 100644 linden/indra/newview/llvieweruictrlfactory.h
delete mode 100644 linden/indra/newview/moviemaker.cpp
delete mode 100644 linden/indra/newview/moviemaker.h
create mode 100644 linden/indra/newview/secondlife setup build dazzle.bat
delete mode 100644 linden/indra/newview/skins/xui/de/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/de/floater_groups.xml
delete mode 100644 linden/indra/newview/skins/xui/de/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/de/floater_rate.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_preferences_graphics2.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_settings_msgbox.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/de/panel_settings_web.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_camera.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/floater_groups.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_hud.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/floater_rate.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/panel_bg_toolbar.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/en-us/panel_settings_web.xml
delete mode 100644 linden/indra/newview/skins/xui/es/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/es/floater_groups.xml
delete mode 100644 linden/indra/newview/skins/xui/es/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/es/floater_rate.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_preferences_graphics2.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_preferences_graphics3.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_settings_msgbox.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/es/panel_settings_web.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/floater_groups.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/floater_rate.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_preferences_graphics2.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_preferences_graphics3.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_settings_msgbox.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/fr/panel_settings_web.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/floater_groups.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/floater_rate.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/ja/panel_settings_web.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/floater_groups.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/floater_rate.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_settings_msgbox.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/ko/panel_settings_web.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/floater_friends.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/floater_groups.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/floater_preview_new_landmark.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/floater_rate.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_music_remote.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_settings_chat.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_settings_im.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_settings_msgbox.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_settings_network.xml
delete mode 100644 linden/indra/newview/skins/xui/zh/panel_settings_web.xml
create mode 100644 linden/indra/test/llcontrol_tut.cpp
create mode 100644 linden/indra/test/mass_properties_tut.cpp
create mode 100644 linden/indra/test/prim_linkability_tut.cpp
(limited to 'linden/indra')
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 9bc78c4..92e75b5 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -189,15 +189,19 @@ for build_target in targets:
print 'Building ' + build_target + ' ' + version_server + ' on ' + system_str + ' (' + buildtype + ')'
system_lib_dir = '../libraries/' + system_str
+ havok_lib_dir = '../libraries/' + system_str
+ lib_dir = './lib_' + buildtype + '_' + build_target + '/' + system_str
if build_target == 'client':
system_lib_dir += '/lib_release_client'
elif buildtype == 'debug':
+ havok_lib_dir += '/lib_debug/havok/hk460'
system_lib_dir += '/lib_debug'
+ lib_dir = './lib_debug_' + build_target + '/' + system_str
else:
+ havok_lib_dir += '/lib_release/havok/hk460'
system_lib_dir += '/lib_release'
-
- lib_dir = './lib_' + buildtype + '_' + build_target + '/' + system_str
+ lib_dir = './lib_release_' + build_target + '/' + system_str
try:
build_dir_prefix = os.environ['TEMP_BUILD_DIR']
@@ -209,18 +213,19 @@ for build_target in targets:
### Base include directories ###
include_dirs = Split("""
- ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter ./llcrashlogger
- ./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage
+ ./ ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter ./llcrashlogger
+ ./lldatabase ./llimage ./llinventory ./llmedia ./llmessage ./llphysics
./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow
./llxml ./lscript ./lscript/lscript_compile
../libraries/include
- ../libraries/include/havok
""" +
'../libraries/' + system_str + '/include' )
client_external_libs = []
system_link_flags = ''
+ include_dirs += Split('../libraries/include/havok/hk460/physics ../libraries/include/havok/hk460/common ')
+
if platform != 'linux' and build_target == 'client' and enable_mozlib:
### Mozilla include directories ###
@@ -249,12 +254,18 @@ for build_target in targets:
##############
# Generic GCC flags
- cflags = '-g -pipe -Wall -Wno-reorder -Wno-trigraphs -Wno-sign-compare -Werror -fexceptions '
+ # cflags = '-g -pipe -Wall -Wno-reorder -Wno-trigraphs -Wno-sign-compare -Werror -fexceptions '
+ cflags = '-g -pipe -Wall -Wno-reorder -Wno-trigraphs -Wno-sign-compare -fexceptions '
cxxflags = ''
- cppflags = '-D_FORTIFY_SOURCE=2 '
+ #cppflags = '-D_FORTIFY_SOURCE=2 '
+ cppflags = ''
if standalone:
cppflags += '-DLL_STANDALONE '
+ if arch == 'i686':
+ cflags += '-m32 '
+ system_link_flags += '-m32 '
+
if build_target == 'server':
# Server flags
cppflags += '-D_GNU_SOURCE -DLL_MESA_HEADLESS=1 -DLL_MESA=1 '
@@ -290,9 +301,9 @@ for build_target in targets:
if standalone:
include_dirs += [d[2:] for d in
pkgconfig('--cflags-only-I').split()]
- client_external_libs += [ 'boost_regex' ]
+ client_external_libs += [ 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt']
else:
- client_external_libs += [ 'gtk-x11-2.0', 'atk-1.0', 'gmodule-2.0', 'gdk-x11-2.0', 'gdk_pixbuf-2.0', 'pango-1.0', 'pangoft2-1.0', 'pangox-1.0', 'pangoxft-1.0', 'Xinerama' , 'boost_regex']
+ client_external_libs += [ 'gtk-x11-2.0', 'atk-1.0', 'gmodule-2.0', 'gdk-x11-2.0', 'gdk_pixbuf-2.0', 'pango-1.0', 'pangoft2-1.0', 'pangox-1.0', 'pangoxft-1.0', 'Xinerama', 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt']
incdirs = [ 'ELFIO', 'atk-1.0', 'glib-2.0', 'gtk-2.0',
'llfreetype2', 'pango-1.0' ]
include_dirs += ['../libraries/' + system_str + '/include/' + d
@@ -320,6 +331,8 @@ for build_target in targets:
include_dirs += [ '../libraries/' + system_str + '/include/libxml2']
else:
cppflags += '-DLL_GSTREAMER_ENABLED=0 '
+
+ cppflags += '-DLL_CURRENT_HAVOK_VERSION=460 '
else:
# Mac-only flags
cflags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -Wmost -Wno-sign-compare -Wno-switch -fconstant-cfstrings -ffor-scope -Wno-reorder -fexceptions '
@@ -395,7 +408,7 @@ for build_target in targets:
base_env = Environment(CXX = compiler,
CPPPATH = include_dirs,
- LIBPATH = lib_path,
+ LIBPATH = [lib_dir] + [system_lib_dir] + [havok_lib_dir],
LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
### Environments for various build types ###
@@ -409,6 +422,11 @@ for build_target in targets:
CPPFLAGS=debug_cppflags,
CXXFLAGS=debug_cxxflags)
+ if buildtype == 'havok1debug':
+ env = base_env.Copy(CFLAGS=debug_cflags,
+ CPPFLAGS=debug_cppflags,
+ CXXFLAGS=debug_cxxflags)
+
if buildtype == 'release':
env = base_env.Copy(CFLAGS=release_cflags,
CPPFLAGS=release_cppflags,
@@ -627,6 +645,7 @@ for build_target in targets:
pkgconfig('--libs-only-l', ['gtk+-2.0']).split()]
else:
external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
+ external_libs += ['boost_signals-gcc34-mt']
internal_libs = [ 'llui', 'llxml', 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
create_executable(output_crashlogger_bin + '-globalsyms',
'linux_crash_logger',
@@ -702,8 +721,8 @@ for build_target in targets:
elif build_target == 'server':
create_static_module('lldatabase')
+ create_static_module('llphysics', source_files='files.lst')
create_static_module('llscene')
- create_static_module('llhavok', '-fno-rtti')
create_static_module_from_dir('llkdu', 'llkdustatic')
@@ -711,7 +730,7 @@ for build_target in targets:
# BUILD SERVERS #
##################
file_suffix = ''
- if buildtype == 'debug':
+ if buildtype == 'debug' or buildtype == 'havok1debug':
file_suffix = '_debug'
common_external_libs += [ 'pthread' ]
@@ -740,7 +759,7 @@ for build_target in targets:
# Dataserver
external_libs = common_external_libs + [
- 'boost_regex-gcc-mt', 'mysqlclient', 'tcmalloc', 'stacktrace',
+ 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'mysqlclient', 'tcmalloc', 'stacktrace',
]
internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory',
'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ]
@@ -763,28 +782,46 @@ for build_target in targets:
# Mapserver
external_libs = common_external_libs + ['OSMesa16', 'kdu',
- 'boost_regex-gcc-mt', 'iconv', 'jpeg', 'openjpeg', 'GL',
- 'mysqlclient', 'pthread', 'dl']
+ 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'iconv',
+ 'jpeg', 'openjpeg', 'GL', 'mysqlclient', 'png12', 'pthread', 'dl']
internal_libs = ['llrender', 'llwindow', 'llimage', 'llimagej2coj', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic',
'llxml', 'llvfs', 'llmath', 'llcommon']
create_executable('mapserver/mapserver' + file_suffix, 'mapserver',
internal_libs + external_libs)
# Simulator
- external_libs = common_external_libs + [
- 'hkdynamics', 'hkgeometry', 'hkmath', 'hkbase', 'hkcollide',
- 'hkactions', 'boost_regex-gcc-mt', 'openjpeg', 'dl', 'kdu',
- 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace',
- ]
+ Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix)
+ external_libs = common_external_libs + ['boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'openjpeg', 'dl', 'kdu',
+ 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace', 'png12']
+
+ # the order of the havok libs matters
+ external_libs += [
+ 'libhkcompat.a',
+ 'libhkutilities.a',
+ 'libhkvisualize.a',
+ 'libhkdynamics.a',
+ 'libhkvehicle.a',
+ 'libhkcollide.a',
+ 'libhkinternal.a',
+ 'libhkconstraintsolver.a',
+ 'libhkmath.a',
+ 'libhkscenedata.a',
+ 'libhkserialize.a',
+ 'libhkgraphicsogl.a',
+ 'libhkgraphicsbridge.a',
+ 'libhkgraphics.a',
+ 'libhkdemoframework.a',
+ 'libhkbase.a'
+ ]
internal_libs = [ 'lscript', 'llprimitive',
- 'llscene', 'llhavok', 'llinventory', 'llimage', 'llimagej2coj',
+ 'llscene', 'llphysics', 'llinventory', 'llimage', 'llimagej2coj',
'llcharacter', 'llxml', 'lldatabase', 'llkdustatic',
'llmessage', 'llvfs', 'llmath', 'llcommon' ]
create_executable('newsim/simulator' + file_suffix, 'newsim',
internal_libs + external_libs)
# texture upload verifier
- external_libs = common_external_libs + [ 'kdu', 'openjpeg', 'dl' ]
+ external_libs = common_external_libs + ['boost_signals-gcc33-mt', 'kdu', 'openjpeg', 'png12', 'z', 'dl']
internal_libs = [
'llimage',
'llimagej2coj',
@@ -816,8 +853,10 @@ for build_target in targets:
# Test
Depends('test/test', 'newsim/simulator' + file_suffix)
external_libs = common_external_libs + ['mysqlclient']
+ if platform == 'linux':
+ external_libs += ['boost_signals-gcc33-mt']
internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml',
- 'llvfs', 'llcharacter', 'llmath', 'llcommon' ]
+ 'llvfs', 'llcharacter', 'llphysics', 'llprimitive', 'llmath', 'llcommon' ]
test_executable = 'test/test' + file_suffix
create_executable(test_executable, 'test',
internal_libs + external_libs)
diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln
index b9efa5a..e990489 100644
--- a/linden/indra/indra_complete/indra_complete.sln
+++ b/linden/indra/indra_complete/indra_complete.sln
@@ -112,7 +112,7 @@ EndProject
{B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
@@ -194,6 +194,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "..\test\test.vcproj
{777F38BE-2DFE-4051-9AAD-2832ABC474CC} = {777F38BE-2DFE-4051-9AAD-2832ABC474CC}
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
@@ -209,6 +210,7 @@ EndProject
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
+ {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
@@ -239,6 +241,7 @@ EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
+ DebugMesaHeadless = DebugMesaHeadless
Release = Release
ReleaseForDownload = ReleaseForDownload
ReleaseNoOpt = ReleaseNoOpt
@@ -248,6 +251,7 @@ Global
GlobalSection(ProjectConfiguration) = postSolution
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32
+ {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release.ActiveCfg = Release|Win32
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release.Build.0 = Release|Win32
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -256,6 +260,7 @@ Global
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug.ActiveCfg = Debug|Win32
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug.Build.0 = Debug|Win32
+ {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release.ActiveCfg = Release|Win32
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release.Build.0 = Release|Win32
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -264,6 +269,7 @@ Global
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug.ActiveCfg = Debug|Win32
{E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug.Build.0 = Debug|Win32
+ {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release.ActiveCfg = Release|Win32
{E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release.Build.0 = Release|Win32
{E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -272,6 +278,7 @@ Global
{E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{D37774F4-253D-4760-BF64-372A943224A1}.Debug.ActiveCfg = Debug|Win32
{D37774F4-253D-4760-BF64-372A943224A1}.Debug.Build.0 = Debug|Win32
+ {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{D37774F4-253D-4760-BF64-372A943224A1}.Release.ActiveCfg = Release|Win32
{D37774F4-253D-4760-BF64-372A943224A1}.Release.Build.0 = Release|Win32
{D37774F4-253D-4760-BF64-372A943224A1}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -280,6 +287,7 @@ Global
{D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug.ActiveCfg = Debug|Win32
{A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug.Build.0 = Debug|Win32
+ {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{A5470DA6-0C3A-4602-B930-43DB25511A59}.Release.ActiveCfg = Release|Win32
{A5470DA6-0C3A-4602-B930-43DB25511A59}.Release.Build.0 = Release|Win32
{A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -288,6 +296,7 @@ Global
{A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{DE55D666-6A3D-476C-937F-109269B83681}.Debug.ActiveCfg = Debug|Win32
{DE55D666-6A3D-476C-937F-109269B83681}.Debug.Build.0 = Debug|Win32
+ {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{DE55D666-6A3D-476C-937F-109269B83681}.Release.ActiveCfg = Release|Win32
{DE55D666-6A3D-476C-937F-109269B83681}.Release.Build.0 = Release|Win32
{DE55D666-6A3D-476C-937F-109269B83681}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -296,6 +305,7 @@ Global
{DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug.ActiveCfg = Debug|Win32
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug.Build.0 = Debug|Win32
+ {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release.ActiveCfg = Release|Win32
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release.Build.0 = Release|Win32
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -304,6 +314,7 @@ Global
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug.ActiveCfg = Debug|Win32
{FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug.Build.0 = Debug|Win32
+ {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release.ActiveCfg = Release|Win32
{FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release.Build.0 = Release|Win32
{FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -312,6 +323,7 @@ Global
{FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug.ActiveCfg = Debug|Win32
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug.Build.0 = Debug|Win32
+ {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release.ActiveCfg = Release|Win32
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release.Build.0 = Release|Win32
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -320,6 +332,7 @@ Global
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug.ActiveCfg = Debug|Win32
{93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug.Build.0 = Debug|Win32
+ {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release.ActiveCfg = Release|Win32
{93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release.Build.0 = Release|Win32
{93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -328,6 +341,7 @@ Global
{93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug.ActiveCfg = Debug|Win32
{2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug.Build.0 = Debug|Win32
+ {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release.ActiveCfg = Release|Win32
{2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release.Build.0 = Release|Win32
{2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -336,6 +350,7 @@ Global
{2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug.ActiveCfg = Debug|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug.Build.0 = Debug|Win32
+ {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release.ActiveCfg = Release|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release.Build.0 = Release|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -344,6 +359,7 @@ Global
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug.ActiveCfg = Debug|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug.Build.0 = Debug|Win32
+ {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release.ActiveCfg = Release|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release.Build.0 = Release|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseForDownload.ActiveCfg = ReleaseForDownload|Win32
@@ -352,6 +368,7 @@ Global
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug.ActiveCfg = Debug|Win32
{B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug.Build.0 = Debug|Win32
+ {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release.ActiveCfg = Release|Win32
{B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release.Build.0 = Release|Win32
{B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -360,6 +377,7 @@ Global
{B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug.ActiveCfg = Debug|Win32
{B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug.Build.0 = Debug|Win32
+ {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless.ActiveCfg = DebugMesaHeadless|Win32
{B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release.ActiveCfg = Release|Win32
{B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release.Build.0 = Release|Win32
{B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -368,6 +386,7 @@ Global
{B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug.ActiveCfg = Debug|Win32
{BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug.Build.0 = Debug|Win32
+ {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release.ActiveCfg = Release|Win32
{BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release.Build.0 = Release|Win32
{BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -376,6 +395,7 @@ Global
{BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug.ActiveCfg = Debug|Win32
{F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug.Build.0 = Debug|Win32
+ {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release.ActiveCfg = Release|Win32
{F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release.Build.0 = Release|Win32
{F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -384,6 +404,7 @@ Global
{F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug.ActiveCfg = Debug|Win32
{44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug.Build.0 = Debug|Win32
+ {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{44CE6D82-7320-4609-8FC3-5965C19F4808}.Release.ActiveCfg = Release|Win32
{44CE6D82-7320-4609-8FC3-5965C19F4808}.Release.Build.0 = Release|Win32
{44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -392,6 +413,7 @@ Global
{44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug.ActiveCfg = Debug|Win32
{D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug.Build.0 = Debug|Win32
+ {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release.ActiveCfg = Release|Win32
{D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release.Build.0 = Release|Win32
{D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -400,6 +422,7 @@ Global
{D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug.ActiveCfg = Debug|Win32
{C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug.Build.0 = Debug|Win32
+ {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release.ActiveCfg = Release|Win32
{C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release.Build.0 = Release|Win32
{C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -408,6 +431,7 @@ Global
{C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug.ActiveCfg = Debug|Win32
{A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug.Build.0 = Debug|Win32
+ {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release.ActiveCfg = Release|Win32
{A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release.Build.0 = Release|Win32
{A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -416,6 +440,7 @@ Global
{A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug.ActiveCfg = Debug|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug.Build.0 = Debug|Win32
+ {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release.ActiveCfg = Release|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release.Build.0 = Release|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -424,18 +449,21 @@ Global
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt.Build.0 = Release|Win32
{777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug.ActiveCfg = Debug|Win32
{777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug.Build.0 = Debug|Win32
+ {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release.ActiveCfg = Release|Win32
{777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release.Build.0 = Release|Win32
{777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseForDownload.ActiveCfg = Release|Win32
{777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt.ActiveCfg = Release|Win32
{EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug.ActiveCfg = Debug|Win32
{EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug.Build.0 = Debug|Win32
+ {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.ActiveCfg = Release|Win32
{EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.Build.0 = Release|Win32
{EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload.ActiveCfg = Release|Win32
{EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt.ActiveCfg = Release|Win32
{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.ActiveCfg = Debug|Win32
{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.Build.0 = Debug|Win32
+ {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.ActiveCfg = Release|Win32
{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.Build.0 = Release|Win32
{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -444,6 +472,7 @@ Global
{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug.ActiveCfg = Debug|Win32
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug.Build.0 = Debug|Win32
+ {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release.ActiveCfg = Release|Win32
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release.Build.0 = Release|Win32
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -451,11 +480,13 @@ Global
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
{E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.Debug.ActiveCfg = Debug|Win32
+ {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.Release.ActiveCfg = Release|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload.ActiveCfg = Release|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug.ActiveCfg = Debug|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug.Build.0 = Debug|Win32
+ {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release.ActiveCfg = Release|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release.Build.0 = Release|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -464,6 +495,7 @@ Global
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug.ActiveCfg = Debug|Win32
{4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug.Build.0 = Debug|Win32
+ {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release.ActiveCfg = Release|Win32
{4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release.Build.0 = Release|Win32
{4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -472,6 +504,7 @@ Global
{4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug.ActiveCfg = Debug|Win32
{BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug.Build.0 = Debug|Win32
+ {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release.ActiveCfg = Release|Win32
{BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release.Build.0 = Release|Win32
{BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -479,22 +512,26 @@ Global
{BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug.ActiveCfg = Debug|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug.Build.0 = Debug|Win32
+ {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release.ActiveCfg = Release|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release.Build.0 = Release|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.ActiveCfg = Release|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.Build.0 = Release|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug.ActiveCfg = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug.Build.0 = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release.ActiveCfg = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release.Build.0 = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload.ActiveCfg = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload.Build.0 = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug.ActiveCfg = Debug|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug.Build.0 = Debug|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless.ActiveCfg = DebugHk460|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless.Build.0 = DebugHk460|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release.ActiveCfg = Release|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release.Build.0 = Release|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload.ActiveCfg = Release|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload.Build.0 = Release|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
+ {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug.ActiveCfg = Debug|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug.Build.0 = Debug|Win32
+ {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release.ActiveCfg = Release|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release.Build.0 = Release|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -503,6 +540,7 @@ Global
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{076DD042-2E58-42EA-9401-53210B65C1FC}.Debug.ActiveCfg = Debug|Win32
{076DD042-2E58-42EA-9401-53210B65C1FC}.Debug.Build.0 = Debug|Win32
+ {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{076DD042-2E58-42EA-9401-53210B65C1FC}.Release.ActiveCfg = Release|Win32
{076DD042-2E58-42EA-9401-53210B65C1FC}.Release.Build.0 = Release|Win32
{076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -511,6 +549,7 @@ Global
{076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug.ActiveCfg = Debug|Win32
{AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug.Build.0 = Debug|Win32
+ {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release.ActiveCfg = Release|Win32
{AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release.Build.0 = Release|Win32
{AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -519,6 +558,7 @@ Global
{AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug.ActiveCfg = Debug|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug.Build.0 = Debug|Win32
+ {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless.ActiveCfg = Debug|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release.ActiveCfg = Release|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release.Build.0 = Release|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseForDownload.ActiveCfg = Release|Win32
diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln
index e35c0f9..54bad30 100644
--- a/linden/indra/indra_complete/indra_complete_vc8.sln
+++ b/linden/indra/indra_complete/indra_complete_vc8.sln
@@ -83,7 +83,6 @@ EndProject
{B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
@@ -129,19 +128,6 @@ EndProject
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
EndProjectSection
EndProject
- ProjectSection(ProjectDependencies) = postProject
- {2ADE3C14-94C4-40BF-B033-70F3C954EE90} = {2ADE3C14-94C4-40BF-B033-70F3C954EE90}
- {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB}
- {AF2D801E-EEE7-4B52-A025-F8E648ADC34B} = {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}
- {93B2BA29-FBE9-4376-92C1-6108DCFE09D3} = {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}
- {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
- {DE55D666-6A3D-476C-937F-109269B83681} = {DE55D666-6A3D-476C-937F-109269B83681}
- {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
- {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
- {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
- {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llmedia", "..\llmedia\llmedia_vc8.vcproj", "{9D0C7E02-6506-4EE7-BC5C-75671D28D594}"
EndProject
EndProject
@@ -175,7 +161,6 @@ EndProject
EndProjectSection
EndProject
EndProject
-EndProject
ProjectSection(ProjectDependencies) = postProject
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
@@ -193,8 +178,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc8.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "web-plugin-asset-upload", "..\web\doc\web-plugin-asset-upload_vc8.vcproj", "{0332E7B1-8913-4669-AD7E-7E2EB6204A75}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -454,15 +437,6 @@ Global
{F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.ActiveCfg = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.Build.0 = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.ActiveCfg = Release|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.Build.0 = Release|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
@@ -502,16 +476,6 @@ Global
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload|Win32.Build.0 = Release|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.ActiveCfg = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.Build.0 = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.ActiveCfg = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.Build.0 = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
@@ -562,16 +526,6 @@ Global
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32
{B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Debug|Win32.ActiveCfg = Debug|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Debug|Win32.Build.0 = Debug|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Release|Win32.ActiveCfg = Release|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Release|Win32.Build.0 = Release|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseForDownload|Win32.Build.0 = Release|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32
- {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/linden/indra/indra_complete/indra_complete_vc9.sln b/linden/indra/indra_complete/indra_complete_vc9.sln
index 8424eb3..d7e781d 100644
--- a/linden/indra/indra_complete/indra_complete_vc9.sln
+++ b/linden/indra/indra_complete/indra_complete_vc9.sln
@@ -83,7 +83,6 @@ EndProject
{B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
@@ -129,19 +128,6 @@ EndProject
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
EndProjectSection
EndProject
- ProjectSection(ProjectDependencies) = postProject
- {2ADE3C14-94C4-40BF-B033-70F3C954EE90} = {2ADE3C14-94C4-40BF-B033-70F3C954EE90}
- {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB}
- {AF2D801E-EEE7-4B52-A025-F8E648ADC34B} = {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}
- {93B2BA29-FBE9-4376-92C1-6108DCFE09D3} = {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}
- {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
- {DE55D666-6A3D-476C-937F-109269B83681} = {DE55D666-6A3D-476C-937F-109269B83681}
- {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
- {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
- {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
- {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llmedia", "..\llmedia\llmedia_vc9.vcproj", "{9D0C7E02-6506-4EE7-BC5C-75671D28D594}"
EndProject
EndProject
@@ -175,7 +161,6 @@ EndProject
EndProjectSection
EndProject
EndProject
-EndProject
ProjectSection(ProjectDependencies) = postProject
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
@@ -191,7 +176,7 @@ EndProject
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej2coj\llimagej2coj_vc9.vcproj", "{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc9", "..\lscript\lscript_compile\lscript_compile_fb_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -455,15 +440,6 @@ Global
{F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
{F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.ActiveCfg = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.Build.0 = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.ActiveCfg = Release|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.Build.0 = Release|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
- {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32
{9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
@@ -503,16 +479,6 @@ Global
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload|Win32.Build.0 = Release|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
{E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.ActiveCfg = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.Build.0 = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.ActiveCfg = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.Build.0 = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32
{6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
diff --git a/linden/indra/lib/python/indra/base/llsd.py b/linden/indra/lib/python/indra/base/llsd.py
index 71282bc..26ac3a2 100644
--- a/linden/indra/lib/python/indra/base/llsd.py
+++ b/linden/indra/lib/python/indra/base/llsd.py
@@ -842,16 +842,6 @@ try:
except:
print "Couldn't import mulib.stacked, not registering LLSD converters"
else:
- def llsd_convert_json(llsd_stuff, request):
- callback = request.get_header('callback')
- if callback is not None:
- ## See Yahoo's ajax documentation for information about using this
- ## callback style of programming
- ## http://developer.yahoo.com/common/json.html#callbackparam
- req.write("%s(%s)" % (callback, simplejson.dumps(llsd_stuff)))
- else:
- req.write(simplejson.dumps(llsd_stuff))
-
def llsd_convert_xml(llsd_stuff, request):
request.write(format_xml(llsd_stuff))
@@ -859,8 +849,6 @@ else:
request.write(format_binary(llsd_stuff))
for typ in [LLSD, dict, list, tuple, str, int, float, bool, unicode, type(None)]:
- stacked.add_producer(typ, llsd_convert_json, 'application/json')
-
stacked.add_producer(typ, llsd_convert_xml, 'application/llsd+xml')
stacked.add_producer(typ, llsd_convert_xml, 'application/xml')
stacked.add_producer(typ, llsd_convert_xml, 'text/xml')
diff --git a/linden/indra/lib/python/indra/ipc/llsdhttp.py b/linden/indra/lib/python/indra/ipc/llsdhttp.py
index 1bb335e..378c1c2 100644
--- a/linden/indra/lib/python/indra/ipc/llsdhttp.py
+++ b/linden/indra/lib/python/indra/ipc/llsdhttp.py
@@ -34,45 +34,54 @@ from indra.base import llsd
from eventlet import httpc
-
-get, put, delete, post = httpc.make_suite(
- llsd.format_xml, llsd.parse, 'application/xml+llsd')
-
+suite = httpc.HttpSuite(llsd.format_xml, llsd.parse, 'application/xml+llsd')
+delete = suite.delete
+delete_ = suite.delete_
+get = suite.get
+get_ = suite.get_
+head = suite.head
+head_ = suite.head_
+post = suite.post
+post_ = suite.post_
+put = suite.put
+put_ = suite.put_
+request = suite.request
+request_ = suite.request_
for x in (httpc.ConnectionError, httpc.NotFound, httpc.Forbidden):
globals()[x.__name__] = x
-def postFile(url, filename, verbose=False):
+def postFile(url, filename):
f = open(filename)
body = f.read()
f.close()
llsd_body = llsd.parse(body)
- return post(url, llsd_body, verbose=verbose)
+ return post_(url, llsd_body)
def getStatus(url, use_proxy=False):
- status, _headers, _body = get(url, use_proxy=use_proxy, verbose=True)
+ status, _headers, _body = get_(url, use_proxy=use_proxy)
return status
def putStatus(url, data):
- status, _headers, _body = put(url, data, verbose=True)
+ status, _headers, _body = put_(url, data)
return status
def deleteStatus(url):
- status, _headers, _body = delete(url, verbose=True)
+ status, _headers, _body = delete_(url)
return status
def postStatus(url, data):
- status, _headers, _body = post(url, data, verbose=True)
+ status, _headers, _body = post_(url, data)
return status
def postFileStatus(url, filename):
- status, _headers, body = postFile(url, filename, verbose=True)
+ status, _headers, body = postFile(url, filename)
return status, body
diff --git a/linden/indra/lib/python/indra/util/llmanifest.py b/linden/indra/lib/python/indra/util/llmanifest.py
index 1bd44ae..89c14e8 100644
--- a/linden/indra/lib/python/indra/util/llmanifest.py
+++ b/linden/indra/lib/python/indra/util/llmanifest.py
@@ -94,7 +94,7 @@ def get_channel(srctree):
for p in paths:
if os.path.exists(p):
contents = open(p, 'r').read()
- channel = re.search("LL_CHANNEL\s=\s\"([\w\s]+)\"", contents).group(1)
+ channel = re.search("LL_CHANNEL\s=\s\"(.+)\";\s*$", contents, flags = re.M).group(1)
return channel
diff --git a/linden/indra/llcharacter/lljoint.cpp b/linden/indra/llcharacter/lljoint.cpp
index b7a51f1..4611f52 100644
--- a/linden/indra/llcharacter/lljoint.cpp
+++ b/linden/indra/llcharacter/lljoint.cpp
@@ -189,11 +189,12 @@ void LLJoint::removeChild(LLJoint* joint)
child_list_t::iterator iter = std::find(mChildren.begin(), mChildren.end(), joint);
if (iter != mChildren.end())
{
- this->mChildren.erase(iter);
+ mChildren.erase(iter);
+
+ joint->mXform.setParent(NULL);
+ joint->mParent = NULL;
+ joint->touch();
}
- joint->mXform.setParent(NULL);
- joint->mParent = NULL;
- joint->touch();
}
diff --git a/linden/indra/llcharacter/llstatemachine.h b/linden/indra/llcharacter/llstatemachine.h
index 12a71b7..873e938 100644
--- a/linden/indra/llcharacter/llstatemachine.h
+++ b/linden/indra/llcharacter/llstatemachine.h
@@ -54,7 +54,7 @@ class LLFSMTransition : public LLUniqueID
{
public:
LLFSMTransition() : LLUniqueID(){};
- virtual std::string getName(){ return "unnamed"; }
+ virtual std::string getName()const { return "unnamed"; }
};
class LLFSMState : public LLUniqueID
@@ -64,7 +64,7 @@ public:
virtual void onEntry(void *){};
virtual void onExit(void *){};
virtual void execute(void *){};
- virtual std::string getName(){ return "unnamed"; }
+ virtual std::string getName() const { return "unnamed"; }
};
class LLStateDiagram
diff --git a/linden/indra/llcommon/imageids.h b/linden/indra/llcommon/imageids.h
index 4a1e221..9361479 100644
--- a/linden/indra/llcommon/imageids.h
+++ b/linden/indra/llcommon/imageids.h
@@ -43,60 +43,34 @@
// pre-cached on viewer
// Grass Images
-//const LLUUID IMG_GRASS1 ("990c4086-46ce-49bd-8cae-afcc23a08f4e"); // dataserver
-//const LLUUID IMG_GRASS2 ("869e2dcf-21b9-402d-a36d-9a23365cf723"); // dataserver
-//const LLUUID IMG_GRASS3 ("8f97e7a7-f664-4967-9e8f-8d9e8039c1b7"); // dataserver
-
-//const LLUUID IMG_GRASS4 ("8a05131d-35b7-4812-bcfc-a989b0f954ef"); // dataserver
-
-//const LLUUID IMG_GRASS5 ("7d092acb-c69a-4122-b09b-f285e009b185"); // dataserver
-
-const LLUUID IMG_CLEAR ("11ee27f5-43c0-414e-afd5-d7f5688c351f"); // VIEWER
const LLUUID IMG_SMOKE ("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d"); // VIEWER
const LLUUID IMG_DEFAULT ("d2114404-dd59-4a4d-8e6c-49359e91bbf0"); // VIEWER
-//const LLUUID IMG_SAND ("0ff70ead-4562-45f9-9e8a-52b1a3286868"); // VIEWER 1.5k
-//const LLUUID IMG_GRASS ("5ab48dd5-05d0-4f1a-ace6-efd4e2fb3508"); // VIEWER 1.2k
-//const LLUUID IMG_ROCK ("402f8b24-5f9d-4905-b5f8-37baff603e88"); // VIEWER 1.2k
-//const LLUUID IMG_ROCKFACE ("9c88539c-fd04-46b8-bea2-ddf1bcffe3bd"); // VIEWER 1.2k
const LLUUID IMG_SUN ("cce0f112-878f-4586-a2e2-a8f104bba271"); // dataserver
const LLUUID IMG_MOON ("d07f6eed-b96a-47cd-b51d-400ad4a1c428"); // dataserver
const LLUUID IMG_CLOUD_POOF ("fc4b9f0b-d008-45c6-96a4-01dd947ac621"); // dataserver
const LLUUID IMG_SHOT ("35f217a3-f618-49cf-bbca-c86d486551a9"); // dataserver
const LLUUID IMG_SPARK ("d2e75ac1-d0fb-4532-820e-a20034ac814d"); // dataserver
const LLUUID IMG_FIRE ("aca40aa8-44cf-44ca-a0fa-93e1a2986f82"); // dataserver
-//const LLUUID IMG_WATER ("e510b068-d20d-4612-a08d-fde4d5c15789"); // VIEWER
const LLUUID IMG_FACE_SELECT ("a85ac674-cb75-4af6-9499-df7c5aaf7a28"); // face selector
-
-//const LLUUID IMG_SHADOW ("5e1de0a8-f9f8-4237-9396-d221126a7c4a"); // dataserver
-//const LLUUID IMG_AVATARSHADOW ("c7d8bbf3-21ee-4f6e-9b20-3cf18425af1d"); // dataserver
-//const LLUUID IMG_BOXSHADOW ("8d86b8cc-4889-408a-8b72-c1961bae53d7"); // dataserver
-//const LLUUID IMG_EYE ("5e3551ae-9971-4814-af99-5117591e937b"); // dataserver
-//const LLUUID IMG_BLUE_FLAME ("d8b62059-7b31-4511-a479-1fe45117948f"); // dataserver
-
const LLUUID IMG_DEFAULT_AVATAR ("c228d1cf-4b5d-4ba8-84f4-899a0796aa97"); // dataserver
-//const LLUUID IMG_ENERGY_BEAM ("09e7bc54-11b9-442a-ae3d-f52e599e466a"); // dataserver
-//const LLUUID IMG_ENERGY_BEAM2 ("de651394-f926-48db-b666-e49d83af1bbc"); // dataserver
-
-//const LLUUID IMG_BRICK_PATH ("a9d0019b-3783-4c7f-959c-322d301918bc"); // dataserver
const LLUUID IMG_EXPLOSION ("68edcf47-ccd7-45b8-9f90-1649d7f12806"); // On dataserver
const LLUUID IMG_EXPLOSION_2 ("21ce046c-83fe-430a-b629-c7660ac78d7c"); // On dataserver
const LLUUID IMG_EXPLOSION_3 ("fedea30a-1be8-47a6-bc06-337a04a39c4b"); // On dataserver
const LLUUID IMG_EXPLOSION_4 ("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); // On dataserver
-//const LLUUID IMG_EXPLOSION_5 ("60f2dec7-675b-4950-b614-85b907d552ea"); // On dataserver
-//const LLUUID IMG_SPLASH_SPRITE ("8a101f63-fe45-49e7-9f8a-e64817daa475"); // On dataserver
const LLUUID IMG_SMOKE_POOF ("1e63e323-5fe0-452e-92f8-b98bd0f764e3"); // On dataserver
const LLUUID IMG_BIG_EXPLOSION_1 ("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); // On dataserver
const LLUUID IMG_BIG_EXPLOSION_2 ("9c8eca51-53d5-42a7-bb58-cef070395db8"); // On dataserver
-//const LLUUID IMG_BLUE_BLOOD ("8bc2e3f8-097e-4c87-b417-b0d699d07189"); // On dataserver
-const LLUUID IMG_BLOOM1 ("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef");
-//const LLUUID IMG_BLOOM2 ("9fb76e81-eca0-4b6a-96e1-a6c5a685150b");
-//const LLUUID IMG_BLOOM3 ("fb1fecba-9585-415b-ad15-6e6e3d6c5479");
+const LLUUID IMG_BLOOM1 ("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef"); // VIEWER
+const LLUUID TERRAIN_DIRT_DETAIL ("0bc58228-74a0-7e83-89bc-5c23464bcec5"); // VIEWER
+const LLUUID TERRAIN_GRASS_DETAIL ("63338ede-0037-c4fd-855b-015d77112fc8"); // VIEWER
+const LLUUID TERRAIN_MOUNTAIN_DETAIL ("303cd381-8560-7579-23f1-f0a880799740"); // VIEWER
+const LLUUID TERRAIN_ROCK_DETAIL ("53a2f406-4895-1d13-d541-d2e3b86bc19c"); // VIEWER
-const LLUUID IMG_PTT_SPEAKER ("89e9fc7c-0b16-457d-be4f-136270759c4d"); // On cache
+const LLUUID DEFAULT_WATER_NORMAL ("822ded49-9a6c-f61c-cb89-6df54f42cdf4"); // VIEWER
#endif
diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h
index eceb576..77f3d8c 100644
--- a/linden/indra/llcommon/indra_constants.h
+++ b/linden/indra/llcommon/indra_constants.h
@@ -38,9 +38,10 @@
// At 45 Hz collisions seem stable and objects seem
// to settle down at a reasonable rate.
// JC 3/18/2003
-const F32 HAVOK_TIMESTEP = 1.f / 45.f;
+const F32 PHYSICS_TIMESTEP = 1.f / 45.f;
const F32 COLLISION_TOLERANCE = 0.1f;
+const F32 HALF_COLLISION_TOLERANCE = COLLISION_TOLERANCE * 0.5f;
// Time constants
const U32 HOURS_PER_LINDEN_DAY = 4;
@@ -53,6 +54,8 @@ const F32 REGION_WIDTH_METERS = 256.f;
const S32 REGION_WIDTH_UNITS = 256;
const U32 REGION_WIDTH_U32 = 256;
+const F32 REGION_HEIGHT_METERS = 4096.f;
+
// Bits for simulator performance query flags
enum LAND_STAT_FLAGS
{
@@ -87,7 +90,7 @@ const F32 MAX_AGENT_HEIGHT = 2.65f - 2.0f * COLLISION_TOLERANCE;
// For linked sets
const S32 MAX_CHILDREN_PER_TASK = 255;
-const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 31;
+const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;
const S32 MAX_JOINTS_PER_OBJECT = 1; // limiting to 1 until Havok 2.x
@@ -339,7 +342,7 @@ const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
const U32 MAP_ITEM_CLASSIFIED = 0x08;
// Crash reporter behavior
-const char* const CRASH_SETTINGS_FILE = "crash_settings.xml";
+const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
const S32 CRASH_BEHAVIOR_ASK = 0;
const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
diff --git a/linden/indra/llcommon/llagentconstants.h b/linden/indra/llcommon/llagentconstants.h
index 5757751..48c097a 100644
--- a/linden/indra/llcommon/llagentconstants.h
+++ b/linden/indra/llcommon/llagentconstants.h
@@ -67,43 +67,43 @@ const U32 CONTROL_ML_LBUTTON_DOWN_INDEX = 30;
const U32 CONTROL_ML_LBUTTON_UP_INDEX = 31;
const U32 TOTAL_CONTROLS = 32;
-const U32 AGENT_CONTROL_AT_POS = 0x1 << CONTROL_AT_POS_INDEX;
-const U32 AGENT_CONTROL_AT_NEG = 0x1 << CONTROL_AT_NEG_INDEX;
-const U32 AGENT_CONTROL_LEFT_POS = 0x1 << CONTROL_LEFT_POS_INDEX;
-const U32 AGENT_CONTROL_LEFT_NEG = 0x1 << CONTROL_LEFT_NEG_INDEX;
-const U32 AGENT_CONTROL_UP_POS = 0x1 << CONTROL_UP_POS_INDEX;
-const U32 AGENT_CONTROL_UP_NEG = 0x1 << CONTROL_UP_NEG_INDEX;
-const U32 AGENT_CONTROL_PITCH_POS = 0x1 << CONTROL_PITCH_POS_INDEX;
-const U32 AGENT_CONTROL_PITCH_NEG = 0x1 << CONTROL_PITCH_NEG_INDEX;
-const U32 AGENT_CONTROL_YAW_POS = 0x1 << CONTROL_YAW_POS_INDEX;
-const U32 AGENT_CONTROL_YAW_NEG = 0x1 << CONTROL_YAW_NEG_INDEX;
-
-const U32 AGENT_CONTROL_FAST_AT = 0x1 << CONTROL_FAST_AT_INDEX;
-const U32 AGENT_CONTROL_FAST_LEFT = 0x1 << CONTROL_FAST_LEFT_INDEX;
-const U32 AGENT_CONTROL_FAST_UP = 0x1 << CONTROL_FAST_UP_INDEX;
-
-const U32 AGENT_CONTROL_FLY = 0x1 << CONTROL_FLY_INDEX;
-const U32 AGENT_CONTROL_STOP = 0x1 << CONTROL_STOP_INDEX;
-const U32 AGENT_CONTROL_FINISH_ANIM = 0x1 << CONTROL_FINISH_ANIM_INDEX;
-const U32 AGENT_CONTROL_STAND_UP = 0x1 << CONTROL_STAND_UP_INDEX;
-const U32 AGENT_CONTROL_SIT_ON_GROUND = 0x1 << CONTROL_SIT_ON_GROUND_INDEX;
-const U32 AGENT_CONTROL_MOUSELOOK = 0x1 << CONTROL_MOUSELOOK_INDEX;
-
-const U32 AGENT_CONTROL_NUDGE_AT_POS = 0x1 << CONTROL_NUDGE_AT_POS_INDEX;
-const U32 AGENT_CONTROL_NUDGE_AT_NEG = 0x1 << CONTROL_NUDGE_AT_NEG_INDEX;
-const U32 AGENT_CONTROL_NUDGE_LEFT_POS = 0x1 << CONTROL_NUDGE_LEFT_POS_INDEX;
-const U32 AGENT_CONTROL_NUDGE_LEFT_NEG = 0x1 << CONTROL_NUDGE_LEFT_NEG_INDEX;
-const U32 AGENT_CONTROL_NUDGE_UP_POS = 0x1 << CONTROL_NUDGE_UP_POS_INDEX;
-const U32 AGENT_CONTROL_NUDGE_UP_NEG = 0x1 << CONTROL_NUDGE_UP_NEG_INDEX;
-const U32 AGENT_CONTROL_TURN_LEFT = 0x1 << CONTROL_TURN_LEFT_INDEX;
-const U32 AGENT_CONTROL_TURN_RIGHT = 0x1 << CONTROL_TURN_RIGHT_INDEX;
-
-const U32 AGENT_CONTROL_AWAY = 0x1 << CONTROL_AWAY_INDEX;
-
-const U32 AGENT_CONTROL_LBUTTON_DOWN = 0x1 << CONTROL_LBUTTON_DOWN_INDEX;
-const U32 AGENT_CONTROL_LBUTTON_UP = 0x1 << CONTROL_LBUTTON_UP_INDEX;
-const U32 AGENT_CONTROL_ML_LBUTTON_DOWN = 0x1 << CONTROL_ML_LBUTTON_DOWN_INDEX;
-const U32 AGENT_CONTROL_ML_LBUTTON_UP = ((U32)0x1) << CONTROL_ML_LBUTTON_UP_INDEX;
+const U32 AGENT_CONTROL_AT_POS = 0x1 << CONTROL_AT_POS_INDEX; // 0x00000001
+const U32 AGENT_CONTROL_AT_NEG = 0x1 << CONTROL_AT_NEG_INDEX; // 0x00000002
+const U32 AGENT_CONTROL_LEFT_POS = 0x1 << CONTROL_LEFT_POS_INDEX; // 0x00000004
+const U32 AGENT_CONTROL_LEFT_NEG = 0x1 << CONTROL_LEFT_NEG_INDEX; // 0x00000008
+const U32 AGENT_CONTROL_UP_POS = 0x1 << CONTROL_UP_POS_INDEX; // 0x00000010
+const U32 AGENT_CONTROL_UP_NEG = 0x1 << CONTROL_UP_NEG_INDEX; // 0x00000020
+const U32 AGENT_CONTROL_PITCH_POS = 0x1 << CONTROL_PITCH_POS_INDEX; // 0x00000040
+const U32 AGENT_CONTROL_PITCH_NEG = 0x1 << CONTROL_PITCH_NEG_INDEX; // 0x00000080
+const U32 AGENT_CONTROL_YAW_POS = 0x1 << CONTROL_YAW_POS_INDEX; // 0x00000100
+const U32 AGENT_CONTROL_YAW_NEG = 0x1 << CONTROL_YAW_NEG_INDEX; // 0x00000200
+
+const U32 AGENT_CONTROL_FAST_AT = 0x1 << CONTROL_FAST_AT_INDEX; // 0x00000400
+const U32 AGENT_CONTROL_FAST_LEFT = 0x1 << CONTROL_FAST_LEFT_INDEX; // 0x00000800
+const U32 AGENT_CONTROL_FAST_UP = 0x1 << CONTROL_FAST_UP_INDEX; // 0x00001000
+
+const U32 AGENT_CONTROL_FLY = 0x1 << CONTROL_FLY_INDEX; // 0x00002000
+const U32 AGENT_CONTROL_STOP = 0x1 << CONTROL_STOP_INDEX; // 0x00004000
+const U32 AGENT_CONTROL_FINISH_ANIM = 0x1 << CONTROL_FINISH_ANIM_INDEX; // 0x00008000
+const U32 AGENT_CONTROL_STAND_UP = 0x1 << CONTROL_STAND_UP_INDEX; // 0x00010000
+const U32 AGENT_CONTROL_SIT_ON_GROUND = 0x1 << CONTROL_SIT_ON_GROUND_INDEX; // 0x00020000
+const U32 AGENT_CONTROL_MOUSELOOK = 0x1 << CONTROL_MOUSELOOK_INDEX; // 0x00040000
+
+const U32 AGENT_CONTROL_NUDGE_AT_POS = 0x1 << CONTROL_NUDGE_AT_POS_INDEX; // 0x00080000
+const U32 AGENT_CONTROL_NUDGE_AT_NEG = 0x1 << CONTROL_NUDGE_AT_NEG_INDEX; // 0x00100000
+const U32 AGENT_CONTROL_NUDGE_LEFT_POS = 0x1 << CONTROL_NUDGE_LEFT_POS_INDEX; // 0x00200000
+const U32 AGENT_CONTROL_NUDGE_LEFT_NEG = 0x1 << CONTROL_NUDGE_LEFT_NEG_INDEX; // 0x00400000
+const U32 AGENT_CONTROL_NUDGE_UP_POS = 0x1 << CONTROL_NUDGE_UP_POS_INDEX; // 0x00800000
+const U32 AGENT_CONTROL_NUDGE_UP_NEG = 0x1 << CONTROL_NUDGE_UP_NEG_INDEX; // 0x01000000
+const U32 AGENT_CONTROL_TURN_LEFT = 0x1 << CONTROL_TURN_LEFT_INDEX; // 0x02000000
+const U32 AGENT_CONTROL_TURN_RIGHT = 0x1 << CONTROL_TURN_RIGHT_INDEX; // 0x04000000
+
+const U32 AGENT_CONTROL_AWAY = 0x1 << CONTROL_AWAY_INDEX; // 0x08000000
+
+const U32 AGENT_CONTROL_LBUTTON_DOWN = 0x1 << CONTROL_LBUTTON_DOWN_INDEX; // 0x10000000
+const U32 AGENT_CONTROL_LBUTTON_UP = 0x1 << CONTROL_LBUTTON_UP_INDEX; // 0x20000000
+const U32 AGENT_CONTROL_ML_LBUTTON_DOWN = 0x1 << CONTROL_ML_LBUTTON_DOWN_INDEX; // 0x40000000
+const U32 AGENT_CONTROL_ML_LBUTTON_UP = ((U32)0x1) << CONTROL_ML_LBUTTON_UP_INDEX; // 0x80000000
const U32 AGENT_CONTROL_AT = AGENT_CONTROL_AT_POS
| AGENT_CONTROL_AT_NEG
diff --git a/linden/indra/llcommon/llapp.cpp b/linden/indra/llcommon/llapp.cpp
index a10436a..bd2e377 100644
--- a/linden/indra/llcommon/llapp.cpp
+++ b/linden/indra/llcommon/llapp.cpp
@@ -65,6 +65,7 @@ BOOL LLApp::sLogInSignal = FALSE;
// static
LLApp::EAppStatus LLApp::sStatus = LLApp::APP_STATUS_STOPPED; // Keeps track of application status
LLAppErrorHandler LLApp::sErrorHandler = NULL;
+LLAppErrorHandler LLApp::sSyncErrorHandler = NULL;
BOOL LLApp::sErrorThreadRunning = FALSE;
#if !LL_WINDOWS
LLApp::child_map LLApp::sChildMap;
@@ -262,6 +263,21 @@ void LLApp::setErrorHandler(LLAppErrorHandler handler)
LLApp::sErrorHandler = handler;
}
+
+void LLApp::setSyncErrorHandler(LLAppErrorHandler handler)
+{
+ LLApp::sSyncErrorHandler = handler;
+}
+
+// static
+void LLApp::runSyncErrorHandler()
+{
+ if (LLApp::sSyncErrorHandler)
+ {
+ LLApp::sSyncErrorHandler();
+ }
+}
+
// static
void LLApp::runErrorHandler()
{
@@ -285,7 +301,13 @@ void LLApp::setStatus(EAppStatus status)
// static
void LLApp::setError()
{
- setStatus(APP_STATUS_ERROR);
+ if (!isError())
+ {
+ // perform any needed synchronous error-handling
+ runSyncErrorHandler();
+ // set app status to ERROR so that the LLErrorThread notices
+ setStatus(APP_STATUS_ERROR);
+ }
}
diff --git a/linden/indra/llcommon/llapp.h b/linden/indra/llcommon/llapp.h
index 1a700cc..50a70ae 100644
--- a/linden/indra/llcommon/llapp.h
+++ b/linden/indra/llcommon/llapp.h
@@ -189,6 +189,7 @@ public:
// Error handling methods
//
void setErrorHandler(LLAppErrorHandler handler);
+ void setSyncErrorHandler(LLAppErrorHandler handler);
#if !LL_WINDOWS
//
@@ -245,13 +246,15 @@ protected:
private:
void setupErrorHandling(); // Do platform-specific error-handling setup (signals, structured exceptions)
- static void runErrorHandler();
+ static void runErrorHandler(); // run shortly after we detect an error, ran in the relatively robust context of the LLErrorThread - preferred.
+ static void runSyncErrorHandler(); // run IMMEDIATELY when we get an error, ran in the context of the faulting thread.
// *NOTE: On Windows, we need a routine to reset the structured
// exception handler when some evil driver has taken it over for
// their own purposes
typedef int(*signal_handler_func)(int signum);
static LLAppErrorHandler sErrorHandler;
+ static LLAppErrorHandler sSyncErrorHandler;
// Default application threads
LLErrorThread* mThreadErrorp; // Waits for app to go to status ERROR, then runs the error callback
diff --git a/linden/indra/llcommon/llapr.cpp b/linden/indra/llcommon/llapr.cpp
index 770cd3f..08c40a4 100644
--- a/linden/indra/llcommon/llapr.cpp
+++ b/linden/indra/llcommon/llapr.cpp
@@ -116,8 +116,10 @@ void LLScopedLock::unlock()
bool ll_apr_warn_status(apr_status_t status)
{
if(APR_SUCCESS == status) return false;
+#ifndef LL_WINDOWS
char buf[MAX_STRING]; /* Flawfinder: ignore */
llwarns << "APR: " << apr_strerror(status, buf, MAX_STRING) << llendl;
+#endif
return true;
}
diff --git a/linden/indra/llcommon/llcommon.vcproj b/linden/indra/llcommon/llcommon.vcproj
index 6b4a0e8..ab4e67a 100644
--- a/linden/indra/llcommon/llcommon.vcproj
+++ b/linden/indra/llcommon/llcommon.vcproj
@@ -432,10 +432,10 @@
RelativePath=".\lllivefile.h">
+ RelativePath=".\lllocalidhashmap.h">
+ RelativePath=".\lllog.h">
@@ -504,6 +504,9 @@
RelativePath=".\llskipmap.h">
+
+
::removeObj(const Type& obj)
typename std::vector::iterator iter = std::find(this->begin(), this->end(), obj);
if (iter != this->end())
{
+ S32 res = iter - this->begin();
typename std::vector::iterator last = this->end();
--last;
*iter = *last;
this->pop_back();
- return iter - this->begin();
+ return res;
}
return FAIL;
}
diff --git a/linden/indra/llcommon/lldefs.h b/linden/indra/llcommon/lldefs.h
index d081245..0e69626 100644
--- a/linden/indra/llcommon/lldefs.h
+++ b/linden/indra/llcommon/lldefs.h
@@ -218,7 +218,15 @@ inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATA
template
inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval)
{
- return llmin(llmax(a, minval), maxval);
+ if ( a < minval )
+ {
+ return minval;
+ }
+ else if ( a > maxval )
+ {
+ return maxval;
+ }
+ return a;
}
template
@@ -234,3 +242,4 @@ inline LLDATATYPE llclampb(const LLDATATYPE& a)
}
#endif // LL_LLDEFS_H
+
diff --git a/linden/indra/llcommon/llerror.cpp b/linden/indra/llcommon/llerror.cpp
index d9ab57c..0e7db89 100644
--- a/linden/indra/llcommon/llerror.cpp
+++ b/linden/indra/llcommon/llerror.cpp
@@ -37,15 +37,16 @@
#include
#ifdef __GNUC__
-#include
-#endif
+# include
+#endif // __GNUC__
#include
#if !LL_WINDOWS
-#include
-#endif
+# include
+# include
+#endif // !LL_WINDOWS
#if LL_WINDOWS
-#include
-#endif
+# include
+#endif // LL_WINDOWS
#include
#include "llapp.h"
@@ -133,18 +134,58 @@ namespace {
class RecordToStderr : public LLError::Recorder
{
public:
- RecordToStderr(bool timestamp) : mTimestamp(timestamp) { }
+ RecordToStderr(bool timestamp) : mTimestamp(timestamp), mUseANSI(ANSI_PROBE) { }
virtual bool wantsTime() { return mTimestamp; }
virtual void recordMessage(LLError::ELevel level,
- const std::string& message)
+ const std::string& message)
{
+ if (ANSI_PROBE == mUseANSI)
+ mUseANSI = (checkANSI() ? ANSI_YES : ANSI_NO);
+
+ if (ANSI_YES == mUseANSI)
+ {
+ // Default all message levels to bold so we can distinguish our own messages from those dumped by subprocesses and libraries.
+ colorANSI("1"); // bold
+ switch (level) {
+ case LLError::LEVEL_ERROR:
+ colorANSI("31"); // red
+ break;
+ case LLError::LEVEL_WARN:
+ colorANSI("34"); // blue
+ break;
+ case LLError::LEVEL_DEBUG:
+ colorANSI("35"); // magenta
+ break;
+ default:
+ break;
+ }
+ }
fprintf(stderr, "%s\n", message.c_str());
+ if (ANSI_YES == mUseANSI) colorANSI("0"); // reset
}
private:
bool mTimestamp;
+ typedef enum ANSIState {ANSI_PROBE, ANSI_YES, ANSI_NO};
+ ANSIState mUseANSI;
+ void colorANSI(const std::string color)
+ {
+ // ANSI color code escape sequence
+ fprintf(stderr, "\033[%sm", color.c_str() );
+ };
+ bool checkANSI(void)
+ {
+#if LL_LINUX || LL_DARWIN
+ // Check whether it's okay to use ANSI; if stderr is
+ // a tty then we assume yes. Can be turned off with
+ // the LL_NO_ANSI_COLOR env var.
+ return (0 != isatty(2)) &&
+ (NULL == getenv("LL_NO_ANSI_COLOR"));
+#endif // LL_LINUX
+ return false;
+ };
};
class RecordToFixedBuffer : public LLError::Recorder
diff --git a/linden/indra/llcommon/llevent.h b/linden/indra/llcommon/llevent.h
index 83cb79f..ef96ef7 100644
--- a/linden/indra/llcommon/llevent.h
+++ b/linden/indra/llcommon/llevent.h
@@ -185,13 +185,6 @@ protected:
LLPointer mDispatcher;
};
-// Utility mixer class which fires & handles events
-class LLSimpleListenerObservable : public LLObservable, public LLSimpleListener
-{
-public:
- virtual bool handleEvent(LLPointer event, const LLSD& userdata) = 0;
-};
-
class LLValueChangedEvent : public LLEvent
{
public:
diff --git a/linden/indra/llcommon/llfile.cpp b/linden/indra/llcommon/llfile.cpp
index d551f28..32e9622 100644
--- a/linden/indra/llcommon/llfile.cpp
+++ b/linden/indra/llcommon/llfile.cpp
@@ -272,9 +272,11 @@ void llofstream::open(const char* _Filename, /* Flawfinder: ignore */
void llofstream::close()
{ // close the C stream
- llassert(_Filebuffer);
- if (_Filebuffer->close() == 0)
- _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
+ if(is_open())
+ {
+ if (_Filebuffer->close() == 0)
+ _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
+ }
}
llofstream::llofstream(const char *_Filename,
@@ -286,7 +288,8 @@ llofstream::llofstream(const char *_Filename,
}
llofstream::~llofstream()
-{ // destroy the object
+{
+ // destroy the object
if (_ShouldClose)
{
close();
diff --git a/linden/indra/llcommon/llframetimer.cpp b/linden/indra/llcommon/llframetimer.cpp
index 9de3be2..96e5014 100644
--- a/linden/indra/llcommon/llframetimer.cpp
+++ b/linden/indra/llcommon/llframetimer.cpp
@@ -140,3 +140,18 @@ F32 LLFrameTimer::getFrameDeltaTimeF32()
{
return (F32)(U64_to_F64(sFrameDeltaTime) * USEC_TO_SEC_F64);
}
+
+
+// static
+// Return seconds since the current frame started
+F32 LLFrameTimer::getCurrentFrameTime()
+{
+ U64 frame_time = totalTime() - sTotalTime;
+ return (F32)(U64_to_F64(frame_time) * USEC_TO_SEC_F64);
+}
+
+// Glue code to avoid full class .h file #includes
+F32 getCurrentFrameTime()
+{
+ return (F32)(LLFrameTimer::getCurrentFrameTime());
+}
diff --git a/linden/indra/llcommon/llframetimer.h b/linden/indra/llcommon/llframetimer.h
index bc0d79d..11c4cfc 100644
--- a/linden/indra/llcommon/llframetimer.h
+++ b/linden/indra/llcommon/llframetimer.h
@@ -74,6 +74,9 @@ public:
static F32 getFrameDeltaTimeF32();
+ // Return seconds since the current frame started
+ static F32 getCurrentFrameTime();
+
// MANIPULATORS
void start();
void stop();
@@ -144,4 +147,7 @@ protected:
BOOL mStarted;
};
+// Glue code for Havok (or anything else that doesn't want the full .h files)
+extern F32 getCurrentFrameTime();
+
#endif // LL_LLFRAMETIMER_H
diff --git a/linden/indra/llcommon/lllslconstants.h b/linden/indra/llcommon/lllslconstants.h
index ba39098..508fb42 100644
--- a/linden/indra/llcommon/lllslconstants.h
+++ b/linden/indra/llcommon/lllslconstants.h
@@ -70,6 +70,7 @@ const S32 LSL_PRIM_FLEXIBLE = 21;
const S32 LSL_PRIM_TEXGEN = 22;
const S32 LSL_PRIM_POINT_LIGHT = 23;
const S32 LSL_PRIM_CAST_SHADOWS = 24;
+const S32 LSL_PRIM_GLOW = 25;
const S32 LSL_PRIM_TYPE_BOX = 0;
const S32 LSL_PRIM_TYPE_CYLINDER= 1;
diff --git a/linden/indra/llcommon/llmemory.h b/linden/indra/llcommon/llmemory.h
index e1af7ba..c10661a 100644
--- a/linden/indra/llcommon/llmemory.h
+++ b/linden/indra/llcommon/llmemory.h
@@ -419,6 +419,31 @@ protected:
// Foo* instance = FooSingleton::getInstance();
//
// As currently written, it is not thread-safe.
+#if LL_WINDOWS && _MSC_VER < 1400 // this is Visual C++ 2003 or earlier
+// workaround for VC7 compiler bug
+// adapted from http://www.codeproject.com/KB/tips/VC2003MeyersSingletonBug.aspx
+// our version doesn't introduce a nested struct so that you can still declare LLSingleton
+// a friend and hide your constructor
+
+template
+class LLSingleton
+{
+public:
+ static T* getInstance()
+ {
+ LLSingleton singleton;
+ return singleton.get();
+ }
+private:
+ T* get()
+ {
+ static T instance;
+ return &instance;
+ }
+
+};
+#else
+
template
class LLSingleton
{
@@ -430,6 +455,8 @@ public:
}
};
+#endif
+
//----------------------------------------------------------------------------
// Return the resident set size of the current process, in bytes.
diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h
index 8d38904..e99b103 100644
--- a/linden/indra/llcommon/llpreprocessor.h
+++ b/linden/indra/llcommon/llpreprocessor.h
@@ -79,9 +79,16 @@
#endif
+
// Deal with the differeneces on Windows
#if LL_MSVC
-#define snprintf safe_snprintf /* Flawfinder: ignore */
+namespace snprintf_hack
+{
+ int snprintf(char *str, size_t size, const char *format, ...);
+}
+
+// #define snprintf safe_snprintf /* Flawfinder: ignore */
+using snprintf_hack::snprintf;
#endif // LL_MSVC
// Static linking with apr on windows needs to be declared.
diff --git a/linden/indra/llcommon/llptrskiplist.h b/linden/indra/llcommon/llptrskiplist.h
index df35d30..f1df27a 100644
--- a/linden/indra/llcommon/llptrskiplist.h
+++ b/linden/indra/llcommon/llptrskiplist.h
@@ -34,6 +34,7 @@
#include "llerror.h"
//#include "vmath.h"
+#include "llrand.h"
/////////////////////////////////////////////
//
diff --git a/linden/indra/llcommon/llskiplist.h b/linden/indra/llcommon/llskiplist.h
index 78e6f0a..c88b310 100644
--- a/linden/indra/llcommon/llskiplist.h
+++ b/linden/indra/llcommon/llskiplist.h
@@ -32,6 +32,7 @@
#define LL_LLSKIPLIST_H
#include "llrand.h"
+#include "llrand.h"
// NOTA BENE: Insert first needs to be < NOT <=
// Binary depth must be >= 2
diff --git a/linden/indra/llcommon/llsmoothstep.h b/linden/indra/llcommon/llsmoothstep.h
new file mode 100644
index 0000000..c2b3447
--- /dev/null
+++ b/linden/indra/llcommon/llsmoothstep.h
@@ -0,0 +1,50 @@
+/**
+ * @file llsmoothstep.h
+ * @brief Smoothstep - transition from 0 to 1 - function, first and second derivatives all continuous (smooth)
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2008, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSMOOTHSTEP_H
+#define LL_LLSMOOTHSTEP_H
+
+template
+inline LLDATATYPE llsmoothstep(const LLDATATYPE& edge0, const LLDATATYPE& edge1, const LLDATATYPE& value)
+{
+ if (value < edge0)
+ return (LLDATATYPE)0;
+
+ if (value >= edge1)
+ return (LLDATATYPE)1;
+
+ // Scale/bias into [0..1] range
+ LLDATATYPE scaled_value = (value - edge0) / (edge1 - edge0);
+
+ return scaled_value * scaled_value * (3 - 2 * scaled_value);
+}
+
+#endif // LL_LLSMOOTHSTEP_H
diff --git a/linden/indra/llcommon/llstatenums.h b/linden/indra/llcommon/llstatenums.h
index 6fa61e1..bde6ade 100644
--- a/linden/indra/llcommon/llstatenums.h
+++ b/linden/indra/llcommon/llstatenums.h
@@ -57,7 +57,13 @@ enum
LL_SIM_STAT_VIRTUAL_SIZE_KB,
LL_SIM_STAT_RESIDENT_SIZE_KB,
LL_SIM_STAT_PENDING_LOCAL_UPLOADS,
- LL_SIM_STAT_TOTAL_UNACKED_BYTES
+ LL_SIM_STAT_TOTAL_UNACKED_BYTES,
+ LL_SIM_STAT_PHYSICS_PINNED_TASKS,
+ LL_SIM_STAT_PHYSICS_LOD_TASKS,
+ LL_SIM_STAT_SIMPHYSICSSTEPMS,
+ LL_SIM_STAT_SIMPHYSICSSHAPEMS,
+ LL_SIM_STAT_SIMPHYSICSOTHERMS,
+ LL_SIM_STAT_SIMPHYSICSMEMORY
};
#endif
diff --git a/linden/indra/llcommon/llstl.h b/linden/indra/llcommon/llstl.h
index 2719888..9a24185 100644
--- a/linden/indra/llcommon/llstl.h
+++ b/linden/indra/llcommon/llstl.h
@@ -33,6 +33,9 @@
#define LL_LLSTL_H
#include
+#include
+#include
+
+
+
+
+
+
+
+
PI/2
// since quat and -quat are the same rotation we invert one of
// p or q to reduce unecessary spins
- // A equivalent way to do it is to convert acos(c) as if it had been negative,
- // and to negate stp
+ // A equivalent way to do it is to convert acos(c) as if it had
+ // been negative, and to negate stp
angle = (F32) acos(-c);
stp = -(F32) sin(angle * (1.f - t));
stq = (F32) sin(angle * t);
@@ -742,20 +840,6 @@ LLQuaternion::Order StringToOrder( const char *str )
return LLQuaternion::XYZ;
}
-const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat)
-{
- *this = mat.quaternion();
- normQuat();
- return (*this);
-}
-
-const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat)
-{
- *this = mat.quaternion();
- normQuat();
- return (*this);
-}
-
void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const
{
F32 cos_a = mQ[VW];
@@ -769,10 +853,28 @@ void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const
else
sin_a = 1.f/sin_a;
- *angle = 2.0f * (F32) acos( cos_a );
- vec.mV[VX] = mQ[VX] * sin_a;
- vec.mV[VY] = mQ[VY] * sin_a;
- vec.mV[VZ] = mQ[VZ] * sin_a;
+ F32 temp_angle = 2.0f * (F32) acos( cos_a );
+ if (temp_angle > F_PI)
+ {
+ // The (angle,axis) pair should never have angles outside [PI, -PI]
+ // since we want the _shortest_ (angle,axis) solution.
+ // Since acos is defined for [0, PI], and we multiply by 2.0, we
+ // can push the angle outside the acceptible range.
+ // When this happens we set the angle to the other portion of a
+ // full 2PI rotation, and negate the axis, which reverses the
+ // direction of the rotation (by the right-hand rule).
+ *angle = 2.f * F_PI - temp_angle;
+ vec.mV[VX] = - mQ[VX] * sin_a;
+ vec.mV[VY] = - mQ[VY] * sin_a;
+ vec.mV[VZ] = - mQ[VZ] * sin_a;
+ }
+ else
+ {
+ *angle = temp_angle;
+ vec.mV[VX] = mQ[VX] * sin_a;
+ vec.mV[VY] = mQ[VY] * sin_a;
+ vec.mV[VZ] = mQ[VZ] * sin_a;
+ }
}
@@ -846,7 +948,7 @@ BOOL LLQuaternion::parseQuat(const char* buf, LLQuaternion* value)
S32 count = sscanf( buf, "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 );
if( 4 == count )
{
- value->setQuat( quat );
+ value->set( quat );
return TRUE;
}
diff --git a/linden/indra/llmath/llquaternion.h b/linden/indra/llmath/llquaternion.h
index 6805437..048db2d 100644
--- a/linden/indra/llmath/llquaternion.h
+++ b/linden/indra/llmath/llquaternion.h
@@ -57,10 +57,10 @@ public:
LLQuaternion(); // Initializes Quaternion to (0,0,0,1)
explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4
explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3
- LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normQuat(x, y, z, w)
+ LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normalize(x, y, z, w)
LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec)
LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec)
- LLQuaternion(const F32 *q); // Initializes Quaternion to normQuat(x, y, z, w)
+ LLQuaternion(const F32 *q); // Initializes Quaternion to normalize(x, y, z, w)
LLQuaternion(const LLVector3 &x_axis,
const LLVector3 &y_axis,
const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis]
@@ -71,15 +71,27 @@ public:
void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization
void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization
void loadIdentity(); // Loads the quaternion that represents the identity rotation
- const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normQuat(x, y, z, w)
- const LLQuaternion& setQuat(const LLQuaternion &quat); // Copies Quaternion
- const LLQuaternion& setQuat(const F32 *q); // Sets Quaternion to normQuat(quat[VX], quat[VY], quat[VZ], quat[VW])
- const LLQuaternion& setQuat(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat)
- const LLQuaternion& setQuat(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat)
- const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z)
- const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec)
- const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec)
- const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll)
+
+ const LLQuaternion& set(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normalize(x, y, z, w)
+ const LLQuaternion& set(const LLQuaternion &quat); // Copies Quaternion
+ const LLQuaternion& set(const F32 *q); // Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW])
+ const LLQuaternion& set(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat)
+ const LLQuaternion& set(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat)
+
+ const LLQuaternion& setAngleAxis(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z)
+ const LLQuaternion& setAngleAxis(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec)
+ const LLQuaternion& setAngleAxis(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec)
+ const LLQuaternion& setEulerAngles(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll)
+
+ const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // deprecated
+ const LLQuaternion& setQuat(const LLQuaternion &quat); // deprecated
+ const LLQuaternion& setQuat(const F32 *q); // deprecated
+ const LLQuaternion& setQuat(const LLMatrix3 &mat); // deprecated
+ const LLQuaternion& setQuat(const LLMatrix4 &mat); // deprecated
+ const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // deprecated
+ const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // deprecated
+ const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // deprecated
+ const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // deprecated
LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion
LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion
@@ -87,11 +99,16 @@ public:
void getAngleAxis(F32* angle, LLVector3 &vec) const;
void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const;
- F32 normQuat(); // Normalizes Quaternion and returns magnitude
- const LLQuaternion& conjQuat(void); // Conjugates Quaternion and returns result
+ F32 normalize(); // Normalizes Quaternion and returns magnitude
+ F32 normQuat(); // deprecated
+
+ const LLQuaternion& conjugate(void); // Conjugates Quaternion and returns result
+ const LLQuaternion& conjQuat(void); // deprecated
// Other useful methods
- const LLQuaternion& transQuat(); // Transpose
+ const LLQuaternion& transpose(); // transpose (same as conjugate)
+ const LLQuaternion& transQuat(); // deprecated
+
void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b
const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians
@@ -189,7 +206,7 @@ inline LLQuaternion::LLQuaternion(F32 x, F32 y, F32 z, F32 w)
mQ[VS] = w;
//RN: don't normalize this case as its used mainly for temporaries during calculations
- //normQuat();
+ //normalize();
/*
F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
mag -= 1.f;
@@ -205,7 +222,7 @@ inline LLQuaternion::LLQuaternion(const F32 *q)
mQ[VZ] = q[VZ];
mQ[VS] = q[VW];
- normQuat();
+ normalize();
/*
F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
mag -= 1.f;
@@ -224,33 +241,67 @@ inline void LLQuaternion::loadIdentity()
}
+inline const LLQuaternion& LLQuaternion::set(F32 x, F32 y, F32 z, F32 w)
+{
+ mQ[VX] = x;
+ mQ[VY] = y;
+ mQ[VZ] = z;
+ mQ[VS] = w;
+ normalize();
+ return (*this);
+}
+
+inline const LLQuaternion& LLQuaternion::set(const LLQuaternion &quat)
+{
+ mQ[VX] = quat.mQ[VX];
+ mQ[VY] = quat.mQ[VY];
+ mQ[VZ] = quat.mQ[VZ];
+ mQ[VW] = quat.mQ[VW];
+ normalize();
+ return (*this);
+}
+
+inline const LLQuaternion& LLQuaternion::set(const F32 *q)
+{
+ mQ[VX] = q[VX];
+ mQ[VY] = q[VY];
+ mQ[VZ] = q[VZ];
+ mQ[VS] = q[VW];
+ normalize();
+ return (*this);
+}
+
+
+// deprecated
inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w)
{
mQ[VX] = x;
mQ[VY] = y;
mQ[VZ] = z;
mQ[VS] = w;
- normQuat();
+ normalize();
return (*this);
}
+// deprecated
inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat)
{
mQ[VX] = quat.mQ[VX];
mQ[VY] = quat.mQ[VY];
mQ[VZ] = quat.mQ[VZ];
mQ[VW] = quat.mQ[VW];
- normQuat();
+ normalize();
return (*this);
}
+// deprecated
inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q)
{
mQ[VX] = q[VX];
mQ[VY] = q[VY];
mQ[VZ] = q[VZ];
mQ[VS] = q[VW];
- normQuat();
+ normalize();
return (*this);
}
@@ -270,10 +321,36 @@ inline void LLQuaternion::getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const
else
sin_a = 1.f/sin_a;
- *angle = 2.0f * (F32) acos( cos_a );
- *x = mQ[VX] * sin_a;
- *y = mQ[VY] * sin_a;
- *z = mQ[VZ] * sin_a;
+ F32 temp_angle = 2.0f * (F32) acos( cos_a );
+ if (temp_angle > F_PI)
+ {
+ // The (angle,axis) pair should never have angles outside [PI, -PI]
+ // since we want the _shortest_ (angle,axis) solution.
+ // Since acos is defined for [0, PI], and we multiply by 2.0, we
+ // can push the angle outside the acceptible range.
+ // When this happens we set the angle to the other portion of a
+ // full 2PI rotation, and negate the axis, which reverses the
+ // direction of the rotation (by the right-hand rule).
+ *angle = 2.f * F_PI - temp_angle;
+ *x = - mQ[VX] * sin_a;
+ *y = - mQ[VY] * sin_a;
+ *z = - mQ[VZ] * sin_a;
+ }
+ else
+ {
+ *angle = temp_angle;
+ *x = mQ[VX] * sin_a;
+ *y = mQ[VY] * sin_a;
+ *z = mQ[VZ] * sin_a;
+ }
+}
+
+inline const LLQuaternion& LLQuaternion::conjugate()
+{
+ mQ[VX] *= -1.f;
+ mQ[VY] *= -1.f;
+ mQ[VZ] *= -1.f;
+ return (*this);
}
inline const LLQuaternion& LLQuaternion::conjQuat()
@@ -285,12 +362,21 @@ inline const LLQuaternion& LLQuaternion::conjQuat()
}
// Transpose
+inline const LLQuaternion& LLQuaternion::transpose()
+{
+ mQ[VX] *= -1.f;
+ mQ[VY] *= -1.f;
+ mQ[VZ] *= -1.f;
+ return (*this);
+}
+
+// deprecated
inline const LLQuaternion& LLQuaternion::transQuat()
{
- mQ[VX] = -mQ[VX];
- mQ[VY] = -mQ[VY];
- mQ[VZ] = -mQ[VZ];
- return *this;
+ mQ[VX] *= -1.f;
+ mQ[VY] *= -1.f;
+ mQ[VZ] *= -1.f;
+ return (*this);
}
@@ -382,6 +468,30 @@ inline const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b)
return a;
}
+inline F32 LLQuaternion::normalize()
+{
+ F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
+
+ if (mag > FP_MAG_THRESHOLD)
+ {
+ F32 oomag = 1.f/mag;
+ mQ[VX] *= oomag;
+ mQ[VY] *= oomag;
+ mQ[VZ] *= oomag;
+ mQ[VS] *= oomag;
+ }
+ else
+ {
+ mQ[VX] = 0.f;
+ mQ[VY] = 0.f;
+ mQ[VZ] = 0.f;
+ mQ[VS] = 1.f;
+ }
+
+ return mag;
+}
+
+// deprecated
inline F32 LLQuaternion::normQuat()
{
F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
diff --git a/linden/indra/llmath/llrect.h b/linden/indra/llmath/llrect.h
index 9aadf9f..f2a5d75 100644
--- a/linden/indra/llmath/llrect.h
+++ b/linden/indra/llmath/llrect.h
@@ -227,6 +227,11 @@ public:
return mLeft == mRight || mBottom == mTop;
}
+ bool notNull() const
+ {
+ return !isNull();
+ }
+
LLRectBase& unionWith(const LLRectBase &other)
{
mLeft = llmin(mLeft, other.mLeft);
diff --git a/linden/indra/llmath/llsphere.cpp b/linden/indra/llmath/llsphere.cpp
new file mode 100644
index 0000000..62f6e27
--- /dev/null
+++ b/linden/indra/llmath/llsphere.cpp
@@ -0,0 +1,364 @@
+/**
+ * @file llsphere.cpp
+ * @author Andrew Meadows
+ * @brief Simple line class that can compute nearest approach between two lines
+ *
+ * $LicenseInfo:firstyear=2006&license=internal$
+ *
+ * Copyright (c) 2006-2008, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llsphere.h"
+
+LLSphere::LLSphere()
+: mCenter(0.f, 0.f, 0.f),
+ mRadius(0.f)
+{ }
+
+LLSphere::LLSphere( const LLVector3& center, F32 radius)
+{
+ set(center, radius);
+}
+
+void LLSphere::set( const LLVector3& center, F32 radius )
+{
+ mCenter = center;
+ setRadius(radius);
+}
+
+void LLSphere::setCenter( const LLVector3& center)
+{
+ mCenter = center;
+}
+
+void LLSphere::setRadius( F32 radius)
+{
+ if (radius < 0.f)
+ {
+ radius = -radius;
+ }
+ mRadius = radius;
+}
+
+const LLVector3& LLSphere::getCenter() const
+{
+ return mCenter;
+}
+
+F32 LLSphere::getRadius() const
+{
+ return mRadius;
+}
+
+// returns 'TRUE' if this sphere completely contains other_sphere
+BOOL LLSphere::contains(const LLSphere& other_sphere) const
+{
+ F32 separation = (mCenter - other_sphere.mCenter).length();
+ return (mRadius >= separation + other_sphere.mRadius) ? TRUE : FALSE;
+}
+
+// returns 'TRUE' if this sphere completely contains other_sphere
+BOOL LLSphere::overlaps(const LLSphere& other_sphere) const
+{
+ F32 separation = (mCenter - other_sphere.mCenter).length();
+ return (separation <= mRadius + other_sphere.mRadius) ? TRUE : FALSE;
+}
+
+// returns overlap
+// negative overlap is closest approach
+F32 LLSphere::getOverlap(const LLSphere& other_sphere) const
+{
+ // separation is distance from other_sphere's edge and this center
+ return (mCenter - other_sphere.mCenter).length() - mRadius - other_sphere.mRadius;
+}
+
+bool LLSphere::operator==(const LLSphere& rhs) const
+{
+ // TODO? -- use approximate equality for centers?
+ return (mRadius == rhs.mRadius
+ && mCenter == rhs.mCenter);
+}
+
+std::ostream& operator<<( std::ostream& output_stream, const LLSphere& sphere)
+{
+ output_stream << "{center=" << sphere.mCenter << "," << "radius=" << sphere.mRadius << "}";
+ return output_stream;
+}
+
+// static
+// removes any spheres that are contained in others
+void LLSphere::collapse(std::vector& sphere_list)
+{
+ std::vector::iterator first_itr = sphere_list.begin();
+ while (first_itr != sphere_list.end())
+ {
+ bool delete_from_front = false;
+
+ std::vector::iterator second_itr = first_itr;
+ ++second_itr;
+ while (second_itr != sphere_list.end())
+ {
+ if (second_itr->contains(*first_itr))
+ {
+ delete_from_front = true;
+ break;
+ }
+ else if (first_itr->contains(*second_itr))
+ {
+ sphere_list.erase(second_itr++);
+ }
+ else
+ {
+ ++second_itr;
+ }
+ }
+
+ if (delete_from_front)
+ {
+ sphere_list.erase(first_itr++);
+ }
+ else
+ {
+ ++first_itr;
+ }
+ }
+}
+
+// static
+// returns the bounding sphere that contains both spheres
+LLSphere LLSphere::getBoundingSphere(const LLSphere& first_sphere, const LLSphere& second_sphere)
+{
+ LLVector3 direction = second_sphere.mCenter - first_sphere.mCenter;
+
+ // HACK -- it is possible to get enough floating point error in the
+ // other getBoundingSphere() method that we have to add some slop
+ // at the end. Unfortunately, this breaks the link-order invarience
+ // for the linkability tests... unless we also apply the same slop
+ // here.
+ F32 half_milimeter = 0.0005f;
+
+ F32 distance = direction.length();
+ if (0.f == distance)
+ {
+ direction.setVec(1.f, 0.f, 0.f);
+ }
+ else
+ {
+ direction.normVec();
+ }
+ // the 'edge' is measured from the first_sphere's center
+ F32 max_edge = 0.f;
+ F32 min_edge = 0.f;
+
+ max_edge = llmax(max_edge + first_sphere.getRadius(), max_edge + distance + second_sphere.getRadius() + half_milimeter);
+ min_edge = llmin(min_edge - first_sphere.getRadius(), min_edge + distance - second_sphere.getRadius() - half_milimeter);
+ F32 radius = 0.5f * (max_edge - min_edge);
+ LLVector3 center = first_sphere.mCenter + (0.5f * (max_edge + min_edge)) * direction;
+ return LLSphere(center, radius);
+}
+
+// static
+// returns the bounding sphere that contains an arbitrary set of spheres
+LLSphere LLSphere::getBoundingSphere(const std::vector& sphere_list)
+{
+ // this algorithm can get relatively inaccurate when the sphere
+ // collection is 'small' (contained within a bounding sphere of about
+ // 2 meters or less)
+ // TODO -- improve the accuracy for small collections of spheres
+
+ LLSphere bounding_sphere( LLVector3(0.f, 0.f, 0.f), 0.f );
+ S32 sphere_count = sphere_list.size();
+ if (1 == sphere_count)
+ {
+ // trivial case -- single sphere
+ std::vector::const_iterator sphere_itr = sphere_list.begin();
+ bounding_sphere = *sphere_itr;
+ }
+ else if (2 == sphere_count)
+ {
+ // trivial case -- two spheres
+ std::vector::const_iterator first_sphere = sphere_list.begin();
+ std::vector::const_iterator second_sphere = first_sphere;
+ ++second_sphere;
+ bounding_sphere = LLSphere::getBoundingSphere(*first_sphere, *second_sphere);
+ }
+ else if (sphere_count > 0)
+ {
+ // non-trivial case -- we will approximate the solution
+ //
+ // NOTE -- there is a fancy/fast way to do this for large
+ // numbers of arbirary N-dimensional spheres -- you can look it
+ // up on the net. We're dealing with 3D spheres at collection
+ // sizes of 256 spheres or smaller, so we just use this
+ // brute force method.
+
+ // TODO -- perhaps would be worthwile to test for the solution where
+ // the largest spanning radius just happens to work. That is, where
+ // there are really two spheres that determine the bounding sphere,
+ // and all others are contained therein.
+
+ // compute the AABB
+ std::vector::const_iterator first_itr = sphere_list.begin();
+ LLVector3 max_corner = first_itr->getCenter() + first_itr->getRadius() * LLVector3(1.f, 1.f, 1.f);
+ LLVector3 min_corner = first_itr->getCenter() - first_itr->getRadius() * LLVector3(1.f, 1.f, 1.f);
+ {
+ std::vector::const_iterator sphere_itr = sphere_list.begin();
+ for (++sphere_itr; sphere_itr != sphere_list.end(); ++sphere_itr)
+ {
+ LLVector3 center = sphere_itr->getCenter();
+ F32 radius = sphere_itr->getRadius();
+ for (S32 i=0; i<3; ++i)
+ {
+ if (center.mV[i] + radius > max_corner.mV[i])
+ {
+ max_corner.mV[i] = center.mV[i] + radius;
+ }
+ if (center.mV[i] - radius < min_corner.mV[i])
+ {
+ min_corner.mV[i] = center.mV[i] - radius;
+ }
+ }
+ }
+ }
+
+ // get the starting center and radius from the AABB
+ LLVector3 diagonal = max_corner - min_corner;
+ F32 bounding_radius = 0.5f * diagonal.length();
+ LLVector3 bounding_center = 0.5f * (max_corner + min_corner);
+
+ // compute the starting step-size
+ F32 minimum_radius = 0.5f * llmin(diagonal.mV[VX], llmin(diagonal.mV[VY], diagonal.mV[VZ]));
+ F32 step_length = bounding_radius - minimum_radius;
+ S32 step_count = 0;
+ S32 max_step_count = 12;
+ F32 half_milimeter = 0.0005f;
+
+ // wander the center around in search of tighter solutions
+ S32 last_dx = 2; // 2 is out of bounds --> no match
+ S32 last_dy = 2;
+ S32 last_dz = 2;
+
+ while (step_length > half_milimeter
+ && step_count < max_step_count)
+ {
+ // the algorithm for testing the maximum radius could be expensive enough
+ // that it makes sense to NOT duplicate testing when possible, so we keep
+ // track of where we last tested, and only test the new points
+
+ S32 best_dx = 0;
+ S32 best_dy = 0;
+ S32 best_dz = 0;
+
+ // sample near the center of the box
+ bool found_better_center = false;
+ for (S32 dx = -1; dx < 2; ++dx)
+ {
+ for (S32 dy = -1; dy < 2; ++dy)
+ {
+ for (S32 dz = -1; dz < 2; ++dz)
+ {
+ if (dx == 0 && dy == 0 && dz == 0)
+ {
+ continue;
+ }
+
+ // count the number of indecies that match the last_*'s
+ S32 match_count = 0;
+ if (last_dx == dx) ++match_count;
+ if (last_dy == dy) ++match_count;
+ if (last_dz == dz) ++match_count;
+ if (match_count == 2)
+ {
+ // we've already tested this point
+ continue;
+ }
+
+ LLVector3 center = bounding_center;
+ center.mV[VX] += (F32) dx * step_length;
+ center.mV[VY] += (F32) dy * step_length;
+ center.mV[VZ] += (F32) dz * step_length;
+
+ // compute the radius of the bounding sphere
+ F32 max_radius = 0.f;
+ std::vector::const_iterator sphere_itr;
+ for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
+ {
+ F32 radius = (sphere_itr->getCenter() - center).length() + sphere_itr->getRadius();
+ if (radius > max_radius)
+ {
+ max_radius = radius;
+ }
+ }
+ if (max_radius < bounding_radius)
+ {
+ best_dx = dx;
+ best_dy = dy;
+ best_dz = dz;
+ bounding_center = center;
+ bounding_radius = max_radius;
+ found_better_center = true;
+ }
+ }
+ }
+ }
+ if (found_better_center)
+ {
+ // remember where we came from so we can avoid retesting
+ last_dx = -best_dx;
+ last_dy = -best_dy;
+ last_dz = -best_dz;
+ }
+ else
+ {
+ // reduce the step size
+ step_length *= 0.5f;
+ //++step_count;
+ // reset the last_*'s
+ last_dx = 2; // 2 is out of bounds --> no match
+ last_dy = 2;
+ last_dz = 2;
+ }
+ }
+
+ // HACK -- it is possible to get enough floating point error for the
+ // bounding sphere to too small on the order of 10e-6, but we only need
+ // it to be accurate to within about half a millimeter
+ bounding_radius += half_milimeter;
+
+ // this algorithm can get relatively inaccurate when the sphere
+ // collection is 'small' (contained within a bounding sphere of about
+ // 2 meters or less)
+ // TODO -- fix this
+ /* debug code
+ {
+ std::vector::const_iterator sphere_itr;
+ for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
+ {
+ F32 radius = (sphere_itr->getCenter() - bounding_center).length() + sphere_itr->getRadius();
+ if (radius + 0.1f > bounding_radius)
+ {
+ std::cout << " rad = " << radius << " bounding - rad = " << (bounding_radius - radius) << std::endl;
+ }
+ }
+ std::cout << "\n" << std::endl;
+ }
+ */
+
+ bounding_sphere.set(bounding_center, bounding_radius);
+ }
+ return bounding_sphere;
+}
+
+
diff --git a/linden/indra/llmath/llsphere.h b/linden/indra/llmath/llsphere.h
new file mode 100644
index 0000000..4d7cd7a
--- /dev/null
+++ b/linden/indra/llmath/llsphere.h
@@ -0,0 +1,72 @@
+// llsphere.h
+/**
+ * @file llsphere.cpp
+ * @author Andrew Meadows
+ * @brief Simple sphere implementation for basic geometric operations
+ *
+ * $LicenseInfo:firstyear=2001&license=internal$
+ *
+ * Copyright (c) 2001-2008, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_SPHERE_H
+#define LL_SPHERE_H
+
+#include "stdtypes.h"
+#include "v3math.h"
+#include
+#include
+
+class LLSphere
+{
+public:
+ LLSphere();
+ LLSphere( const LLVector3& center, F32 radius );
+
+ void set( const LLVector3& center, F32 radius );
+ void setCenter( const LLVector3& center );
+ void setRadius( F32 radius );
+
+ const LLVector3& getCenter() const;
+ F32 getRadius() const;
+
+ // returns TRUE if this sphere completely contains other_sphere
+ BOOL contains(const LLSphere& other_sphere) const;
+
+ // returns TRUE if this sphere overlaps other_sphere
+ BOOL overlaps(const LLSphere& other_sphere) const;
+
+ // returns overlap distance
+ // negative overlap is closest approach
+ F32 getOverlap(const LLSphere& other_sphere) const;
+
+ // removes any spheres that are contained in others
+ static void collapse(std::vector& sphere_list);
+
+ // returns minimum sphere bounding sphere for a set of spheres
+ static LLSphere getBoundingSphere(const LLSphere& first_sphere, const LLSphere& second_sphere);
+ static LLSphere getBoundingSphere(const std::vector& sphere_list);
+
+ bool operator==(const LLSphere& rhs) const;
+
+ friend std::ostream& operator<<( std::ostream& output_stream, const LLSphere& line );
+
+protected:
+ LLVector3 mCenter;
+ F32 mRadius;
+};
+
+
+#endif
diff --git a/linden/indra/llmath/lluuid.cpp b/linden/indra/llmath/lluuid.cpp
index db9e869..d835cbc 100644
--- a/linden/indra/llmath/lluuid.cpp
+++ b/linden/indra/llmath/lluuid.cpp
@@ -867,6 +867,11 @@ void LLUUID::generate()
time_last = timestamp;
}
+void LLUUID::generate(std::string hash_string)
+{
+ LLMD5 md5_uuid((U8*)hash_string.c_str());
+ md5_uuid.raw_digest(mData);
+}
U32 LLUUID::getRandomSeed()
{
diff --git a/linden/indra/llmath/lluuid.h b/linden/indra/llmath/lluuid.h
index 190b772..48308f2 100644
--- a/linden/indra/llmath/lluuid.h
+++ b/linden/indra/llmath/lluuid.h
@@ -64,6 +64,7 @@ public:
// MANIPULATORS
//
void generate(); // Generate a new UUID
+ void generate(std::string stream); //Generate a new UUID based on hash of input stream
BOOL set(const char *in_string, BOOL emit = TRUE); // Convert from string, if emit is FALSE, do not emit warnings
BOOL set(const std::string& in_string, BOOL emit = TRUE); // Convert from string, if emit is FALSE, do not emit warnings
void setNull(); // Faster than setting to LLUUID::null.
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp
index 4f1c260..9c19220 100644
--- a/linden/indra/llmath/llvolume.cpp
+++ b/linden/indra/llmath/llvolume.cpp
@@ -1858,9 +1858,6 @@ inline U32 sculpt_xy_to_index(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height,
{
U32 index = (x + y * sculpt_width) * sculpt_components;
- // attempt to resolve DEV-11158 - remove assert later.
- //llassert(index < sculpt_width * sculpt_height * sculpt_components);
-
return index;
}
@@ -2513,12 +2510,19 @@ bool LLVolumeParams::validate(U8 prof_curve, F32 prof_begin, F32 prof_end, F32 h
return true;
}
-#define MAX_INDEX 10000
S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
{
- S32 index[MAX_INDEX];
+ S32 expected_num_triangle_indices = getNumTriangleIndices();
+ if (expected_num_triangle_indices > MAX_VOLUME_TRIANGLE_INDICES)
+ {
+ // we don't allow LLVolumes with this many vertices
+ llwarns << "Couldn't allocate triangle indices" << llendl;
+ num_indices = 0;
+ return NULL;
+ }
+
+ S32* index = new S32[expected_num_triangle_indices];
S32 count = 0;
- S32 *indices = NULL;
// Let's do this totally diffently, as we don't care about faces...
// Counter-clockwise triangles are forward facing...
@@ -2532,6 +2536,9 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
size_s_out = getProfile().getTotalOut();
size_t = getPath().mPath.size();
+ // NOTE -- if the construction of the triangles below ever changes
+ // then getNumTriangleIndices() method may also have to be updated.
+
if (open) /* Flawfinder: ignore */
{
if (hollow)
@@ -2539,9 +2546,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
// Open hollow -- much like the closed solid, except we
// we need to stitch up the gap between s=0 and s=size_s-1
- if ( (size_t - 1) * (((size_s -1) * 6) + 6) >= MAX_INDEX)
- goto noindices;
-
for (t = 0; t < size_t - 1; t++)
{
// The outer face, first cut, and inner face
@@ -2655,8 +2659,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
if (use_tri1a2)
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1 + i;
index[count++] = pt1 + 1 + i;
index[count++] = pt2 + i;
@@ -2664,8 +2666,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
}
else
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1 + i;
index[count++] = pt2 - 1 + i;
index[count++] = pt2 + i;
@@ -2756,8 +2756,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
if (use_tri1a2)
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1;
index[count++] = pt2;
index[count++] = pt1 + 1;
@@ -2765,8 +2763,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
}
else
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1;
index[count++] = pt2;
index[count++] = pt2 - 1;
@@ -2779,9 +2775,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
{
// Open solid
- if ( (size_t - 1) * (((size_s -1) * 6) + 6) >= MAX_INDEX)
- goto noindices;
-
for (t = 0; t < size_t - 1; t++)
{
// Outer face + 1 cut face
@@ -2811,8 +2804,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
// Do the top and bottom caps, if necessary
if (path_open)
{
- if ( count + (size_s - 2) * 3 >= MAX_INDEX)
- goto noindices;
for (s = 0; s < size_s - 2; s++)
{
index[count++] = s+1;
@@ -2822,8 +2813,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
// We've got a top cap
S32 offset = (size_t - 1)*size_s;
- if ( count + (size_s - 2) * 3 >= MAX_INDEX)
- goto noindices;
for (s = 0; s < size_s - 2; s++)
{
// Inverted ordering from bottom cap.
@@ -2839,8 +2828,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
// Closed hollow
// Outer face
- if ( (size_t - 1) * (size_s_out - 1) * 6 >= MAX_INDEX)
- goto noindices;
for (t = 0; t < size_t - 1; t++)
{
for (s = 0; s < size_s_out - 1; s++)
@@ -2859,8 +2846,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
// Inner face
// Invert facing from outer face
- if ( count + (size_t - 1) * ((size_s - 1) - size_s_out) * 6 >= MAX_INDEX)
- goto noindices;
for (t = 0; t < size_t - 1; t++)
{
for (s = size_s_out; s < size_s - 1; s++)
@@ -2965,8 +2950,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
if (use_tri1a2)
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1 + i;
index[count++] = pt1 + 1 + i;
index[count++] = pt2 + i;
@@ -2974,8 +2957,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
}
else
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1 + i;
index[count++] = pt2 - 1 + i;
index[count++] = pt2 + i;
@@ -3066,8 +3047,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
if (use_tri1a2)
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1;
index[count++] = pt2;
index[count++] = pt1 + 1;
@@ -3075,8 +3054,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
}
else
{
- if (count + 3 >= MAX_INDEX)
- goto noindices;
index[count++] = pt1;
index[count++] = pt2;
index[count++] = pt2 - 1;
@@ -3088,8 +3065,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
else
{
// Closed solid. Easy case.
- if ( (size_t - 1) * (size_s - 1) * 6 > MAX_INDEX)
- goto noindices;
for (t = 0; t < size_t - 1; t++)
{
for (s = 0; s < size_s - 1; s++)
@@ -3111,8 +3086,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
if (path_open)
{
// bottom cap
- if ( count + (size_s - 2 - 1) * 3 >= MAX_INDEX)
- goto noindices;
for (s = 1; s < size_s - 2; s++)
{
index[count++] = s+1;
@@ -3122,8 +3095,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
// top cap
S32 offset = (size_t - 1)*size_s;
- if ( count + (size_s - 2 - 1) * 3 >= MAX_INDEX)
- goto noindices;
for (s = 1; s < size_s - 2; s++)
{
// Inverted ordering from bottom cap.
@@ -3134,7 +3105,18 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
}
}
+#ifdef LL_DEBUG
+ // assert that we computed the correct number of indices
+ if (count != expected_num_triangle_indices )
+ {
+ llerrs << "bad index count prediciton:"
+ << " expected=" << expected_num_triangle_indices
+ << " actual=" << count << llendl;
+ }
+#endif
+
#if 0
+ // verify that each index does not point beyond the size of the mesh
S32 num_vertices = mMesh.size();
for (i = 0; i < count; i+=3)
{
@@ -3145,17 +3127,65 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
}
#endif
- indices = new S32[count];
-noindices:
- if (!indices)
+ num_indices = count;
+ return index;
+}
+
+S32 LLVolume::getNumTriangleIndices() const
+{
+ BOOL profile_open = getProfile().isOpen();
+ BOOL hollow = getProfile().isHollow();
+ BOOL path_open = getPath().isOpen();
+
+ S32 size_s, size_s_out, size_t;
+ size_s = getProfile().getTotal();
+ size_s_out = getProfile().getTotalOut();
+ size_t = getPath().mPath.size();
+
+ S32 count = 0;
+ if (profile_open) /* Flawfinder: ignore */
{
- llwarns << "Couldn't allocate triangle indices" << llendl;
- num_indices = 0;
- return NULL;
+ if (hollow)
+ {
+ // Open hollow -- much like the closed solid, except we
+ // we need to stitch up the gap between s=0 and s=size_s-1
+ count = (size_t - 1) * (((size_s -1) * 6) + 6);
+ }
+ else
+ {
+ count = (size_t - 1) * (((size_s -1) * 6) + 6);
+ }
}
- num_indices = count;
- memcpy(indices, index, count * sizeof(S32)); /* Flawfinder: ignore */
- return indices;
+ else if (hollow)
+ {
+ // Closed hollow
+ // Outer face
+ count = (size_t - 1) * (size_s_out - 1) * 6;
+
+ // Inner face
+ count += (size_t - 1) * ((size_s - 1) - size_s_out) * 6;
+ }
+ else
+ {
+ // Closed solid. Easy case.
+ count = (size_t - 1) * (size_s - 1) * 6;
+ }
+
+ if (path_open)
+ {
+ S32 cap_triangle_count = size_s - 3;
+ if ( profile_open
+ || hollow )
+ {
+ cap_triangle_count = size_s - 2;
+ }
+ if ( cap_triangle_count > 0 )
+ {
+ // top and bottom caps
+ count += cap_triangle_count * 2 * 3;
+ }
+ }
+ return count;
}
//-----------------------------------------------------------------------------
@@ -3486,7 +3516,7 @@ struct lessTriangle
BOOL equalTriangle(const S32 *a, const S32 *b)
{
- if ((*a == *b) && (*(a+1) == *(b+1)) && ((*a+2) == (*b+2)))
+ if ((*a == *b) && (*(a+1) == *(b+1)) && (*(a+2) == *(b+2)))
{
return TRUE;
}
@@ -3502,6 +3532,21 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
S32 &num_output_triangles,
S32 **output_triangles)
{
+ /* Testing: avoid any cleanup
+ num_output_vertices = num_input_vertices;
+ num_output_triangles = num_input_triangles;
+
+ *output_vertices = new LLVector3[num_input_vertices];
+ for (S32 i = 0; i < num_input_vertices; i++)
+ {
+ (*output_vertices)[i] = input_vertices[i].mPos;
+ }
+
+ *output_triangles = new S32[num_input_triangles*3];
+ memcpy(*output_triangles, input_triangles, 3*num_input_triangles*sizeof(S32)); // Flawfinder: ignore
+ return TRUE;
+ */
+
// Here's how we do this:
// Create a structure which contains the original vertex index and the
// LLVector3 data.
@@ -3552,7 +3597,7 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
}
else
{
- //llinfos << "Removed duplicate vertex " << pairp->mVertex << llendl;
+ //llinfos << "Removed duplicate vertex " << pairp->mVertex << ", distance magVecSquared() is " << (pairp->mVertex - prev_pairp->mVertex).magVecSquared() << llendl;
}
vertex_mapping[pairp->mIndex] = new_num_vertices - 1;
}
@@ -3564,50 +3609,54 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
for (i = 0; i < num_input_triangles; i++)
{
- //llinfos << "Checking triangle " << input_triangles[i*3] << ":" << input_triangles[i*3+1] << ":" << input_triangles[i*3+2] << llendl;
- input_triangles[i*3] = vertex_mapping[input_triangles[i*3]];
- input_triangles[i*3+1] = vertex_mapping[input_triangles[i*3+1]];
- input_triangles[i*3+2] = vertex_mapping[input_triangles[i*3+2]];
+ S32 v1 = i*3;
+ S32 v2 = i*3 + 1;
+ S32 v3 = i*3 + 2;
+
+ //llinfos << "Checking triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl;
+ input_triangles[v1] = vertex_mapping[input_triangles[v1]];
+ input_triangles[v2] = vertex_mapping[input_triangles[v2]];
+ input_triangles[v3] = vertex_mapping[input_triangles[v3]];
- if ((input_triangles[i*3] == input_triangles[i*3+1])
- || (input_triangles[i*3] == input_triangles[i*3+2])
- || (input_triangles[i*3+1] == input_triangles[i*3+2]))
+ if ((input_triangles[v1] == input_triangles[v2])
+ || (input_triangles[v1] == input_triangles[v3])
+ || (input_triangles[v2] == input_triangles[v3]))
{
- //llinfos << "Removing degenerate triangle " << input_triangles[i*3] << ":" << input_triangles[i*3+1] << ":" << input_triangles[i*3+2] << llendl;
+ //llinfos << "Removing degenerate triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl;
// Degenerate triangle, skip
continue;
}
- if (input_triangles[i*3] < input_triangles[i*3+1])
+ if (input_triangles[v1] < input_triangles[v2])
{
- if (input_triangles[i*3] < input_triangles[i*3+2])
+ if (input_triangles[v1] < input_triangles[v3])
{
// (0 < 1) && (0 < 2)
- new_triangles[new_num_triangles*3] = input_triangles[i*3];
- new_triangles[new_num_triangles*3+1] = input_triangles[i*3+1];
- new_triangles[new_num_triangles*3+2] = input_triangles[i*3+2];
+ new_triangles[new_num_triangles*3] = input_triangles[v1];
+ new_triangles[new_num_triangles*3+1] = input_triangles[v2];
+ new_triangles[new_num_triangles*3+2] = input_triangles[v3];
}
else
{
// (0 < 1) && (2 < 0)
- new_triangles[new_num_triangles*3] = input_triangles[i*3+2];
- new_triangles[new_num_triangles*3+1] = input_triangles[i*3];
- new_triangles[new_num_triangles*3+2] = input_triangles[i*3+1];
+ new_triangles[new_num_triangles*3] = input_triangles[v3];
+ new_triangles[new_num_triangles*3+1] = input_triangles[v1];
+ new_triangles[new_num_triangles*3+2] = input_triangles[v2];
}
}
- else if (input_triangles[i*3+1] < input_triangles[i*3+2])
+ else if (input_triangles[v2] < input_triangles[v3])
{
// (1 < 0) && (1 < 2)
- new_triangles[new_num_triangles*3] = input_triangles[i*3+1];
- new_triangles[new_num_triangles*3+1] = input_triangles[i*3+2];
- new_triangles[new_num_triangles*3+2] = input_triangles[i*3];
+ new_triangles[new_num_triangles*3] = input_triangles[v2];
+ new_triangles[new_num_triangles*3+1] = input_triangles[v3];
+ new_triangles[new_num_triangles*3+2] = input_triangles[v1];
}
else
{
// (1 < 0) && (2 < 1)
- new_triangles[new_num_triangles*3] = input_triangles[i*3+2];
- new_triangles[new_num_triangles*3+1] = input_triangles[i*3];
- new_triangles[new_num_triangles*3+2] = input_triangles[i*3+1];
+ new_triangles[new_num_triangles*3] = input_triangles[v3];
+ new_triangles[new_num_triangles*3+1] = input_triangles[v1];
+ new_triangles[new_num_triangles*3+2] = input_triangles[v2];
}
new_num_triangles++;
}
@@ -3848,23 +3897,44 @@ void LLVolumeParams::reduceT(F32 begin, F32 end)
mPathParams.setEnd(a + end * (b - a));
}
+const F32 MIN_CONCAVE_PROFILE_WEDGE = 0.125f; // 1/8 unity
+const F32 MIN_CONCAVE_PATH_WEDGE = 0.111111f; // 1/9 unity
+
+// returns TRUE if the shape can be approximated with a convex shape
+// for collison purposes
BOOL LLVolumeParams::isConvex() const
{
- // The logic for determining convexity is a little convoluted.
+ F32 path_length = mPathParams.getEnd() - mPathParams.getBegin();
- // Do we need to take getTwistBegin into account? DK 08/12/04
- if ( mProfileParams.getHollow() != 0.0f
- || mPathParams.getTwist() != mPathParams.getTwistBegin() )
+ if ( mPathParams.getTwist() != mPathParams.getTwistBegin()
+ && path_length > MIN_CONCAVE_PATH_WEDGE )
{
- // hollow or twist gaurantees concavity
+ // twist along a "not too short" path is concave
return FALSE;
}
F32 profile_length = mProfileParams.getEnd() - mProfileParams.getBegin();
- BOOL concave_profile = (profile_length < 1.0f) && (profile_length > 0.5f);
- if (concave_profile)
+ F32 hollow = mProfileParams.getHollow();
+ BOOL same_hole = hollow == 0.f
+ || (mProfileParams.getCurveType() & LL_PCODE_HOLE_MASK) == LL_PCODE_HOLE_SAME;
+
+ F32 min_profile_wedge = MIN_CONCAVE_PROFILE_WEDGE;
+ U8 profile_type = mProfileParams.getCurveType() & LL_PCODE_PROFILE_MASK;
+ if ( LL_PCODE_PROFILE_CIRCLE_HALF == profile_type )
{
- // concave profile
+ // it is a sphere and spheres get twice the minimum profile wedge
+ min_profile_wedge = 2.f * MIN_CONCAVE_PROFILE_WEDGE;
+ }
+
+ BOOL convex_profile = ( ( profile_length == 1.f
+ || profile_length <= 0.5f )
+ && hollow == 0.f ) // trivially convex
+ || ( profile_length <= min_profile_wedge
+ && same_hole ); // effectvely convex (even when hollow)
+
+ if (!convex_profile)
+ {
+ // profile is concave
return FALSE;
}
@@ -3875,7 +3945,6 @@ BOOL LLVolumeParams::isConvex() const
return TRUE;
}
- F32 path_length = mPathParams.getEnd() - mPathParams.getBegin();
BOOL concave_path = (path_length < 1.0f) && (path_length > 0.5f);
if (concave_path)
{
@@ -3883,17 +3952,43 @@ BOOL LLVolumeParams::isConvex() const
}
// we're left with spheres, toroids and tubes
- // only the spheres can be convex
- U8 profile_type = mProfileParams.getCurveType() & LL_PCODE_PROFILE_MASK;
if ( LL_PCODE_PROFILE_CIRCLE_HALF == profile_type )
{
+ // at this stage all spheres must be convex
return TRUE;
}
// it's a toroid or tube
+ if ( path_length <= MIN_CONCAVE_PATH_WEDGE )
+ {
+ // effectively convex
+ return TRUE;
+ }
+
return FALSE;
}
+// debug
+void LLVolumeParams::setCube()
+{
+ mProfileParams.setCurveType(LL_PCODE_PROFILE_SQUARE);
+ mProfileParams.setBegin(0.f);
+ mProfileParams.setEnd(1.f);
+ mProfileParams.setHollow(0.f);
+
+ mPathParams.setBegin(0.f);
+ mPathParams.setEnd(1.f);
+ mPathParams.setScale(1.f, 1.f);
+ mPathParams.setShear(0.f, 0.f);
+ mPathParams.setCurveType(LL_PCODE_PATH_LINE);
+ mPathParams.setTwistBegin(0.f);
+ mPathParams.setTwistEnd(0.f);
+ mPathParams.setRadiusOffset(0.f);
+ mPathParams.setTaper(0.f, 0.f);
+ mPathParams.setRevolutions(0.f);
+ mPathParams.setSkew(0.f);
+}
+
LLFaceID LLVolume::generateFaceMask()
{
LLFaceID new_mask = 0x0000;
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h
index 5ec7997..9dbea7a 100644
--- a/linden/indra/llmath/llvolume.h
+++ b/linden/indra/llmath/llvolume.h
@@ -72,6 +72,8 @@ const F32 TAPER_QUANTA = 0.01f;
const F32 REV_QUANTA = 0.015f;
const F32 HOLLOW_QUANTA = 0.00002f;
+const S32 MAX_VOLUME_TRIANGLE_INDICES = 10000;
+
//============================================================================
// useful masks
@@ -187,10 +189,10 @@ class LLProfileParams
public:
LLProfileParams()
{
- mBegin = 0;
- mEnd = 1;
- mHollow = 0;
mCurveType = LL_PCODE_PROFILE_SQUARE;
+ mBegin = 0.f;
+ mEnd = 1.f;
+ mHollow = 0.f;
}
LLProfileParams(U8 curve, F32 begin, F32 end, F32 hollow)
@@ -307,17 +309,17 @@ class LLPathParams
public:
LLPathParams()
{
- mBegin = 0;
- mEnd = 1;
- mScale.setVec(1,1);
- mShear.setVec(0,0);
+ mBegin = 0.f;
+ mEnd = 1.f;
+ mScale.setVec(1.f,1.f);
+ mShear.setVec(0.f,0.f);
mCurveType = LL_PCODE_PATH_LINE;
- mTwistBegin = 0;
- mTwistEnd = 0;
- mRadiusOffset = 0;
- mTaper.setVec(0,0);
- mRevolutions = 1;
- mSkew = 0;
+ mTwistBegin = 0.f;
+ mTwistEnd = 0.f;
+ mRadiusOffset = 0.f;
+ mTaper.setVec(0.f,0.f);
+ mRevolutions = 1.f;
+ mSkew = 0.f;
}
LLPathParams(U8 curve, F32 begin, F32 end, F32 scx, F32 scy, F32 shx, F32 shy, F32 twistend, F32 twistbegin, F32 radiusoffset, F32 tx, F32 ty, F32 revolutions, F32 skew)
@@ -627,6 +629,9 @@ public:
friend std::ostream& operator<<(std::ostream &s, const LLVolumeParams &volume_params);
+ // debug helper functions
+ void setCube();
+
protected:
LLProfileParams mProfileParams;
LLPathParams mPathParams;
@@ -869,6 +874,10 @@ public:
S32 getSculptLevel() const { return mSculptLevel; }
S32 *getTriangleIndices(U32 &num_indices) const;
+
+ // returns number of triangle indeces required for path/profile mesh
+ S32 getNumTriangleIndices() const;
+
void generateSilhouetteVertices(std::vector &vertices, std::vector &normals, std::vector &segments, const LLVector3& view_vec,
const LLMatrix4& mat,
const LLMatrix3& norm_mat);
diff --git a/linden/indra/llmath/llvolumemgr.cpp b/linden/indra/llmath/llvolumemgr.cpp
index db99959..d9bca70 100644
--- a/linden/indra/llmath/llvolumemgr.cpp
+++ b/linden/indra/llmath/llvolumemgr.cpp
@@ -36,7 +36,7 @@
//#define DEBUG_VOLUME
-LLVolumeMgr* gVolumeMgr = 0;
+//LLVolumeMgr* gVolumeMgr = 0;
const F32 BASE_THRESHOLD = 0.03f;
@@ -49,37 +49,23 @@ F32 LLVolumeLODGroup::mDetailThresholds[NUM_LODS] = {BASE_THRESHOLD,
//static
F32 LLVolumeLODGroup::mDetailScales[NUM_LODS] = {1.f, 1.5f, 2.5f, 4.f};
-//============================================================================
-//static
-void LLVolumeMgr::initClass()
-{
- gVolumeMgr = new LLVolumeMgr();
-}
-
-//static
-BOOL LLVolumeMgr::cleanupClass()
-{
- BOOL res = FALSE;
- if (gVolumeMgr) {
- res = gVolumeMgr->cleanup();
- delete gVolumeMgr;
- gVolumeMgr = 0;
- }
- return res;
-}
//============================================================================
LLVolumeMgr::LLVolumeMgr()
+: mDataMutex(NULL)
{
- mDataMutex = new LLMutex(gAPRPoolp);
-// mNumVolumes = 0;
+ // the LLMutex magic interferes with easy unit testing,
+ // so you now must manually call useMutex() to use it
+ //mDataMutex = new LLMutex(gAPRPoolp);
}
LLVolumeMgr::~LLVolumeMgr()
{
cleanup();
+
delete mDataMutex;
+ mDataMutex = NULL;
}
BOOL LLVolumeMgr::cleanup()
@@ -90,7 +76,10 @@ BOOL LLVolumeMgr::cleanup()
}
#endif
BOOL no_refs = TRUE;
- mDataMutex->lock();
+ if (mDataMutex)
+ {
+ mDataMutex->lock();
+ }
for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(),
end = mVolumeLODGroups.end();
iter != end; iter++)
@@ -106,29 +95,37 @@ BOOL LLVolumeMgr::cleanup()
volgroupp->unref();// this );
}
mVolumeLODGroups.clear();
- mDataMutex->unlock();
+ if (mDataMutex)
+ {
+ mDataMutex->unlock();
+ }
return no_refs;
}
+// whatever calls getVolume() never owns the LLVolume* and
+// cannot keep references for long since it may be deleted
+// later. For best results hold it in an LLPointer.
LLVolume *LLVolumeMgr::getVolume(const LLVolumeParams &volume_params, const S32 detail)
{
LLVolumeLODGroup* volgroupp;
- mDataMutex->lock();
+ if (mDataMutex)
+ {
+ mDataMutex->lock();
+ }
volume_lod_group_map_t::iterator iter = mVolumeLODGroups.find(&volume_params);
if( iter == mVolumeLODGroups.end() )
{
- volgroupp = new LLVolumeLODGroup(volume_params);
- const LLVolumeParams* params = &(volgroupp->getParams());
- mVolumeLODGroups[params] = volgroupp;
- volgroupp->ref(); // initial reference
+ volgroupp = createNewGroup(volume_params);
}
else
{
volgroupp = iter->second;
}
- volgroupp->ref();// this );
- mDataMutex->unlock();
- // mNumVolumes++;
+ volgroupp->ref();
+ if (mDataMutex)
+ {
+ mDataMutex->unlock();
+ }
#ifdef DEBUG_VOLUME
{
lldebugs << "LLVolumeMgr::getVolume() " << (*this) << llendl;
@@ -137,6 +134,27 @@ LLVolume *LLVolumeMgr::getVolume(const LLVolumeParams &volume_params, const S32
return volgroupp->getLOD(detail);
}
+// virtual
+LLVolumeLODGroup* LLVolumeMgr::getGroup( const LLVolumeParams& volume_params ) const
+{
+ LLVolumeLODGroup* volgroupp = NULL;
+ if (mDataMutex)
+ {
+ mDataMutex->lock();
+ }
+ volume_lod_group_map_t::const_iterator iter = mVolumeLODGroups.find(&volume_params);
+ if( iter != mVolumeLODGroups.end() )
+ {
+ volgroupp = iter->second;
+ }
+ if (mDataMutex)
+ {
+ mDataMutex->unlock();
+ }
+ return volgroupp;
+}
+
+// virtual
void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
{
if (volumep->isUnique())
@@ -145,12 +163,18 @@ void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
return;
}
LLVolumeParams* params = (LLVolumeParams*) &(volumep->getParams());
- mDataMutex->lock();
+ if (mDataMutex)
+ {
+ mDataMutex->lock();
+ }
volume_lod_group_map_t::iterator iter = mVolumeLODGroups.find(params);
if( iter == mVolumeLODGroups.end() )
{
llerrs << "Warning! Tried to cleanup unknown volume type! " << *params << llendl;
- mDataMutex->unlock();
+ if (mDataMutex)
+ {
+ mDataMutex->unlock();
+ }
return;
}
else
@@ -164,9 +188,11 @@ void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
mVolumeLODGroups.erase(params);
volgroupp->unref();// this );
}
- // mNumVolumes--;
}
- mDataMutex->unlock();
+ if (mDataMutex)
+ {
+ mDataMutex->unlock();
+ }
#ifdef DEBUG_VOLUME
{
@@ -175,10 +201,43 @@ void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
#endif
}
+#ifdef DEBUG_VOLUME
+S32 LLVolumeMgr::getTotalRefCount() const
+{
+ S32 total_ref_count = 0;
+ for ( volume_lod_group_map_t::const_iterator iter = mVolumeLODGroups.begin(),
+ end = mVolumeLODGroups.end();
+ iter != end; iter++)
+ {
+ total_ref_count += iter->second->getTotalVolumeRefCount();
+ }
+ return total_ref_count;
+}
+
+S32 LLVolumeMgr::getGroupCount() const
+{
+ return mVolumeLODGroups.size();
+}
+#endif
+
+// protected
+LLVolumeLODGroup* LLVolumeMgr::createNewGroup(const LLVolumeParams& volume_params)
+{
+ LLVolumeLODGroup* group = new LLVolumeLODGroup(volume_params);
+ const LLVolumeParams* params = &(group->getParams());
+ mVolumeLODGroups[params] = group;
+ group->ref(); // initial reference
+ return group;
+}
+
+// virtual
void LLVolumeMgr::dump()
{
F32 avg = 0.f;
- mDataMutex->lock();
+ if (mDataMutex)
+ {
+ mDataMutex->lock();
+ }
for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(),
end = mVolumeLODGroups.end();
iter != end; iter++)
@@ -188,16 +247,30 @@ void LLVolumeMgr::dump()
}
int count = (int)mVolumeLODGroups.size();
avg = count ? avg / (F32)count : 0.0f;
- mDataMutex->unlock();
+ if (mDataMutex)
+ {
+ mDataMutex->unlock();
+ }
llinfos << "Average usage of LODs " << avg << llendl;
}
+void LLVolumeMgr::useMutex()
+{
+ if (!mDataMutex)
+ {
+ mDataMutex = new LLMutex(gAPRPoolp);
+ }
+}
+
std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr)
{
s << "{ numLODgroups=" << volume_mgr.mVolumeLODGroups.size() << ", ";
S32 total_refs = 0;
- volume_mgr.mDataMutex->lock();
+ if (volume_mgr.mDataMutex)
+ {
+ volume_mgr.mDataMutex->lock();
+ }
LLVolumeMgr::volume_lod_group_map_iter iter = volume_mgr.mVolumeLODGroups.begin();
LLVolumeMgr::volume_lod_group_map_iter end = volume_mgr.mVolumeLODGroups.end();
@@ -208,7 +281,10 @@ std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr)
s << ", " << (*volgroupp);
}
- volume_mgr.mDataMutex->unlock();
+ if (volume_mgr.mDataMutex)
+ {
+ volume_mgr.mDataMutex->unlock();
+ }
s << ", total_refs=" << total_refs << " }";
return s;
@@ -222,15 +298,39 @@ LLVolumeLODGroup::LLVolumeLODGroup(const LLVolumeParams ¶ms)
for (i = 0; i < NUM_LODS; i++)
{
mLODRefs[i] = 0;
- mVolumeLODs[i] = NULL;
+ // no need to initialize mVolumeLODs, they are smart pointers
+ //mVolumeLODs[i] = NULL;
mAccessCount[i] = 0;
}
}
+#ifdef DEBUG_VOLUME
+S32 LLVolumeLODGroup::getTotalVolumeRefCount() const
+{
+ S32 total_ref_count = 0;
+ for (S32 i = 0; i < NUM_LODS; i++)
+ {
+ total_ref_count += mLODRefs[i];
+ }
+ return total_ref_count;
+}
+#endif
+
+// protected
LLVolumeLODGroup::~LLVolumeLODGroup()
{
+ destroy();
}
+// protected
+void LLVolumeLODGroup::destroy()
+{
+ for (S32 i = 0; i < NUM_LODS; i++)
+ {
+ // remember that mVolumeLODs are smart pointers!
+ mVolumeLODs[i] = NULL;
+ }
+}
LLVolume * LLVolumeLODGroup::getLOD(const S32 detail)
{
@@ -242,7 +342,7 @@ LLVolume * LLVolumeLODGroup::getLOD(const S32 detail)
mVolumeLODs[detail] = new LLVolume(mParams, mDetailScales[detail]);
}
mLODRefs[detail]++;
- return mVolumeLODs[detail];
+ return mVolumeLODs[detail].get();
}
BOOL LLVolumeLODGroup::derefLOD(LLVolume *volumep)
diff --git a/linden/indra/llmath/llvolumemgr.h b/linden/indra/llmath/llvolumemgr.h
index 889bc56..0a2249e 100644
--- a/linden/indra/llmath/llvolumemgr.h
+++ b/linden/indra/llmath/llvolumemgr.h
@@ -43,9 +43,6 @@ class LLVolumeLODGroup;
class LLVolumeLODGroup : public LLThreadSafeRefCount
{
-protected:
- ~LLVolumeLODGroup();
-
public:
enum
{
@@ -60,11 +57,19 @@ public:
static F32 getVolumeScaleFromDetail(const S32 detail);
LLVolume *getLOD(const S32 detail);
- const LLVolumeParams &getParams() const { return mParams; };
+ const LLVolumeParams& getParams() const { return mParams; };
F32 dump();
friend std::ostream& operator<<(std::ostream& s, const LLVolumeLODGroup& volgroup);
+#ifdef DEBUG_VOLUME
+ S32 getTotalVolumeRefCount() const;
+#endif
+
+protected:
+ virtual ~LLVolumeLODGroup();
+ void destroy();
+
protected:
LLVolumeParams mParams;
@@ -77,30 +82,50 @@ protected:
class LLVolumeMgr
{
-public:
- static void initClass();
- static BOOL cleanupClass();
+//public:
+// static void initClass();
+// static BOOL cleanupClass();
public:
LLVolumeMgr();
- ~LLVolumeMgr();
+ virtual ~LLVolumeMgr();
BOOL cleanup(); // Cleanup all volumes being managed, returns TRUE if no dangling references
+
+ virtual LLVolumeLODGroup* getGroup( const LLVolumeParams& volume_params ) const;
+
+ // whatever calls getVolume() never owns the LLVolume* and
+ // cannot keep references for long since it may be deleted
+ // later. For best results hold it in an LLPointer.
LLVolume *getVolume(const LLVolumeParams &volume_params, const S32 detail);
+
void cleanupVolume(LLVolume *volumep);
void dump();
+
+ // manually call this for mutex magic
+ void useMutex();
+
+#ifdef DEBUG_VOLUME
+ S32 getTotalRefCount() const;
+ S32 getGroupCount() const;
+#endif
friend std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr);
protected:
+ virtual LLVolumeLODGroup* createNewGroup(const LLVolumeParams& volume_params);
+
+protected:
typedef std::map volume_lod_group_map_t;
typedef volume_lod_group_map_t::const_iterator volume_lod_group_map_iter;
volume_lod_group_map_t mVolumeLODGroups;
LLMutex* mDataMutex;
-
-// S32 mNumVolumes;
+
+ // We need to be able to disable threadsafe checks to prevent
+ // some unit_tests from blocking on failure
+ bool mThreadSafe;
};
-extern LLVolumeMgr* gVolumeMgr;
+//extern LLVolumeMgr* gVolumeMgr;
#endif // LL_LLVOLUMEMGR_H
diff --git a/linden/indra/llmath/m3math.cpp b/linden/indra/llmath/m3math.cpp
index 6741f05..5c3eb08 100644
--- a/linden/indra/llmath/m3math.cpp
+++ b/linden/indra/llmath/m3math.cpp
@@ -136,7 +136,7 @@ void LLMatrix3::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const
// Clear and Assignment Functions
-const LLMatrix3& LLMatrix3::identity()
+const LLMatrix3& LLMatrix3::setIdentity()
{
mMatrix[0][0] = 1.f;
mMatrix[0][1] = 0.f;
@@ -152,7 +152,23 @@ const LLMatrix3& LLMatrix3::identity()
return (*this);
}
-const LLMatrix3& LLMatrix3::zero()
+const LLMatrix3& LLMatrix3::clear()
+{
+ mMatrix[0][0] = 0.f;
+ mMatrix[0][1] = 0.f;
+ mMatrix[0][2] = 0.f;
+
+ mMatrix[1][0] = 0.f;
+ mMatrix[1][1] = 0.f;
+ mMatrix[1][2] = 0.f;
+
+ mMatrix[2][0] = 0.f;
+ mMatrix[2][1] = 0.f;
+ mMatrix[2][2] = 0.f;
+ return (*this);
+}
+
+const LLMatrix3& LLMatrix3::setZero()
{
mMatrix[0][0] = 0.f;
mMatrix[0][1] = 0.f;
@@ -190,15 +206,26 @@ F32 LLMatrix3::determinant() const
mMatrix[0][2] * (mMatrix[1][0] * mMatrix[2][1] - mMatrix[1][1] * mMatrix[2][0]);
}
-// This is identical to the transMat3() method because we assume a rotation matrix
-const LLMatrix3& LLMatrix3::invert()
+// inverts this matrix
+void LLMatrix3::invert()
{
- // transpose the matrix
- F32 temp;
- temp = mMatrix[VX][VY]; mMatrix[VX][VY] = mMatrix[VY][VX]; mMatrix[VY][VX] = temp;
- temp = mMatrix[VX][VZ]; mMatrix[VX][VZ] = mMatrix[VZ][VX]; mMatrix[VZ][VX] = temp;
- temp = mMatrix[VY][VZ]; mMatrix[VY][VZ] = mMatrix[VZ][VY]; mMatrix[VZ][VY] = temp;
- return *this;
+ // fails silently if determinant is zero too small
+ F32 det = determinant();
+ const F32 VERY_SMALL_DETERMINANT = 0.000001f;
+ if (fabs(det) > VERY_SMALL_DETERMINANT)
+ {
+ // invertiable
+ LLMatrix3 t(*this);
+ mMatrix[VX][VX] = ( t.mMatrix[VY][VY] * t.mMatrix[VZ][VZ] - t.mMatrix[VY][VZ] * t.mMatrix[VZ][VY] ) / det;
+ mMatrix[VY][VX] = ( t.mMatrix[VY][VZ] * t.mMatrix[VZ][VX] - t.mMatrix[VY][VX] * t.mMatrix[VZ][VZ] ) / det;
+ mMatrix[VZ][VX] = ( t.mMatrix[VY][VX] * t.mMatrix[VZ][VY] - t.mMatrix[VY][VY] * t.mMatrix[VZ][VX] ) / det;
+ mMatrix[VX][VY] = ( t.mMatrix[VZ][VY] * t.mMatrix[VX][VZ] - t.mMatrix[VZ][VZ] * t.mMatrix[VX][VY] ) / det;
+ mMatrix[VY][VY] = ( t.mMatrix[VZ][VZ] * t.mMatrix[VX][VX] - t.mMatrix[VZ][VX] * t.mMatrix[VX][VZ] ) / det;
+ mMatrix[VZ][VY] = ( t.mMatrix[VZ][VX] * t.mMatrix[VX][VY] - t.mMatrix[VZ][VY] * t.mMatrix[VX][VX] ) / det;
+ mMatrix[VX][VZ] = ( t.mMatrix[VX][VY] * t.mMatrix[VY][VZ] - t.mMatrix[VX][VZ] * t.mMatrix[VY][VY] ) / det;
+ mMatrix[VY][VZ] = ( t.mMatrix[VX][VZ] * t.mMatrix[VY][VX] - t.mMatrix[VX][VX] * t.mMatrix[VY][VZ] ) / det;
+ mMatrix[VZ][VZ] = ( t.mMatrix[VX][VX] * t.mMatrix[VY][VY] - t.mMatrix[VX][VY] * t.mMatrix[VY][VX] ) / det;
+ }
}
// does not assume a rotation matrix, and does not divide by determinant, assuming results will be renormalized
@@ -351,6 +378,27 @@ const LLMatrix3& LLMatrix3::setRows(const LLVector3 &fwd, const LLVector3 &left,
return *this;
}
+const LLMatrix3& LLMatrix3::setRow( U32 rowIndex, const LLVector3& row )
+{
+ llassert( rowIndex >= 0 && rowIndex < NUM_VALUES_IN_MAT3 );
+
+ mMatrix[rowIndex][0] = row[0];
+ mMatrix[rowIndex][1] = row[1];
+ mMatrix[rowIndex][2] = row[2];
+
+ return *this;
+}
+
+const LLMatrix3& LLMatrix3::setCol( U32 colIndex, const LLVector3& col )
+{
+ llassert( colIndex >= 0 && colIndex < NUM_VALUES_IN_MAT3 );
+
+ mMatrix[0][colIndex] = col[0];
+ mMatrix[1][colIndex] = col[1];
+ mMatrix[2][colIndex] = col[2];
+
+ return *this;
+}
// Rotate exisitng mMatrix
const LLMatrix3& LLMatrix3::rotate(const F32 angle, const F32 x, const F32 y, const F32 z)
@@ -384,6 +432,16 @@ const LLMatrix3& LLMatrix3::rotate(const LLQuaternion &q)
return *this;
}
+void LLMatrix3::add(const LLMatrix3& other_matrix)
+{
+ for (S32 i = 0; i < 3; ++i)
+ {
+ for (S32 j = 0; j < 3; ++j)
+ {
+ mMatrix[i][j] += other_matrix.mMatrix[i][j];
+ }
+ }
+}
LLVector3 LLMatrix3::getFwdRow() const
{
@@ -536,6 +594,19 @@ const LLMatrix3& operator*=(LLMatrix3 &a, const LLMatrix3 &b)
return a;
}
+const LLMatrix3& operator*=(LLMatrix3 &a, F32 scalar )
+{
+ for( U32 i = 0; i < NUM_VALUES_IN_MAT3; ++i )
+ {
+ for( U32 j = 0; j < NUM_VALUES_IN_MAT3; ++j )
+ {
+ a.mMatrix[i][j] *= scalar;
+ }
+ }
+
+ return a;
+}
+
std::ostream& operator<<(std::ostream& s, const LLMatrix3 &a)
{
s << "{ "
diff --git a/linden/indra/llmath/m3math.h b/linden/indra/llmath/m3math.h
index 8bd94d8..cd22a86 100644
--- a/linden/indra/llmath/m3math.h
+++ b/linden/indra/llmath/m3math.h
@@ -33,6 +33,7 @@
#define LL_M3MATH_H
#include "llerror.h"
+#include "stdtypes.h"
class LLVector4;
class LLVector3;
@@ -76,8 +77,9 @@ class LLMatrix3
//
// various useful matrix functions
- const LLMatrix3& identity(); // Load identity matrix
- const LLMatrix3& zero(); // Clears Matrix to zero
+ const LLMatrix3& setIdentity(); // Load identity matrix
+ const LLMatrix3& clear(); // Clears Matrix to zero
+ const LLMatrix3& setZero(); // Clears Matrix to zero
///////////////////////////
//
@@ -91,6 +93,9 @@ class LLMatrix3
const LLMatrix3& setRot(const LLQuaternion &q); // Transform matrix by Euler angles and translating by pos
const LLMatrix3& setRows(const LLVector3 &x_axis, const LLVector3 &y_axis, const LLVector3 &z_axis);
+ const LLMatrix3& setRow( U32 rowIndex, const LLVector3& row );
+ const LLMatrix3& setCol( U32 colIndex, const LLVector3& col );
+
///////////////////////////
//
@@ -103,29 +108,31 @@ class LLMatrix3
LLVector3 getFwdRow() const;
LLVector3 getLeftRow() const;
LLVector3 getUpRow() const;
- F32 determinant() const; // Return determinant
+ F32 determinant() const; // Return determinant
///////////////////////////
//
// Operations on an existing matrix
//
- const LLMatrix3& transpose(); // Transpose MAT4
- const LLMatrix3& invert(); // Invert MAT4
- const LLMatrix3& orthogonalize(); // Orthogonalizes X, then Y, then Z
- const LLMatrix3& adjointTranspose(); // returns transpose of matrix adjoint, for multiplying normals
+ const LLMatrix3& transpose(); // Transpose MAT4
+ const LLMatrix3& orthogonalize(); // Orthogonalizes X, then Y, then Z
+ void invert(); // Invert MAT4
+ const LLMatrix3& adjointTranspose();// returns transpose of matrix adjoint, for multiplying normals
// Rotate existing matrix
// Note: the two lines below are equivalent:
// foo.rotate(bar)
// foo = foo * bar
- // That is, foo.rotMat3(bar) multiplies foo by bar FROM THE RIGHT
+ // That is, foo.rotate(bar) multiplies foo by bar FROM THE RIGHT
const LLMatrix3& rotate(const F32 angle, const F32 x, const F32 y, const F32 z); // Rotate matrix by rotating angle radians about (x, y, z)
const LLMatrix3& rotate(const F32 angle, const LLVector3 &vec); // Rotate matrix by rotating angle radians about vec
const LLMatrix3& rotate(const F32 roll, const F32 pitch, const F32 yaw); // Rotate matrix by roll (about x), pitch (about y), and yaw (about z)
const LLMatrix3& rotate(const LLQuaternion &q); // Transform matrix by Euler angles and translating by pos
+ void add(const LLMatrix3& other_matrix); // add other_matrix to this one
+
// This operator is misleading as to operation direction
// friend LLVector3 operator*(const LLMatrix3 &a, const LLVector3 &b); // Apply rotation a to vector b
@@ -137,6 +144,7 @@ class LLMatrix3
friend bool operator!=(const LLMatrix3 &a, const LLMatrix3 &b); // Return a != b
friend const LLMatrix3& operator*=(LLMatrix3 &a, const LLMatrix3 &b); // Return a * b
+ friend const LLMatrix3& operator*=(LLMatrix3 &a, F32 scalar ); // Return a * scalar
friend std::ostream& operator<<(std::ostream& s, const LLMatrix3 &a); // Stream a
};
diff --git a/linden/indra/llmath/m4math.cpp b/linden/indra/llmath/m4math.cpp
index 2b51db1..f2db478 100644
--- a/linden/indra/llmath/m4math.cpp
+++ b/linden/indra/llmath/m4math.cpp
@@ -163,7 +163,7 @@ LLMatrix4::~LLMatrix4(void)
// Clear and Assignment Functions
-const LLMatrix4& LLMatrix4::zero()
+const LLMatrix4& LLMatrix4::setZero()
{
mMatrix[0][0] = 0.f;
mMatrix[0][1] = 0.f;
diff --git a/linden/indra/llmath/m4math.h b/linden/indra/llmath/m4math.h
index 7a51eb2..27eb865 100644
--- a/linden/indra/llmath/m4math.h
+++ b/linden/indra/llmath/m4math.h
@@ -132,8 +132,8 @@ public:
const LLVector4 &row3);
// various useful matrix functions
- const LLMatrix4& identity(); // Load identity matrix
- const LLMatrix4& zero(); // Clears matrix to all zeros.
+ const LLMatrix4& setIdentity(); // Load identity matrix
+ const LLMatrix4& setZero(); // Clears matrix to all zeros.
const LLMatrix4& initRotation(const F32 angle, const F32 x, const F32 y, const F32 z); // Calculate rotation matrix by rotating angle radians about (x, y, z)
const LLMatrix4& initRotation(const F32 angle, const LLVector4 &axis); // Calculate rotation matrix for rotating angle radians about vec
@@ -243,10 +243,10 @@ public:
inline LLMatrix4::LLMatrix4()
{
- identity();
+ setIdentity();
}
-inline const LLMatrix4& LLMatrix4::identity()
+inline const LLMatrix4& LLMatrix4::setIdentity()
{
mMatrix[0][0] = 1.f;
mMatrix[0][1] = 0.f;
diff --git a/linden/indra/llmath/v2math.h b/linden/indra/llmath/v2math.h
index b951786..5a520d2 100644
--- a/linden/indra/llmath/v2math.h
+++ b/linden/indra/llmath/v2math.h
@@ -54,18 +54,26 @@ class LLVector2
LLVector2(const F32 *vec); // Initializes LLVector2 to (vec[0]. vec[1])
// Clears LLVector2 to (0, 0). DEPRECATED - prefer zeroVec.
- void clearVec();
+ void clear();
+ void setZero();
+ void clearVec(); // deprecated
+ void zeroVec(); // deprecated
- // Zero LLVector2 to (0, 0)
- void zeroVec();
+ void set(F32 x, F32 y); // Sets LLVector2 to (x, y)
+ void set(const LLVector2 &vec); // Sets LLVector2 to vec
+ void set(const F32 *vec); // Sets LLVector2 to vec
- void setVec(F32 x, F32 y); // Sets LLVector2 to (x, y)
- void setVec(const LLVector2 &vec); // Sets LLVector2 to vec
- void setVec(const F32 *vec); // Sets LLVector2 to vec
+ void setVec(F32 x, F32 y); // deprecated
+ void setVec(const LLVector2 &vec); // deprecated
+ void setVec(const F32 *vec); // deprecated
- F32 magVec() const; // Returns magnitude of LLVector2
- F32 magVecSquared() const; // Returns magnitude squared of LLVector2
- F32 normVec(); // Normalizes and returns the magnitude of LLVector2
+ F32 length() const; // Returns magnitude of LLVector2
+ F32 lengthSquared() const; // Returns magnitude squared of LLVector2
+ F32 normalize(); // Normalizes and returns the magnitude of LLVector2
+
+ F32 magVec() const; // deprecated
+ F32 magVecSquared() const; // deprecated
+ F32 normVec(); // deprecated
BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed
@@ -132,30 +140,66 @@ inline LLVector2::LLVector2(const F32 *vec)
// Clear and Assignment Functions
+inline void LLVector2::clear(void)
+{
+ mV[VX] = 0.f;
+ mV[VY] = 0.f;
+}
+
+inline void LLVector2::setZero(void)
+{
+ mV[VX] = 0.f;
+ mV[VY] = 0.f;
+}
+
+// deprecated
inline void LLVector2::clearVec(void)
{
mV[VX] = 0.f;
mV[VY] = 0.f;
}
+// deprecated
inline void LLVector2::zeroVec(void)
{
mV[VX] = 0.f;
mV[VY] = 0.f;
}
+inline void LLVector2::set(F32 x, F32 y)
+{
+ mV[VX] = x;
+ mV[VY] = y;
+}
+
+inline void LLVector2::set(const LLVector2 &vec)
+{
+ mV[VX] = vec.mV[VX];
+ mV[VY] = vec.mV[VY];
+}
+
+inline void LLVector2::set(const F32 *vec)
+{
+ mV[VX] = vec[VX];
+ mV[VY] = vec[VY];
+}
+
+
+// deprecated
inline void LLVector2::setVec(F32 x, F32 y)
{
mV[VX] = x;
mV[VY] = y;
}
+// deprecated
inline void LLVector2::setVec(const LLVector2 &vec)
{
mV[VX] = vec.mV[VX];
mV[VY] = vec.mV[VY];
}
+// deprecated
inline void LLVector2::setVec(const F32 *vec)
{
mV[VX] = vec[VX];
@@ -164,16 +208,49 @@ inline void LLVector2::setVec(const F32 *vec)
// LLVector2 Magnitude and Normalization Functions
+inline F32 LLVector2::length(void) const
+{
+ return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
+}
+
+inline F32 LLVector2::lengthSquared(void) const
+{
+ return mV[0]*mV[0] + mV[1]*mV[1];
+}
+
+inline F32 LLVector2::normalize(void)
+{
+ F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
+ F32 oomag;
+
+ if (mag > FP_MAG_THRESHOLD)
+ {
+ oomag = 1.f/mag;
+ mV[0] *= oomag;
+ mV[1] *= oomag;
+ }
+ else
+ {
+ mV[0] = 0.f;
+ mV[1] = 0.f;
+ mag = 0;
+ }
+ return (mag);
+}
+
+// deprecated
inline F32 LLVector2::magVec(void) const
{
return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
}
+// deprecated
inline F32 LLVector2::magVecSquared(void) const
{
return mV[0]*mV[0] + mV[1]*mV[1];
}
+// deprecated
inline F32 LLVector2::normVec(void)
{
F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
diff --git a/linden/indra/llmath/v3dmath.h b/linden/indra/llmath/v3dmath.h
index 60757ba..9bd80b8 100644
--- a/linden/indra/llmath/v3dmath.h
+++ b/linden/indra/llmath/v3dmath.h
@@ -83,8 +83,9 @@ class LLVector3d
BOOL clamp(const F64 min, const F64 max); // Clamps all values to (min,max), returns TRUE if data changed
BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed
- inline const LLVector3d& clearVec(); // Clears LLVector3d to (0, 0, 0, 1)
- inline const LLVector3d& zeroVec(); // Zero LLVector3d to (0, 0, 0, 0)
+ inline const LLVector3d& clearVec(); // Clears LLVector3d to (0, 0, 0, 1)
+ inline const LLVector3d& setZero(); // Zero LLVector3d to (0, 0, 0, 0)
+ inline const LLVector3d& zeroVec(); // deprecated
inline const LLVector3d& setVec(const F64 x, const F64 y, const F64 z); // Sets LLVector3d to (x, y, z, 1)
inline const LLVector3d& setVec(const LLVector3d &vec); // Sets LLVector3d to vec
inline const LLVector3d& setVec(const F64 *vec); // Sets LLVector3d to vec
@@ -198,6 +199,14 @@ inline const LLVector3d& LLVector3d::clearVec(void)
return (*this);
}
+inline const LLVector3d& LLVector3d::setZero(void)
+{
+ mdV[0] = 0.f;
+ mdV[1] = 0.f;
+ mdV[2] = 0.f;
+ return (*this);
+}
+
inline const LLVector3d& LLVector3d::zeroVec(void)
{
mdV[0] = 0.f;
diff --git a/linden/indra/llmath/v3math.cpp b/linden/indra/llmath/v3math.cpp
index 34cce06..bbe460f 100644
--- a/linden/indra/llmath/v3math.cpp
+++ b/linden/indra/llmath/v3math.cpp
@@ -172,6 +172,22 @@ LLVector3 LLVector3::scaledVec(const LLVector3& vec) const
return ret;
}
+const LLVector3& LLVector3::set(const LLVector3d &vec)
+{
+ mV[0] = (F32)vec.mdV[0];
+ mV[1] = (F32)vec.mdV[1];
+ mV[2] = (F32)vec.mdV[2];
+ return (*this);
+}
+
+const LLVector3& LLVector3::set(const LLVector4 &vec)
+{
+ mV[0] = vec.mV[0];
+ mV[1] = vec.mV[1];
+ mV[2] = vec.mV[2];
+ return (*this);
+}
+
const LLVector3& LLVector3::setVec(const LLVector3d &vec)
{
mV[0] = (F32)vec.mdV[0];
diff --git a/linden/indra/llmath/v3math.h b/linden/indra/llmath/v3math.h
index f1c1b39..ddb5e1f 100644
--- a/linden/indra/llmath/v3math.h
+++ b/linden/indra/llmath/v3math.h
@@ -81,18 +81,33 @@ class LLVector3
BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed
- inline void clearVec(); // Clears LLVector3 to (0, 0, 0, 1)
- inline void zeroVec(); // Zero LLVector3 to (0, 0, 0, 0)
- inline void setVec(F32 x, F32 y, F32 z); // Sets LLVector3 to (x, y, z, 1)
- inline void setVec(const LLVector3 &vec); // Sets LLVector3 to vec
- inline void setVec(const F32 *vec); // Sets LLVector3 to vec
+ inline void clear(); // Clears LLVector3 to (0, 0, 0)
+ inline void setZero(); // Clears LLVector3 to (0, 0, 0)
+ inline void clearVec(); // deprecated
+ inline void zeroVec(); // deprecated
- const LLVector3& setVec(const LLVector4 &vec);
- const LLVector3& setVec(const LLVector3d &vec); // Sets LLVector3 to vec
+ inline void set(F32 x, F32 y, F32 z); // Sets LLVector3 to (x, y, z, 1)
+ inline void set(const LLVector3 &vec); // Sets LLVector3 to vec
+ inline void set(const F32 *vec); // Sets LLVector3 to vec
+ const LLVector3& set(const LLVector4 &vec);
+ const LLVector3& set(const LLVector3d &vec);// Sets LLVector3 to vec
- F32 magVec() const; // Returns magnitude of LLVector3
- F32 magVecSquared() const; // Returns magnitude squared of LLVector3
- inline F32 normVec(); // Normalizes and returns the magnitude of LLVector3
+ inline void setVec(F32 x, F32 y, F32 z); // deprecated
+ inline void setVec(const LLVector3 &vec); // deprecated
+ inline void setVec(const F32 *vec); // deprecated
+
+ const LLVector3& setVec(const LLVector4 &vec); // deprecated
+ const LLVector3& setVec(const LLVector3d &vec); // deprecated
+
+ F32 length() const; // Returns magnitude of LLVector3
+ F32 lengthSquared() const; // Returns magnitude squared of LLVector3
+ F32 magVec() const; // deprecated
+ F32 magVecSquared() const; // deprecated
+
+ inline F32 normalize(); // Normalizes and returns the magnitude of LLVector3
+ inline F32 normVec(); // deprecated
+
+ inline BOOL inRange( F32 min, F32 max ) const; // Returns true if all values of the vector are between min and max
const LLVector3& rotVec(F32 angle, const LLVector3 &vec); // Rotates about vec by angle radians
const LLVector3& rotVec(F32 angle, F32 x, F32 y, F32 z); // Rotates about x,y,z by angle radians
@@ -188,6 +203,20 @@ inline BOOL LLVector3::isFinite() const
// Clear and Assignment Functions
+inline void LLVector3::clear(void)
+{
+ mV[0] = 0.f;
+ mV[1] = 0.f;
+ mV[2] = 0.f;
+}
+
+inline void LLVector3::setZero(void)
+{
+ mV[0] = 0.f;
+ mV[1] = 0.f;
+ mV[2] = 0.f;
+}
+
inline void LLVector3::clearVec(void)
{
mV[0] = 0.f;
@@ -202,6 +231,28 @@ inline void LLVector3::zeroVec(void)
mV[2] = 0.f;
}
+inline void LLVector3::set(F32 x, F32 y, F32 z)
+{
+ mV[VX] = x;
+ mV[VY] = y;
+ mV[VZ] = z;
+}
+
+inline void LLVector3::set(const LLVector3 &vec)
+{
+ mV[0] = vec.mV[0];
+ mV[1] = vec.mV[1];
+ mV[2] = vec.mV[2];
+}
+
+inline void LLVector3::set(const F32 *vec)
+{
+ mV[0] = vec[0];
+ mV[1] = vec[1];
+ mV[2] = vec[2];
+}
+
+// deprecated
inline void LLVector3::setVec(F32 x, F32 y, F32 z)
{
mV[VX] = x;
@@ -209,6 +260,7 @@ inline void LLVector3::setVec(F32 x, F32 y, F32 z)
mV[VZ] = z;
}
+// deprecated
inline void LLVector3::setVec(const LLVector3 &vec)
{
mV[0] = vec.mV[0];
@@ -216,6 +268,7 @@ inline void LLVector3::setVec(const LLVector3 &vec)
mV[2] = vec.mV[2];
}
+// deprecated
inline void LLVector3::setVec(const F32 *vec)
{
mV[0] = vec[0];
@@ -223,6 +276,29 @@ inline void LLVector3::setVec(const F32 *vec)
mV[2] = vec[2];
}
+inline F32 LLVector3::normalize(void)
+{
+ F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
+ F32 oomag;
+
+ if (mag > FP_MAG_THRESHOLD)
+ {
+ oomag = 1.f/mag;
+ mV[0] *= oomag;
+ mV[1] *= oomag;
+ mV[2] *= oomag;
+ }
+ else
+ {
+ mV[0] = 0.f;
+ mV[1] = 0.f;
+ mV[2] = 0.f;
+ mag = 0;
+ }
+ return (mag);
+}
+
+// deprecated
inline F32 LLVector3::normVec(void)
{
F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
@@ -247,6 +323,16 @@ inline F32 LLVector3::normVec(void)
// LLVector3 Magnitude and Normalization Functions
+inline F32 LLVector3::length(void) const
+{
+ return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
+}
+
+inline F32 LLVector3::lengthSquared(void) const
+{
+ return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2];
+}
+
inline F32 LLVector3::magVec(void) const
{
return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
@@ -257,6 +343,13 @@ inline F32 LLVector3::magVecSquared(void) const
return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2];
}
+inline BOOL LLVector3::inRange( F32 min, F32 max ) const
+{
+ return mV[0] >= min && mV[0] <= max &&
+ mV[1] >= min && mV[1] <= max &&
+ mV[2] >= min && mV[2] <= max;
+}
+
inline LLVector3 operator+(const LLVector3 &a, const LLVector3 &b)
{
LLVector3 c(a);
@@ -397,7 +490,7 @@ inline F32 dist_vec_squared2D(const LLVector3 &a, const LLVector3 &b)
inline LLVector3 projected_vec(const LLVector3 &a, const LLVector3 &b)
{
LLVector3 project_axis = b;
- project_axis.normVec();
+ project_axis.normalize();
return project_axis * (a * project_axis);
}
@@ -438,8 +531,8 @@ inline F32 angle_between(const LLVector3& a, const LLVector3& b)
{
LLVector3 an = a;
LLVector3 bn = b;
- an.normVec();
- bn.normVec();
+ an.normalize();
+ bn.normalize();
F32 cosine = an * bn;
F32 angle = (cosine >= 1.0f) ? 0.0f :
(cosine <= -1.0f) ? F_PI :
@@ -451,8 +544,8 @@ inline BOOL are_parallel(const LLVector3 &a, const LLVector3 &b, F32 epsilon)
{
LLVector3 an = a;
LLVector3 bn = b;
- an.normVec();
- bn.normVec();
+ an.normalize();
+ bn.normalize();
F32 dot = an * bn;
if ( (1.0f - fabs(dot)) < epsilon)
{
diff --git a/linden/indra/llmath/v4math.cpp b/linden/indra/llmath/v4math.cpp
index 26a47ff..34b8f07 100644
--- a/linden/indra/llmath/v4math.cpp
+++ b/linden/indra/llmath/v4math.cpp
@@ -113,8 +113,8 @@ F32 angle_between( const LLVector4& a, const LLVector4& b )
{
LLVector4 an = a;
LLVector4 bn = b;
- an.normVec();
- bn.normVec();
+ an.normalize();
+ bn.normalize();
F32 cosine = an * bn;
F32 angle = (cosine >= 1.0f) ? 0.0f :
(cosine <= -1.0f) ? F_PI :
@@ -126,8 +126,8 @@ BOOL are_parallel(const LLVector4 &a, const LLVector4 &b, F32 epsilon)
{
LLVector4 an = a;
LLVector4 bn = b;
- an.normVec();
- bn.normVec();
+ an.normalize();
+ bn.normalize();
F32 dot = an * bn;
if ( (1.0f - fabs(dot)) < epsilon)
return TRUE;
diff --git a/linden/indra/llmath/v4math.h b/linden/indra/llmath/v4math.h
index 60e30e3..4ef2d32 100644
--- a/linden/indra/llmath/v4math.h
+++ b/linden/indra/llmath/v4math.h
@@ -68,17 +68,29 @@ class LLVector4
inline BOOL isFinite() const; // checks to see if all values of LLVector3 are finite
- inline void clearVec(); // Clears LLVector4 to (0, 0, 0, 1)
- inline void zeroVec(); // zero LLVector4 to (0, 0, 0, 0)
- inline void setVec(F32 x, F32 y, F32 z); // Sets LLVector4 to (x, y, z, 1)
- inline void setVec(F32 x, F32 y, F32 z, F32 w); // Sets LLVector4 to (x, y, z, w)
- inline void setVec(const LLVector4 &vec); // Sets LLVector4 to vec
- inline void setVec(const LLVector3 &vec, F32 w = 1.f); // Sets LLVector4 to LLVector3 vec
- inline void setVec(const F32 *vec); // Sets LLVector4 to vec
-
- F32 magVec() const; // Returns magnitude of LLVector4
- F32 magVecSquared() const; // Returns magnitude squared of LLVector4
- F32 normVec(); // Normalizes and returns the magnitude of LLVector4
+ inline void clear(); // Clears LLVector4 to (0, 0, 0, 1)
+ inline void clearVec(); // deprecated
+ inline void zeroVec(); // deprecated
+
+ inline void set(F32 x, F32 y, F32 z); // Sets LLVector4 to (x, y, z, 1)
+ inline void set(F32 x, F32 y, F32 z, F32 w); // Sets LLVector4 to (x, y, z, w)
+ inline void set(const LLVector4 &vec); // Sets LLVector4 to vec
+ inline void set(const LLVector3 &vec, F32 w = 1.f); // Sets LLVector4 to LLVector3 vec
+ inline void set(const F32 *vec); // Sets LLVector4 to vec
+
+ inline void setVec(F32 x, F32 y, F32 z); // deprecated
+ inline void setVec(F32 x, F32 y, F32 z, F32 w); // deprecated
+ inline void setVec(const LLVector4 &vec); // deprecated
+ inline void setVec(const LLVector3 &vec, F32 w = 1.f); // deprecated
+ inline void setVec(const F32 *vec); // deprecated
+
+ F32 length() const; // Returns magnitude of LLVector4
+ F32 lengthSquared() const; // Returns magnitude squared of LLVector4
+ F32 normalize(); // Normalizes and returns the magnitude of LLVector4
+
+ F32 magVec() const; // deprecated
+ F32 magVecSquared() const; // deprecated
+ F32 normVec(); // deprecated
// Sets all values to absolute value of their original values
// Returns TRUE if data changed
@@ -192,6 +204,15 @@ inline BOOL LLVector4::isFinite() const
// Clear and Assignment Functions
+inline void LLVector4::clear(void)
+{
+ mV[VX] = 0.f;
+ mV[VY] = 0.f;
+ mV[VZ] = 0.f;
+ mV[VW] = 1.f;
+}
+
+// deprecated
inline void LLVector4::clearVec(void)
{
mV[VX] = 0.f;
@@ -200,6 +221,7 @@ inline void LLVector4::clearVec(void)
mV[VW] = 1.f;
}
+// deprecated
inline void LLVector4::zeroVec(void)
{
mV[VX] = 0.f;
@@ -208,6 +230,48 @@ inline void LLVector4::zeroVec(void)
mV[VW] = 0.f;
}
+inline void LLVector4::set(F32 x, F32 y, F32 z)
+{
+ mV[VX] = x;
+ mV[VY] = y;
+ mV[VZ] = z;
+ mV[VW] = 1.f;
+}
+
+inline void LLVector4::set(F32 x, F32 y, F32 z, F32 w)
+{
+ mV[VX] = x;
+ mV[VY] = y;
+ mV[VZ] = z;
+ mV[VW] = w;
+}
+
+inline void LLVector4::set(const LLVector4 &vec)
+{
+ mV[VX] = vec.mV[VX];
+ mV[VY] = vec.mV[VY];
+ mV[VZ] = vec.mV[VZ];
+ mV[VW] = vec.mV[VW];
+}
+
+inline void LLVector4::set(const LLVector3 &vec, F32 w)
+{
+ mV[VX] = vec.mV[VX];
+ mV[VY] = vec.mV[VY];
+ mV[VZ] = vec.mV[VZ];
+ mV[VW] = w;
+}
+
+inline void LLVector4::set(const F32 *vec)
+{
+ mV[VX] = vec[VX];
+ mV[VY] = vec[VY];
+ mV[VZ] = vec[VZ];
+ mV[VW] = vec[VW];
+}
+
+
+// deprecated
inline void LLVector4::setVec(F32 x, F32 y, F32 z)
{
mV[VX] = x;
@@ -216,6 +280,7 @@ inline void LLVector4::setVec(F32 x, F32 y, F32 z)
mV[VW] = 1.f;
}
+// deprecated
inline void LLVector4::setVec(F32 x, F32 y, F32 z, F32 w)
{
mV[VX] = x;
@@ -224,6 +289,7 @@ inline void LLVector4::setVec(F32 x, F32 y, F32 z, F32 w)
mV[VW] = w;
}
+// deprecated
inline void LLVector4::setVec(const LLVector4 &vec)
{
mV[VX] = vec.mV[VX];
@@ -232,6 +298,7 @@ inline void LLVector4::setVec(const LLVector4 &vec)
mV[VW] = vec.mV[VW];
}
+// deprecated
inline void LLVector4::setVec(const LLVector3 &vec, F32 w)
{
mV[VX] = vec.mV[VX];
@@ -240,6 +307,7 @@ inline void LLVector4::setVec(const LLVector3 &vec, F32 w)
mV[VW] = w;
}
+// deprecated
inline void LLVector4::setVec(const F32 *vec)
{
mV[VX] = vec[VX];
@@ -250,6 +318,16 @@ inline void LLVector4::setVec(const F32 *vec)
// LLVector4 Magnitude and Normalization Functions
+inline F32 LLVector4::length(void) const
+{
+ return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
+}
+
+inline F32 LLVector4::lengthSquared(void) const
+{
+ return mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ];
+}
+
inline F32 LLVector4::magVec(void) const
{
return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
@@ -364,13 +442,13 @@ inline LLVector4 operator-(const LLVector4 &a)
inline F32 dist_vec(const LLVector4 &a, const LLVector4 &b)
{
LLVector4 vec = a - b;
- return (vec.magVec());
+ return (vec.length());
}
inline F32 dist_vec_squared(const LLVector4 &a, const LLVector4 &b)
{
LLVector4 vec = a - b;
- return (vec.magVecSquared());
+ return (vec.lengthSquared());
}
inline LLVector4 lerp(const LLVector4 &a, const LLVector4 &b, F32 u)
@@ -382,6 +460,29 @@ inline LLVector4 lerp(const LLVector4 &a, const LLVector4 &b, F32 u)
a.mV[VW] + (b.mV[VW] - a.mV[VW]) * u);
}
+inline F32 LLVector4::normalize(void)
+{
+ F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
+ F32 oomag;
+
+ if (mag > FP_MAG_THRESHOLD)
+ {
+ oomag = 1.f/mag;
+ mV[VX] *= oomag;
+ mV[VY] *= oomag;
+ mV[VZ] *= oomag;
+ }
+ else
+ {
+ mV[0] = 0.f;
+ mV[1] = 0.f;
+ mV[2] = 0.f;
+ mag = 0;
+ }
+ return (mag);
+}
+
+// deprecated
inline F32 LLVector4::normVec(void)
{
F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
diff --git a/linden/indra/llmath/xform.h b/linden/indra/llmath/xform.h
index 8fd1e9e..ad2a944 100644
--- a/linden/indra/llmath/xform.h
+++ b/linden/indra/llmath/xform.h
@@ -35,10 +35,12 @@
#include "m4math.h"
#include "llquaternion.h"
-const F32 MAX_OBJECT_Z = 768.f;
+const F32 MAX_OBJECT_Z = 4096.f; // should match REGION_HEIGHT_METERS, Pre-havok4: 768.f
const F32 MIN_OBJECT_Z = -256.f;
-const F32 MIN_OBJECT_SCALE = 0.01f;
-const F32 MAX_OBJECT_SCALE = 10.f;
+const F32 DEFAULT_MAX_PRIM_SCALE = 10.f;
+const F32 MIN_PRIM_SCALE = 0.01f;
+const F32 MAX_PRIM_SCALE = 65536.f; // something very high but not near FLT_MAX
+
class LLXform
{
@@ -138,7 +140,7 @@ public:
void init()
{
- mWorldMatrix.identity();
+ mWorldMatrix.setIdentity();
mMin.clearVec();
mMax.clearVec();
diff --git a/linden/indra/llmedia/llmediaimplllmozlib.cpp b/linden/indra/llmedia/llmediaimplllmozlib.cpp
index 5efaa59..53cb344 100644
--- a/linden/indra/llmedia/llmediaimplllmozlib.cpp
+++ b/linden/indra/llmedia/llmediaimplllmozlib.cpp
@@ -289,7 +289,7 @@ void LLMediaImplLLMozLib::onPageChanged( const EventType& eventIn )
// virtual
void LLMediaImplLLMozLib::onClickLinkHref( const EventType& eventIn )
{
- LLMediaEvent event( this, eventIn.getStringValue() );
+ LLMediaEvent event( this, eventIn.getStringValue(), eventIn.getStringValue2() );
mEventEmitter.update( &LLMediaObserver::onClickLinkHref, event );
}
diff --git a/linden/indra/llmedia/llmediaimplquicktime.cpp b/linden/indra/llmedia/llmediaimplquicktime.cpp
index f9a3b05..b126e2f 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.cpp
+++ b/linden/indra/llmedia/llmediaimplquicktime.cpp
@@ -256,17 +256,6 @@ bool LLMediaImplQuickTime::sizeChanged()
SetMovieGWorld( mMovieHandle, mGWorldHandle, GetGWorldDevice ( mGWorldHandle ) );
}
- // flip movie to match the way the client expects textures (sigh!)
- MatrixRecord transform;
- SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix
- double scaleX = 1.0 / (double)LLMediaManager::textureWidthFromMediaWidth( width );
- double scaleY = -1.0 / (double)LLMediaManager::textureHeightFromMediaHeight( height );
- double centerX = width / 2.0;
- double centerY = height / 2.0;
- ScaleMatrix( &transform, X2Fix ( scaleX ), X2Fix ( scaleY ), X2Fix ( centerX ), X2Fix ( centerY ) );
- SetMovieMatrix( mMovieHandle, &transform );
- std::cout << "LLMEDIA> Flipping stream to match expected OpenGL orientation size=" << width << " x " << height << std::endl;
-
// update movie controller
if ( mMovieController )
{
@@ -454,10 +443,14 @@ bool LLMediaImplQuickTime::processState()
bool LLMediaImplQuickTime::setMovieBoxEnhanced( Rect* rect )
{
// get movie rect
- GetMovieBox( mMovieHandle, rect );
- int width = ( rect->right - rect->left );
- int height = ( rect->bottom - rect->top );
+ GetMovieNaturalBoundsRect( mMovieHandle, rect );
+
+ int natural_width = ( rect->right - rect->left );
+ int natural_height = ( rect->bottom - rect->top );
+ int width = natural_width;
+ int height = natural_height;
+
// if the user has requested a specific size, use it:
if ((mMediaRequestedWidth != 0) && (mMediaRequestedHeight != 0))
{
@@ -485,12 +478,22 @@ bool LLMediaImplQuickTime::setMovieBoxEnhanced( Rect* rect )
if ( height > mMaxHeight )
height = mMaxHeight;
- // tell quicktime about new size
+
+ // scale movie to fit rect and invert vertically to match opengl image format
+ MatrixRecord transform;
+ SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix
+ double scaleX = (double) width / natural_width;
+ double scaleY = -1.0 * (double) height / natural_height;
+ double centerX = width / 2.0;
+ double centerY = height / 2.0;
+ ScaleMatrix( &transform, X2Fix ( scaleX ), X2Fix ( scaleY ), X2Fix ( centerX ), X2Fix ( centerY ) );
+ SetMovieMatrix( mMovieHandle, &transform );
+
+ // return the new rect
rect->right = width;
rect->bottom = height;
rect->left = 0;
rect->top = 0;
- SetMovieBox( mMovieHandle, rect );
return true;
}
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h
index aeb2c39..ec9f881 100644
--- a/linden/indra/llmedia/llmediaobserver.h
+++ b/linden/indra/llmedia/llmediaobserver.h
@@ -47,6 +47,11 @@ class LLMediaEvent
{
};
+ LLMediaEvent( LLMediaBase* subject, std::string string_in, std::string string_ex_in ) :
+ mSubject( subject ), mStringValue(string_in), mStringValueEx(string_ex_in)
+ {
+ };
+
LLMediaEvent( LLMediaBase* subject, std::string string_in, int int_in ) :
mSubject( subject ), mStringValue(string_in), mIntValue(int_in)
{
@@ -74,10 +79,16 @@ class LLMediaEvent
return mStringValue;
}
+ std::string getStringValueEx() const
+ {
+ return mStringValueEx;
+ }
+
private:
LLMediaBase* mSubject;
int mIntValue;
std::string mStringValue;
+ std::string mStringValueEx;
};
class LLMediaObserver
diff --git a/linden/indra/llmessage/llcachename.cpp b/linden/indra/llmessage/llcachename.cpp
index 6075958..e8208cc 100644
--- a/linden/indra/llmessage/llcachename.cpp
+++ b/linden/indra/llmessage/llcachename.cpp
@@ -43,9 +43,10 @@
#include "message.h"
// Constants
-const char* CN_WAITING = "(waiting)";
-const char* CN_NOBODY = "(nobody)";
-const char* CN_NONE = "(none)";
+// probably need a setUIString() call in the interface
+const char* const CN_WAITING = "(Loading...)"; // *TODO: translate
+const char* const CN_NOBODY = "(nobody)"; // *TODO: translate
+const char* const CN_NONE = "(none)"; // *TODO: translate
// llsd serialization constants
static const std::string AGENTS("agents");
diff --git a/linden/indra/llmessage/llhttpnode.h b/linden/indra/llmessage/llhttpnode.h
index 7d9cb95..02e8ceb 100644
--- a/linden/indra/llmessage/llhttpnode.h
+++ b/linden/indra/llmessage/llhttpnode.h
@@ -108,7 +108,6 @@ public:
virtual void get(ResponsePtr, const LLSD& context) const;
virtual void put(ResponsePtr, const LLSD& context, const LLSD& input) const;
virtual void post(ResponsePtr, const LLSD& context, const LLSD& input) const;
-
virtual void del(ResponsePtr, const LLSD& context) const;
//@}
diff --git a/linden/indra/llmessage/llinstantmessage.h b/linden/indra/llmessage/llinstantmessage.h
index c6319da..35127c3 100644
--- a/linden/indra/llmessage/llinstantmessage.h
+++ b/linden/indra/llmessage/llinstantmessage.h
@@ -177,7 +177,7 @@ enum EGodlikeRequest
GOD_WANTS_NOTHING,
// for requesting physics information about an object
- GOD_WANTS_HAVOK_INFO,
+ GOD_WANTS_PHYSICS_INFO,
// two unused requests that can be appropriated for debug
// purposes (no viewer recompile necessary)
diff --git a/linden/indra/llmessage/lliohttpserver.cpp b/linden/indra/llmessage/lliohttpserver.cpp
index 6e94ec6..2ebf117 100644
--- a/linden/indra/llmessage/lliohttpserver.cpp
+++ b/linden/indra/llmessage/lliohttpserver.cpp
@@ -203,7 +203,9 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
}
// Log all HTTP transactions.
- llinfos << verb << " " << context[CONTEXT_REQUEST]["path"].asString()
+ // TODO: Add a way to log these to their own file instead of indra.log
+ // It is just too spammy to be in indra.log.
+ lldebugs << verb << " " << context[CONTEXT_REQUEST]["path"].asString()
<< " " << mStatusCode << " " << mStatusMessage << " " << delta
<< "s" << llendl;
@@ -723,8 +725,8 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
const LLHTTPNode* node = mRootNode.traverse(mPath, context);
if(node)
{
- lldebugs << "LLHTTPResponder::process_impl found node for "
- << mAbsPathAndQuery << llendl;
+ //llinfos << "LLHTTPResponder::process_impl found node for "
+ // << mAbsPathAndQuery << llendl;
// Copy everything after mLast read to the out.
LLBufferArray::segment_iterator_t seg_iter;
diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp
index 0e7f768..807a35b 100644
--- a/linden/indra/llmessage/llmessageconfig.cpp
+++ b/linden/indra/llmessage/llmessageconfig.cpp
@@ -252,6 +252,14 @@ bool LLMessageConfig::isValidMessage(const std::string& msg_name)
return file.mMessages.has(msg_name);
}
+//static
+bool LLMessageConfig::onlySendLatest(const std::string& msg_name)
+{
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ LLSD config = file.mMessages[msg_name];
+ return config["only-send-latest"].asBoolean();
+}
+
bool LLMessageConfig::isCapBanned(const std::string& cap_name)
{
return LLMessageConfigFile::instance().isCapBanned(cap_name);
diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h
index 32702e8..9b62f06 100644
--- a/linden/indra/llmessage/llmessageconfig.h
+++ b/linden/indra/llmessage/llmessageconfig.h
@@ -53,6 +53,7 @@ public:
static Flavor getMessageFlavor(const std::string& msg_name);
static SenderTrust getSenderTrustedness(const std::string& msg_name);
static bool isValidMessage(const std::string& msg_name);
+ static bool onlySendLatest(const std::string& msg_name);
static bool isCapBanned(const std::string& cap_name);
static LLSD getConfigForMessage(const std::string& msg_name);
};
diff --git a/linden/indra/llmessage/llmessagetemplate.h b/linden/indra/llmessage/llmessagetemplate.h
index d0ef945..f92c4b7 100644
--- a/linden/indra/llmessage/llmessagetemplate.h
+++ b/linden/indra/llmessage/llmessagetemplate.h
@@ -156,7 +156,7 @@ public:
LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size)
{
- mName = gMessageStringTable.getString(name);
+ mName = LLMessageStringTable::getInstance()->getString(name);
}
~LLMessageVariable() {}
@@ -187,7 +187,7 @@ class LLMessageBlock
public:
LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0)
{
- mName = gMessageStringTable.getString(name);
+ mName = LLMessageStringTable::getInstance()->getString(name);
}
~LLMessageBlock()
@@ -293,7 +293,7 @@ public:
mHandlerFunc(NULL),
mUserData(NULL)
{
- mName = gMessageStringTable.getString(name);
+ mName = LLMessageStringTable::getInstance()->getString(name);
}
~LLMessageTemplate()
diff --git a/linden/indra/llmessage/llnamevalue.cpp b/linden/indra/llmessage/llnamevalue.cpp
index 6c8a2c4..18bd5ac 100644
--- a/linden/indra/llmessage/llnamevalue.cpp
+++ b/linden/indra/llmessage/llnamevalue.cpp
@@ -34,12 +34,12 @@
#include "linden_common.h"
-#include
+
+
+#include