From 2a4dea528f670b9bb1f77ef27a8a1dd16603d114 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:45:50 -0500 Subject: Second Life viewer sources 1.20.7 --- linden/doc/contributions.txt | 10 + linden/etc/message.xml | 5 +- linden/indra/SConstruct | 30 +- linden/indra/indra_complete/indra_complete_vc8.sln | 88 +- linden/indra/indra_complete/indra_complete_vc9.sln | 85 + linden/indra/lib/python/indra/base/llsd.py | 85 + linden/indra/lib/python/indra/ipc/llsdhttp.py | 2 +- linden/indra/lib/python/indra/util/named_query.py | 6 + linden/indra/llaudio/audioengine.cpp | 41 +- linden/indra/llaudio/audioengine.h | 3 + linden/indra/llaudio/audioengine_fmod.cpp | 66 +- linden/indra/llcharacter/llanimationstates.cpp | 139 +- linden/indra/llcharacter/llanimationstates.h | 13 +- linden/indra/llcharacter/llcharacter.cpp | 21 + linden/indra/llcharacter/llcharacter.h | 3 + linden/indra/llcharacter/llmotion.cpp | 28 +- linden/indra/llcharacter/llmotion.h | 4 +- linden/indra/llcommon/files.lst | 4 + linden/indra/llcommon/llapp.cpp | 163 +- linden/indra/llcommon/llapp.h | 3 +- linden/indra/llcommon/llapr.cpp | 12 +- linden/indra/llcommon/llares.cpp | 5 +- linden/indra/llcommon/llcommon.vcproj | 15 + linden/indra/llcommon/llcommon_vc8.vcproj | 36 + linden/indra/llcommon/llcommon_vc9.vcproj | 20 + linden/indra/llcommon/llerror.cpp | 69 +- linden/indra/llcommon/llerror.h | 82 +- linden/indra/llcommon/llfile.cpp | 6 +- linden/indra/llcommon/llfile.h | 2 + linden/indra/llcommon/llfindlocale.cpp | 525 + linden/indra/llcommon/llfindlocale.h | 65 + linden/indra/llcommon/llheartbeat.cpp | 165 + linden/indra/llcommon/llheartbeat.h | 73 + linden/indra/llcommon/llindraconfigfile.cpp | 107 + linden/indra/llcommon/llindraconfigfile.h | 50 + linden/indra/llcommon/llkeyusetracker.h | 220 + linden/indra/llcommon/lllivefile.h | 2 + linden/indra/llcommon/llmemory.cpp | 2 +- linden/indra/llcommon/llprocessor.cpp | 2 +- linden/indra/llcommon/llptrskipmap.h | 6 +- linden/indra/llcommon/llsdserialize.h | 2 +- linden/indra/llcommon/llsdutil.h | 12 + linden/indra/llcommon/llsys.cpp | 14 +- linden/indra/llcommon/lltimer.cpp | 84 +- linden/indra/llcommon/lltimer.h | 10 +- linden/indra/llcommon/llversionserver.h | 6 +- linden/indra/llcommon/llversionviewer.h | 2 +- linden/indra/llimage/llimagetga.cpp | 2 +- linden/indra/llimagej2coj/llimagej2coj.cpp | 4 +- linden/indra/llinventory/llinventory.cpp | 10 +- linden/indra/llinventory/llinventory.h | 12 +- linden/indra/llinventory/llpermissions.cpp | 4 +- linden/indra/llinventory/llpermissions.h | 4 +- linden/indra/llinventory/llsaleinfo.cpp | 4 +- linden/indra/llinventory/llsaleinfo.h | 4 +- linden/indra/llmath/llcrc.cpp | 2 +- linden/indra/llmath/llcrc.h | 2 +- linden/indra/llmath/llmath_vc8.vcproj | 16 + linden/indra/llmath/llmath_vc9.vcproj | 16 + linden/indra/llmath/llmd5.cpp | 4 +- linden/indra/llmath/llmd5.h | 4 +- linden/indra/llmath/lloctree.h | 4 +- linden/indra/llmath/llvolume.cpp | 68 +- linden/indra/llmath/llvolume.h | 25 +- linden/indra/llmath/m4math.h | 16 +- linden/indra/llmedia/llmediaimplcommon.cpp | 1 + linden/indra/llmedia/llmediaimplgstreamer.cpp | 3 +- linden/indra/llmedia/llmediaimplllmozlib.cpp | 6 +- linden/indra/llmedia/llmediaimplquicktime.cpp | 10 +- linden/indra/llmedia/llmediaobserver.h | 8 +- linden/indra/llmessage/llassetstorage.cpp | 4 +- linden/indra/llmessage/llblowfishcipher.cpp | 33 +- linden/indra/llmessage/llcachename.cpp | 2 +- linden/indra/llmessage/llcachename.h | 2 +- linden/indra/llmessage/llcurl.cpp | 5 +- linden/indra/llmessage/lldatapacker.h | 4 +- linden/indra/llmessage/llfiltersd2xmlrpc.cpp | 18 + linden/indra/llmessage/llhttpassetstorage.cpp | 2 + linden/indra/llmessage/llhttpclient.h | 7 +- linden/indra/llmessage/llhttpnode.cpp | 4 +- linden/indra/llmessage/llmessageconfig.cpp | 47 +- linden/indra/llmessage/llmessageconfig.h | 1 + linden/indra/llmessage/llregionhandle.h | 2 +- linden/indra/llmessage/lltransfermanager.cpp | 4 +- linden/indra/llmessage/lltransfersourcefile.cpp | 4 +- linden/indra/llmessage/lltransfersourcefile.h | 2 +- linden/indra/llmessage/lltransfertargetfile.h | 2 +- linden/indra/llmessage/llxfer_file.cpp | 6 +- linden/indra/llmessage/llxfer_file.h | 2 +- linden/indra/llmessage/llxfermanager.cpp | 4 +- linden/indra/llmessage/message.cpp | 270 +- linden/indra/llmessage/net.cpp | 22 +- linden/indra/llrender/files.lst | 2 +- linden/indra/llrender/llfontgl.cpp | 41 +- linden/indra/llrender/llfontgl.h | 1 + linden/indra/llrender/llglimmediate.cpp | 303 +- linden/indra/llrender/llglimmediate.h | 107 +- linden/indra/llrender/llimagegl.cpp | 152 +- linden/indra/llrender/llimagegl.h | 16 +- linden/indra/llrender/llrender.cpp | 704 + linden/indra/llrender/llrender.h | 239 + linden/indra/llrender/llrender.vcproj | 4 +- linden/indra/llrender/llrender_vc8.vcproj | 8 +- linden/indra/llrender/llrender_vc9.vcproj | 4 +- linden/indra/llrender/llrendertarget.cpp | 17 +- linden/indra/llrender/llvertexbuffer.cpp | 51 +- linden/indra/llrender/llvertexprogramgl.cpp | 125 - linden/indra/llrender/llvertexprogramgl.h | 55 - linden/indra/llui/llbutton.cpp | 10 +- linden/indra/llui/llcombobox.cpp | 14 +- linden/indra/llui/llfloater.cpp | 20 +- linden/indra/llui/lllineeditor.cpp | 9 +- linden/indra/llui/lllineeditor.h | 4 + linden/indra/llui/llmenugl.cpp | 2 +- linden/indra/llui/llresizebar.cpp | 11 +- linden/indra/llui/llresizebar.h | 2 + linden/indra/llui/llscrollbar.cpp | 6 +- linden/indra/llui/llscrollcontainer.cpp | 2 +- linden/indra/llui/llscrolllistctrl.cpp | 8 +- linden/indra/llui/llspinctrl.cpp | 12 + linden/indra/llui/llspinctrl.h | 2 + linden/indra/llui/llstyle.h | 9 +- linden/indra/llui/lltabcontainer.cpp | 2 +- linden/indra/llui/lltexteditor.cpp | 92 +- linden/indra/llui/lltexteditor.h | 18 +- linden/indra/llui/llui.cpp | 18 +- linden/indra/llui/lluictrlfactory.cpp | 17 +- linden/indra/llui/lluictrlfactory.h | 4 +- linden/indra/llui/llview.cpp | 2 +- linden/indra/llui/llviewborder.cpp | 2 +- linden/indra/llvfs/lldir.cpp | 30 +- linden/indra/llvfs/llvfs.cpp | 53 +- linden/indra/llvfs/llvfs.h | 8 +- linden/indra/llwindow/files.linux.lst | 1 - linden/indra/llwindow/files.sunos5.lst | 1 - linden/indra/llwindow/lldxhardware.cpp | 21 +- linden/indra/llwindow/llgl.cpp | 294 +- linden/indra/llwindow/llgl.h | 30 +- linden/indra/llwindow/llwindow.cpp | 20 +- linden/indra/llwindow/llwindow.h | 2 + linden/indra/llwindow/llwindowlinux.cpp | 61 - linden/indra/llwindow/llwindowlinux.h | 119 - linden/indra/llwindow/llwindowmacosx-objc.mm | 8 + linden/indra/llwindow/llwindowmacosx.cpp | 71 +- linden/indra/llwindow/llwindowmacosx.h | 2 + linden/indra/llwindow/llwindowsdl.cpp | 98 +- linden/indra/llwindow/llwindowsdl.h | 3 +- linden/indra/llwindow/llwindowsolaris.cpp | 61 - linden/indra/llwindow/llwindowsolaris.h | 121 - linden/indra/llwindow/llwindowwin32.cpp | 133 +- linden/indra/llwindow/llwindowwin32.h | 2 + linden/indra/llxml/llcontrol.cpp | 71 +- linden/indra/llxml/llcontrol.h | 2 +- linden/indra/llxml/llxmlnode.cpp | 6 +- linden/indra/llxml/llxmlnode.h | 8 +- linden/indra/llxml/llxmlparser.cpp | 4 +- linden/indra/llxml/llxmlparser.h | 4 +- linden/indra/lscript/lscript_alloc.h | 2 +- linden/indra/lscript/lscript_compile/indra.l | 9 +- .../lscript/lscript_compile/lscript_bytecode.cpp | 2 +- .../lscript/lscript_compile/lscript_bytecode.h | 2 +- .../lscript/lscript_compile/lscript_error.cpp | 10 +- .../indra/lscript/lscript_compile/lscript_error.h | 12 +- .../indra/lscript/lscript_compile/lscript_tree.cpp | 282 +- .../indra/lscript/lscript_compile/lscript_tree.h | 238 +- .../lscript/lscript_compile/lscript_typecheck.cpp | 6 +- linden/indra/lscript/lscript_execute.h | 2 +- .../lscript/lscript_execute/lscript_execute.cpp | 49 +- .../lscript/lscript_execute/lscript_readlso.cpp | 206 +- .../lscript/lscript_execute/lscript_readlso.h | 232 +- .../lscript/lscript_library/lscript_alloc.cpp | 2 +- linden/indra/mac_crash_logger/llcrashloggermac.cpp | 2 +- linden/indra/mac_updater/mac_updater.cpp | 4 +- .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- linden/indra/newview/app_settings/cmd_line.xml | 670 +- linden/indra/newview/app_settings/keywords.ini | 4 + linden/indra/newview/app_settings/logcontrol.xml | 47 + linden/indra/newview/app_settings/settings.xml | 18732 ++++++++++--------- .../indra/newview/app_settings/skinned_avatar.vp | 146 - .../app_settings/skinned_avatar_hair_wind.vp | 179 - .../newview/app_settings/skinned_avatar_nobump.vp | 128 - .../newview/app_settings/skinned_avatar_select.vp | 60 - .../newview/app_settings/skinned_avatar_wind.vp | 211 - linden/indra/newview/files.lst | 4 + .../installers/windows/installer_template.nsi | 21 - linden/indra/newview/linux_tools/client-readme.txt | 50 +- linden/indra/newview/linux_tools/unicode.ttf | 1 - linden/indra/newview/linux_tools/wrapper.sh | 4 +- linden/indra/newview/llagent.cpp | 1 + linden/indra/newview/llanimstatelabels.cpp | 39 + linden/indra/newview/llanimstatelabels.h | 42 + linden/indra/newview/llappviewer.cpp | 383 +- linden/indra/newview/llappviewer.h | 19 +- linden/indra/newview/llappviewerlinux.cpp | 32 +- linden/indra/newview/llappviewermacosx.cpp | 13 +- linden/indra/newview/llappviewerwin32.cpp | 75 +- linden/indra/newview/llbox.cpp | 2 +- linden/indra/newview/llchatbar.cpp | 1 + linden/indra/newview/llcolorswatch.cpp | 2 +- linden/indra/newview/llcommandlineparser.cpp | 33 +- linden/indra/newview/llcompilequeue.cpp | 2 +- linden/indra/newview/llconsole.cpp | 34 +- linden/indra/newview/llcubemap.cpp | 44 +- linden/indra/newview/llcubemap.h | 1 + linden/indra/newview/llcurrencyuimanager.cpp | 5 +- linden/indra/newview/lldrawable.cpp | 8 +- linden/indra/newview/lldrawpool.cpp | 2 +- linden/indra/newview/lldrawpoolalpha.cpp | 18 +- linden/indra/newview/lldrawpoolalpha.h | 3 - linden/indra/newview/lldrawpoolavatar.cpp | 59 +- linden/indra/newview/lldrawpoolbump.cpp | 97 +- linden/indra/newview/lldrawpoolsimple.cpp | 18 +- linden/indra/newview/lldrawpoolsky.cpp | 2 +- linden/indra/newview/lldrawpoolterrain.cpp | 286 +- linden/indra/newview/lldrawpooltree.cpp | 30 +- linden/indra/newview/lldrawpoolwater.cpp | 47 +- linden/indra/newview/lldrawpoolwlsky.cpp | 21 +- linden/indra/newview/lldynamictexture.cpp | 2 +- linden/indra/newview/llface.cpp | 6 +- linden/indra/newview/llface.h | 1 + linden/indra/newview/llfasttimerview.cpp | 2 +- linden/indra/newview/llfeaturemanager.cpp | 58 +- linden/indra/newview/llfeaturemanager.h | 2 +- linden/indra/newview/llfloateranimpreview.cpp | 3 +- linden/indra/newview/llfloaterauction.cpp | 7 +- linden/indra/newview/llfloaterbuyland.cpp | 5 +- linden/indra/newview/llfloaterchat.cpp | 21 +- linden/indra/newview/llfloatercolorpicker.cpp | 2 +- linden/indra/newview/llfloaterdirectory.cpp | 45 +- linden/indra/newview/llfloaterdirectory.h | 6 +- linden/indra/newview/llfloatergroupinfo.cpp | 26 +- linden/indra/newview/llfloatergroups.cpp | 2 +- linden/indra/newview/llfloaterimagepreview.cpp | 2 +- linden/indra/newview/llfloaterproperties.cpp | 35 +- linden/indra/newview/llfloaterproperties.h | 4 + linden/indra/newview/llfloaterregioninfo.cpp | 3 + linden/indra/newview/llfloaterreporter.cpp | 4 +- linden/indra/newview/llfloaterreporter.h | 2 + linden/indra/newview/llfloatersnapshot.cpp | 68 +- linden/indra/newview/llfloatertools.cpp | 13 +- linden/indra/newview/llfolderview.cpp | 6 +- linden/indra/newview/llframestats.cpp | 2 +- linden/indra/newview/llgivemoney.cpp | 16 + linden/indra/newview/llglsandbox.cpp | 2 +- linden/indra/newview/llglslshader.cpp | 116 +- linden/indra/newview/llglslshader.h | 3 + linden/indra/newview/llgroupnotify.cpp | 4 +- linden/indra/newview/llhoverview.cpp | 79 +- linden/indra/newview/llhudeffectlookat.cpp | 2 +- linden/indra/newview/llhudeffectpointat.cpp | 2 +- linden/indra/newview/llhudicon.cpp | 2 +- linden/indra/newview/llhudtext.cpp | 5 +- linden/indra/newview/llimpanel.cpp | 66 +- linden/indra/newview/llimpanel.h | 13 +- linden/indra/newview/llimview.cpp | 55 +- linden/indra/newview/llimview.h | 4 +- linden/indra/newview/llinventorymodel.cpp | 8 +- linden/indra/newview/lljoystickbutton.cpp | 2 +- linden/indra/newview/lllogchat.cpp | 4 +- linden/indra/newview/llmanip.cpp | 2 +- linden/indra/newview/llmaniprotate.cpp | 2 +- linden/indra/newview/llmanipscale.cpp | 2 +- linden/indra/newview/llmaniptranslate.cpp | 10 +- linden/indra/newview/llmemoryview.cpp | 4 +- linden/indra/newview/llmutelist.cpp | 82 +- linden/indra/newview/llmutelist.h | 10 + linden/indra/newview/llnetmap.cpp | 6 +- linden/indra/newview/llnotify.cpp | 2 +- linden/indra/newview/lloverlaybar.cpp | 2 +- linden/indra/newview/llpanelclassified.cpp | 89 +- linden/indra/newview/llpanelclassified.h | 9 +- linden/indra/newview/llpaneldirbrowser.cpp | 78 - linden/indra/newview/llpaneldirbrowser.h | 1 - linden/indra/newview/llpaneldirfind.cpp | 300 +- linden/indra/newview/llpaneldirfind.h | 58 +- linden/indra/newview/llpaneldirgroups.cpp | 100 +- linden/indra/newview/llpaneldirgroups.h | 13 +- linden/indra/newview/llpaneldirplaces.cpp | 156 +- linden/indra/newview/llpaneldirplaces.h | 20 +- linden/indra/newview/llpaneldirpopular.cpp | 97 +- linden/indra/newview/llpaneldirpopular.h | 21 +- linden/indra/newview/llpaneldisplay.cpp | 77 +- linden/indra/newview/llpaneldisplay.h | 13 +- linden/indra/newview/llpanelgroupgeneral.cpp | 99 +- linden/indra/newview/llpanelgroupgeneral.h | 4 +- linden/indra/newview/llpanellogin.cpp | 94 +- linden/indra/newview/llpanellogin.h | 1 + linden/indra/newview/llpanelpermissions.cpp | 13 +- linden/indra/newview/llpolymesh.cpp | 2 +- linden/indra/newview/llpolymorph.cpp | 2 +- linden/indra/newview/llpolymorph.h | 2 +- linden/indra/newview/llpostprocess.cpp | 89 +- linden/indra/newview/llpostprocess.h | 7 - linden/indra/newview/llpreviewgesture.cpp | 5 +- linden/indra/newview/llpreviewscript.cpp | 10 +- linden/indra/newview/llprogressview.cpp | 2 +- linden/indra/newview/llselectmgr.cpp | 36 +- linden/indra/newview/llspatialpartition.cpp | 10 +- linden/indra/newview/llstartup.cpp | 258 +- linden/indra/newview/llstatgraph.cpp | 2 +- linden/indra/newview/llstatusbar.cpp | 20 +- linden/indra/newview/llstylemap.cpp | 75 + linden/indra/newview/llstylemap.h | 54 + linden/indra/newview/llsurfacepatch.cpp | 3 +- linden/indra/newview/lltexlayer.cpp | 44 +- linden/indra/newview/lltexturecache.cpp | 26 +- linden/indra/newview/lltexturectrl.cpp | 2 +- linden/indra/newview/lltexturefetch.cpp | 18 +- linden/indra/newview/lltextureview.cpp | 2 +- linden/indra/newview/lltoolbar.cpp | 9 +- linden/indra/newview/lltoolbrush.cpp | 2 +- linden/indra/newview/lltooldraganddrop.cpp | 5 + linden/indra/newview/lltoolfocus.cpp | 3 +- linden/indra/newview/lltoolfocus.h | 1 + linden/indra/newview/lltoolmorph.cpp | 2 +- linden/indra/newview/lltoolselectrect.cpp | 2 +- linden/indra/newview/lltracker.cpp | 2 +- linden/indra/newview/lltrans.cpp | 103 + linden/indra/newview/lltrans.h | 92 + linden/indra/newview/lluserauth.cpp | 20 +- linden/indra/newview/llviewerassetstorage.cpp | 2 +- linden/indra/newview/llviewercontrol.cpp | 18 +- linden/indra/newview/llviewerdisplay.cpp | 54 +- linden/indra/newview/llviewerimagelist.cpp | 6 +- linden/indra/newview/llviewerinventory.cpp | 10 +- linden/indra/newview/llviewerinventory.h | 10 +- linden/indra/newview/llviewerjoint.cpp | 6 +- linden/indra/newview/llviewerjointattachment.cpp | 2 +- linden/indra/newview/llviewerjointmesh.cpp | 53 +- linden/indra/newview/llviewerjoystick.cpp | 30 + linden/indra/newview/llviewerkeyboard.cpp | 2 +- linden/indra/newview/llviewermenu.cpp | 59 +- linden/indra/newview/llviewermenufile.cpp | 51 +- linden/indra/newview/llviewermessage.cpp | 262 +- linden/indra/newview/llviewernetwork.cpp | 186 +- linden/indra/newview/llviewernetwork.h | 46 +- linden/indra/newview/llviewerobject.cpp | 45 +- linden/indra/newview/llviewerobject.h | 1 + linden/indra/newview/llviewerobjectlist.cpp | 3 +- linden/indra/newview/llviewerparcelmedia.cpp | 10 +- linden/indra/newview/llviewerparceloverlay.cpp | 47 +- linden/indra/newview/llviewerpartsource.cpp | 19 + linden/indra/newview/llviewerpartsource.h | 1 + linden/indra/newview/llviewerregion.cpp | 12 +- linden/indra/newview/llviewerstats.cpp | 8 +- linden/indra/newview/llviewertexteditor.cpp | 14 +- linden/indra/newview/llviewerthrottle.cpp | 4 +- linden/indra/newview/llviewerwindow.cpp | 68 +- linden/indra/newview/llviewerwindow.h | 10 +- linden/indra/newview/llvoavatar.cpp | 375 +- linden/indra/newview/llvoavatar.h | 29 +- linden/indra/newview/llvocache.cpp | 8 +- linden/indra/newview/llvocache.h | 4 +- linden/indra/newview/llvograss.h | 4 +- linden/indra/newview/llvoiceclient.cpp | 249 +- linden/indra/newview/llvoiceclient.h | 4 + linden/indra/newview/llvoicevisualizer.cpp | 177 +- linden/indra/newview/llvoicevisualizer.h | 23 +- linden/indra/newview/llvosky.cpp | 6 +- linden/indra/newview/llvosky.h | 23 +- linden/indra/newview/llvosurfacepatch.cpp | 12 +- linden/indra/newview/llwatchdog.cpp | 222 + linden/indra/newview/llwatchdog.h | 98 + linden/indra/newview/llwaterparammanager.cpp | 15 +- linden/indra/newview/llwaterparammanager.h | 10 +- linden/indra/newview/llwearable.cpp | 6 +- linden/indra/newview/llwearable.h | 4 +- linden/indra/newview/llwearablelist.cpp | 2 +- linden/indra/newview/llwebbrowserctrl.cpp | 9 +- linden/indra/newview/llwebbrowserctrl.h | 2 + linden/indra/newview/llwindebug.cpp | 154 +- linden/indra/newview/llwindebug.h | 30 +- linden/indra/newview/llwlparammanager.cpp | 10 +- linden/indra/newview/llwlparammanager.h | 5 - linden/indra/newview/llwlparamset.h | 8 - linden/indra/newview/llworld.cpp | 31 +- linden/indra/newview/llworldmap.cpp | 18 +- linden/indra/newview/llworldmap.h | 1 - linden/indra/newview/llworldmapview.cpp | 81 +- linden/indra/newview/llworldmapview.h | 1 - linden/indra/newview/llxmlrpctransaction.cpp | 8 +- .../newview/macview.xcodeproj/project.pbxproj | 40 +- linden/indra/newview/newview.vcproj | 27 + linden/indra/newview/newview_vc8.vcproj | 44 +- linden/indra/newview/newview_vc9.vcproj | 36 + linden/indra/newview/pipeline.cpp | 185 +- linden/indra/newview/pipeline.h | 1 + linden/indra/newview/releasenotes.txt | 253 + linden/indra/newview/res/newViewRes.rc | 8 +- linden/indra/newview/skins/textures/textures.xml | 4 +- linden/indra/newview/skins/xui/de/floater_html.xml | 3 + linden/indra/newview/skins/xui/de/mime_types.xml | 2 +- .../newview/skins/xui/de/panel_group_invite.xml | 5 - .../newview/skins/xui/de/panel_group_notices.xml | 2 +- .../skins/xui/de/panel_preferences_graphics1.xml | 2 + .../newview/skins/xui/de/panel_preferences_web.xml | 5 +- linden/indra/newview/skins/xui/en-us/alerts.xml | 46 +- .../newview/skins/xui/en-us/floater_directory.xml | 404 +- .../indra/newview/skins/xui/en-us/floater_im.xml | 4 + .../newview/skins/xui/en-us/floater_joystick.xml | 2 +- .../skins/xui/en-us/floater_script_debug.xml | 2 +- .../newview/skins/xui/en-us/floater_snapshot.xml | 8 +- .../newview/skins/xui/en-us/floater_world_map.xml | 28 +- .../indra/newview/skins/xui/en-us/menu_viewer.xml | 29 +- .../indra/newview/skins/xui/en-us/mime_types.xml | 2 +- linden/indra/newview/skins/xui/en-us/notify.xml | 20 + .../skins/xui/en-us/panel_avatar_classified.xml | 14 +- .../newview/skins/xui/en-us/panel_classified.xml | 19 +- .../skins/xui/en-us/panel_group_general.xml | 20 +- .../skins/xui/en-us/panel_group_notices.xml | 3 +- .../xui/en-us/panel_preferences_graphics1.xml | 36 +- .../skins/xui/en-us/panel_preferences_web.xml | 10 +- .../skins/xui/en-us/panel_region_general.xml | 10 +- linden/indra/newview/skins/xui/en-us/strings.xml | 166 + .../newview/skins/xui/es/panel_group_notices.xml | 2 +- .../newview/skins/xui/fr/panel_group_notices.xml | 2 +- .../indra/newview/skins/xui/ja/floater_about.xml | 2 +- linden/indra/newview/skins/xui/ja/floater_html.xml | 3 + .../newview/skins/xui/ja/floater_joystick.xml | 93 +- linden/indra/newview/skins/xui/ja/mime_types.xml | 2 +- .../newview/skins/xui/ja/panel_group_notices.xml | 2 +- .../skins/xui/ja/panel_preferences_graphics1.xml | 10 +- .../newview/skins/xui/ja/panel_preferences_web.xml | 5 +- .../skins/xui/ja/panel_speaker_controls.xml | 4 +- .../newview/skins/xui/ko/floater_chat_history.xml | 2 +- linden/indra/newview/skins/xui/ko/floater_html.xml | 3 + .../newview/skins/xui/ko/floater_joystick.xml | 2 +- linden/indra/newview/skins/xui/ko/menu_viewer.xml | 2 +- linden/indra/newview/skins/xui/ko/mime_types.xml | 2 +- .../indra/newview/skins/xui/ko/panel_chat_bar.xml | 2 +- .../newview/skins/xui/ko/panel_group_invite.xml | 5 - .../newview/skins/xui/ko/panel_group_notices.xml | 2 +- .../newview/skins/xui/ko/panel_preferences_web.xml | 5 +- .../newview/skins/xui/pt/panel_group_notices.xml | 2 +- .../newview/skins/xui/zh/panel_group_notices.xml | 2 +- linden/indra/newview/viewer_manifest.py | 7 +- linden/indra/test/inventory.cpp | 8 +- linden/indra/test/llblowfish_tut.cpp | 4 +- linden/indra/test/lldatapacker_tut.cpp | 4 +- linden/indra/test/llmessageconfig_tut.cpp | 17 + linden/indra/test/llpermissions_tut.cpp | 4 +- linden/indra/test/llsaleinfo_tut.cpp | 4 +- linden/scripts/messages/message_template.msg | 4 + 444 files changed, 19808 insertions(+), 16531 deletions(-) create mode 100644 linden/indra/llcommon/llfindlocale.cpp create mode 100644 linden/indra/llcommon/llfindlocale.h create mode 100644 linden/indra/llcommon/llheartbeat.cpp create mode 100644 linden/indra/llcommon/llheartbeat.h create mode 100644 linden/indra/llcommon/llindraconfigfile.cpp create mode 100644 linden/indra/llcommon/llindraconfigfile.h create mode 100644 linden/indra/llcommon/llkeyusetracker.h create mode 100644 linden/indra/llrender/llrender.cpp create mode 100644 linden/indra/llrender/llrender.h delete mode 100644 linden/indra/llrender/llvertexprogramgl.cpp delete mode 100644 linden/indra/llrender/llvertexprogramgl.h delete mode 100644 linden/indra/llwindow/llwindowlinux.cpp delete mode 100644 linden/indra/llwindow/llwindowlinux.h delete mode 100644 linden/indra/llwindow/llwindowsolaris.cpp delete mode 100644 linden/indra/llwindow/llwindowsolaris.h create mode 100644 linden/indra/newview/app_settings/logcontrol.xml delete mode 100644 linden/indra/newview/app_settings/skinned_avatar.vp delete mode 100644 linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp delete mode 100644 linden/indra/newview/app_settings/skinned_avatar_nobump.vp delete mode 100644 linden/indra/newview/app_settings/skinned_avatar_select.vp delete mode 100644 linden/indra/newview/app_settings/skinned_avatar_wind.vp delete mode 120000 linden/indra/newview/linux_tools/unicode.ttf create mode 100644 linden/indra/newview/llanimstatelabels.cpp create mode 100644 linden/indra/newview/llanimstatelabels.h create mode 100644 linden/indra/newview/llstylemap.cpp create mode 100644 linden/indra/newview/llstylemap.h create mode 100644 linden/indra/newview/lltrans.cpp create mode 100644 linden/indra/newview/lltrans.h create mode 100644 linden/indra/newview/llwatchdog.cpp create mode 100644 linden/indra/newview/llwatchdog.h create mode 100644 linden/indra/newview/skins/xui/en-us/strings.xml diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt index f26c105..7c5b54c 100644 --- a/linden/doc/contributions.txt +++ b/linden/doc/contributions.txt @@ -8,6 +8,7 @@ Able Whitman VWR-650 VWR-1460 VWR-1691 + VWR-1735 Adam Marker VWR-2755 Aimee Trescothick @@ -39,6 +40,7 @@ Alissa Sabre VWR-2116 VWR-2826 VWR-3290 + VWR-3857 VWR-4010 VWR-3410 VWR-6386 @@ -48,6 +50,9 @@ Alissa Sabre VWR-6430 VWR-1843 VWR-6668 + VWR-7153 + VWR-7168 + VWR-7087 Angus Boyd VWR-592 Argent Stonecutter @@ -169,6 +174,8 @@ Jacek Antonelli VWR-188 VWR-427 VWR-597 + VWR-2448 + VWR-3605 Joghert LeSabre VWR-64 Kage Pixel @@ -192,6 +199,7 @@ Michelle2 Zenovka VWR-3749 Mm Alder VWR-3777 + VWR-4794 Mr Greggan VWR-445 Nicholaz Beresford @@ -289,6 +297,8 @@ Robin Cornelius VWR-2488 Ryozu Kojima VWR-287 +Sammy Frederix + VWR-6186 Scrippy Scofield VWR-3748 Seg Baphomet diff --git a/linden/etc/message.xml b/linden/etc/message.xml index 331e6bb..701d049 100644 --- a/linden/etc/message.xml +++ b/linden/etc/message.xml @@ -424,7 +424,7 @@ trusted-sender true - + ScriptRunningReply @@ -553,5 +553,8 @@ + + maxQueuedEvents + 100 diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct index 137b1e0..629656f 100644 --- a/linden/indra/SConstruct +++ b/linden/indra/SConstruct @@ -136,11 +136,13 @@ if standalone and platform != 'linux': standalone_pkgs = [ 'atk', 'cairo', + 'fontconfig', 'freetype2', 'gdk-2.0', 'gdk-pixbuf-2.0', 'glib-2.0', 'gmodule-2.0', + 'gthread-2.0', 'gtk+-2.0', 'libpng', 'pango', @@ -303,7 +305,7 @@ for build_target in targets: pkgconfig('--cflags-only-I').split()] 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_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt'] + client_external_libs += [ 'fontconfig', '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 @@ -408,7 +410,7 @@ for build_target in targets: base_env = Environment(CXX = compiler, CPPPATH = include_dirs, - LIBPATH = [lib_dir] + [system_lib_dir] + [havok_lib_dir], + LIBPATH = lib_path + [havok_lib_dir], LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' ) ### Environments for various build types ### @@ -474,7 +476,6 @@ for build_target in targets: env['ENV']['DISTCC_HOSTS'] = hosts env['ENV']['USER'] = os.environ['USER'] env['ENV']['HOME'] = os.environ['HOME'] - env['ENV']['SSH_AUTH_SOCK'] = os.environ['SSH_AUTH_SOCK'] if enable_colorgcc: env['ENV']['PATH'] = os.environ['PATH'] @@ -733,6 +734,11 @@ for build_target in targets: file_suffix = '' if buildtype == 'debug' or buildtype == 'havok1debug': file_suffix = '_debug' + boost_signals_lib = 'boost_signals-gcc33-mt-d' + boost_libs = [ 'boost_regex-gcc33-mt-d', boost_signals_lib ] + else: + boost_signals_lib = 'boost_signals-gcc33-mt' + boost_libs = [ 'boost_regex-gcc33-mt', boost_signals_lib ] common_external_libs += [ 'pthread' ] @@ -759,8 +765,8 @@ for build_target in targets: internal_libs + external_libs) # Dataserver - external_libs = common_external_libs + [ - 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'mysqlclient', 'tcmalloc', 'stacktrace', + external_libs = common_external_libs + boost_libs + [ + 'mysqlclient', 'tcmalloc', 'stacktrace', ] internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory', 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ] @@ -782,9 +788,8 @@ for build_target in targets: internal_libs + external_libs) # Mapserver - external_libs = common_external_libs + ['OSMesa16', 'kdu', - 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'iconv', - 'jpeg', 'openjpeg', 'GL', 'mysqlclient', 'png12', 'pthread', 'dl'] + external_libs = common_external_libs + [ 'OSMesa16', 'kdu' ] + boost_libs + [ + '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', @@ -792,8 +797,9 @@ for build_target in targets: # Simulator 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'] + external_libs = common_external_libs + boost_libs + [ + 'openjpeg', 'dl', 'kdu', 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace', 'png12', + ] # the order of the havok libs matters external_libs += [ @@ -822,7 +828,7 @@ for build_target in targets: internal_libs + external_libs) # texture upload verifier - external_libs = common_external_libs + ['boost_signals-gcc33-mt', 'kdu', 'openjpeg', 'png12', 'z', 'dl'] + external_libs = common_external_libs + [boost_signals_lib, 'kdu', 'openjpeg', 'png12', 'z', 'dl'] internal_libs = [ 'llimage', 'llimagej2coj', @@ -855,7 +861,7 @@ for build_target in targets: Depends('test/test', 'newsim/simulator' + file_suffix) external_libs = common_external_libs + ['mysqlclient'] if platform == 'linux': - external_libs += ['boost_signals-gcc33-mt'] + external_libs += [boost_signals_lib] internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml', 'llvfs', 'llcharacter', 'llphysics', 'llprimitive', 'llmath', 'llcommon' ] test_executable = 'test/test' + file_suffix diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln index 54bad30..452608f 100644 --- a/linden/indra/indra_complete/indra_complete_vc8.sln +++ b/linden/indra/indra_complete/indra_complete_vc8.sln @@ -69,6 +69,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile", "..\lscri EndProjectSection EndProject ProjectSection(ProjectDependencies) = postProject + {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} {FCC4483C-5B84-4944-B91F-4589A219BC0B} = {FCC4483C-5B84-4944-B91F-4589A219BC0B} {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} @@ -86,11 +88,11 @@ EndProject EndProjectSection EndProject ProjectSection(ProjectDependencies) = postProject - {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} = {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} {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} + {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} EndProjectSection EndProject ProjectSection(ProjectDependencies) = postProject @@ -178,9 +180,11 @@ 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 +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + DebugHk460|Win32 = DebugHk460|Win32 DebugMesaHeadless|Win32 = DebugMesaHeadless|Win32 Release|Win32 = Release|Win32 ReleaseForDownload|Win32 = ReleaseForDownload|Win32 @@ -189,6 +193,8 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.ActiveCfg = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.Build.0 = Debug|Win32 + {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.Build.0 = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release|Win32.ActiveCfg = Release|Win32 @@ -199,6 +205,8 @@ Global {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.ActiveCfg = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.Build.0 = Debug|Win32 + {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.Build.0 = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release|Win32.ActiveCfg = Release|Win32 @@ -209,6 +217,8 @@ Global {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.ActiveCfg = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.Build.0 = Debug|Win32 + {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.Build.0 = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release|Win32.ActiveCfg = Release|Win32 @@ -219,6 +229,8 @@ Global {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.ActiveCfg = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.Build.0 = Debug|Win32 + {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.Build.0 = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.Release|Win32.ActiveCfg = Release|Win32 @@ -229,6 +241,8 @@ Global {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.ActiveCfg = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.Build.0 = Debug|Win32 + {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.Build.0 = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release|Win32.ActiveCfg = Release|Win32 @@ -239,6 +253,8 @@ Global {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.ActiveCfg = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.Build.0 = Debug|Win32 + {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.Build.0 = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.Release|Win32.ActiveCfg = Release|Win32 @@ -249,6 +265,8 @@ Global {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.ActiveCfg = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.Build.0 = Debug|Win32 + {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.Build.0 = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release|Win32.ActiveCfg = Release|Win32 @@ -259,6 +277,8 @@ Global {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.ActiveCfg = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.Build.0 = Debug|Win32 + {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.Build.0 = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release|Win32.ActiveCfg = Release|Win32 @@ -269,6 +289,8 @@ Global {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.ActiveCfg = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.Build.0 = Debug|Win32 + {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.Build.0 = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release|Win32.ActiveCfg = Release|Win32 @@ -279,6 +301,8 @@ Global {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.ActiveCfg = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.Build.0 = Debug|Win32 + {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.Build.0 = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release|Win32.ActiveCfg = Release|Win32 @@ -289,6 +313,8 @@ Global {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.ActiveCfg = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.Build.0 = Debug|Win32 + {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.Build.0 = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release|Win32.ActiveCfg = Release|Win32 @@ -299,6 +325,8 @@ Global {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.ActiveCfg = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.Build.0 = Debug|Win32 + {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.Build.0 = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release|Win32.ActiveCfg = Release|Win32 @@ -309,6 +337,8 @@ Global {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32 + {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.Build.0 = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32 @@ -319,6 +349,8 @@ Global {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.ActiveCfg = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.Build.0 = Debug|Win32 + {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.Build.0 = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release|Win32.ActiveCfg = Release|Win32 @@ -329,6 +361,8 @@ Global {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.ActiveCfg = Debug|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.Build.0 = Debug|Win32 + {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.ActiveCfg = DebugMesaHeadless|Win32 + {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.Build.0 = DebugMesaHeadless|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.ActiveCfg = DebugMesaHeadless|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.Build.0 = DebugMesaHeadless|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release|Win32.ActiveCfg = Release|Win32 @@ -339,6 +373,8 @@ Global {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.ActiveCfg = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.Build.0 = Debug|Win32 + {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.Build.0 = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release|Win32.ActiveCfg = Release|Win32 @@ -349,6 +385,8 @@ Global {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.ActiveCfg = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.Build.0 = Debug|Win32 + {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.Build.0 = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release|Win32.ActiveCfg = Release|Win32 @@ -359,6 +397,8 @@ Global {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.ActiveCfg = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.Build.0 = Debug|Win32 + {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.Build.0 = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release|Win32.ActiveCfg = Release|Win32 @@ -369,6 +409,8 @@ Global {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.ActiveCfg = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.Build.0 = Debug|Win32 + {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.Build.0 = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release|Win32.ActiveCfg = Release|Win32 @@ -378,6 +420,8 @@ Global {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.ActiveCfg = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.Build.0 = Debug|Win32 + {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.Build.0 = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release|Win32.ActiveCfg = Release|Win32 @@ -387,6 +431,8 @@ Global {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.ActiveCfg = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.Build.0 = Debug|Win32 + {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.Build.0 = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release|Win32.ActiveCfg = Release|Win32 @@ -396,6 +442,8 @@ Global {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.ActiveCfg = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.Build.0 = Debug|Win32 + {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.Build.0 = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release|Win32.ActiveCfg = Release|Win32 @@ -405,6 +453,8 @@ Global {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.ActiveCfg = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.Build.0 = Debug|Win32 + {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.Build.0 = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.ActiveCfg = Release|Win32 @@ -414,6 +464,8 @@ Global {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32 + {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release|Win32.ActiveCfg = Release|Win32 @@ -423,6 +475,8 @@ Global {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.ActiveCfg = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.Build.0 = Debug|Win32 + {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.Build.0 = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release|Win32.ActiveCfg = Release|Win32 @@ -432,6 +486,8 @@ Global {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug|Win32.ActiveCfg = Debug|Win32 + {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.Build.0 = Debug|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32 @@ -439,6 +495,8 @@ Global {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = 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}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugHk460|Win32.Build.0 = Debug|Win32 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release|Win32.ActiveCfg = Release|Win32 @@ -449,6 +507,8 @@ Global {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.ActiveCfg = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.Build.0 = Debug|Win32 + {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.Build.0 = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release|Win32.ActiveCfg = Release|Win32 @@ -459,6 +519,8 @@ Global {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.ActiveCfg = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.Build.0 = Debug|Win32 + {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.Build.0 = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release|Win32.ActiveCfg = Release|Win32 @@ -468,6 +530,8 @@ Global {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.ActiveCfg = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.Build.0 = Debug|Win32 + {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.Build.0 = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release|Win32.ActiveCfg = Release|Win32 @@ -478,6 +542,8 @@ Global {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.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}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugHk460|Win32.Build.0 = Debug|Win32 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release|Win32.ActiveCfg = Release|Win32 @@ -488,6 +554,8 @@ Global {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.ActiveCfg = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.Build.0 = Debug|Win32 + {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.Build.0 = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release|Win32.ActiveCfg = Release|Win32 @@ -498,6 +566,8 @@ Global {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.ActiveCfg = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.Build.0 = Debug|Win32 + {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.Build.0 = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release|Win32.ActiveCfg = Release|Win32 @@ -508,6 +578,8 @@ Global {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.ActiveCfg = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.Build.0 = Debug|Win32 + {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.Build.0 = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release|Win32.ActiveCfg = Release|Win32 @@ -518,6 +590,8 @@ Global {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.ActiveCfg = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.Build.0 = Debug|Win32 + {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.Build.0 = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release|Win32.ActiveCfg = Release|Win32 @@ -526,6 +600,18 @@ 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 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.ActiveCfg = Debug|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.Build.0 = Debug|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.ActiveCfg = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.Build.0 = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.ActiveCfg = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.Build.0 = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.ActiveCfg = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.Build.0 = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|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 d7e781d..3ef987d 100644 --- a/linden/indra/indra_complete/indra_complete_vc9.sln +++ b/linden/indra/indra_complete/indra_complete_vc9.sln @@ -83,6 +83,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} + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} EndProjectSection EndProject ProjectSection(ProjectDependencies) = postProject @@ -178,9 +179,11 @@ 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_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}" EndProject +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + DebugHk460|Win32 = DebugHk460|Win32 DebugMesaHeadless|Win32 = DebugMesaHeadless|Win32 Release|Win32 = Release|Win32 ReleaseForDownload|Win32 = ReleaseForDownload|Win32 @@ -189,6 +192,8 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.ActiveCfg = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.Build.0 = Debug|Win32 + {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.Build.0 = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release|Win32.ActiveCfg = Release|Win32 @@ -199,6 +204,8 @@ Global {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.ActiveCfg = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.Build.0 = Debug|Win32 + {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.Build.0 = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release|Win32.ActiveCfg = Release|Win32 @@ -209,6 +216,8 @@ Global {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.ActiveCfg = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.Build.0 = Debug|Win32 + {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.Build.0 = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release|Win32.ActiveCfg = Release|Win32 @@ -219,6 +228,8 @@ Global {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.ActiveCfg = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.Build.0 = Debug|Win32 + {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.Build.0 = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {D37774F4-253D-4760-BF64-372A943224A1}.Release|Win32.ActiveCfg = Release|Win32 @@ -229,6 +240,8 @@ Global {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.ActiveCfg = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.Build.0 = Debug|Win32 + {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.Build.0 = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release|Win32.ActiveCfg = Release|Win32 @@ -239,6 +252,8 @@ Global {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.ActiveCfg = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.Build.0 = Debug|Win32 + {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.Build.0 = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {DE55D666-6A3D-476C-937F-109269B83681}.Release|Win32.ActiveCfg = Release|Win32 @@ -249,6 +264,8 @@ Global {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.ActiveCfg = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.Build.0 = Debug|Win32 + {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.Build.0 = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release|Win32.ActiveCfg = Release|Win32 @@ -259,6 +276,8 @@ Global {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.ActiveCfg = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.Build.0 = Debug|Win32 + {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.Build.0 = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release|Win32.ActiveCfg = Release|Win32 @@ -269,6 +288,8 @@ Global {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.ActiveCfg = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.Build.0 = Debug|Win32 + {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.Build.0 = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release|Win32.ActiveCfg = Release|Win32 @@ -279,6 +300,8 @@ Global {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.ActiveCfg = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.Build.0 = Debug|Win32 + {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.Build.0 = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release|Win32.ActiveCfg = Release|Win32 @@ -289,6 +312,8 @@ Global {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.ActiveCfg = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.Build.0 = Debug|Win32 + {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.Build.0 = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release|Win32.ActiveCfg = Release|Win32 @@ -299,6 +324,8 @@ Global {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.ActiveCfg = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.Build.0 = Debug|Win32 + {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.Build.0 = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release|Win32.ActiveCfg = Release|Win32 @@ -309,6 +336,8 @@ Global {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32 + {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.Build.0 = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32 @@ -319,6 +348,8 @@ Global {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.ActiveCfg = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.Build.0 = Debug|Win32 + {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.Build.0 = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release|Win32.ActiveCfg = Release|Win32 @@ -329,6 +360,8 @@ Global {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.ActiveCfg = Debug|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.Build.0 = Debug|Win32 + {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.ActiveCfg = DebugMesaHeadless|Win32 + {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.Build.0 = DebugMesaHeadless|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.ActiveCfg = DebugMesaHeadless|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.Build.0 = DebugMesaHeadless|Win32 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release|Win32.ActiveCfg = Release|Win32 @@ -339,6 +372,8 @@ Global {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.ActiveCfg = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.Build.0 = Debug|Win32 + {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.Build.0 = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release|Win32.ActiveCfg = Release|Win32 @@ -349,6 +384,8 @@ Global {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.ActiveCfg = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.Build.0 = Debug|Win32 + {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.Build.0 = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release|Win32.ActiveCfg = Release|Win32 @@ -359,6 +396,8 @@ Global {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.ActiveCfg = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.Build.0 = Debug|Win32 + {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.Build.0 = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release|Win32.ActiveCfg = Release|Win32 @@ -369,6 +408,8 @@ Global {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.ActiveCfg = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.Build.0 = Debug|Win32 + {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.Build.0 = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release|Win32.ActiveCfg = Release|Win32 @@ -379,6 +420,8 @@ Global {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.ActiveCfg = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.Build.0 = Debug|Win32 + {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.Build.0 = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release|Win32.ActiveCfg = Release|Win32 @@ -389,6 +432,8 @@ Global {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.ActiveCfg = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.Build.0 = Debug|Win32 + {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.Build.0 = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release|Win32.ActiveCfg = Release|Win32 @@ -399,6 +444,8 @@ Global {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.ActiveCfg = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.Build.0 = Debug|Win32 + {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.Build.0 = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release|Win32.ActiveCfg = Release|Win32 @@ -408,6 +455,8 @@ Global {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.ActiveCfg = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.Build.0 = Debug|Win32 + {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.Build.0 = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.ActiveCfg = Release|Win32 @@ -417,6 +466,8 @@ Global {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32 + {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release|Win32.ActiveCfg = Release|Win32 @@ -426,6 +477,8 @@ Global {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.ActiveCfg = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.Build.0 = Debug|Win32 + {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.Build.0 = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release|Win32.ActiveCfg = Release|Win32 @@ -435,6 +488,8 @@ Global {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug|Win32.ActiveCfg = Debug|Win32 + {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.Build.0 = Debug|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32 @@ -442,6 +497,8 @@ Global {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = 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}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugHk460|Win32.Build.0 = Debug|Win32 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release|Win32.ActiveCfg = Release|Win32 @@ -452,6 +509,8 @@ Global {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.ActiveCfg = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.Build.0 = Debug|Win32 + {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.Build.0 = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release|Win32.ActiveCfg = Release|Win32 @@ -462,6 +521,8 @@ Global {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.ActiveCfg = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.Build.0 = Debug|Win32 + {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.Build.0 = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release|Win32.ActiveCfg = Release|Win32 @@ -471,6 +532,8 @@ Global {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.ActiveCfg = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.Build.0 = Debug|Win32 + {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.Build.0 = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release|Win32.ActiveCfg = Release|Win32 @@ -481,6 +544,8 @@ Global {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.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}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugHk460|Win32.Build.0 = Debug|Win32 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release|Win32.ActiveCfg = Release|Win32 @@ -491,6 +556,8 @@ Global {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.ActiveCfg = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.Build.0 = Debug|Win32 + {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.Build.0 = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release|Win32.ActiveCfg = Release|Win32 @@ -501,6 +568,8 @@ Global {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.ActiveCfg = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.Build.0 = Debug|Win32 + {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.Build.0 = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release|Win32.ActiveCfg = Release|Win32 @@ -511,6 +580,8 @@ Global {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.ActiveCfg = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.Build.0 = Debug|Win32 + {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.Build.0 = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release|Win32.ActiveCfg = Release|Win32 @@ -521,6 +592,8 @@ Global {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.ActiveCfg = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.Build.0 = Debug|Win32 + {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.ActiveCfg = Debug|Win32 + {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.Build.0 = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release|Win32.ActiveCfg = Release|Win32 @@ -529,6 +602,18 @@ 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 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.ActiveCfg = Debug|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.Build.0 = Debug|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.ActiveCfg = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.Build.0 = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.ActiveCfg = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.Build.0 = DebugHk460|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.ActiveCfg = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.Build.0 = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 + {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/linden/indra/lib/python/indra/base/llsd.py b/linden/indra/lib/python/indra/base/llsd.py index 26ac3a2..cd23551 100644 --- a/linden/indra/lib/python/indra/base/llsd.py +++ b/linden/indra/lib/python/indra/base/llsd.py @@ -218,6 +218,78 @@ class LLSDXMLFormatter(object): def format_xml(something): return LLSDXMLFormatter().format(something) +class LLSDXMLPrettyFormatter(LLSDXMLFormatter): + def __init__(self, indent_atom = None): + # Call the super class constructor so that we have the type map + super(LLSDXMLPrettyFormatter, self).__init__() + + # Override the type map to use our specialized formatters to + # emit the pretty output. + self.type_map[list] = self.PRETTY_ARRAY + self.type_map[tuple] = self.PRETTY_ARRAY + self.type_map[types.GeneratorType] = self.PRETTY_ARRAY, + self.type_map[dict] = self.PRETTY_MAP + + # Private data used for indentation. + self._indent_level = 1 + if indent_atom is None: + self._indent_atom = ' ' + else: + self._indent_atom = indent_atom + + def _indent(self): + "Return an indentation based on the atom and indentation level." + return self._indent_atom * self._indent_level + + def PRETTY_ARRAY(self, v): + rv = [] + rv.append('\n') + self._indent_level = self._indent_level + 1 + rv.extend(["%s%s\n" % + (self._indent(), + self.generate(item)) + for item in v]) + self._indent_level = self._indent_level - 1 + rv.append(self._indent()) + rv.append('') + return ''.join(rv) + + def PRETTY_MAP(self, v): + rv = [] + rv.append('\n') + self._indent_level = self._indent_level + 1 + keys = v.keys() + keys.sort() + rv.extend(["%s%s\n%s%s\n" % + (self._indent(), + self.elt('key', key), + self._indent(), + self.generate(v[key])) + for key in keys]) + self._indent_level = self._indent_level - 1 + rv.append(self._indent()) + rv.append('') + return ''.join(rv) + + def format(self, something): + data = [] + data.append('\n') + data.append(self.generate(something)) + data.append('\n') + return '\n'.join(data) + +def format_pretty_xml(something): + """@brief Serialize a python object as 'pretty' llsd xml. + + The output conforms to the LLSD DTD, unlike the output from the + standard python xml.dom DOM::toprettyxml() method which does not + preserve significant whitespace. + This function is not necessarily suited for serializing very large + objects. It is not optimized by the cllsd module, and sorts on + dict (llsd map) keys alphabetically to ease human reading. + """ + return LLSDXMLPrettyFormatter().format(something) + class LLSDNotationFormatter(object): def __init__(self): self.type_map = { @@ -829,6 +901,7 @@ class LLSD(object): parse = staticmethod(parse) toXML = staticmethod(format_xml) + toPrettyXML = staticmethod(format_pretty_xml) toBinary = staticmethod(format_binary) toNotation = staticmethod(format_notation) @@ -842,6 +915,16 @@ 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)) @@ -849,6 +932,8 @@ 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 378c1c2..24cad61 100644 --- a/linden/indra/lib/python/indra/ipc/llsdhttp.py +++ b/linden/indra/lib/python/indra/ipc/llsdhttp.py @@ -34,7 +34,7 @@ from indra.base import llsd from eventlet import httpc -suite = httpc.HttpSuite(llsd.format_xml, llsd.parse, 'application/xml+llsd') +suite = httpc.HttpSuite(llsd.format_xml, llsd.parse, 'application/llsd+xml') delete = suite.delete delete_ = suite.delete_ get = suite.get diff --git a/linden/indra/lib/python/indra/util/named_query.py b/linden/indra/lib/python/indra/util/named_query.py index c52bfde..680d1f9 100644 --- a/linden/indra/lib/python/indra/util/named_query.py +++ b/linden/indra/lib/python/indra/util/named_query.py @@ -47,6 +47,9 @@ except NameError: from indra.base import llsd from indra.base import config +NQ_FILE_SUFFIX = config.get('named-query-file-suffix', '') +NQ_FILE_SUFFIX_LEN = len(NQ_FILE_SUFFIX) + _g_named_manager = None def _init_g_named_manager(sql_dir = None): @@ -98,6 +101,9 @@ class NamedQuery(object): a path to a file containing an llsd named query document.""" self._stat_interval_seconds = 5 # 5 seconds self._name = name + if (filename is not None) \ + and (NQ_FILE_SUFFIX != filename[-NQ_FILE_SUFFIX_LEN:]): + filename = filename + NQ_FILE_SUFFIX self._location = filename self._alternative = dict() self._last_mod_time = 0 diff --git a/linden/indra/llaudio/audioengine.cpp b/linden/indra/llaudio/audioengine.cpp index 3e1fdf8..021c940 100644 --- a/linden/indra/llaudio/audioengine.cpp +++ b/linden/indra/llaudio/audioengine.cpp @@ -60,6 +60,7 @@ const F32 MAX_CURRENT_TRANSFER_TIME = 60.f; LLAudioEngine::LLAudioEngine() { + setDefaults(); } @@ -68,30 +69,42 @@ LLAudioEngine::~LLAudioEngine() } -BOOL LLAudioEngine::init(const S32 num_channels, void* userdata) +void LLAudioEngine::setDefaults() { - mMuted = FALSE; - mMasterGain = 1.f; - mInternetStreamGain = 0.125f; - mUserData = userdata; - mLastStatus = 0; + mMaxWindGain = 1.f; - mNumChannels = num_channels; - + mListenerp = NULL; - mMaxWindGain = 1.0; + mMuted = FALSE; + mUserData = NULL; + + mLastStatus = 0; + mNumChannels = 0; mEnableWind = FALSE; S32 i; - for (i = 0; i < MAX_BUFFERS; i++) - { - mBuffers[i] = NULL; - } - for (i = 0; i < num_channels; i++) + for (i = 0; i < MAX_CHANNELS; i++) { mChannels[i] = NULL; } + for (i = 0; i < MAX_BUFFERS; i++) + { + mBuffers[i] = NULL; + } + + mMasterGain = 1.f; + mInternetStreamGain = 0.125f; + mNextWindUpdate = 0.f; +} + + +BOOL LLAudioEngine::init(const S32 num_channels, void* userdata) +{ + setDefaults(); + + mNumChannels = num_channels; + mUserData = userdata; allocateListener(); diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h index ac84b77..8994703 100644 --- a/linden/indra/llaudio/audioengine.h +++ b/linden/indra/llaudio/audioengine.h @@ -233,6 +233,9 @@ protected: F32 mNextWindUpdate; LLFrameTimer mWindUpdateTimer; + +private: + void setDefaults(); }; diff --git a/linden/indra/llaudio/audioengine_fmod.cpp b/linden/indra/llaudio/audioengine_fmod.cpp index 0fb5146..271074e 100644 --- a/linden/indra/llaudio/audioengine_fmod.cpp +++ b/linden/indra/llaudio/audioengine_fmod.cpp @@ -117,16 +117,16 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) // Reserve one extra channel for the http stream. if (!FSOUND_SetMinHardwareChannels(num_channels + 1)) { - llwarns<< "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; + LL_WARNS("AppInit") << "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } - llinfos << "LLAudioEngine_FMOD::init() initializing FMOD" << llendl; + LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() initializing FMOD" << LL_ENDL; F32 version = FSOUND_GetVersion(); if (version < FMOD_VERSION) { - llwarns << "Error : You are using the wrong FMOD version (" << version - << ")! You should be using FMOD " << FMOD_VERSION << llendl; + LL_WARNS("AppInit") << "Error : You are using the wrong FMOD version (" << version + << ")! You should be using FMOD " << FMOD_VERSION << LL_ENDL; //return FALSE; } @@ -140,8 +140,8 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) // between minimized and not-focused states. if (!FSOUND_SetHWND(userdata)) { - llwarns << "Error setting FMOD window: " - << FMOD_ErrorString(FSOUND_GetError()) << llendl; + LL_WARNS("AppInit") << "Error setting FMOD window: " + << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; return FALSE; } // Play audio when we don't have focus. @@ -159,7 +159,7 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) // otherwise valgrind will fall over on FMOD's MMX detection if (getenv("LL_VALGRIND")) /*Flawfinder: ignore*/ { - llinfos << "Pacifying valgrind in FMOD init." << llendl; + LL_INFOS("AppInit") << "Pacifying valgrind in FMOD init." << LL_ENDL; FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU); } @@ -175,58 +175,58 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) if (!audio_ok) if (NULL == getenv("LL_BAD_ESD")) /*Flawfinder: ignore*/ { - llinfos << "Trying ESD audio output..." << llendl; + LL_DEBUGS("AppInit") << "Trying ESD audio output..." << LL_ENDL; if(FSOUND_SetOutput(FSOUND_OUTPUT_ESD) && FSOUND_Init(44100, num_channels, fmod_flags)) { - llinfos << "ESD audio output initialized OKAY" - << llendl; + LL_DEBUGS("AppInit") << "ESD audio output initialized OKAY" + << LL_ENDL; audio_ok = TRUE; } else { - llwarns << "ESD audio output FAILED to initialize: " - << FMOD_ErrorString(FSOUND_GetError()) << llendl; + LL_WARNS("AppInit") << "ESD audio output FAILED to initialize: " + << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } } else { - llinfos << "ESD audio output SKIPPED" << llendl; + LL_DEBUGS("AppInit") << "ESD audio output SKIPPED" << LL_ENDL; } if (!audio_ok) if (NULL == getenv("LL_BAD_OSS")) /*Flawfinder: ignore*/ { - llinfos << "Trying OSS audio output..." << llendl; + LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL; if(FSOUND_SetOutput(FSOUND_OUTPUT_OSS) && FSOUND_Init(44100, num_channels, fmod_flags)) { - llinfos << "OSS audio output initialized OKAY" << llendl; + LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL; audio_ok = TRUE; } else { - llwarns << "OSS audio output FAILED to initialize: " - << FMOD_ErrorString(FSOUND_GetError()) << llendl; + LL_WARNS("AppInit") << "OSS audio output FAILED to initialize: " + << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } } else { - llinfos << "OSS audio output SKIPPED" << llendl; + LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL; } if (!audio_ok) if (NULL == getenv("LL_BAD_ALSA")) /*Flawfinder: ignore*/ { - llinfos << "Trying ALSA audio output..." << llendl; + LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL; if(FSOUND_SetOutput(FSOUND_OUTPUT_ALSA) && FSOUND_Init(44100, num_channels, fmod_flags)) { - llinfos << "ALSA audio output initialized OKAY" << llendl; + LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL; audio_ok = TRUE; } else { - llwarns << "ALSA audio output FAILED to initialize: " - << FMOD_ErrorString(FSOUND_GetError()) << llendl; + LL_WARNS("AppInit") << "ALSA audio output FAILED to initialize: " + << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } } else { - llinfos << "OSS audio output SKIPPED" << llendl; + LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL; } if (!audio_ok) { - llwarns << "Overall audio init failure." << llendl; + LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL; return FALSE; } @@ -239,11 +239,11 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) // ended up with, for QA purposes. switch (FSOUND_GetOutput()) { - case FSOUND_OUTPUT_NOSOUND: llinfos << "Audio output: NoSound" << llendl; break; - case FSOUND_OUTPUT_OSS: llinfos << "Audio output: OSS" << llendl; break; - case FSOUND_OUTPUT_ESD: llinfos << "Audio output: ESD" << llendl; break; - case FSOUND_OUTPUT_ALSA: llinfos << "Audio output: ALSA" << llendl; break; - default: llinfos << "Audio output: Unknown!" << llendl; break; + case FSOUND_OUTPUT_NOSOUND: LL_DEBUGS("AppInit") << "Audio output: NoSound" << LL_ENDL; break; + case FSOUND_OUTPUT_OSS: LL_DEBUGS("AppInit") << "Audio output: OSS" << LL_ENDL; break; + case FSOUND_OUTPUT_ESD: LL_DEBUGS("AppInit") << "Audio output: ESD" << LL_ENDL; break; + case FSOUND_OUTPUT_ALSA: LL_DEBUGS("AppInit") << "Audio output: ALSA" << LL_ENDL; break; + default: LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break; }; #else // LL_LINUX @@ -251,8 +251,8 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) // initialize the FMOD engine if (!FSOUND_Init(44100, num_channels, fmod_flags)) { - llwarns << "Error initializing FMOD: " - << FMOD_ErrorString(FSOUND_GetError()) << llendl; + LL_WARNS("AppInit") << "Error initializing FMOD: " + << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; return FALSE; } @@ -260,7 +260,7 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) initInternetStream(); - llinfos << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << llendl; + LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << LL_ENDL; mInited = TRUE; @@ -686,7 +686,7 @@ BOOL LLAudioBufferFMOD::loadWAV(const char *filename) // MikeS. - Loading the sound file manually and then handing it over to FMOD, // since FMOD uses posix IO internally, // which doesn't work with unicode file paths. - FILE* sound_file = LLFile::fopen(filename,"rb"); /* Flawfinder: ignore */ + LLFILE* sound_file = LLFile::fopen(filename,"rb"); /* Flawfinder: ignore */ if (sound_file) { fseek(sound_file,0,SEEK_END); diff --git a/linden/indra/llcharacter/llanimationstates.cpp b/linden/indra/llcharacter/llanimationstates.cpp index 81e15c7..2b13b0a 100644 --- a/linden/indra/llcharacter/llanimationstates.cpp +++ b/linden/indra/llcharacter/llanimationstates.cpp @@ -260,76 +260,77 @@ LLUUID LLAnimationLibrary::stringToAnimState( const char *name, BOOL allow_ids ) } // Animation states that the user can trigger as part of a gesture +// See struct LLAnimStateEntry in header for label location information const LLAnimStateEntry gUserAnimStates[] = { - LLAnimStateEntry("Afraid", "express_afraid", ANIM_AGENT_AFRAID), - LLAnimStateEntry("Angry", "express_anger", ANIM_AGENT_ANGRY), - LLAnimStateEntry("Away", "away", ANIM_AGENT_AWAY), - LLAnimStateEntry("Backflip", "backflip", ANIM_AGENT_BACKFLIP), - LLAnimStateEntry("Belly Laugh", "express_laugh", ANIM_AGENT_BELLY_LAUGH), - LLAnimStateEntry("BigSmile", "express_toothsmile", ANIM_AGENT_EXPRESS_TOOTHSMILE), - LLAnimStateEntry("Blow Kiss", "blowkiss", ANIM_AGENT_BLOW_KISS), - LLAnimStateEntry("Bored", "express_bored", ANIM_AGENT_BORED), - LLAnimStateEntry("Bow", "bow", ANIM_AGENT_BOW), - LLAnimStateEntry("Clap", "clap", ANIM_AGENT_CLAP), - LLAnimStateEntry("Court Bow", "courtbow", ANIM_AGENT_COURTBOW), - LLAnimStateEntry("Cry", "express_cry", ANIM_AGENT_CRY), - LLAnimStateEntry("Dance 1", "dance1", ANIM_AGENT_DANCE1), - LLAnimStateEntry("Dance 2", "dance2", ANIM_AGENT_DANCE2), - LLAnimStateEntry("Dance 3", "dance3", ANIM_AGENT_DANCE3), - LLAnimStateEntry("Dance 4", "dance4", ANIM_AGENT_DANCE4), - LLAnimStateEntry("Dance 5", "dance5", ANIM_AGENT_DANCE5), - LLAnimStateEntry("Dance 6", "dance6", ANIM_AGENT_DANCE6), - LLAnimStateEntry("Dance 7", "dance7", ANIM_AGENT_DANCE7), - LLAnimStateEntry("Dance 8", "dance8", ANIM_AGENT_DANCE8), - LLAnimStateEntry("Disdain", "express_disdain", ANIM_AGENT_EXPRESS_DISDAIN), - LLAnimStateEntry("Drink", "drink", ANIM_AGENT_DRINK), - LLAnimStateEntry("Embarrassed", "express_embarrased", ANIM_AGENT_EMBARRASSED), - LLAnimStateEntry("Finger Wag", "angry_fingerwag", ANIM_AGENT_FINGER_WAG), - LLAnimStateEntry("Fist Pump", "fist_pump", ANIM_AGENT_FIST_PUMP), - LLAnimStateEntry("Floating Yoga", "yoga_float", ANIM_AGENT_YOGA_FLOAT), - LLAnimStateEntry("Frown", "express_frown", ANIM_AGENT_EXPRESS_FROWN), - LLAnimStateEntry("Impatient", "impatient", ANIM_AGENT_IMPATIENT), - LLAnimStateEntry("Jump For Joy", "jumpforjoy", ANIM_AGENT_JUMP_FOR_JOY), - LLAnimStateEntry("Kiss My Butt", "kissmybutt", ANIM_AGENT_KISS_MY_BUTT), - LLAnimStateEntry("Kiss", "express_kiss", ANIM_AGENT_EXPRESS_KISS), - LLAnimStateEntry("Laugh", "laugh_short", ANIM_AGENT_LAUGH_SHORT), - LLAnimStateEntry("Muscle Beach", "musclebeach", ANIM_AGENT_MUSCLE_BEACH), - LLAnimStateEntry("No (Unhappy)", "no_unhappy", ANIM_AGENT_NO_UNHAPPY), - LLAnimStateEntry("No", "no_head", ANIM_AGENT_NO), - LLAnimStateEntry("Nya-nya-nya", "nyanya", ANIM_AGENT_NYAH_NYAH), - LLAnimStateEntry("One-Two Punch", "punch_onetwo", ANIM_AGENT_ONETWO_PUNCH), - LLAnimStateEntry("Open Mouth", "express_open_mouth", ANIM_AGENT_EXPRESS_OPEN_MOUTH), - LLAnimStateEntry("Peace", "peace", ANIM_AGENT_PEACE), - LLAnimStateEntry("Point at Other", "point_you", ANIM_AGENT_POINT_YOU), - LLAnimStateEntry("Point at Self", "point_me", ANIM_AGENT_POINT_ME), - LLAnimStateEntry("Punch Left", "punch_l", ANIM_AGENT_PUNCH_LEFT), - LLAnimStateEntry("Punch Right", "punch_r", ANIM_AGENT_PUNCH_RIGHT), - LLAnimStateEntry("RPS count", "rps_countdown", ANIM_AGENT_RPS_COUNTDOWN), - LLAnimStateEntry("RPS paper", "rps_paper", ANIM_AGENT_RPS_PAPER), - LLAnimStateEntry("RPS rock", "rps_rock", ANIM_AGENT_RPS_ROCK), - LLAnimStateEntry("RPS scissors", "rps_scissors", ANIM_AGENT_RPS_SCISSORS), - LLAnimStateEntry("Repulsed", "express_repulsed", ANIM_AGENT_EXPRESS_REPULSED), - LLAnimStateEntry("Roundhouse Kick", "kick_roundhouse_r", ANIM_AGENT_ROUNDHOUSE_KICK), - LLAnimStateEntry("Sad", "express_sad", ANIM_AGENT_SAD), - LLAnimStateEntry("Salute", "salute", ANIM_AGENT_SALUTE), - LLAnimStateEntry("Shout", "shout", ANIM_AGENT_SHOUT), - LLAnimStateEntry("Shrug", "express_shrug", ANIM_AGENT_SHRUG), - LLAnimStateEntry("Smile", "express_smile", ANIM_AGENT_EXPRESS_SMILE), - LLAnimStateEntry("Smoke Idle", "smoke_idle", ANIM_AGENT_SMOKE_IDLE), - LLAnimStateEntry("Smoke Inhale", "smoke_inhale", ANIM_AGENT_SMOKE_INHALE), - LLAnimStateEntry("Smoke Throw Down","smoke_throw_down", ANIM_AGENT_SMOKE_THROW_DOWN), - LLAnimStateEntry("Surprise", "express_surprise", ANIM_AGENT_SURPRISE), - LLAnimStateEntry("Sword Strike", "sword_strike_r", ANIM_AGENT_SWORD_STRIKE), - LLAnimStateEntry("Tantrum", "angry_tantrum", ANIM_AGENT_TANTRUM), - LLAnimStateEntry("TongueOut", "express_tongue_out", ANIM_AGENT_EXPRESS_TONGUE_OUT), - LLAnimStateEntry("Wave", "hello", ANIM_AGENT_HELLO), - LLAnimStateEntry("Whisper", "whisper", ANIM_AGENT_WHISPER), - LLAnimStateEntry("Whistle", "whistle", ANIM_AGENT_WHISTLE), - LLAnimStateEntry("Wink", "express_wink", ANIM_AGENT_WINK), - LLAnimStateEntry("Wink (Hollywood)","wink_hollywood", ANIM_AGENT_WINK_HOLLYWOOD), - LLAnimStateEntry("Worry", "express_worry", ANIM_AGENT_EXPRESS_WORRY), - LLAnimStateEntry("Yes (Happy)", "yes_happy", ANIM_AGENT_YES_HAPPY), - LLAnimStateEntry("Yes", "yes_head", ANIM_AGENT_YES), + LLAnimStateEntry("express_afraid", ANIM_AGENT_AFRAID), + LLAnimStateEntry("express_anger", ANIM_AGENT_ANGRY), + LLAnimStateEntry("away", ANIM_AGENT_AWAY), + LLAnimStateEntry("backflip", ANIM_AGENT_BACKFLIP), + LLAnimStateEntry("express_laugh", ANIM_AGENT_BELLY_LAUGH), + LLAnimStateEntry("express_toothsmile", ANIM_AGENT_EXPRESS_TOOTHSMILE), + LLAnimStateEntry("blowkiss", ANIM_AGENT_BLOW_KISS), + LLAnimStateEntry("express_bored", ANIM_AGENT_BORED), + LLAnimStateEntry("bow", ANIM_AGENT_BOW), + LLAnimStateEntry("clap", ANIM_AGENT_CLAP), + LLAnimStateEntry("courtbow", ANIM_AGENT_COURTBOW), + LLAnimStateEntry("express_cry", ANIM_AGENT_CRY), + LLAnimStateEntry("dance1", ANIM_AGENT_DANCE1), + LLAnimStateEntry("dance2", ANIM_AGENT_DANCE2), + LLAnimStateEntry("dance3", ANIM_AGENT_DANCE3), + LLAnimStateEntry("dance4", ANIM_AGENT_DANCE4), + LLAnimStateEntry("dance5", ANIM_AGENT_DANCE5), + LLAnimStateEntry("dance6", ANIM_AGENT_DANCE6), + LLAnimStateEntry("dance7", ANIM_AGENT_DANCE7), + LLAnimStateEntry("dance8", ANIM_AGENT_DANCE8), + LLAnimStateEntry("express_disdain", ANIM_AGENT_EXPRESS_DISDAIN), + LLAnimStateEntry("drink", ANIM_AGENT_DRINK), + LLAnimStateEntry("express_embarrased", ANIM_AGENT_EMBARRASSED), + LLAnimStateEntry("angry_fingerwag", ANIM_AGENT_FINGER_WAG), + LLAnimStateEntry("fist_pump", ANIM_AGENT_FIST_PUMP), + LLAnimStateEntry("yoga_float", ANIM_AGENT_YOGA_FLOAT), + LLAnimStateEntry("express_frown", ANIM_AGENT_EXPRESS_FROWN), + LLAnimStateEntry("impatient", ANIM_AGENT_IMPATIENT), + LLAnimStateEntry("jumpforjoy", ANIM_AGENT_JUMP_FOR_JOY), + LLAnimStateEntry("kissmybutt", ANIM_AGENT_KISS_MY_BUTT), + LLAnimStateEntry("express_kiss", ANIM_AGENT_EXPRESS_KISS), + LLAnimStateEntry("laugh_short", ANIM_AGENT_LAUGH_SHORT), + LLAnimStateEntry("musclebeach", ANIM_AGENT_MUSCLE_BEACH), + LLAnimStateEntry("no_unhappy", ANIM_AGENT_NO_UNHAPPY), + LLAnimStateEntry("no_head", ANIM_AGENT_NO), + LLAnimStateEntry("nyanya", ANIM_AGENT_NYAH_NYAH), + LLAnimStateEntry("punch_onetwo", ANIM_AGENT_ONETWO_PUNCH), + LLAnimStateEntry("express_open_mouth", ANIM_AGENT_EXPRESS_OPEN_MOUTH), + LLAnimStateEntry("peace", ANIM_AGENT_PEACE), + LLAnimStateEntry("point_you", ANIM_AGENT_POINT_YOU), + LLAnimStateEntry("point_me", ANIM_AGENT_POINT_ME), + LLAnimStateEntry("punch_l", ANIM_AGENT_PUNCH_LEFT), + LLAnimStateEntry("punch_r", ANIM_AGENT_PUNCH_RIGHT), + LLAnimStateEntry("rps_countdown", ANIM_AGENT_RPS_COUNTDOWN), + LLAnimStateEntry("rps_paper", ANIM_AGENT_RPS_PAPER), + LLAnimStateEntry("rps_rock", ANIM_AGENT_RPS_ROCK), + LLAnimStateEntry("rps_scissors", ANIM_AGENT_RPS_SCISSORS), + LLAnimStateEntry("express_repulsed", ANIM_AGENT_EXPRESS_REPULSED), + LLAnimStateEntry("kick_roundhouse_r", ANIM_AGENT_ROUNDHOUSE_KICK), + LLAnimStateEntry("express_sad", ANIM_AGENT_SAD), + LLAnimStateEntry("salute", ANIM_AGENT_SALUTE), + LLAnimStateEntry("shout", ANIM_AGENT_SHOUT), + LLAnimStateEntry("express_shrug", ANIM_AGENT_SHRUG), + LLAnimStateEntry("express_smile", ANIM_AGENT_EXPRESS_SMILE), + LLAnimStateEntry("smoke_idle", ANIM_AGENT_SMOKE_IDLE), + LLAnimStateEntry("smoke_inhale", ANIM_AGENT_SMOKE_INHALE), + LLAnimStateEntry("smoke_throw_down", ANIM_AGENT_SMOKE_THROW_DOWN), + LLAnimStateEntry("express_surprise", ANIM_AGENT_SURPRISE), + LLAnimStateEntry("sword_strike_r", ANIM_AGENT_SWORD_STRIKE), + LLAnimStateEntry("angry_tantrum", ANIM_AGENT_TANTRUM), + LLAnimStateEntry("express_tongue_out", ANIM_AGENT_EXPRESS_TONGUE_OUT), + LLAnimStateEntry("hello", ANIM_AGENT_HELLO), + LLAnimStateEntry("whisper", ANIM_AGENT_WHISPER), + LLAnimStateEntry("whistle", ANIM_AGENT_WHISTLE), + LLAnimStateEntry("express_wink", ANIM_AGENT_WINK), + LLAnimStateEntry("wink_hollywood", ANIM_AGENT_WINK_HOLLYWOOD), + LLAnimStateEntry("express_worry", ANIM_AGENT_EXPRESS_WORRY), + LLAnimStateEntry("yes_happy", ANIM_AGENT_YES_HAPPY), + LLAnimStateEntry("yes_head", ANIM_AGENT_YES), }; const S32 gUserAnimStatesCount = sizeof(gUserAnimStates) / sizeof(gUserAnimStates[0]); diff --git a/linden/indra/llcharacter/llanimationstates.h b/linden/indra/llcharacter/llanimationstates.h index b2ed27a..dd269de 100644 --- a/linden/indra/llcharacter/llanimationstates.h +++ b/linden/indra/llcharacter/llanimationstates.h @@ -227,13 +227,18 @@ public: struct LLAnimStateEntry { - LLAnimStateEntry(const char* label, const char* name, const LLUUID& id) - : mLabel(label), + LLAnimStateEntry(const char* name, const LLUUID& id) : mName(name), mID(id) - { } + { + // LABELS: + // Look to newview/LLAnimStateLabels.* for how to get the labels. + // The labels should no longer be stored in this structure. The server + // shouldn't care about the local friendly name of an animation, and + // this is common code. + } + - const char* mLabel; const char* mName; const LLUUID mID; }; diff --git a/linden/indra/llcharacter/llcharacter.cpp b/linden/indra/llcharacter/llcharacter.cpp index 0339cf0..ad648f8 100644 --- a/linden/indra/llcharacter/llcharacter.cpp +++ b/linden/indra/llcharacter/llcharacter.cpp @@ -377,6 +377,27 @@ void LLCharacter::clearVisualParamWeights() } //----------------------------------------------------------------------------- +// BOOL visualParamWeightsAreDefault() +//----------------------------------------------------------------------------- +BOOL LLCharacter::visualParamWeightsAreDefault() +{ + for (LLVisualParam *param = getFirstVisualParam(); + param; + param = getNextVisualParam()) + { + if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) + { + if (param->getWeight() != param->getDefaultWeight()) + return false; + } + } + + return true; +} + + + +//----------------------------------------------------------------------------- // getVisualParam() //----------------------------------------------------------------------------- LLVisualParam* LLCharacter::getVisualParam(const char *param_name) diff --git a/linden/indra/llcharacter/llcharacter.h b/linden/indra/llcharacter/llcharacter.h index 46faab1..7a841ef 100644 --- a/linden/indra/llcharacter/llcharacter.h +++ b/linden/indra/llcharacter/llcharacter.h @@ -207,6 +207,9 @@ public: // set all morph weights to 0 void clearVisualParamWeights(); + // see if all the weights are default + BOOL visualParamWeightsAreDefault(); + // visual parameter accessors LLVisualParam* getFirstVisualParam() { diff --git a/linden/indra/llcharacter/llmotion.cpp b/linden/indra/llcharacter/llmotion.cpp index 899796c..f7b8f1f 100644 --- a/linden/indra/llcharacter/llmotion.cpp +++ b/linden/indra/llcharacter/llmotion.cpp @@ -47,22 +47,20 @@ // LLMotion() // Class Constructor //----------------------------------------------------------------------------- -LLMotion::LLMotion( const LLUUID &id ) +LLMotion::LLMotion( const LLUUID &id ) : + mStopped(TRUE), + mActive(FALSE), + mID(id), + mActivationTimestamp(0.f), + mStopTimestamp(0.f), + mSendStopTimestamp(F32_MAX), + mResidualWeight(0.f), + mFadeWeight(1.f), + mDeactivateCallback(NULL), + mDeactivateCallbackUserData(NULL) { - mActivationTimestamp = 0.f; - mStopTimestamp = 0.f; - mSendStopTimestamp = F32_MAX; - mResidualWeight = 0.f; - mFadeWeight = 1.f; - mStopped = TRUE; - mActive = FALSE; - mDeactivateCallback = NULL; - - memset(&mJointSignature[0][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS); - memset(&mJointSignature[1][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS); - memset(&mJointSignature[2][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS); - - mID = id; + for (int i=0; i<3; ++i) + memset(&mJointSignature[i][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS); } //----------------------------------------------------------------------------- diff --git a/linden/indra/llcharacter/llmotion.h b/linden/indra/llcharacter/llmotion.h index 188937d..c7bb55d 100644 --- a/linden/indra/llcharacter/llmotion.h +++ b/linden/indra/llcharacter/llmotion.h @@ -49,13 +49,13 @@ class LLCharacter; class LLMotion { public: - enum LLMotionBlendType + typedef enum LLMotionBlendType { NORMAL_BLEND, ADDITIVE_BLEND }; - enum LLMotionInitStatus + typedef enum LLMotionInitStatus { STATUS_FAILURE, STATUS_SUCCESS, diff --git a/linden/indra/llcommon/files.lst b/linden/indra/llcommon/files.lst index 6f03155..fd6a07c 100644 --- a/linden/indra/llcommon/files.lst +++ b/linden/indra/llcommon/files.lst @@ -12,12 +12,16 @@ llcommon/llerrorthread.cpp llcommon/llevent.cpp llcommon/llfasttimer.cpp llcommon/llfile.cpp +llcommon/llfindlocale.cpp llcommon/llfixedbuffer.cpp llcommon/llformat.cpp llcommon/llframetimer.cpp +llcommon/llheartbeat.cpp +llcommon/llindraconfigfile.cpp llcommon/lllog.cpp llcommon/llliveappconfig.cpp llcommon/lllivefile.cpp +llcommon/lllog.cpp llcommon/llmemory.cpp llcommon/llmemorystream.cpp llcommon/llmetrics.cpp diff --git a/linden/indra/llcommon/llapp.cpp b/linden/indra/llcommon/llapp.cpp index bd2e377..ebace4e 100644 --- a/linden/indra/llcommon/llapp.cpp +++ b/linden/indra/llcommon/llapp.cpp @@ -49,11 +49,24 @@ LONG WINAPI default_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop); BOOL ConsoleCtrlHandler(DWORD fdwCtrlType); #else -#include // for fork() +# include +# include // for fork() void setup_signals(); void default_unix_signal_handler(int signum, siginfo_t *info, void *); -const S32 LL_SMACKDOWN_SIGNAL = SIGUSR1; -#endif +# if LL_DARWIN +/* OSX doesn't support SIGRT* */ +S32 LL_SMACKDOWN_SIGNAL = SIGUSR1; +S32 LL_HEARTBEAT_SIGNAL = SIGUSR2; +# else +/* We want reliable delivery of our signals - SIGRT* is it. */ +/* Old LinuxThreads versions eat SIGRTMIN+0 to SIGRTMIN+2, avoid those. */ +/* Note that SIGRTMIN/SIGRTMAX may expand to a glibc function call with a + nonconstant result so these are not consts and cannot be used in constant- + expressions. SIGRTMAX may return -1 on rare broken setups. */ +S32 LL_SMACKDOWN_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-1) : SIGUSR1; +S32 LL_HEARTBEAT_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-0) : SIGUSR2; +# endif // LL_DARWIN +#endif // LL_WINDOWS // the static application instance LLApp* LLApp::sApplication = NULL; @@ -523,6 +536,9 @@ void setup_signals() sigaction(SIGSEGV, &act, NULL); sigaction(SIGSYS, &act, NULL); + sigaction(LL_HEARTBEAT_SIGNAL, &act, NULL); + sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL); + // Asynchronous signals that are normally ignored sigaction(SIGCHLD, &act, NULL); sigaction(SIGUSR2, &act, NULL); @@ -533,7 +549,6 @@ void setup_signals() sigaction(SIGINT, &act, NULL); // Asynchronous signals that result in core - sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL); sigaction(SIGQUIT, &act, NULL); } @@ -555,6 +570,9 @@ void clear_signals() sigaction(SIGSEGV, &act, NULL); sigaction(SIGSYS, &act, NULL); + sigaction(LL_HEARTBEAT_SIGNAL, &act, NULL); + sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL); + // Asynchronous signals that are normally ignored sigaction(SIGCHLD, &act, NULL); @@ -565,7 +583,6 @@ void clear_signals() // Asynchronous signals that result in core sigaction(SIGUSR2, &act, NULL); - sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL); sigaction(SIGQUIT, &act, NULL); } @@ -586,16 +603,7 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *) switch (signum) { - case SIGALRM: - case SIGPIPE: - case SIGUSR2: - // We don't care about these signals, ignore them - if (LLApp::sLogInSignal) - { - llinfos << "Signal handler - Ignoring this signal" << llendl; - } - return; - case SIGCHLD: + case SIGCHLD: if (LLApp::sLogInSignal) { llinfos << "Signal handler - Got SIGCHLD from " << info->si_pid << llendl; @@ -624,59 +632,6 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *) clear_signals(); raise(signum); return; - case LL_SMACKDOWN_SIGNAL: // Smackdown treated just like any other app termination, for now - if (LLApp::sLogInSignal) - { - llwarns << "Signal handler - Handling smackdown signal!" << llendl; - } - else - { - // Don't log anything, even errors - this is because this signal could happen anywhere. - LLError::setDefaultLevel(LLError::LEVEL_NONE); - } - - // Change the signal that we reraise to SIGABRT, so we generate a core dump. - signum = SIGABRT; - case SIGBUS: - case SIGSEGV: - case SIGQUIT: - if (LLApp::sLogInSignal) - { - llwarns << "Signal handler - Handling fatal signal!" << llendl; - } - if (LLApp::isError()) - { - // Received second fatal signal while handling first, just die right now - // Set the signal handlers back to default before handling the signal - this makes the next signal wipe out the app. - clear_signals(); - - if (LLApp::sLogInSignal) - { - llwarns << "Signal handler - Got another fatal signal while in the error handler, die now!" << llendl; - } - raise(signum); - return; - } - - if (LLApp::sLogInSignal) - { - llwarns << "Signal handler - Flagging error status and waiting for shutdown" << llendl; - } - // Flag status to ERROR, so thread_error does its work. - LLApp::setError(); - // Block in the signal handler until somebody says that we're done. - while (LLApp::sErrorThreadRunning && !LLApp::isStopped()) - { - ms_sleep(10); - } - - if (LLApp::sLogInSignal) - { - llwarns << "Signal handler - App is stopped, reraising signal" << llendl; - } - clear_signals(); - raise(signum); - return; case SIGINT: case SIGHUP: case SIGTERM: @@ -697,10 +652,76 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *) } LLApp::setQuitting(); return; + case SIGALRM: + case SIGPIPE: + case SIGUSR2: default: - if (LLApp::sLogInSignal) - { - llwarns << "Signal handler - Unhandled signal, ignoring!" << llendl; + if (signum == LL_SMACKDOWN_SIGNAL || + signum == SIGBUS || + signum == SIGILL || + signum == SIGFPE || + signum == SIGSEGV || + signum == SIGQUIT) + { + if (signum == LL_SMACKDOWN_SIGNAL) + { + // Smackdown treated just like any other app termination, for now + if (LLApp::sLogInSignal) + { + llwarns << "Signal handler - Handling smackdown signal!" << llendl; + } + else + { + // Don't log anything, even errors - this is because this signal could happen anywhere. + LLError::setDefaultLevel(LLError::LEVEL_NONE); + } + + // Change the signal that we reraise to SIGABRT, so we generate a core dump. + signum = SIGABRT; + } + + if (LLApp::sLogInSignal) + { + llwarns << "Signal handler - Handling fatal signal!" << llendl; + } + if (LLApp::isError()) + { + // Received second fatal signal while handling first, just die right now + // Set the signal handlers back to default before handling the signal - this makes the next signal wipe out the app. + clear_signals(); + + if (LLApp::sLogInSignal) + { + llwarns << "Signal handler - Got another fatal signal while in the error handler, die now!" << llendl; + } + raise(signum); + return; + } + + if (LLApp::sLogInSignal) + { + llwarns << "Signal handler - Flagging error status and waiting for shutdown" << llendl; + } + // Flag status to ERROR, so thread_error does its work. + LLApp::setError(); + // Block in the signal handler until somebody says that we're done. + while (LLApp::sErrorThreadRunning && !LLApp::isStopped()) + { + ms_sleep(10); + } + + if (LLApp::sLogInSignal) + { + llwarns << "Signal handler - App is stopped, reraising signal" << llendl; + } + clear_signals(); + raise(signum); + return; + } else { + if (LLApp::sLogInSignal) + { + llinfos << "Signal handler - Unhandled signal " << signum << ", ignoring!" << llendl; + } } } } diff --git a/linden/indra/llcommon/llapp.h b/linden/indra/llcommon/llapp.h index 50a70ae..9d8ff88 100644 --- a/linden/indra/llcommon/llapp.h +++ b/linden/indra/llcommon/llapp.h @@ -46,7 +46,8 @@ typedef void (*LLAppErrorHandler)(); typedef void (*LLAppChildCallback)(int pid, bool exited, int status); #if !LL_WINDOWS -extern const S32 LL_SMACKDOWN_SIGNAL; +extern S32 LL_SMACKDOWN_SIGNAL; +extern S32 LL_HEARTBEAT_SIGNAL; // Clear all of the signal handlers (which we want to do for the child process when we fork void clear_signals(); diff --git a/linden/indra/llcommon/llapr.cpp b/linden/indra/llcommon/llapr.cpp index 08c40a4..78bf876 100644 --- a/linden/indra/llcommon/llapr.cpp +++ b/linden/indra/llcommon/llapr.cpp @@ -54,7 +54,7 @@ void ll_init_apr() void ll_cleanup_apr() { - llinfos << "Cleaning up APR" << llendl; + LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL; if (gLogMutexp) { @@ -118,7 +118,7 @@ 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; + LL_WARNS_ONCE("APR") << "APR: " << apr_strerror(status, buf, MAX_STRING) << LL_ENDL; #endif return true; } @@ -294,7 +294,7 @@ bool ll_apr_file_remove(const LLString& filename, apr_pool_t* pool) s = apr_file_remove(filename.c_str(), pool); if (s != APR_SUCCESS) { - lldebugs << "ll_apr_file_remove failed on file: " << filename << llendl; + LL_DEBUGS("APR") << "ll_apr_file_remove failed on file: " << filename << LL_ENDL; ll_apr_warn_status(s); return false; } @@ -308,7 +308,7 @@ bool ll_apr_file_rename(const LLString& filename, const LLString& newname, apr_p s = apr_file_rename(filename.c_str(), newname.c_str(), pool); if (s != APR_SUCCESS) { - lldebugs << "ll_apr_file_rename failed on file: " << filename << llendl; + LL_DEBUGS("APR") << "ll_apr_file_rename failed on file: " << filename << LL_ENDL; ll_apr_warn_status(s); return false; } @@ -365,7 +365,7 @@ bool ll_apr_dir_make(const LLString& dirname, apr_pool_t* pool) s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool); if (s != APR_SUCCESS) { - lldebugs << "ll_apr_dir_make failed on file: " << dirname << llendl; + LL_DEBUGS("APR") << "ll_apr_dir_make failed on file: " << dirname << LL_ENDL; ll_apr_warn_status(s); return false; } @@ -379,7 +379,7 @@ bool ll_apr_dir_remove(const LLString& dirname, apr_pool_t* pool) s = apr_file_remove(dirname.c_str(), pool); if (s != APR_SUCCESS) { - lldebugs << "ll_apr_dir_remove failed on file: " << dirname << llendl; + LL_DEBUGS("APR") << "ll_apr_dir_remove failed on file: " << dirname << LL_ENDL; ll_apr_warn_status(s); return false; } diff --git a/linden/indra/llcommon/llares.cpp b/linden/indra/llcommon/llares.cpp index 4adf0c3..4d054e4 100644 --- a/linden/indra/llcommon/llares.cpp +++ b/linden/indra/llcommon/llares.cpp @@ -154,7 +154,7 @@ void LLAres::getSrvRecords(const std::string &name, SrvResponder *resp) void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp) { - llinfos << "Rewriting " << uri << llendl; + LL_DEBUGS2("AppInit","Rewrite") << "Rewriting " << uri << LL_ENDL; resp->mUri = LLURI(uri); search("_" + resp->mUri.scheme() + "._tcp." + resp->mUri.hostName(), @@ -163,7 +163,8 @@ void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp) LLQueryResponder::LLQueryResponder() : LLAres::QueryResponder(), - mResult(ARES_ENODATA) + mResult(ARES_ENODATA), + mType(RES_INVALID) { } diff --git a/linden/indra/llcommon/llcommon.vcproj b/linden/indra/llcommon/llcommon.vcproj index ab4e67a..f54ea13 100644 --- a/linden/indra/llcommon/llcommon.vcproj +++ b/linden/indra/llcommon/llcommon.vcproj @@ -199,6 +199,9 @@ RelativePath=".\llfile.cpp"> + + + + + + + + + + + + @@ -301,6 +305,14 @@ > + + + + @@ -563,6 +575,10 @@ > + + @@ -587,6 +603,10 @@ > + + @@ -759,6 +779,22 @@ > + + + + + + + + diff --git a/linden/indra/llcommon/llcommon_vc9.vcproj b/linden/indra/llcommon/llcommon_vc9.vcproj index 0bb2d11..1ae534d 100644 --- a/linden/indra/llcommon/llcommon_vc9.vcproj +++ b/linden/indra/llcommon/llcommon_vc9.vcproj @@ -290,6 +290,10 @@ > + + @@ -302,6 +306,14 @@ > + + + + @@ -564,6 +576,10 @@ > + + @@ -588,6 +604,10 @@ > + + diff --git a/linden/indra/llcommon/llerror.cpp b/linden/indra/llcommon/llerror.cpp index 0e7db89..b74b288 100644 --- a/linden/indra/llcommon/llerror.cpp +++ b/linden/indra/llcommon/llerror.cpp @@ -408,6 +408,8 @@ namespace LLError LevelMap functionLevelMap; LevelMap classLevelMap; LevelMap fileLevelMap; + LevelMap tagLevelMap; + std::map uniqueLogMessages; LLError::FatalFunction crashFunction; LLError::TimeFunction timeFunction; @@ -494,11 +496,17 @@ namespace LLError namespace LLError { CallSite::CallSite(ELevel level, - const char* file, int line, - const std::type_info& class_info, const char* function) + const char* file, + int line, + const std::type_info& class_info, + const char* function, + const char* broadTag, + const char* narrowTag, + bool printOnce) : mLevel(level), mFile(file), mLine(line), mClassInfo(class_info), mFunction(function), - mCached(false), mShouldLog(false) + mCached(false), mShouldLog(false), + mBroadTag(broadTag), mNarrowTag(narrowTag), mPrintOnce(printOnce) { } @@ -552,6 +560,15 @@ namespace #endif LogControlFile& e = LogControlFile::fromDirectory(dir); + + // NOTE: We want to explicitly load the file before we add it to the event timer + // that checks for changes to the file. Else, we're not actually loading the file yet, + // and most of the initialization happens without any attention being paid to the + // log control file. Not to mention that when it finally gets checked later, + // all log statements that have been evaluated already become dirty and need to be + // evaluated for printing again. So, make sure to call checkAndReload() + // before addToEventTimer(). + e.checkAndReload(); e.addToEventTimer(); } } @@ -625,6 +642,14 @@ namespace LLError g.invalidateCallSites(); s.fileLevelMap[file_name] = level; } + + void setTagLevel(const std::string& tag_name, ELevel level) + { + Globals& g = Globals::get(); + Settings& s = Settings::get(); + g.invalidateCallSites(); + s.tagLevelMap[tag_name] = level; + } } namespace { @@ -674,6 +699,8 @@ namespace LLError s.functionLevelMap.clear(); s.classLevelMap.clear(); s.fileLevelMap.clear(); + s.tagLevelMap.clear(); + s.uniqueLogMessages.clear(); setPrintLocation(config["print-location"]); setDefaultLevel(decodeLevel(config["default-level"])); @@ -689,6 +716,7 @@ namespace LLError setLevels(s.functionLevelMap, entry["functions"], level); setLevels(s.classLevelMap, entry["classes"], level); setLevels(s.fileLevelMap, entry["files"], level); + setLevels(s.tagLevelMap, entry["tags"], level); } } } @@ -850,7 +878,7 @@ namespace { return false; } - level = i->second; + level = i->second; return true; } @@ -929,9 +957,15 @@ namespace LLError ELevel compareLevel = s.defaultLevel; - checkLevelMap(s.functionLevelMap, function_name, compareLevel) + // The most specific match found will be used as the log level, + // since the computation short circuits. + // So, in increasing order of importance: + // Default < Broad Tag < File < Class < Function < Narrow Tag + ((site.mNarrowTag != NULL) ? checkLevelMap(s.tagLevelMap, site.mNarrowTag, compareLevel) : false) + || checkLevelMap(s.functionLevelMap, function_name, compareLevel) || checkLevelMap(s.classLevelMap, class_name, compareLevel) - || checkLevelMap(s.fileLevelMap, abbreviateFile(site.mFile), compareLevel); + || checkLevelMap(s.fileLevelMap, abbreviateFile(site.mFile), compareLevel) + || ((site.mBroadTag != NULL) ? checkLevelMap(s.tagLevelMap, site.mBroadTag, compareLevel) : false); site.mCached = true; g.addCallSite(site); @@ -1018,6 +1052,29 @@ namespace LLError #endif prefix << site.mFunction << ": "; } + + if (site.mPrintOnce) + { + std::map::iterator messageIter = s.uniqueLogMessages.find(message); + if (messageIter != s.uniqueLogMessages.end()) + { + messageIter->second++; + unsigned int num_messages = messageIter->second; + if (num_messages == 10 || num_messages == 50 || (num_messages % 100) == 0) + { + prefix << "ONCE (" << num_messages << "th time seen): "; + } + else + { + return; + } + } + else + { + prefix << "ONCE: "; + s.uniqueLogMessages[message] = 1; + } + } prefix << message; message = prefix.str(); diff --git a/linden/indra/llcommon/llerror.h b/linden/indra/llcommon/llerror.h index e1ace39..0a066bf 100644 --- a/linden/indra/llcommon/llerror.h +++ b/linden/indra/llcommon/llerror.h @@ -45,23 +45,23 @@ Code can log messages with constuctions like this: - llinfos << "request to fizzbip agent " << agent_id - << " denied due to timeout" << llendl; + LL_INFOS("StringTag") << "request to fizzbip agent " << agent_id + << " denied due to timeout" << LL_ENDL; Messages can be logged to one of four increasing levels of concern, using one of four "streams": - lldebugs - debug messages that are normally supressed - llinfos - informational messages that are normall shown - llwarns - warning messages that singal a problem - llerrs - error messages that are major, unrecoverable failures + LL_DEBUGS("StringTag") - debug messages that are normally supressed + LL_INFOS("StringTag") - informational messages that are normall shown + LL_WARNS("StringTag") - warning messages that singal a problem + LL_ERRS("StringTag") - error messages that are major, unrecoverable failures - The later (llerrs) automatically crashes the process after the message + The later (LL_ERRS("StringTag")) automatically crashes the process after the message is logged. Note that these "streams" are actually #define magic. Rules for use: * they cannot be used as normal streams, only to start a message - * messages written to them MUST be terminated with llendl + * messages written to them MUST be terminated with LL_ENDL * between the opening and closing, the << operator is indeed writing onto a std::ostream, so all conversions and stream formating are available @@ -85,7 +85,7 @@ { if (i > 100) { - llwanrs << "called with a big value for i: " << i << llendl; + LL_WARNS("FooBarTag") << "called with a big value for i: " << i << LL_ENDL; } ... } @@ -100,7 +100,7 @@ Lastly, logging is now very efficient in both compiled code and execution when skipped. There is no need to wrap messages, even debugging ones, in - #ifdef _DEBUG constructs. lldebugs messages are compiled into all builds, + #ifdef _DEBUG constructs. LL_DEBUGS("StringTag") messages are compiled into all builds, even release. Which means you can use them to help debug even when deployed to a real grid. */ @@ -144,7 +144,7 @@ namespace LLError // intended for public use. public: CallSite(ELevel, const char* file, int line, - const std::type_info& class_info, const char* function); + const std::type_info& class_info, const char* function, const char* broadTag, const char* narrowTag, bool printOnce); bool shouldLog() { return mCached ? mShouldLog : Log::shouldLog(*this); } @@ -156,9 +156,12 @@ namespace LLError // these describe the call site and never change const ELevel mLevel; const char* const mFile; - const int mLine; - const std::type_info& mClassInfo; + const int mLine; + const std::type_info& mClassInfo; const char* const mFunction; + const char* const mBroadTag; + const char* const mNarrowTag; + const bool mPrintOnce; // these implement a cache of the call to shouldLog() bool mCached; @@ -200,39 +203,66 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; See top of file for common usage. */ -#define lllog(level) \ +#define lllog(level, broadTag, narrowTag, once) \ { \ static LLError::CallSite _site( \ - level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__);\ + level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__, broadTag, narrowTag, once);\ if (_site.shouldLog()) \ { \ std::ostringstream* _out = LLError::Log::out(); \ (*_out) - + +// DEPRECATED: Don't call directly, use LL_ENDL instead, which actually looks like a macro #define llendl \ LLError::End(); \ LLError::Log::flush(_out, _site); \ } \ } -#define llinfos lllog(LLError::LEVEL_INFO) -#define lldebugs lllog(LLError::LEVEL_DEBUG) -#define llwarns lllog(LLError::LEVEL_WARN) -#define llerrs lllog(LLError::LEVEL_ERROR) - +// DEPRECATED: Use the new macros that allow tags and *look* like macros. +#define lldebugs lllog(LLError::LEVEL_DEBUG, NULL, NULL, false) +#define llinfos lllog(LLError::LEVEL_INFO, NULL, NULL, false) +#define llwarns lllog(LLError::LEVEL_WARN, NULL, NULL, false) +#define llerrs lllog(LLError::LEVEL_ERROR, NULL, NULL, false) #define llcont (*_out) + +// NEW Macros for debugging, allow the passing of a string tag + +// One Tag +#define LL_DEBUGS(broadTag) lllog(LLError::LEVEL_DEBUG, broadTag, NULL, false) +#define LL_INFOS(broadTag) lllog(LLError::LEVEL_INFO, broadTag, NULL, false) +#define LL_WARNS(broadTag) lllog(LLError::LEVEL_WARN, broadTag, NULL, false) +#define LL_ERRS(broadTag) lllog(LLError::LEVEL_ERROR, broadTag, NULL, false) +// Two Tags +#define LL_DEBUGS2(broadTag, narrowTag) lllog(LLError::LEVEL_DEBUG, broadTag, narrowTag, false) +#define LL_INFOS2(broadTag, narrowTag) lllog(LLError::LEVEL_INFO, broadTag, narrowTag, false) +#define LL_WARNS2(broadTag, narrowTag) lllog(LLError::LEVEL_WARN, broadTag, narrowTag, false) +#define LL_ERRS2(broadTag, narrowTag) lllog(LLError::LEVEL_ERROR, broadTag, narrowTag, false) + +// Only print the log message once (good for warnings or infos that would otherwise +// spam the log file over and over, such as tighter loops). +#define LL_DEBUGS_ONCE(broadTag) lllog(LLError::LEVEL_DEBUG, broadTag, NULL, true) +#define LL_INFOS_ONCE(broadTag) lllog(LLError::LEVEL_INFO, broadTag, NULL, true) +#define LL_WARNS_ONCE(broadTag) lllog(LLError::LEVEL_WARN, broadTag, NULL, true) +#define LL_DEBUGS2_ONCE(broadTag, narrowTag) lllog(LLError::LEVEL_DEBUG, broadTag, narrowTag, true) +#define LL_INFOS2_ONCE(broadTag, narrowTag) lllog(LLError::LEVEL_INFO, broadTag, narrowTag, true) +#define LL_WARNS2_ONCE(broadTag, narrowTag) lllog(LLError::LEVEL_WARN, broadTag, narrowTag, true) + +#define LL_ENDL llendl +#define LL_CONT (*_out) + /* Use this construct if you need to do computation in the middle of a message: - llinfos << "the agent " << agend_id; + LL_INFOS("AgentGesture") << "the agent " << agend_id; switch (f) { - case FOP_SHRUGS: llcont << "shrugs"; break; - case FOP_TAPS: llcont << "points at " << who; break; - case FOP_SAYS: llcont << "says " << message; break; + case FOP_SHRUGS: LL_CONT << "shrugs"; break; + case FOP_TAPS: LL_CONT << "points at " << who; break; + case FOP_SAYS: LL_CONT << "says " << message; break; } - llcont << " for " << t << " seconds" << llendl; + LL_CONT << " for " << t << " seconds" << LL_ENDL; Such computation is done iff the message will be logged. */ diff --git a/linden/indra/llcommon/llfile.cpp b/linden/indra/llcommon/llfile.cpp index 32e9622..fc0d481 100644 --- a/linden/indra/llcommon/llfile.cpp +++ b/linden/indra/llcommon/llfile.cpp @@ -160,7 +160,7 @@ LLFILE * LLFile::_Fiopen(const char *filename, std::ios::openmode mode,int) // p | ios_base::binary, 0}; - FILE *fp = 0; + LLFILE *fp = 0; int n; ios_base::openmode atendflag = mode & ios_base::ate; ios_base::openmode norepflag = mode & ios_base::_Noreplace; @@ -207,7 +207,7 @@ void llifstream::open(const char* _Filename, /* Flawfinder: ignore */ int _Prot) { // open a C stream with specified mode - FILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::in, _Prot); + LLFILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::in, _Prot); if(filep == NULL) { _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/ @@ -258,7 +258,7 @@ void llofstream::open(const char* _Filename, /* Flawfinder: ignore */ int _Prot) { // open a C stream with specified mode - FILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::out, _Prot); + LLFILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::out, _Prot); if(filep == NULL) { _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/ diff --git a/linden/indra/llcommon/llfile.h b/linden/indra/llcommon/llfile.h index d449ec9..189edbf 100644 --- a/linden/indra/llcommon/llfile.h +++ b/linden/indra/llcommon/llfile.h @@ -42,6 +42,8 @@ typedef FILE LLFILE; +#include + #ifdef LL_WINDOWS #define USE_LLFILESTREAMS 1 #else diff --git a/linden/indra/llcommon/llfindlocale.cpp b/linden/indra/llcommon/llfindlocale.cpp new file mode 100644 index 0000000..47da974 --- /dev/null +++ b/linden/indra/llcommon/llfindlocale.cpp @@ -0,0 +1,525 @@ +/** + * @file llfindlocale.cpp + * @brief Detect system language setting + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + * + * Copyright (c) 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$ + */ + +/* Yes, this was originally C code. */ + +#include "linden_common.h" + +#include +#include +#include + +#ifdef WIN32 +#include +#include +#endif + +#include "llfindlocale.h" + +static int +is_lcchar(const int c) { + return isalnum(c); +} + +static void +lang_country_variant_from_envstring(const char *str, + char **lang, + char **country, + char **variant) { + int end = 0; + int start; + + /* get lang, if any */ + start = end; + while (is_lcchar(str[end])) { + ++end; + } + if (start != end) { + int i; + int len = end - start; + char *s = (char*)malloc(len + 1); + for (i=0; ilang = lang; + l->country = country; + l->variant = variant; + return 1; + } + } + free(lang); free(country); free(variant); + return 0; +} + + +static int +accumulate_env(const char *name, FL_Locale *l) { + char *env; + char *lang = NULL; + char *country = NULL; + char *variant = NULL; + env = getenv(name); + if (env) { + return accumulate_locstring(env, l); + } + free(lang); free(country); free(variant); + return 0; +} + + +static void +canonise_fl(FL_Locale *l) { + /* this function fixes some common locale-specifying mistakes */ + /* en_UK -> en_GB */ + if (l->lang && 0 == strcmp(l->lang, "en")) { + if (l->country && 0 == strcmp(l->country, "UK")) { + free((void*)l->country); + l->country = strdup("GB"); + } + } + /* ja_JA -> ja_JP */ + if (l->lang && 0 == strcmp(l->lang, "ja")) { + if (l->country && 0 == strcmp(l->country, "JA")) { + free((void*)l->country); + l->country = strdup("JP"); + } + } +} + + +#ifdef WIN32 +#include +#define ML(pn,sn) MAKELANGID(LANG_##pn, SUBLANG_##pn##_##sn) +#define MLN(pn) MAKELANGID(LANG_##pn, SUBLANG_DEFAULT) +#define RML(pn,sn) MAKELANGID(LANG_##pn, SUBLANG_##sn) +typedef struct { + LANGID id; + char* code; +} IDToCode; +static const IDToCode both_to_code[] = { + {ML(ENGLISH,US), "en_US.ISO_8859-1"}, + {ML(ENGLISH,CAN), "en_CA"}, /* english / canadian */ + {ML(ENGLISH,UK), "en_GB"}, + {ML(ENGLISH,EIRE), "en_IE"}, + {ML(ENGLISH,AUS), "en_AU"}, + {MLN(GERMAN), "de_DE"}, + {MLN(SPANISH), "es_ES"}, + {ML(SPANISH,MEXICAN), "es_MX"}, + {MLN(FRENCH), "fr_FR"}, + {ML(FRENCH,CANADIAN), "fr_CA"}, + {ML(FRENCH,BELGIAN), "fr_BE"}, /* ? */ + {ML(DUTCH,BELGIAN), "nl_BE"}, /* ? */ + {ML(PORTUGUESE,BRAZILIAN), "pt_BR"}, + {MLN(PORTUGUESE), "pt_PT"}, + {MLN(SWEDISH), "sv_SE"}, + {ML(CHINESE,HONGKONG), "zh_HK"}, + /* these are machine-generated and not yet verified */ + {RML(AFRIKAANS,DEFAULT), "af_ZA"}, + {RML(ALBANIAN,DEFAULT), "sq_AL"}, + {RML(ARABIC,ARABIC_ALGERIA), "ar_DZ"}, + {RML(ARABIC,ARABIC_BAHRAIN), "ar_BH"}, + {RML(ARABIC,ARABIC_EGYPT), "ar_EG"}, + {RML(ARABIC,ARABIC_IRAQ), "ar_IQ"}, + {RML(ARABIC,ARABIC_JORDAN), "ar_JO"}, + {RML(ARABIC,ARABIC_KUWAIT), "ar_KW"}, + {RML(ARABIC,ARABIC_LEBANON), "ar_LB"}, + {RML(ARABIC,ARABIC_LIBYA), "ar_LY"}, + {RML(ARABIC,ARABIC_MOROCCO), "ar_MA"}, + {RML(ARABIC,ARABIC_OMAN), "ar_OM"}, + {RML(ARABIC,ARABIC_QATAR), "ar_QA"}, + {RML(ARABIC,ARABIC_SAUDI_ARABIA), "ar_SA"}, + {RML(ARABIC,ARABIC_SYRIA), "ar_SY"}, + {RML(ARABIC,ARABIC_TUNISIA), "ar_TN"}, + {RML(ARABIC,ARABIC_UAE), "ar_AE"}, + {RML(ARABIC,ARABIC_YEMEN), "ar_YE"}, + {RML(ARMENIAN,DEFAULT), "hy_AM"}, + {RML(AZERI,AZERI_CYRILLIC), "az_AZ"}, + {RML(AZERI,AZERI_LATIN), "az_AZ"}, + {RML(BASQUE,DEFAULT), "eu_ES"}, + {RML(BELARUSIAN,DEFAULT), "be_BY"}, +/*{RML(BRETON,DEFAULT), "br_FR"},*/ + {RML(BULGARIAN,DEFAULT), "bg_BG"}, + {RML(CATALAN,DEFAULT), "ca_ES"}, + {RML(CHINESE,CHINESE_HONGKONG), "zh_HK"}, + {RML(CHINESE,CHINESE_MACAU), "zh_MO"}, + {RML(CHINESE,CHINESE_SIMPLIFIED), "zh_CN"}, + {RML(CHINESE,CHINESE_SINGAPORE), "zh_SG"}, + {RML(CHINESE,CHINESE_TRADITIONAL), "zh_TW"}, +/*{RML(CORNISH,DEFAULT), "kw_GB"},*/ + {RML(CZECH,DEFAULT), "cs_CZ"}, + {RML(DANISH,DEFAULT), "da_DK"}, + {RML(DUTCH,DUTCH), "nl_NL"}, + {RML(DUTCH,DUTCH_BELGIAN), "nl_BE"}, +/*{RML(DUTCH,DUTCH_SURINAM), "nl_SR"},*/ + {RML(ENGLISH,ENGLISH_AUS), "en_AU"}, + {RML(ENGLISH,ENGLISH_BELIZE), "en_BZ"}, + {RML(ENGLISH,ENGLISH_CAN), "en_CA"}, + {RML(ENGLISH,ENGLISH_CARIBBEAN), "en_CB"}, + {RML(ENGLISH,ENGLISH_EIRE), "en_IE"}, + {RML(ENGLISH,ENGLISH_JAMAICA), "en_JM"}, + {RML(ENGLISH,ENGLISH_NZ), "en_NZ"}, + {RML(ENGLISH,ENGLISH_PHILIPPINES), "en_PH"}, + {RML(ENGLISH,ENGLISH_SOUTH_AFRICA), "en_ZA"}, + {RML(ENGLISH,ENGLISH_TRINIDAD), "en_TT"}, + {RML(ENGLISH,ENGLISH_UK), "en_GB"}, + {RML(ENGLISH,ENGLISH_US), "en_US"}, + {RML(ENGLISH,ENGLISH_ZIMBABWE), "en_ZW"}, +/*{RML(ESPERANTO,DEFAULT), "eo_"},*/ + {RML(ESTONIAN,DEFAULT), "et_EE"}, + {RML(FAEROESE,DEFAULT), "fo_FO"}, + {RML(FARSI,DEFAULT), "fa_IR"}, + {RML(FINNISH,DEFAULT), "fi_FI"}, + {RML(FRENCH,FRENCH), "fr_FR"}, + {RML(FRENCH,FRENCH_BELGIAN), "fr_BE"}, + {RML(FRENCH,FRENCH_CANADIAN), "fr_CA"}, + {RML(FRENCH,FRENCH_LUXEMBOURG), "fr_LU"}, + {RML(FRENCH,FRENCH_MONACO), "fr_MC"}, + {RML(FRENCH,FRENCH_SWISS), "fr_CH"}, +/*{RML(GAELIC,GAELIC), "ga_IE"},*/ +/*{RML(GAELIC,GAELIC_MANX), "gv_GB"},*/ +/*{RML(GAELIC,GAELIC_SCOTTISH), "gd_GB"},*/ +/*{RML(GALICIAN,DEFAULT), "gl_ES"},*/ + {RML(GEORGIAN,DEFAULT), "ka_GE"}, + {RML(GERMAN,GERMAN), "de_DE"}, + {RML(GERMAN,GERMAN_AUSTRIAN), "de_AT"}, + {RML(GERMAN,GERMAN_LIECHTENSTEIN), "de_LI"}, + {RML(GERMAN,GERMAN_LUXEMBOURG), "de_LU"}, + {RML(GERMAN,GERMAN_SWISS), "de_CH"}, + {RML(GREEK,DEFAULT), "el_GR"}, + {RML(GUJARATI,DEFAULT), "gu_IN"}, + {RML(HEBREW,DEFAULT), "he_IL"}, + {RML(HINDI,DEFAULT), "hi_IN"}, + {RML(HUNGARIAN,DEFAULT), "hu_HU"}, + {RML(ICELANDIC,DEFAULT), "is_IS"}, + {RML(INDONESIAN,DEFAULT), "id_ID"}, + {RML(ITALIAN,ITALIAN), "it_IT"}, + {RML(ITALIAN,ITALIAN_SWISS), "it_CH"}, + {RML(JAPANESE,DEFAULT), "ja_JP"}, + {RML(KANNADA,DEFAULT), "kn_IN"}, + {RML(KAZAK,DEFAULT), "kk_KZ"}, + {RML(KONKANI,DEFAULT), "kok_IN"}, + {RML(KOREAN,KOREAN), "ko_KR"}, +/*{RML(KYRGYZ,DEFAULT), "ky_KG"},*/ + {RML(LATVIAN,DEFAULT), "lv_LV"}, + {RML(LITHUANIAN,LITHUANIAN), "lt_LT"}, + {RML(MACEDONIAN,DEFAULT), "mk_MK"}, + {RML(MALAY,MALAY_BRUNEI_DARUSSALAM), "ms_BN"}, + {RML(MALAY,MALAY_MALAYSIA), "ms_MY"}, + {RML(MARATHI,DEFAULT), "mr_IN"}, +/*{RML(MONGOLIAN,DEFAULT), "mn_MN"},*/ + {RML(NORWEGIAN,NORWEGIAN_BOKMAL), "nb_NO"}, + {RML(NORWEGIAN,NORWEGIAN_NYNORSK), "nn_NO"}, + {RML(POLISH,DEFAULT), "pl_PL"}, + {RML(PORTUGUESE,PORTUGUESE), "pt_PT"}, + {RML(PORTUGUESE,PORTUGUESE_BRAZILIAN), "pt_BR"}, + {RML(PUNJABI,DEFAULT), "pa_IN"}, + {RML(ROMANIAN,DEFAULT), "ro_RO"}, + {RML(RUSSIAN,DEFAULT), "ru_RU"}, + {RML(SANSKRIT,DEFAULT), "sa_IN"}, + {RML(SERBIAN,DEFAULT), "hr_HR"}, + {RML(SERBIAN,SERBIAN_CYRILLIC), "sr_SP"}, + {RML(SERBIAN,SERBIAN_LATIN), "sr_SP"}, + {RML(SLOVAK,DEFAULT), "sk_SK"}, + {RML(SLOVENIAN,DEFAULT), "sl_SI"}, + {RML(SPANISH,SPANISH), "es_ES"}, + {RML(SPANISH,SPANISH_ARGENTINA), "es_AR"}, + {RML(SPANISH,SPANISH_BOLIVIA), "es_BO"}, + {RML(SPANISH,SPANISH_CHILE), "es_CL"}, + {RML(SPANISH,SPANISH_COLOMBIA), "es_CO"}, + {RML(SPANISH,SPANISH_COSTA_RICA), "es_CR"}, + {RML(SPANISH,SPANISH_DOMINICAN_REPUBLIC), "es_DO"}, + {RML(SPANISH,SPANISH_ECUADOR), "es_EC"}, + {RML(SPANISH,SPANISH_EL_SALVADOR), "es_SV"}, + {RML(SPANISH,SPANISH_GUATEMALA), "es_GT"}, + {RML(SPANISH,SPANISH_HONDURAS), "es_HN"}, + {RML(SPANISH,SPANISH_MEXICAN), "es_MX"}, + {RML(SPANISH,SPANISH_MODERN), "es_ES"}, + {RML(SPANISH,SPANISH_NICARAGUA), "es_NI"}, + {RML(SPANISH,SPANISH_PANAMA), "es_PA"}, + {RML(SPANISH,SPANISH_PARAGUAY), "es_PY"}, + {RML(SPANISH,SPANISH_PERU), "es_PE"}, + {RML(SPANISH,SPANISH_PUERTO_RICO), "es_PR"}, + {RML(SPANISH,SPANISH_URUGUAY), "es_UY"}, + {RML(SPANISH,SPANISH_VENEZUELA), "es_VE"}, + {RML(SWAHILI,DEFAULT), "sw_KE"}, + {RML(SWEDISH,SWEDISH), "sv_SE"}, + {RML(SWEDISH,SWEDISH_FINLAND), "sv_FI"}, +/*{RML(SYRIAC,DEFAULT), "syr_SY"},*/ + {RML(TAMIL,DEFAULT), "ta_IN"}, + {RML(TATAR,DEFAULT), "tt_TA"}, + {RML(TELUGU,DEFAULT), "te_IN"}, + {RML(THAI,DEFAULT), "th_TH"}, + {RML(TURKISH,DEFAULT), "tr_TR"}, + {RML(UKRAINIAN,DEFAULT), "uk_UA"}, + {RML(URDU,URDU_PAKISTAN), "ur_PK"}, + {RML(UZBEK,UZBEK_CYRILLIC), "uz_UZ"}, + {RML(UZBEK,UZBEK_LATIN), "uz_UZ"}, + {RML(VIETNAMESE,DEFAULT), "vi_VN"}, +/*{RML(WALON,DEFAULT), "wa_BE"},*/ +/*{RML(WELSH,DEFAULT), "cy_GB"},*/ +}; +static const IDToCode primary_to_code[] = { + {LANG_AFRIKAANS, "af"}, + {LANG_ARABIC, "ar"}, + {LANG_AZERI, "az"}, + {LANG_BULGARIAN, "bg"}, +/*{LANG_BRETON, "br"},*/ + {LANG_BELARUSIAN, "by"}, + {LANG_CATALAN, "ca"}, + {LANG_CZECH, "cs"}, +/*{LANG_WELSH, "cy"},*/ + {LANG_DANISH, "da"}, + {LANG_GERMAN, "de"}, + {LANG_GREEK, "el"}, + {LANG_ENGLISH, "en"}, +/*{LANG_ESPERANTO, "eo"},*/ + {LANG_SPANISH, "es"}, + {LANG_ESTONIAN, "et"}, + {LANG_BASQUE, "eu"}, + {LANG_FARSI, "fa"}, + {LANG_FINNISH, "fi"}, + {LANG_FAEROESE, "fo"}, + {LANG_FRENCH, "fr"}, +/*{LANG_GAELIC, "ga"},*/ +/*{LANG_GALICIAN, "gl"},*/ + {LANG_GUJARATI, "gu"}, + {LANG_HEBREW, "he"}, + {LANG_HINDI, "hi"}, + {LANG_SERBIAN, "hr"}, + {LANG_HUNGARIAN, "hu"}, + {LANG_ARMENIAN, "hy"}, + {LANG_INDONESIAN, "id"}, + {LANG_ITALIAN, "it"}, + {LANG_JAPANESE, "ja"}, + {LANG_GEORGIAN, "ka"}, + {LANG_KAZAK, "kk"}, + {LANG_KANNADA, "kn"}, + {LANG_KOREAN, "ko"}, +/*{LANG_KYRGYZ, "ky"},*/ + {LANG_LITHUANIAN, "lt"}, + {LANG_LATVIAN, "lv"}, + {LANG_MACEDONIAN, "mk"}, +/*{LANG_MONGOLIAN, "mn"},*/ + {LANG_MARATHI, "mr"}, + {LANG_MALAY, "ms"}, + {LANG_NORWEGIAN, "nb"}, + {LANG_DUTCH, "nl"}, + {LANG_NORWEGIAN, "nn"}, + {LANG_NORWEGIAN, "no"},/* unofficial? */ + {LANG_PUNJABI, "pa"}, + {LANG_POLISH, "pl"}, + {LANG_PORTUGUESE, "pt"}, + {LANG_ROMANIAN, "ro"}, + {LANG_RUSSIAN, "ru"}, + {LANG_SLOVAK, "sk"}, + {LANG_SLOVENIAN, "sl"}, + {LANG_ALBANIAN, "sq"}, + {LANG_SERBIAN, "sr"}, + {LANG_SWEDISH, "sv"}, + {LANG_SWAHILI, "sw"}, + {LANG_TAMIL, "ta"}, + {LANG_THAI, "th"}, + {LANG_TURKISH, "tr"}, + {LANG_TATAR, "tt"}, + {LANG_UKRAINIAN, "uk"}, + {LANG_URDU, "ur"}, + {LANG_UZBEK, "uz"}, + {LANG_VIETNAMESE, "vi"}, +/*{LANG_WALON, "wa"},*/ + {LANG_CHINESE, "zh"}, +}; +static int num_primary_to_code = + sizeof(primary_to_code) / sizeof(*primary_to_code); +static int num_both_to_code = + sizeof(both_to_code) / sizeof(*both_to_code); + +static const int +lcid_to_fl(LCID lcid, + FL_Locale *rtn) { + LANGID langid = LANGIDFROMLCID(lcid); + LANGID primary_lang = PRIMARYLANGID(langid); + /*LANGID sub_lang = SUBLANGID(langid);*/ + int i; + /* try to find an exact primary/sublanguage combo that we know about */ + for (i=0; ilang = NULL; + rtn->country = NULL; + rtn->variant = NULL; + +#ifdef WIN32 + /* win32 >= mswindows95 */ + { + LCID lcid = GetThreadLocale(); + if (lcid_to_fl(lcid, rtn)) { + success = FL_CONFIDENT; + } + if (success == FL_FAILED) { + /* assume US English on mswindows systems unless we know otherwise */ + if (accumulate_locstring("en_US.ISO_8859-1", rtn)) { + success = FL_DEFAULT_GUESS; + } + } + } +#else + /* assume unixoid */ + { + /* examples: */ + /* sv_SE.ISO_8859-1 */ + /* fr_FR.ISO8859-1 */ + /* no_NO_NB */ + /* no_NO_NY */ + /* no_NO */ + /* de_DE */ + /* try the various vars in decreasing order of authority */ + if (accumulate_env("LC_ALL", rtn) || + accumulate_env("LC_MESSAGES", rtn) || + accumulate_env("LANG", rtn) || + accumulate_env("LANGUAGE", rtn)) { + success = FL_CONFIDENT; + } + if (success == FL_FAILED) { + /* assume US English on unixoid systems unless we know otherwise */ + if (accumulate_locstring("en_US.ISO_8859-1", rtn)) { + success = FL_DEFAULT_GUESS; + } + } + } +#endif + + if (success != FL_FAILED) { + canonise_fl(rtn); + } + + *locale = rtn; + return success; +} + + +void +FL_FreeLocale(FL_Locale **locale) { + if (locale) { + FL_Locale *l = *locale; + if (l) { + if (l->lang) { + free((void*)l->lang); + } + if (l->country) { + free((void*)l->country); + } + if (l->variant) { + free((void*)l->variant); + } + free(l); + *locale = NULL; + } + } +} diff --git a/linden/indra/llcommon/llfindlocale.h b/linden/indra/llcommon/llfindlocale.h new file mode 100644 index 0000000..6cc2dbb --- /dev/null +++ b/linden/indra/llcommon/llfindlocale.h @@ -0,0 +1,65 @@ +/** + * @file llfindlocale.h + * @brief Detect system language setting + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + * + * Copyright (c) 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 __findlocale_h_ +#define __findlocale_h_ + +typedef const char* FL_Lang; +typedef const char* FL_Country; +typedef const char* FL_Variant; + +typedef struct { + FL_Lang lang; + FL_Country country; + FL_Variant variant; +} FL_Locale; + +typedef enum { + /* for some reason we failed to even guess: this should never happen */ + FL_FAILED = 0, + /* couldn't query locale -- returning a guess (almost always English) */ + FL_DEFAULT_GUESS = 1, + /* the returned locale type was found by successfully asking the system */ + FL_CONFIDENT = 2 +} FL_Success; + +typedef enum { + FL_MESSAGES = 0 +} FL_Domain; + +/* This allocates/fills in a FL_Locale structure with pointers to + strings (which should be treated as static), or NULL for inappropriate / + undetected fields. */ +FL_Success FL_FindLocale(FL_Locale **locale, FL_Domain domain); +/* This should be used to free the struct written by FL_FindLocale */ +void FL_FreeLocale(FL_Locale **locale); + +#endif /*__findlocale_h_*/ diff --git a/linden/indra/llcommon/llheartbeat.cpp b/linden/indra/llcommon/llheartbeat.cpp new file mode 100644 index 0000000..13bcd46 --- /dev/null +++ b/linden/indra/llcommon/llheartbeat.cpp @@ -0,0 +1,165 @@ +/** + * @file llheartbeat.cpp + * @brief Class encapsulating logic for telling a watchdog that we live. + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + * + * Copyright (c) 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$ + */ + +#include +#include + +#include "linden_common.h" +#include "llapp.h" + +#include "llheartbeat.h" + +LLHeartbeat::LLHeartbeat(F32 secs_between_heartbeat, + F32 aggressive_heartbeat_panic_secs, + F32 aggressive_heartbeat_max_blocking_secs) + : mSecsBetweenHeartbeat(secs_between_heartbeat), + mAggressiveHeartbeatPanicSecs(aggressive_heartbeat_panic_secs), + mAggressiveHeartbeatMaxBlockingSecs(aggressive_heartbeat_max_blocking_secs), + mSuppressed(false) +{ + mBeatTimer.reset(); + mBeatTimer.setTimerExpirySec(mSecsBetweenHeartbeat); + mPanicTimer.reset(); + mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs); +} + +LLHeartbeat::~LLHeartbeat() +{ + // do nothing. +} + +void +LLHeartbeat::setSuppressed(bool is_suppressed) +{ + mSuppressed = is_suppressed; +} + +// returns 0 on success, -1 on permanent failure, 1 on temporary failure +int +LLHeartbeat::rawSend() +{ +#if LL_WINDOWS + return 0; // Pretend we succeeded. +#else + if (mSuppressed) + return 0; // Pretend we succeeded. + + union sigval dummy; + int result = sigqueue(getppid(), LL_HEARTBEAT_SIGNAL, dummy); + if (result == 0) + return 0; // success + + int err = errno; + if (err == EAGAIN) + return 1; // failed to queue, try again + + return -1; // other failure. +#endif +} + +int +LLHeartbeat::rawSendWithTimeout(F32 timeout_sec) +{ + int result = 0; + + // Spin tightly until our heartbeat is digested by the watchdog + // or we time-out. We don't really want to sleep because our + // wake-up time might be undesirably synchronised to a hidden + // clock by the system's scheduler. + mTimeoutTimer.reset(); + mTimeoutTimer.setTimerExpirySec(timeout_sec); + do { + result = rawSend(); + //llinfos << " HEARTSENDc=" << result << llendl; + } while (result==1 && !mTimeoutTimer.hasExpired()); + + return result; +} + +bool +LLHeartbeat::send(F32 timeout_sec) +{ + bool total_success = false; + int result = 1; + + if (timeout_sec > 0.f) { + // force a spin until success or timeout + result = rawSendWithTimeout(timeout_sec); + } else { + if (mBeatTimer.hasExpired()) { + // zero-timeout; we don't care too much whether our + // heartbeat was digested. + result = rawSend(); + //llinfos << " HEARTSENDb=" << result << llendl; + } + } + + if (result == -1) { + // big failure. + } else if (result == 0) { + total_success = true; + } else { + // need to retry at some point + } + + if (total_success) { + mBeatTimer.reset(); + mBeatTimer.setTimerExpirySec(mSecsBetweenHeartbeat); + // reset the time until we start panicking about lost + // heartbeats again. + mPanicTimer.reset(); + mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs); + } else { + // leave mBeatTimer as expired so we'll lazily poke the + // watchdog again next time through. + } + + if (mPanicTimer.hasExpired()) { + // It's been ages since we successfully had a heartbeat + // digested by the watchdog. Sit here and spin a while + // in the hope that we can force it through. + llwarns << "Unable to deliver heartbeat to launcher for " << mPanicTimer.getElapsedTimeF32() << " seconds. Going to try very hard for up to " << mAggressiveHeartbeatMaxBlockingSecs << " seconds." << llendl; + result = rawSendWithTimeout(mAggressiveHeartbeatMaxBlockingSecs); + if (result == 0) { + total_success = true; + } else { + // we couldn't even force it through. That's bad, + // but we'll try again in a while. + llwarns << "Could not deliver heartbeat to launcher even after trying very hard for " << mAggressiveHeartbeatMaxBlockingSecs << " seconds." << llendl; + } + + // in any case, reset the panic timer. + mPanicTimer.reset(); + mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs); + } + + return total_success; +} diff --git a/linden/indra/llcommon/llheartbeat.h b/linden/indra/llcommon/llheartbeat.h new file mode 100644 index 0000000..8a2fa0a --- /dev/null +++ b/linden/indra/llcommon/llheartbeat.h @@ -0,0 +1,73 @@ +/** + * @file llheartbeat.h + * @brief Class encapsulating logic for telling a watchdog that we live. + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + * + * Copyright (c) 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_LLHEARTBEAT_H +#define LL_LLHEARTBEAT_H + +#include "linden_common.h" + +#include "lltimer.h" + +// Note: Win32 does not support the heartbeat/smackdown system; +// heartbeat-delivery turns into a no-op there. + +class LLHeartbeat +{ +public: + // secs_between_heartbeat: after a heartbeat is successfully delivered, + // we suppress sending more for this length of time. + // aggressive_heartbeat_panic_secs: if we've been failing to + // successfully deliver heartbeats for this length of time then + // we block for a while until we're really sure we got one delivered. + // aggressive_heartbeat_max_blocking_secs: this is the length of + // time we block for when we're aggressively ensuring that a 'panic' + // heartbeat was delivered. + LLHeartbeat(F32 secs_between_heartbeat = 5.0f, + F32 aggressive_heartbeat_panic_secs = 10.0f, + F32 aggressive_heartbeat_max_blocking_secs = 4.0f); + ~LLHeartbeat(); + + bool send(F32 timeout_sec = 0.0f); + void setSuppressed(bool is_suppressed); + +private: + int rawSend(); + int rawSendWithTimeout(F32 timeout_sec); + F32 mSecsBetweenHeartbeat; + F32 mAggressiveHeartbeatPanicSecs; + F32 mAggressiveHeartbeatMaxBlockingSecs; + bool mSuppressed; + LLTimer mBeatTimer; + LLTimer mPanicTimer; + LLTimer mTimeoutTimer; +}; + +#endif // LL_HEARTBEAT_H diff --git a/linden/indra/llcommon/llindraconfigfile.cpp b/linden/indra/llcommon/llindraconfigfile.cpp new file mode 100644 index 0000000..7ef1a9b --- /dev/null +++ b/linden/indra/llcommon/llindraconfigfile.cpp @@ -0,0 +1,107 @@ +/** + * @file llindraconfigfile.cpp + * + * + * This class is an LLLiveFile that has config info for indra + * Currently only whether it's blacklisted + * + * $LicenseInfo:firstyear=2007&license=internal$ + * + * Copyright (c) 2007-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 "llindraconfigfile.h" + +#include "llfile.h" +#include "llsd.h" +#include "llsdserialize.h" +#include "llframetimer.h" + +static std::string sConfigDir = ""; +static const char indraConfigFileName[] = "indra.xml"; + + +LLIndraConfigFile::LLIndraConfigFile() + : LLLiveFile(filename(), configFileRefreshRate), + mConfig(LLSD()) +{ +} + +//static +void LLIndraConfigFile::initClass(const std::string& config_dir) +{ + sConfigDir = config_dir; + llinfos << "LLIndraConfigFile::initClass config dir " + << config_dir << "/" << indraConfigFileName << llendl; +} + +LLSD LLIndraConfigFile::getConfig(const std::string& config_name) +{ + if (sConfigDir.empty()) + { + llerrs << "LLIndraConfigFile::initClass() not called" << llendl; + } + + LLFrameTimer::updateFrameTime(); + + static LLIndraConfigFile the_file; + the_file.checkAndReload(); + + return the_file.mConfig[config_name]; +} + +std::string LLIndraConfigFile::filename() +{ + std::ostringstream ostr; + + ostr << sConfigDir + << "/" << indraConfigFileName; + + return ostr.str(); +} + +/* virtual */ +void LLIndraConfigFile::loadFile() +{ + llinfos << "LLIndraConfigFile::loadFile: reading from " + << filename() << llendl; + + LLSD config; + + { + llifstream file(filename().c_str()); + if (file.is_open()) + { + LLSDSerialize::fromXML(config, file); + } + + if (config.isUndefined()) + { + llinfos << "LLIndraConfigFile::loadFile: file missing, ill-formed," + " or simply undefined; not changing the blacklist" << llendl; + return; + } + } + + if (config.isMap()) + { + mConfig = config; + } + else + { + llwarns << "LLIndraConfigFile: " << indraConfigFileName << " expects a map; wrong format" << llendl; + return; + } +} diff --git a/linden/indra/llcommon/llindraconfigfile.h b/linden/indra/llcommon/llindraconfigfile.h new file mode 100644 index 0000000..271a848 --- /dev/null +++ b/linden/indra/llcommon/llindraconfigfile.h @@ -0,0 +1,50 @@ +/** + * @file llindraconfigfile.h + * @brief manages configuration file for indra.xml + * + * $LicenseInfo:firstyear=2007&license=internal$ + * + * Copyright (c) 2007-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_LLINDRACONFIGFILE_H +#define LL_LLINDRACONFIGFILE_H + +#include +#include "linden_common.h" + +#include "lllivefile.h" +#include "llsd.h" + + +// To use, call LLIndraConfigFile::initClass(config_dir); +// Then whenever getConfig is called, it will check and reload automatically + +class LLIndraConfigFile : public LLLiveFile +{ +public: + LLIndraConfigFile(); + static void initClass(const std::string& config_dir); + static LLSD getConfig(const std::string& config_name); + +private: + static std::string filename(); + +protected: + /* virtual */ void loadFile(); + LLSD mConfig; +}; + +#endif //LL_LLINDRACONFIGFILE_H diff --git a/linden/indra/llcommon/llkeyusetracker.h b/linden/indra/llcommon/llkeyusetracker.h new file mode 100644 index 0000000..c37ba24 --- /dev/null +++ b/linden/indra/llcommon/llkeyusetracker.h @@ -0,0 +1,220 @@ +/** + * @file llkeyusetracker.h + * @brief Declaration of the LLKeyUseTracker class. + * + * $LicenseInfo:firstyear=2003&license=viewergpl$ + * + * Copyright (c) 2003-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_KEYUSETRACKER_H +#define LL_KEYUSETRACKER_H + +// This is a generic cache for an arbitrary data type indexed against an +// arbitrary key type. The cache length is determined by expiration time +// tince against last use and set size. The age of elements and the size +// of the cache are queryable. +// +// This is implemented as a list, which makes search O(n). If you reuse this +// for something with a large dataset, consider reimplementing with a Boost +// multimap based on both a map(key) and priority queue(last_use). + +template +class KeyUseTrackerNodeImpl +{ +public: + U64 mLastUse; + U32 mUseCount; + TKey mKey; + TData mData; + + KeyUseTrackerNodeImpl( TKey k, TData d ) : + mLastUse(0), + mUseCount(0), + mKey( k ), + mData( d ) + { + } +}; + + +template +class LLKeyUseTracker +{ + typedef KeyUseTrackerNodeImpl TKeyUseTrackerNode; + typedef std::list TKeyList; + TKeyList mKeyList; + U64 mMemUsecs; + U64 mLastExpire; + U32 mMaxCount; + U32 mCount; + + static U64 getTime() + { + // This function operates on a frame basis, not instantaneous. + // We can rely on its output for determining first use in a + // frame. + return LLFrameTimer::getTotalTime(); + } + + void ageKeys() + { + U64 now = getTime(); + if( now == mLastExpire ) + { + return; + } + mLastExpire = now; + + while( !mKeyList.empty() && (now - mKeyList.front()->mLastUse > mMemUsecs ) ) + { + delete mKeyList.front(); + mKeyList.pop_front(); + mCount--; + } + } + + TKeyUseTrackerNode *findNode( TKey key ) + { + ageKeys(); + + typename TKeyList::iterator i; + for( i = mKeyList.begin(); i != mKeyList.end(); i++ ) + { + if( (*i)->mKey == key ) + return *i; + } + + return NULL; + } + + TKeyUseTrackerNode *removeNode( TKey key ) + { + TKeyUseTrackerNode *i; + i = findNode( key ); + if( i ) + { + mKeyList.remove( i ); + mCount--; + return i; + } + + return NULL; + } + +public: + LLKeyUseTracker( U32 memory_seconds, U32 max_count ) : + mLastExpire(0), + mMaxCount( max_count ), + mCount(0) + { + mMemUsecs = ((U64)memory_seconds) * 1000000; + } + + ~LLKeyUseTracker() + { + // Flush list + while( !mKeyList.empty() ) + { + delete mKeyList.front(); + mKeyList.pop_front(); + mCount--; + } + } + + void markUse( TKey key, TData data ) + { + TKeyUseTrackerNode *node = removeNode( key ); + if( !node ) + { + node = new TKeyUseTrackerNode(key, data); + } + else + { + // Update data + node->mData = data; + } + node->mLastUse = getTime(); + node->mUseCount++; + mKeyList.push_back( node ); + mCount++; + + // Too many items? Drop head + if( mCount > mMaxCount ) + { + delete mKeyList.front(); + mKeyList.pop_front(); + mCount--; + } + } + + void forgetKey( TKey key ) + { + TKeyUseTrackerNode *node = removeNode( key ); + if( node ) + { + delete node; + } + } + + U32 getUseCount( TKey key ) + { + TKeyUseTrackerNode *node = findNode( key ); + if( node ) + { + return node->mUseCount; + } + return 0; + } + + U64 getTimeSinceUse( TKey key ) + { + TKeyUseTrackerNode *node = findNode( key ); + if( node ) + { + U64 now = getTime(); + U64 delta = now - node->mLastUse; + return (U32)( delta / 1000000 ); + } + return 0; + } + + TData *getLastUseData( TKey key ) + { + TKeyUseTrackerNode *node = findNode( key ); + if( node ) + { + return &node->mData; + } + return NULL; + } + + U32 getKeyCount() + { + return mCount; + } +}; + +#endif diff --git a/linden/indra/llcommon/lllivefile.h b/linden/indra/llcommon/lllivefile.h index 1d55f7b..0a18fe0 100644 --- a/linden/indra/llcommon/lllivefile.h +++ b/linden/indra/llcommon/lllivefile.h @@ -32,6 +32,8 @@ #ifndef LL_LLLIVEFILE_H #define LL_LLLIVEFILE_H +const F32 configFileRefreshRate = 5.0; // seconds + class LLLiveFile { diff --git a/linden/indra/llcommon/llmemory.cpp b/linden/indra/llcommon/llmemory.cpp index 0f08877..5edeb4b 100644 --- a/linden/indra/llcommon/llmemory.cpp +++ b/linden/indra/llcommon/llmemory.cpp @@ -387,7 +387,7 @@ U64 getCurrentRSS() U64 getCurrentRSS() { static const char statPath[] = "/proc/self/stat"; - FILE *fp = fopen(statPath, "r"); + LLFILE *fp = LLFile::fopen(statPath, "r"); U64 rss = 0; if (fp == NULL) diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp index d67a9c4..1c0f7e0 100644 --- a/linden/indra/llcommon/llprocessor.cpp +++ b/linden/indra/llcommon/llprocessor.cpp @@ -2230,7 +2230,7 @@ bool CProcessor::WriteInfoTextFile(const char *strFilename) return false; // Then we create a new file (CREATE_ALWAYS) - FILE *file = LLFile::fopen(strFilename, "w"); /* Flawfinder: ignore */ + LLFILE *file = LLFile::fopen(strFilename, "w"); /* Flawfinder: ignore */ if (!file) return false; diff --git a/linden/indra/llcommon/llptrskipmap.h b/linden/indra/llcommon/llptrskipmap.h index b369d77..8592197 100644 --- a/linden/indra/llcommon/llptrskipmap.h +++ b/linden/indra/llcommon/llptrskipmap.h @@ -238,7 +238,8 @@ private: template inline LLPtrSkipMap::LLPtrSkipMap() : mInsertFirst(NULL), - mEquals(defaultEquals) + mEquals(defaultEquals), + mNumberOfSteps(0) { if (BINARY_DEPTH < 2) { @@ -259,7 +260,8 @@ template inline LLPtrSkipMap::LLPtrSkipMap(insert_func insert_first, equals_func equals) : mInsertFirst(insert_first), - mEquals(equals) + mEquals(equals), + mNumberOfSteps(0) { if (BINARY_DEPTH < 2) { diff --git a/linden/indra/llcommon/llsdserialize.h b/linden/indra/llcommon/llsdserialize.h index 41e0aa5..f5282b4 100644 --- a/linden/indra/llcommon/llsdserialize.h +++ b/linden/indra/llcommon/llsdserialize.h @@ -390,7 +390,7 @@ public: /** * Options for output */ - enum e_formatter_options_type + typedef enum e_formatter_options_type { OPTIONS_NONE = 0, OPTIONS_PRETTY = 1 diff --git a/linden/indra/llcommon/llsdutil.h b/linden/indra/llcommon/llsdutil.h index c058185..ae6d694 100644 --- a/linden/indra/llcommon/llsdutil.h +++ b/linden/indra/llcommon/llsdutil.h @@ -101,4 +101,16 @@ BOOL compare_llsd_with_template( const LLSD& template_llsd, LLSD& resultant_llsd); +// Simple function to copy data out of input & output iterators if +// there is no need for casting. +template LLSD llsd_copy_array(Input iter, Input end) +{ + LLSD dest; + for (; iter != end; ++iter) + { + dest.append(*iter); + } + return dest; +} + #endif // LL_LLSDUTIL_H diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp index ccdcd00..1285851 100644 --- a/linden/indra/llcommon/llsys.cpp +++ b/linden/indra/llcommon/llsys.cpp @@ -293,7 +293,7 @@ U32 LLOSInfo::getProcessVirtualSizeKB() #if LL_WINDOWS #endif #if LL_LINUX - FILE* status_filep = LLFile::fopen("/proc/self/status", "rb"); + LLFILE* status_filep = LLFile::fopen("/proc/self/status", "rb"); S32 numRead = 0; char buff[STATUS_SIZE]; /* Flawfinder: ignore */ @@ -336,7 +336,7 @@ U32 LLOSInfo::getProcessResidentSizeKB() #if LL_WINDOWS #endif #if LL_LINUX - FILE* status_filep = LLFile::fopen("/proc/self/status", "rb"); + LLFILE* status_filep = LLFile::fopen("/proc/self/status", "rb"); if (status_filep != NULL) { S32 numRead = 0; @@ -398,7 +398,7 @@ LLCPUInfo::LLCPUInfo() #elif LL_LINUX std::map< LLString, LLString > cpuinfo; - FILE* cpuinfo_fp = LLFile::fopen(CPUINFO_FILE, "rb"); + LLFILE* cpuinfo_fp = LLFile::fopen(CPUINFO_FILE, "rb"); if(cpuinfo_fp) { char line[MAX_STRING]; @@ -486,7 +486,7 @@ void LLCPUInfo::stream(std::ostream& s) const } #else // *NOTE: This works on linux. What will it do on other systems? - FILE* cpuinfo = LLFile::fopen(CPUINFO_FILE, "rb"); + LLFILE* cpuinfo = LLFile::fopen(CPUINFO_FILE, "rb"); if(cpuinfo) { char line[MAX_STRING]; @@ -621,7 +621,7 @@ void LLMemoryInfo::stream(std::ostream& s) const s << "Total Physical KB: " << phys << std::endl; #else // *NOTE: This works on linux. What will it do on other systems? - FILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb"); + LLFILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb"); if(meminfo) { char line[MAX_STRING]; /* Flawfinder: ignore */ @@ -665,7 +665,7 @@ BOOL gunzip_file(const char *srcfile, const char *dstfile) BOOL retval = FALSE; gzFile src = NULL; U8 buffer[UNCOMPRESS_BUFFER_SIZE]; - FILE *dst = NULL; + LLFILE *dst = NULL; S32 bytes = 0; (void *) strcpy(tmpfile, dstfile); /* Flawfinder: ignore */ (void *) strncat(tmpfile, ".t", sizeof(tmpfile) - strlen(tmpfile) -1); /* Flawfinder: ignore */ @@ -700,7 +700,7 @@ BOOL gzip_file(const char *srcfile, const char *dstfile) BOOL retval = FALSE; U8 buffer[COMPRESS_BUFFER_SIZE]; gzFile dst = NULL; - FILE *src = NULL; + LLFILE *src = NULL; S32 bytes = 0; (void *) strcpy(tmpfile, dstfile); /* Flawfinder: ignore */ (void *) strncat(tmpfile, ".t", sizeof(tmpfile) - strlen(tmpfile) -1); /* Flawfinder: ignore */ diff --git a/linden/indra/llcommon/lltimer.cpp b/linden/indra/llcommon/lltimer.cpp index a421dce..25d9897 100644 --- a/linden/indra/llcommon/lltimer.cpp +++ b/linden/indra/llcommon/lltimer.cpp @@ -39,10 +39,8 @@ # define WIN32_LEAN_AND_MEAN # include # include -#elif LL_LINUX || LL_SOLARIS -# include -# include -#elif LL_DARWIN +#elif LL_LINUX || LL_SOLARIS || LL_DARWIN +# include # include #else # error "architecture not supported" @@ -81,42 +79,55 @@ U64 gLastTotalTimeClockCount = 0; //--------------------------------------------------------------------------- #if LL_WINDOWS -void ms_sleep(long ms) +void ms_sleep(U32 ms) { - Sleep((U32)ms); + Sleep(ms); } - -void llyield() +#elif LL_LINUX || LL_SOLARIS || LL_DARWIN +void ms_sleep(U32 ms) { - SleepEx(0, TRUE); // Relinquishes time slice to any thread of equal priority, can be woken up by extended IO functions -} -#elif LL_LINUX || LL_SOLARIS -void ms_sleep(long ms) -{ - struct timespec t; - t.tv_sec = ms / 1000; - t.tv_nsec = (ms % 1000) * 1000000l; - nanosleep(&t, NULL); -} + long mslong = ms; // tv_nsec is a long + struct timespec thiswait, nextwait; + bool sleep_more = false; -void llyield() -{ - sched_yield(); -} -#elif LL_DARWIN -void ms_sleep(long ms) -{ - struct timespec t; - t.tv_sec = ms / 1000; - t.tv_nsec = (ms % 1000) * 1000000l; - nanosleep(&t, NULL); -} + thiswait.tv_sec = ms / 1000; + thiswait.tv_nsec = (mslong % 1000) * 1000000l; + do { + int result = nanosleep(&thiswait, &nextwait); -void llyield() -{ -// sched_yield(); + // check if sleep was interrupted by a signal; unslept + // remainder was written back into 't' and we just nanosleep + // again. + sleep_more = (result == -1 && EINTR == errno); + + if (sleep_more) + { + if ( nextwait.tv_sec > thiswait.tv_sec || + (nextwait.tv_sec == thiswait.tv_sec && + nextwait.tv_nsec >= thiswait.tv_nsec) ) + { + // if the remaining time isn't actually going + // down then we're being shafted by low clock + // resolution - manually massage the sleep time + // downward. + if (nextwait.tv_nsec > 1000000) { + // lose 1ms + nextwait.tv_nsec -= 1000000; + } else { + if (nextwait.tv_sec == 0) { + // already so close to finished + sleep_more = false; + } else { + // lose up to 1ms + nextwait.tv_nsec = 0; + } + } + } + thiswait = nextwait; + } + } while (sleep_more); } -#else +#else # error "architecture not supported" #endif @@ -323,7 +334,7 @@ void LLTimer::setTimerExpirySec(F32 expiration) + (U64)((F32)(expiration * gClockFrequency)); } -F32 LLTimer::getRemainingTimeF32() +F32 LLTimer::getRemainingTimeF32() const { U64 cur_ticks = get_clock_count(); if (cur_ticks > mExpirationTicks) @@ -348,7 +359,7 @@ BOOL LLTimer::checkExpirationAndReset(F32 expiration) } -BOOL LLTimer::hasExpired() +BOOL LLTimer::hasExpired() const { return (get_clock_count() >= mExpirationTicks) ? TRUE : FALSE; @@ -550,3 +561,4 @@ void LLEventTimer::updateClass() } } + diff --git a/linden/indra/llcommon/lltimer.h b/linden/indra/llcommon/lltimer.h index 8a4bc76..91b93d6 100644 --- a/linden/indra/llcommon/lltimer.h +++ b/linden/indra/llcommon/lltimer.h @@ -87,11 +87,11 @@ public: void setLastClockCount(U64 current_count); // Sets the timer so that the next elapsed call will be relative to this time void setTimerExpirySec(F32 expiration); BOOL checkExpirationAndReset(F32 expiration); - BOOL hasExpired(); + BOOL hasExpired() const; F32 getElapsedTimeAndResetF32(); // Returns elapsed time in seconds with reset F64 getElapsedTimeAndResetF64(); - F32 getRemainingTimeF32(); + F32 getRemainingTimeF32() const; static BOOL knownBadTimer(); @@ -112,12 +112,8 @@ U64 get_clock_count(); F64 calc_clock_frequency(U32 msecs); void update_clock_frequencies(); - // Sleep for milliseconds -void ms_sleep(long ms); - -// Yield -//void llyield(); // Yield your timeslice - not implemented yet for Mac, so commented out. +void ms_sleep(U32 ms); // Returns the correct UTC time in seconds, like time(NULL). // Useful on the viewer, which may have its local clock set wrong. diff --git a/linden/indra/llcommon/llversionserver.h b/linden/indra/llcommon/llversionserver.h index e865b6a..e3ceadf 100644 --- a/linden/indra/llcommon/llversionserver.h +++ b/linden/indra/llcommon/llversionserver.h @@ -33,9 +33,9 @@ #define LL_LLVERSIONSERVER_H const S32 LL_VERSION_MAJOR = 1; -const S32 LL_VERSION_MINOR = 20; -const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 83892; +const S32 LL_VERSION_MINOR = 21; +const S32 LL_VERSION_PATCH = 1; +const S32 LL_VERSION_BUILD = 86526; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index 71bb12e..db3d42d 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -34,7 +34,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 20; -const S32 LL_VERSION_PATCH = 5; +const S32 LL_VERSION_PATCH = 7; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/linden/indra/llimage/llimagetga.cpp b/linden/indra/llimage/llimagetga.cpp index 4da374e..bd03abb 100644 --- a/linden/indra/llimage/llimagetga.cpp +++ b/linden/indra/llimage/llimagetga.cpp @@ -1128,7 +1128,7 @@ bool LLImageTGA::loadFile( const LLString& path ) return false; } - FILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */ if( !file ) { llwarns << "Couldn't open file " << path << llendl; diff --git a/linden/indra/llimagej2coj/llimagej2coj.cpp b/linden/indra/llimagej2coj/llimagej2coj.cpp index 01868fd..478cc84 100644 --- a/linden/indra/llimagej2coj/llimagej2coj.cpp +++ b/linden/indra/llimagej2coj/llimagej2coj.cpp @@ -58,14 +58,14 @@ void fallbackDestroyLLImageJ2CImpl(LLImageJ2CImpl* impl) } /** -sample error callback expecting a FILE* client object +sample error callback expecting a LLFILE* client object */ void error_callback(const char* msg, void*) { lldebugs << "LLImageJ2CImpl error_callback: " << msg << llendl; } /** -sample warning callback expecting a FILE* client object +sample warning callback expecting a LLFILE* client object */ void warning_callback(const char* msg, void*) { diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp index 4c58789..8cd0700 100644 --- a/linden/indra/llinventory/llinventory.cpp +++ b/linden/indra/llinventory/llinventory.cpp @@ -217,7 +217,7 @@ BOOL LLInventoryObject::importLegacyStream(std::istream& input_stream) // exportFile should be replaced with exportLegacyStream // not sure whether exportLegacyStream(llofstream(fp)) would work, fp may need to get icramented... -BOOL LLInventoryObject::exportFile(FILE* fp, BOOL) const +BOOL LLInventoryObject::exportFile(LLFILE* fp, BOOL) const { char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ fprintf(fp, "\tinv_object\t0\n\t{\n"); @@ -520,7 +520,7 @@ BOOL LLInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32 } // virtual -BOOL LLInventoryItem::importFile(FILE* fp) +BOOL LLInventoryItem::importFile(LLFILE* fp) { // *NOTE: Changing the buffer size will require changing the scanf // calls below. @@ -674,7 +674,7 @@ BOOL LLInventoryItem::importFile(FILE* fp) return success; } -BOOL LLInventoryItem::exportFile(FILE* fp, BOOL include_asset_key) const +BOOL LLInventoryItem::exportFile(LLFILE* fp, BOOL include_asset_key) const { char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ fprintf(fp, "\tinv_item\t0\n\t{\n"); @@ -1429,7 +1429,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg, } // virtual -BOOL LLInventoryCategory::importFile(FILE* fp) +BOOL LLInventoryCategory::importFile(LLFILE* fp) { // *NOTE: Changing the buffer size will require changing the scanf // calls below. @@ -1495,7 +1495,7 @@ BOOL LLInventoryCategory::importFile(FILE* fp) return TRUE; } -BOOL LLInventoryCategory::exportFile(FILE* fp, BOOL) const +BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const { char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ fprintf(fp, "\tinv_category\t0\n\t{\n"); diff --git a/linden/indra/llinventory/llinventory.h b/linden/indra/llinventory/llinventory.h index b4199db..1bb6b85 100644 --- a/linden/indra/llinventory/llinventory.h +++ b/linden/indra/llinventory/llinventory.h @@ -101,8 +101,8 @@ public: // file support - implemented here so that a minimal information // set can be transmitted between simulator and viewer. -// virtual BOOL importFile(FILE* fp); - virtual BOOL exportFile(FILE* fp, BOOL include_asset_key = TRUE) const; +// virtual BOOL importFile(LLFILE* fp); + virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const; virtual BOOL importLegacyStream(std::istream& input_stream); virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; @@ -259,8 +259,8 @@ public: // we want to detect network mangling somehow. virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); // file support - virtual BOOL importFile(FILE* fp); - virtual BOOL exportFile(FILE* fp, BOOL include_asset_key = TRUE) const; + virtual BOOL importFile(LLFILE* fp); + virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const; virtual BOOL importLegacyStream(std::istream& input_stream); virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; @@ -319,8 +319,8 @@ public: bool fromLLSD(LLSD& sd); // file support - virtual BOOL importFile(FILE* fp); - virtual BOOL exportFile(FILE* fp, BOOL include_asset_key = TRUE) const; + virtual BOOL importFile(LLFILE* fp); + virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const; virtual BOOL importLegacyStream(std::istream& input_stream); virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; diff --git a/linden/indra/llinventory/llpermissions.cpp b/linden/indra/llinventory/llpermissions.cpp index 8d800aa..afa2772 100644 --- a/linden/indra/llinventory/llpermissions.cpp +++ b/linden/indra/llinventory/llpermissions.cpp @@ -544,7 +544,7 @@ void LLPermissions::unpackMessage(LLMessageSystem* msg, const char* block, S32 b // File support // -BOOL LLPermissions::importFile(FILE* fp) +BOOL LLPermissions::importFile(LLFILE* fp) { init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null); const S32 BUFSIZE = 16384; @@ -648,7 +648,7 @@ BOOL LLPermissions::importFile(FILE* fp) } -BOOL LLPermissions::exportFile(FILE* fp) const +BOOL LLPermissions::exportFile(LLFILE* fp) const { char uuid_str[256]; /* Flawfinder: ignore */ diff --git a/linden/indra/llinventory/llpermissions.h b/linden/indra/llinventory/llpermissions.h index 05a30f6..6c858bf 100644 --- a/linden/indra/llinventory/llpermissions.h +++ b/linden/indra/llinventory/llpermissions.h @@ -302,8 +302,8 @@ public: void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); // Load/save support - BOOL importFile(FILE* fp); - BOOL exportFile(FILE* fp) const; + BOOL importFile(LLFILE* fp); + BOOL exportFile(LLFILE* fp) const; BOOL importLegacyStream(std::istream& input_stream); BOOL exportLegacyStream(std::ostream& output_stream) const; diff --git a/linden/indra/llinventory/llsaleinfo.cpp b/linden/indra/llinventory/llsaleinfo.cpp index bff075b..7aabdda 100644 --- a/linden/indra/llinventory/llsaleinfo.cpp +++ b/linden/indra/llinventory/llsaleinfo.cpp @@ -84,7 +84,7 @@ U32 LLSaleInfo::getCRC32() const } -BOOL LLSaleInfo::exportFile(FILE* fp) const +BOOL LLSaleInfo::exportFile(LLFILE* fp) const { fprintf(fp, "\tsale_info\t0\n\t{\n"); fprintf(fp, "\t\tsale_type\t%s\n", lookup(mSaleType)); @@ -158,7 +158,7 @@ BOOL LLSaleInfo::importXML(LLXMLNode* node) return success; } -BOOL LLSaleInfo::importFile(FILE* fp, BOOL& has_perm_mask, U32& perm_mask) +BOOL LLSaleInfo::importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask) { has_perm_mask = FALSE; diff --git a/linden/indra/llinventory/llsaleinfo.h b/linden/indra/llinventory/llsaleinfo.h index 0af8d89..9aa1024 100644 --- a/linden/indra/llinventory/llsaleinfo.h +++ b/linden/indra/llinventory/llsaleinfo.h @@ -91,8 +91,8 @@ public: // file serialization - BOOL exportFile(FILE* fp) const; - BOOL importFile(FILE* fp, BOOL& has_perm_mask, U32& perm_mask); + BOOL exportFile(LLFILE* fp) const; + BOOL importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask); BOOL exportLegacyStream(std::ostream& output_stream) const; LLSD asLLSD() const; diff --git a/linden/indra/llmath/llcrc.cpp b/linden/indra/llmath/llcrc.cpp index 2338691..447521a 100644 --- a/linden/indra/llmath/llcrc.cpp +++ b/linden/indra/llmath/llcrc.cpp @@ -171,7 +171,7 @@ void LLCRC::update(const char* filename) return; } - FILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ if (fp) { diff --git a/linden/indra/llmath/llcrc.h b/linden/indra/llmath/llcrc.h index 64e939c..59f58ce 100644 --- a/linden/indra/llmath/llcrc.h +++ b/linden/indra/llmath/llcrc.h @@ -41,7 +41,7 @@ // example (don't try this at work kids): // // LLCRC crc; -// FILE* fp = LLFile::fopen(filename,"rb"); +// LLFILE* fp = LLFile::fopen(filename,"rb"); // while(!feof(fp)) { // crc.update(fgetc(fp)); // } diff --git a/linden/indra/llmath/llmath_vc8.vcproj b/linden/indra/llmath/llmath_vc8.vcproj index e85a852..3b4413a 100644 --- a/linden/indra/llmath/llmath_vc8.vcproj +++ b/linden/indra/llmath/llmath_vc8.vcproj @@ -246,6 +246,10 @@ > + + @@ -266,6 +270,10 @@ > + + @@ -352,6 +360,10 @@ > + + @@ -384,6 +396,10 @@ > + + diff --git a/linden/indra/llmath/llmath_vc9.vcproj b/linden/indra/llmath/llmath_vc9.vcproj index 6d60d1e..03bc780 100644 --- a/linden/indra/llmath/llmath_vc9.vcproj +++ b/linden/indra/llmath/llmath_vc9.vcproj @@ -247,6 +247,10 @@ > + + @@ -267,6 +271,10 @@ > + + @@ -353,6 +361,10 @@ > + + @@ -385,6 +397,10 @@ > + + diff --git a/linden/indra/llmath/llmd5.cpp b/linden/indra/llmath/llmd5.cpp index a0ac92f..ea69002 100644 --- a/linden/indra/llmath/llmd5.cpp +++ b/linden/indra/llmath/llmd5.cpp @@ -157,7 +157,7 @@ void LLMD5::update (const uint1 *input, const uint4 input_length) { // MD5 update for files. // Like above, except that it works on files (and uses above as a primitive.) -void LLMD5::update(FILE* file){ +void LLMD5::update(LLFILE* file){ unsigned char buffer[BLOCK_LEN]; /* Flawfinder: ignore */ int len; @@ -237,7 +237,7 @@ void LLMD5::finalize (){ -LLMD5::LLMD5(FILE *file){ +LLMD5::LLMD5(LLFILE *file){ init(); // must be called be all constructors update(file); diff --git a/linden/indra/llmath/llmd5.h b/linden/indra/llmath/llmd5.h index 6d21b31..9ba0a9f 100644 --- a/linden/indra/llmath/llmd5.h +++ b/linden/indra/llmath/llmd5.h @@ -93,14 +93,14 @@ public: LLMD5 (); // simple initializer void update (const uint1 *input, const uint4 input_length); void update (std::istream& stream); - void update (FILE *file); + void update (LLFILE *file); void finalize (); // constructors for special circumstances. All these constructors finalize // the MD5 context. LLMD5 (const unsigned char *string); // digest string, finalize LLMD5 (std::istream& stream); // digest stream, finalize - LLMD5 (FILE *file); // digest file, close, finalize + LLMD5 (LLFILE *file); // digest file, close, finalize LLMD5 (const unsigned char *string, const unsigned int number); // methods to acquire finalized result diff --git a/linden/indra/llmath/lloctree.h b/linden/indra/llmath/lloctree.h index 52ad1bb..e26bae5 100644 --- a/linden/indra/llmath/lloctree.h +++ b/linden/indra/llmath/lloctree.h @@ -38,9 +38,9 @@ #include #ifdef LL_RELEASE_FOR_DOWNLOAD -#define OCT_ERRS llwarns +#define OCT_ERRS LL_WARNS("OctreeErrors") #else -#define OCT_ERRS llerrs +#define OCT_ERRS LL_ERRS("OctreeErrors") #endif #define LL_OCTREE_PARANOIA_CHECK 0 diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp index 527100a..f7c9286 100644 --- a/linden/indra/llmath/llvolume.cpp +++ b/linden/indra/llmath/llvolume.cpp @@ -770,7 +770,7 @@ BOOL LLProfile::generate(const LLProfileParams& params, BOOL path_open,F32 detai -BOOL LLProfileParams::importFile(FILE *fp) +BOOL LLProfileParams::importFile(LLFILE *fp) { LLMemType m1(LLMemType::MTYPE_VOLUME); @@ -834,7 +834,7 @@ BOOL LLProfileParams::importFile(FILE *fp) } -BOOL LLProfileParams::exportFile(FILE *fp) const +BOOL LLProfileParams::exportFile(LLFILE *fp) const { fprintf(fp,"\t\tprofile 0\n"); fprintf(fp,"\t\t{\n"); @@ -1282,7 +1282,7 @@ BOOL LLDynamicPath::generate(const LLPathParams& params, F32 detail, S32 split, } -BOOL LLPathParams::importFile(FILE *fp) +BOOL LLPathParams::importFile(LLFILE *fp) { LLMemType m1(LLMemType::MTYPE_VOLUME); @@ -1403,7 +1403,7 @@ BOOL LLPathParams::importFile(FILE *fp) } -BOOL LLPathParams::exportFile(FILE *fp) const +BOOL LLPathParams::exportFile(LLFILE *fp) const { fprintf(fp, "\t\tpath 0\n"); fprintf(fp, "\t\t{\n"); @@ -1874,7 +1874,6 @@ inline LLVector3 sculpt_rgb_to_vector(U8 r, U8 g, U8 b) inline U32 sculpt_xy_to_index(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components) { U32 index = (x + y * sculpt_width) * sculpt_components; - return index; } @@ -3560,18 +3559,22 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices, LLMemType m1(LLMemType::MTYPE_VOLUME); /* 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++) + static BOOL skip_cleanup = TRUE; + if ( skip_cleanup ) { - (*output_vertices)[i] = input_vertices[i].mPos; - } + num_output_vertices = num_input_vertices; + num_output_triangles = num_input_triangles; - *output_triangles = new S32[num_input_triangles*3]; - memcpy(*output_triangles, input_triangles, 3*num_input_triangles*sizeof(S32)); // Flawfinder: ignore - return TRUE; + *output_vertices = new LLVector3[num_input_vertices]; + for (S32 index = 0; index < num_input_vertices; index++) + { + (*output_vertices)[index] = input_vertices[index].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: @@ -3637,8 +3640,8 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices, for (i = 0; i < num_input_triangles; i++) { S32 v1 = i*3; - S32 v2 = i*3 + 1; - S32 v3 = i*3 + 2; + S32 v2 = v1 + 1; + S32 v3 = v1 + 2; //llinfos << "Checking triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl; input_triangles[v1] = vertex_mapping[input_triangles[v1]]; @@ -3774,7 +3777,7 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices, } -BOOL LLVolumeParams::importFile(FILE *fp) +BOOL LLVolumeParams::importFile(LLFILE *fp) { LLMemType m1(LLMemType::MTYPE_VOLUME); @@ -3819,7 +3822,7 @@ BOOL LLVolumeParams::importFile(FILE *fp) return TRUE; } -BOOL LLVolumeParams::exportFile(FILE *fp) const +BOOL LLVolumeParams::exportFile(LLFILE *fp) const { fprintf(fp,"\tshape 0\n"); fprintf(fp,"\t{\n"); @@ -3938,16 +3941,19 @@ const F32 MIN_CONCAVE_PATH_WEDGE = 0.111111f; // 1/9 unity BOOL LLVolumeParams::isConvex() const { F32 path_length = mPathParams.getEnd() - mPathParams.getBegin(); + F32 hollow = mProfileParams.getHollow(); - if ( mPathParams.getTwist() != mPathParams.getTwistBegin() - && path_length > MIN_CONCAVE_PATH_WEDGE ) + U8 path_type = mPathParams.getCurveType(); + if ( path_length > MIN_CONCAVE_PATH_WEDGE + && ( mPathParams.getTwist() != mPathParams.getTwistBegin() + || (hollow > 0.f + && LL_PCODE_PATH_LINE != path_type) ) ) { // twist along a "not too short" path is concave return FALSE; } F32 profile_length = mProfileParams.getEnd() - mProfileParams.getBegin(); - F32 hollow = mProfileParams.getHollow(); BOOL same_hole = hollow == 0.f || (mProfileParams.getCurveType() & LL_PCODE_HOLE_MASK) == LL_PCODE_HOLE_SAME; @@ -3971,7 +3977,6 @@ BOOL LLVolumeParams::isConvex() const return FALSE; } - U8 path_type = mPathParams.getCurveType(); if ( LL_PCODE_PATH_LINE == path_type ) { // straight paths with convex profile @@ -4176,18 +4181,6 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep) } -LLVolumeFace::LLVolumeFace() -{ - mTypeMask = 0; - mID = 0; - mBeginS = 0; - mBeginT = 0; - mNumS = 0; - mNumT = 0; - mHasBinormals = FALSE; -} - - BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) { if (mTypeMask & CAP_MASK) @@ -4796,6 +4789,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mIndices.resize(num_indices); mEdge.resize(num_indices); } + else + { + mHasBinormals = FALSE; + } + LLVector3& face_min = mExtents[0]; LLVector3& face_max = mExtents[1]; diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h index c239685..5b48cfc 100644 --- a/linden/indra/llmath/llvolume.h +++ b/linden/indra/llmath/llvolume.h @@ -52,6 +52,7 @@ class LLVolume; #include "llstrider.h" #include "v4coloru.h" #include "llmemory.h" +#include "llfile.h" //============================================================================ @@ -229,8 +230,8 @@ public: void copyParams(const LLProfileParams ¶ms); - BOOL importFile(FILE *fp); - BOOL exportFile(FILE *fp) const; + BOOL importFile(LLFILE *fp); + BOOL exportFile(LLFILE *fp) const; BOOL importLegacyStream(std::istream& input_stream); BOOL exportLegacyStream(std::ostream& output_stream) const; @@ -354,8 +355,8 @@ public: void copyParams(const LLPathParams ¶ms); - BOOL importFile(FILE *fp); - BOOL exportFile(FILE *fp) const; + BOOL importFile(LLFILE *fp); + BOOL exportFile(LLFILE *fp) const; BOOL importLegacyStream(std::istream& input_stream); BOOL exportLegacyStream(std::ostream& output_stream) const; @@ -545,8 +546,8 @@ public: const LLPathParams &getPathParams() const {return mPathParams;} LLPathParams &getPathParams() {return mPathParams;} - BOOL importFile(FILE *fp); - BOOL exportFile(FILE *fp) const; + BOOL importFile(LLFILE *fp); + BOOL exportFile(LLFILE *fp) const; BOOL importLegacyStream(std::istream& input_stream); BOOL exportLegacyStream(std::ostream& output_stream) const; @@ -760,7 +761,17 @@ public: class LLVolumeFace { public: - LLVolumeFace(); + LLVolumeFace() : + mID(0), + mTypeMask(0), + mHasBinormals(FALSE), + mBeginS(0), + mBeginT(0), + mNumS(0), + mNumT(0) + { + } + BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); diff --git a/linden/indra/llmath/m4math.h b/linden/indra/llmath/m4math.h index 27eb865..96e0a31 100644 --- a/linden/indra/llmath/m4math.h +++ b/linden/indra/llmath/m4math.h @@ -1,6 +1,6 @@ /** * @file m4math.h - * @brief LLMatrix3 class header file. + * @brief LLMatrix4 class header file. * * $LicenseInfo:firstyear=2000&license=viewergpl$ * @@ -101,9 +101,13 @@ class LLMatrix4 public: F32 mMatrix[NUM_VALUES_IN_MAT4][NUM_VALUES_IN_MAT4]; - LLMatrix4(); // Initializes Matrix to identity matrix + // Initializes Matrix to identity matrix + LLMatrix4() + { + setIdentity(); + } explicit LLMatrix4(const F32 *mat); // Initializes Matrix to values in mat - explicit LLMatrix4(const LLMatrix3 &mat); // Initializes Matrix to valuee in mat and sets position to (0,0,0) + explicit LLMatrix4(const LLMatrix3 &mat); // Initializes Matrix to values in mat and sets position to (0,0,0) explicit LLMatrix4(const LLQuaternion &q); // Initializes Matrix with rotation q and sets position to (0,0,0) LLMatrix4(const LLMatrix3 &mat, const LLVector4 &pos); // Initializes Matrix to values in mat and pos @@ -240,12 +244,6 @@ public: friend std::ostream& operator<<(std::ostream& s, const LLMatrix4 &a); // Stream a }; - -inline LLMatrix4::LLMatrix4() -{ - setIdentity(); -} - inline const LLMatrix4& LLMatrix4::setIdentity() { mMatrix[0][0] = 1.f; diff --git a/linden/indra/llmedia/llmediaimplcommon.cpp b/linden/indra/llmedia/llmediaimplcommon.cpp index a0705bb..abb61e1 100644 --- a/linden/indra/llmedia/llmediaimplcommon.cpp +++ b/linden/indra/llmedia/llmediaimplcommon.cpp @@ -52,6 +52,7 @@ LLMediaImplCommon::LLMediaImplCommon() : mMimeType( std::string() ), mInitialURL( std::string() ), + mImplMaker( NULL ), mAutoScaled( false ), mMediaWidth( 0 ), mMediaPrevWidth( 0 ), diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp index 8b0363a..5bf30d9 100644 --- a/linden/indra/llmedia/llmediaimplgstreamer.cpp +++ b/linden/indra/llmedia/llmediaimplgstreamer.cpp @@ -186,7 +186,8 @@ startup ( LLMediaManagerData* init_data ) WARNMSG("gst_segtrap_set_enabled() is not available; Automated crash-reporter may cease to function until next restart."); // Protect against GStreamer resetting the locale, yuck. - std::string saved_locale = setlocale(LC_ALL, NULL); + static std::string saved_locale; + saved_locale = setlocale(LC_ALL, NULL); if (0 == llgst_init_check(NULL, NULL, NULL)) { WARNMSG("GST init failed for unspecified reason."); diff --git a/linden/indra/llmedia/llmediaimplllmozlib.cpp b/linden/indra/llmedia/llmediaimplllmozlib.cpp index 53cb344..9e2564a 100644 --- a/linden/indra/llmedia/llmediaimplllmozlib.cpp +++ b/linden/indra/llmedia/llmediaimplllmozlib.cpp @@ -94,7 +94,8 @@ bool LLMediaImplLLMozLib::startup( LLMediaManagerData* init_data ) // the locale to protect it, as exotic/non-C locales // causes our code lots of general critical weirdness // and crashness. (SL-35450) - std::string saved_locale = setlocale(LC_ALL, NULL); + static std::string saved_locale; + saved_locale = setlocale(LC_ALL, NULL); #endif // LL_LINUX bool result = LLMozLib::getInstance()->init( init_data->getBrowserApplicationDir(), @@ -132,7 +133,8 @@ bool LLMediaImplLLMozLib::init() return false; #if LL_LINUX - std::string saved_locale = setlocale(LC_ALL, NULL); + static std::string saved_locale; + saved_locale = setlocale(LC_ALL, NULL); #endif // LL_LINUX mWindowId = LLMozLib::getInstance()->createBrowserWindow( mBrowserWindowWidth, mBrowserWindowHeight ); diff --git a/linden/indra/llmedia/llmediaimplquicktime.cpp b/linden/indra/llmedia/llmediaimplquicktime.cpp index b126e2f..8f7686d 100644 --- a/linden/indra/llmedia/llmediaimplquicktime.cpp +++ b/linden/indra/llmedia/llmediaimplquicktime.cpp @@ -116,11 +116,19 @@ bool LLMediaImplQuickTime::load( const std::string url ) if ( url.empty() ) return false; + //In case std::string::c_str() makes a copy of the url data, + //make sure there is memory to hold it before allocating memory for handle. + //if fails, NewHandleClear(...) should return NULL. + const char* url_string = url.c_str() ; Handle handle = NewHandleClear( ( Size )( url.length() + 1 ) ); if ( NULL == handle ) return false; + if(noErr != MemError() || NULL == *handle) + { + return false ; + } - BlockMove( url.c_str(), *handle, ( Size )( url.length() + 1 ) ); + BlockMove( url_string, *handle, ( Size )( url.length() + 1 ) ); //std::cout << "LLMediaImplQuickTime::load( " << url << " )" << std::endl; diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h index ec9f881..079cb29 100644 --- a/linden/indra/llmedia/llmediaobserver.h +++ b/linden/indra/llmedia/llmediaobserver.h @@ -38,22 +38,22 @@ class LLMediaEvent { public: LLMediaEvent( LLMediaBase* subject ) : - mSubject( subject ) + mSubject( subject ), mIntValue(-1) { }; LLMediaEvent( LLMediaBase* subject, std::string in ) : - mSubject( subject ), mStringValue(in) + mSubject( subject ), mIntValue(-1), mStringValue(in) { }; LLMediaEvent( LLMediaBase* subject, std::string string_in, std::string string_ex_in ) : - mSubject( subject ), mStringValue(string_in), mStringValueEx(string_ex_in) + mSubject( subject ), mIntValue(-1), 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) + mSubject( subject ), mIntValue(int_in), mStringValue(string_in) { }; diff --git a/linden/indra/llmessage/llassetstorage.cpp b/linden/indra/llmessage/llassetstorage.cpp index 13b1525..a6077e5 100644 --- a/linden/indra/llmessage/llassetstorage.cpp +++ b/linden/indra/llmessage/llassetstorage.cpp @@ -318,7 +318,7 @@ LLAssetStorage::~LLAssetStorage() void LLAssetStorage::setUpstream(const LLHost &upstream_host) { - llinfos << "AssetStorage: Setting upstream provider to " << upstream_host << llendl; + LL_DEBUGS("AppInit") << "AssetStorage: Setting upstream provider to " << upstream_host << LL_ENDL; mUpstreamHost = upstream_host; } @@ -1242,7 +1242,7 @@ void LLAssetStorage::legacyGetDataCallback(LLVFS *vfs, const LLUUID &uuid, LLAss uuid.toString(uuid_str); snprintf(filename,sizeof(filename),"%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */ - FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ if (fp) { const S32 buf_size = 65536; diff --git a/linden/indra/llmessage/llblowfishcipher.cpp b/linden/indra/llmessage/llblowfishcipher.cpp index 45ff045..a0fe157 100644 --- a/linden/indra/llmessage/llblowfishcipher.cpp +++ b/linden/indra/llmessage/llblowfishcipher.cpp @@ -30,8 +30,8 @@ */ #include "linden_common.h" - #include "llblowfishcipher.h" +#include LLBlowfishCipher::LLBlowfishCipher(const U8* secret, size_t secret_size) @@ -50,11 +50,6 @@ LLBlowfishCipher::~LLBlowfishCipher() mSecret = NULL; } - -#if LL_LINUX - -#include - // virtual U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len) { @@ -133,29 +128,3 @@ U32 LLBlowfishCipher::requiredEncryptionSpace(U32 len) const len -= (len % BLOCK_SIZE); return len; } - -#else // !LL_LINUX - -// virtual -U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len) -{ - llerrs << "LLBlowfishCipher only supported on Linux" << llendl; - return 0; -} - -// virtual -U32 LLBlowfishCipher::decrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len) -{ - llerrs << "LLBlowfishCipher only supported on Linux" << llendl; - return 0; -} - -// virtual -U32 LLBlowfishCipher::requiredEncryptionSpace(U32 len) const -{ - llerrs << "LLBlowfishCipher only supported on Linux" << llendl; - return 0; -} - -#endif - diff --git a/linden/indra/llmessage/llcachename.cpp b/linden/indra/llmessage/llcachename.cpp index e8208cc..9adf10d 100644 --- a/linden/indra/llmessage/llcachename.cpp +++ b/linden/indra/llmessage/llcachename.cpp @@ -323,7 +323,7 @@ void LLCacheName::cancelCallback(const LLUUID& id, LLCacheNameCallback callback, } } -void LLCacheName::importFile(FILE* fp) +void LLCacheName::importFile(LLFILE* fp) { S32 count = 0; diff --git a/linden/indra/llmessage/llcachename.h b/linden/indra/llmessage/llcachename.h index 26a873f..e7d5a44 100644 --- a/linden/indra/llmessage/llcachename.h +++ b/linden/indra/llmessage/llcachename.h @@ -64,7 +64,7 @@ public: void cancelCallback(const LLUUID& id, LLCacheNameCallback callback, void* user_data = NULL); // janky old format. Remove after a while. Phoenix. 2008-01-30 - void importFile(FILE* fp); + void importFile(LLFILE* fp); // storing cache on disk; for viewer, in name.cache bool importFile(std::istream& istr); diff --git a/linden/indra/llmessage/llcurl.cpp b/linden/indra/llmessage/llcurl.cpp index a8bb46b..f03cebc 100644 --- a/linden/indra/llmessage/llcurl.cpp +++ b/linden/indra/llmessage/llcurl.cpp @@ -674,8 +674,9 @@ std::string LLCurl::strerror(CURLcode errorcode) // For generating a simple request for data // using one multi and one easy per request -LLCurlRequest::LLCurlRequest() - : mActiveMulti(NULL) +LLCurlRequest::LLCurlRequest() : + mActiveMulti(NULL), + mActiveRequestCount(0) { } diff --git a/linden/indra/llmessage/lldatapacker.h b/linden/indra/llmessage/lldatapacker.h index f41fb76..b1aa8fe 100644 --- a/linden/indra/llmessage/lldatapacker.h +++ b/linden/indra/llmessage/lldatapacker.h @@ -330,7 +330,7 @@ inline BOOL LLDataPackerAsciiBuffer::verifyLength(const S32 data_size, const cha class LLDataPackerAsciiFile : public LLDataPacker { public: - LLDataPackerAsciiFile(FILE *fp, const S32 indent = 2) + LLDataPackerAsciiFile(LLFILE *fp, const S32 indent = 2) : LLDataPacker(), mIndent(indent), mFP(fp), @@ -407,7 +407,7 @@ protected: protected: S32 mIndent; - FILE *mFP; + LLFILE *mFP; std::ostream* mOutputStream; std::istream* mInputStream; }; diff --git a/linden/indra/llmessage/llfiltersd2xmlrpc.cpp b/linden/indra/llmessage/llfiltersd2xmlrpc.cpp index 4e38924..b3ebd0b 100644 --- a/linden/indra/llmessage/llfiltersd2xmlrpc.cpp +++ b/linden/indra/llmessage/llfiltersd2xmlrpc.cpp @@ -695,6 +695,24 @@ LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl( buffer->readAfter(channels.in(), NULL, (U8*)buf, bytes); //lldebugs << "xmlrpc request: " << buf << llendl; + + // Check the value in the buffer. XMLRPC_REQUEST_FromXML will report a error code 4 if + // values that are less than 0x20 are passed to it, except + // 0x09: Horizontal tab; 0x0a: New Line; 0x0d: Carriage + U8* cur_pBuf = (U8*)buf; + U8 cur_char; + for (S32 i=0; ifirst << llendl; + LL_DEBUGS("AppInit") << "LLHTTPRegistrar::buildAllServices adding node for path " + << i->first << LL_ENDL; root.addNode(i->first, i->second->build()); } diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp index 807a35b..e23ed07 100644 --- a/linden/indra/llmessage/llmessageconfig.cpp +++ b/linden/indra/llmessage/llmessageconfig.cpp @@ -66,6 +66,7 @@ public: /* virtual */ void loadFile(); void loadServerDefaults(const LLSD& data); + void loadMaxQueuedEvents(const LLSD& data); void loadMessages(const LLSD& data); void loadCapBans(const LLSD& blacklist); void loadMessageBans(const LLSD& blacklist); @@ -73,6 +74,7 @@ public: public: LLSD mCapBans; + S32 mMaxQueuedEvents; }; std::string LLMessageConfigFile::filename() @@ -99,19 +101,20 @@ void LLMessageConfigFile::loadFile() if (file.is_open()) { - llinfos << "Loading message.xml file at " << filename() << llendl; + LL_DEBUGS("AppInit") << "Loading message.xml file at " << filename() << LL_ENDL; LLSDSerialize::fromXML(data, file); } if (data.isUndefined()) { - llinfos << "LLMessageConfigFile::loadFile: file missing," + LL_INFOS("AppInit") << "LLMessageConfigFile::loadFile: file missing," " ill-formed, or simply undefined; not changing the" - " file" << llendl; + " file" << LL_ENDL; return; } } loadServerDefaults(data); + loadMaxQueuedEvents(data); loadMessages(data); loadCapBans(data); loadMessageBans(data); @@ -122,6 +125,19 @@ void LLMessageConfigFile::loadServerDefaults(const LLSD& data) mServerDefault = data["serverDefaults"][sServerName].asString(); } +const S32 DEFAULT_MAX_QUEUED_EVENTS = 100; +void LLMessageConfigFile::loadMaxQueuedEvents(const LLSD& data) +{ + if (data.has("maxQueuedEvents")) + { + mMaxQueuedEvents = data["maxQueuedEvents"].asInteger(); + } + else + { + mMaxQueuedEvents = DEFAULT_MAX_QUEUED_EVENTS; + } +} + void LLMessageConfigFile::loadMessages(const LLSD& data) { mMessages = data["messages"]; @@ -141,15 +157,15 @@ void LLMessageConfigFile::loadCapBans(const LLSD& data) LLSD bans = data["capBans"]; if (!bans.isMap()) { - llinfos << "LLMessageConfigFile::loadCapBans: missing capBans section" - << llendl; + LL_INFOS("AppInit") << "LLMessageConfigFile::loadCapBans: missing capBans section" + << LL_ENDL; return; } mCapBans = bans; - llinfos << "LLMessageConfigFile::loadCapBans: " - << bans.size() << " ban tests" << llendl; + LL_DEBUGS("AppInit") << "LLMessageConfigFile::loadCapBans: " + << bans.size() << " ban tests" << LL_ENDL; } void LLMessageConfigFile::loadMessageBans(const LLSD& data) @@ -157,8 +173,8 @@ void LLMessageConfigFile::loadMessageBans(const LLSD& data) LLSD bans = data["messageBans"]; if (!bans.isMap()) { - llinfos << "LLMessageConfigFile::loadMessageBans: missing messageBans section" - << llendl; + LL_INFOS("AppInit") << "LLMessageConfigFile::loadMessageBans: missing messageBans section" + << LL_ENDL; return; } @@ -182,8 +198,8 @@ void LLMessageConfig::initClass(const std::string& server_name, sServerName = server_name; sConfigDir = config_dir; (void) LLMessageConfigFile::instance(); - llinfos << "LLMessageConfig::initClass config file " - << config_dir << "/" << messageConfigFileName << llendl; + LL_DEBUGS("AppInit") << "LLMessageConfig::initClass config file " + << config_dir << "/" << messageConfigFileName << LL_ENDL; } //static @@ -191,10 +207,10 @@ void LLMessageConfig::useConfig(const LLSD& config) { LLMessageConfigFile &the_file = LLMessageConfigFile::instance(); the_file.loadServerDefaults(config); + the_file.loadMaxQueuedEvents(config); the_file.loadMessages(config); the_file.loadCapBans(config); the_file.loadMessageBans(config); - } //static @@ -213,6 +229,13 @@ LLMessageConfig::Flavor LLMessageConfig::getServerDefaultFlavor() } //static +S32 LLMessageConfig::getMaxQueuedEvents() +{ + LLMessageConfigFile& file = LLMessageConfigFile::instance(); + return file.mMaxQueuedEvents; +} + +//static LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name) { LLMessageConfigFile& file = LLMessageConfigFile::instance(); diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h index 9b62f06..61788c7 100644 --- a/linden/indra/llmessage/llmessageconfig.h +++ b/linden/indra/llmessage/llmessageconfig.h @@ -48,6 +48,7 @@ public: static void useConfig(const LLSD& config); static Flavor getServerDefaultFlavor(); + static S32 getMaxQueuedEvents(); // For individual messages static Flavor getMessageFlavor(const std::string& msg_name); diff --git a/linden/indra/llmessage/llregionhandle.h b/linden/indra/llmessage/llregionhandle.h index ac7fb14..7e62e96 100644 --- a/linden/indra/llmessage/llregionhandle.h +++ b/linden/indra/llmessage/llregionhandle.h @@ -115,7 +115,7 @@ inline LLVector3d from_region_handle(const U64 ®ion_handle) // grid-based region handle encoding. pass in a grid position // (eg: 1000,1000) and this will return the region handle. -inline U64 grid_to_region_handle(U32 grid_x, U32 grid_y) +inline U64 grid_to_region_handle(const U32 grid_x, const U32 grid_y) { return to_region_handle(grid_x * REGION_WIDTH_UNITS, grid_y * REGION_WIDTH_UNITS); diff --git a/linden/indra/llmessage/lltransfermanager.cpp b/linden/indra/llmessage/lltransfermanager.cpp index 6fbb4f9..7817dba 100644 --- a/linden/indra/llmessage/lltransfermanager.cpp +++ b/linden/indra/llmessage/lltransfermanager.cpp @@ -1336,7 +1336,9 @@ BOOL LLTransferSourceParamsInvItem::unpackParams(LLDataPacker &dp) } LLTransferSourceParamsEstate::LLTransferSourceParamsEstate() : - LLTransferSourceParams(LLTST_SIM_ESTATE), mEstateAssetType(ET_NONE) + LLTransferSourceParams(LLTST_SIM_ESTATE), + mEstateAssetType(ET_NONE), + mAssetType(LLAssetType::AT_NONE) { } diff --git a/linden/indra/llmessage/lltransfersourcefile.cpp b/linden/indra/llmessage/lltransfersourcefile.cpp index 55f368f..4b60cf3 100644 --- a/linden/indra/llmessage/lltransfersourcefile.cpp +++ b/linden/indra/llmessage/lltransfersourcefile.cpp @@ -153,7 +153,9 @@ BOOL LLTransferSourceFile::unpackParams(LLDataPacker &dp) } -LLTransferSourceParamsFile::LLTransferSourceParamsFile() : LLTransferSourceParams(LLTST_FILE) +LLTransferSourceParamsFile::LLTransferSourceParamsFile() : + LLTransferSourceParams(LLTST_FILE), + mDeleteOnCompletion(FALSE) { } diff --git a/linden/indra/llmessage/lltransfersourcefile.h b/linden/indra/llmessage/lltransfersourcefile.h index 1a9ff9e..030f80e 100644 --- a/linden/indra/llmessage/lltransfersourcefile.h +++ b/linden/indra/llmessage/lltransfersourcefile.h @@ -74,7 +74,7 @@ protected: protected: LLTransferSourceParamsFile mParams; - FILE *mFP; + LLFILE *mFP; }; #endif // LL_LLTRANSFERSOURCEFILE_H diff --git a/linden/indra/llmessage/lltransfertargetfile.h b/linden/indra/llmessage/lltransfertargetfile.h index 3f5284e..02c0c11 100644 --- a/linden/indra/llmessage/lltransfertargetfile.h +++ b/linden/indra/llmessage/lltransfertargetfile.h @@ -69,7 +69,7 @@ protected: LLTransferTargetParamsFile mParams; - FILE *mFP; + LLFILE *mFP; }; #endif // LL_LLTRANSFERTARGETFILE_H diff --git a/linden/indra/llmessage/llxfer_file.cpp b/linden/indra/llmessage/llxfer_file.cpp index 027bacb..840d84c 100644 --- a/linden/indra/llmessage/llxfer_file.cpp +++ b/linden/indra/llmessage/llxfer_file.cpp @@ -353,7 +353,7 @@ S32 LLXfer_File::processEOF() } else { - //FILE* fp = LLFile::fopen(mTempFilename, "r"); + //LLFILE* fp = LLFile::fopen(mTempFilename, "r"); //llwarns << "File " << mTempFilename << " does " // << (!fp ? "not" : "" ) << " exit." << llendl; //if(fp) fclose(fp); @@ -424,8 +424,8 @@ U32 LLXfer_File::getXferTypeTag() S32 copy_file(const char* from, const char* to) { S32 rv = 0; - FILE* in = LLFile::fopen(from, "rb"); /*Flawfinder: ignore*/ - FILE* out = LLFile::fopen(to, "wb"); /*Flawfinder: ignore*/ + LLFILE* in = LLFile::fopen(from, "rb"); /*Flawfinder: ignore*/ + LLFILE* out = LLFile::fopen(to, "wb"); /*Flawfinder: ignore*/ if(in && out) { S32 read = 0; diff --git a/linden/indra/llmessage/llxfer_file.h b/linden/indra/llmessage/llxfer_file.h index 7958af1..b5294ad 100644 --- a/linden/indra/llmessage/llxfer_file.h +++ b/linden/indra/llmessage/llxfer_file.h @@ -38,7 +38,7 @@ class LLXfer_File : public LLXfer { protected: - FILE *mFp; + LLFILE *mFp; char mLocalFilename[LL_MAX_PATH]; /* Flawfinder : ignore */ char mRemoteFilename[LL_MAX_PATH]; /* Flawfinder : ignore */ ELLPath mRemotePath; diff --git a/linden/indra/llmessage/llxfermanager.cpp b/linden/indra/llmessage/llxfermanager.cpp index 47c950b..f7b83ec 100644 --- a/linden/indra/llmessage/llxfermanager.cpp +++ b/linden/indra/llmessage/llxfermanager.cpp @@ -143,8 +143,8 @@ void LLXferManager::setAckThrottleBPS(const F32 bps) // Set F32 actual_rate = llmax(min_bps*1.1f, bps); - llinfos << "LLXferManager ack throttle min rate: " << min_bps << llendl; - llinfos << "LLXferManager ack throttle actual rate: " << actual_rate << llendl; + LL_DEBUGS("AppInit") << "LLXferManager ack throttle min rate: " << min_bps << LL_ENDL; + LL_DEBUGS("AppInit") << "LLXferManager ack throttle actual rate: " << actual_rate << LL_ENDL; mAckThrottle.setRate(actual_rate); } diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp index c572341..f3aac29 100644 --- a/linden/indra/llmessage/message.cpp +++ b/linden/indra/llmessage/message.cpp @@ -120,7 +120,7 @@ namespace // don't spam when agent communication disconnected already if (status != 410) { - llwarns << "error status " << status + LL_WARNS("Messaging") << "error status " << status << " for message " << mMessageName << " reason " << reason << llendl; } @@ -176,7 +176,7 @@ void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response, gMessageSystem->isTrustedMessage(name))) && !gMessageSystem->isTrustedSender(LLHost(sender))) { - llwarns << "trusted message POST to /trusted-message/" + LL_WARNS("Messaging") << "trusted message POST to /trusted-message/" << name << " from unknown or untrusted sender " << sender << llendl; response->status(403, "Unknown or untrusted sender"); @@ -326,14 +326,14 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port, mbError = TRUE; mErrorCode = error; } - //llinfos << << "*** port: " << mPort << llendl; +// LL_DEBUGS("Messaging") << << "*** port: " << mPort << llendl; // // Create the data structure that we can poll on // if (!gAPRPoolp) { - llerrs << "No APR pool before message system initialization!" << llendl; + LL_ERRS("Messaging") << "No APR pool before message system initialization!" << llendl; ll_init_apr(); } apr_socket_t *aprSocketp = NULL; @@ -369,7 +369,7 @@ void LLMessageSystem::loadTemplateFile(const char* filename) { if(!filename) { - llerrs << "No template filename specified" << llendl; + LL_ERRS("Messaging") << "No template filename specified" << llendl; mbError = TRUE; return; } @@ -377,7 +377,7 @@ void LLMessageSystem::loadTemplateFile(const char* filename) std::string template_body; if(!_read_file_into_string(template_body, filename)) { - llwarns << "Failed to open template: " << filename << llendl; + LL_WARNS("Messaging") << "Failed to open template: " << filename << llendl; mbError = TRUE; return; } @@ -588,7 +588,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) // Ones that are non-zero but below the minimum packet size are worrisome. if (receive_size > 0) { - llwarns << "Invalid (too short) packet discarded " << receive_size << llendl; + LL_WARNS("Messaging") << "Invalid (too short) packet discarded " << receive_size << llendl; callExceptionFunc(MX_PACKET_TOO_SHORT); } // no data in packet receive buffer @@ -612,7 +612,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) { // mal-formed packet. ignore it and continue with // the next one - llwarns << "Malformed packet received. Packet size " + LL_WARNS("Messaging") << "Malformed packet received. Packet size " << receive_size << " with invalid no. of acks " << acks << llendl; valid_packet = FALSE; @@ -642,7 +642,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) memcpy(&mem_id, &mTrueReceiveBuffer[true_rcv_size], /* Flawfinder: ignore*/ sizeof(TPACKETID)); packet_id = ntohl(mem_id); - //llinfos << "got ack: " << packet_id << llendl; + //LL_INFOS("Messaging") << "got ack: " << packet_id << llendl; cdp->ackReliablePacket(packet_id); } if (!cdp->getUnackedPacketCount()) @@ -671,7 +671,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) // TESTING CODE //if(mCircuitInfo.mCurrentCircuit->mHost != host) //{ - // llwarns << "DISCARDED PACKET HOST MISMATCH! HOST: " + // LL_WARNS("Messaging") << "DISCARDED PACKET HOST MISMATCH! HOST: " // << host << " CIRCUIT: " // << mCircuitInfo.mCurrentCircuit->mHost // << llendl; @@ -681,7 +681,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) cdp->collectRAck(mCurrentRecvPacketID); } - //llinfos << "Discarding duplicate resend from " << host << llendl; + LL_DEBUGS("Messaging") << "Discarding duplicate resend from " << host << llendl; if(mVerboseLog) { std::ostringstream str; @@ -693,7 +693,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) << " resent " << ((acks > 0) ? "acks" : "") << " DISCARD DUPLICATE"; - llinfos << str.str() << llendl; + LL_INFOS("Messaging") << str.str() << llendl; } mPacketsIn++; valid_packet = FALSE; @@ -740,7 +740,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) valid_packet && mTemplateMessageReader->isBanned(cdp && cdp->getTrusted())) { - llwarns << "LLMessageSystem::checkMessages " + LL_WARNS("Messaging") << "LLMessageSystem::checkMessages " << "received banned message " << mTemplateMessageReader->getMessageName() << " from " @@ -764,7 +764,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if (valid_packet) { // enable this for output of message names - //llinfos << "< \"" << mTemplateMessageReader->getMessageName() + //LL_INFOS("Messaging") << "< \"" << mTemplateMessageReader->getMessageName() //<< "\"" << llendl; /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. @@ -773,23 +773,23 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) static char* object_update = LLMessageStringTable::getInstance()->getString("ObjectUpdate"); if(object_update == mTemplateMessageReader->getMessageName() ) { - llinfos << "ObjectUpdate:" << llendl; + LL_INFOS("Messaging") << "ObjectUpdate:" << llendl; U32 i; - llinfos << " Zero Encoded: " << zero_unexpanded_size << llendl; + LL_INFOS("Messaging") << " Zero Encoded: " << zero_unexpanded_size << llendl; for( i = 0; imMemberBlocks.begin(), @@ -807,7 +807,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if( getNumberOfBlocksFast( block_name ) < 1 ) { - llinfos << var_name << " has no blocks" << llendl; + LL_INFOS("Messaging") << var_name << " has no blocks" << llendl; } for( S32 blocknum = 0; blocknum < getNumberOfBlocksFast( block_name ); blocknum++ ) { @@ -820,7 +820,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if (!msg_block_data) { sprintf(errmsg, "Block %s #%d not in message %s", block_name, blocknum, mCurrentRMessageData->mName); - llerrs << errmsg << llendl; + LL_ERRS("Messaging") << errmsg << llendl; } LLMsgVarData vardata = msg_block_data->mMemberVarData[vnamep]; @@ -828,7 +828,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if (!vardata.getName()) { sprintf(errmsg, "Variable %s not in message %s block %s", vnamep, mCurrentRMessageData->mName, bnamep); - llerrs << errmsg << llendl; + LL_ERRS("Messaging") << errmsg << llendl; } const S32 vardata_size = vardata.getSize(); @@ -837,17 +837,17 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) for( i = 0; i < vardata_size; i++ ) { byte_count++; - llinfos << block_name << " " << var_name << " [" << blocknum << "][" << i << "]= " << (U32)(((U8*)vardata.getData())[i]) << llendl; + LL_INFOS("Messaging") << block_name << " " << var_name << " [" << blocknum << "][" << i << "]= " << (U32)(((U8*)vardata.getData())[i]) << llendl; } } else { - llinfos << block_name << " " << var_name << " [" << blocknum << "] 0 bytes" << llendl; + LL_INFOS("Messaging") << block_name << " " << var_name << " [" << blocknum << "] 0 bytes" << llendl; } } } } - llinfos << "Byte count =" << byte_count << llendl; + LL_INFOS("Messaging") << "Byte count =" << byte_count << llendl; } } */ @@ -871,7 +871,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) { if (mbProtected && (!cdp)) { - llwarns << "Invalid Packet from invalid circuit " << host << llendl; + LL_WARNS("Messaging") << "Invalid Packet from invalid circuit " << host << llendl; mOffCircuitPackets++; } else @@ -944,7 +944,7 @@ void LLMessageSystem::processAcks() if (!mDenyTrustedCircuitSet.empty()) { - llinfos << "Sending queued DenyTrustedCircuit messages." << llendl; + LL_INFOS("Messaging") << "Sending queued DenyTrustedCircuit messages." << llendl; for (host_set_t::iterator hostit = mDenyTrustedCircuitSet.begin(); hostit != mDenyTrustedCircuitSet.end(); ++hostit) { reallySendDenyTrustedCircuit(*hostit); @@ -1176,7 +1176,7 @@ LLHTTPClient::ResponderPtr LLMessageSystem::createResponder(const std::string& n { // These messages aren't really unreliable, they just weren't // explicitly sent as reliable, so they don't have a callback -// llwarns << "LLMessageSystem::sendMessage: Sending unreliable " +// LL_WARNS("Messaging") << "LLMessageSystem::sendMessage: Sending unreliable " // << mMessageBuilder->getMessageName() << " message via HTTP" // << llendl; return new LLFnPtrResponder( @@ -1213,10 +1213,10 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) // yup! don't send packets to an unknown circuit if(mVerboseLog) { - llinfos << "MSG: -> " << host << "\tUNKNOWN CIRCUIT:\t" + LL_INFOS_ONCE("Messaging") << "MSG: -> " << host << "\tUNKNOWN CIRCUIT:\t" << mMessageBuilder->getMessageName() << llendl; } - llwarns << "sendMessage - Trying to send " + LL_WARNS_ONCE("Messaging") << "sendMessage - Trying to send " << mMessageBuilder->getMessageName() << " on unknown circuit " << host << llendl; return 0; @@ -1236,10 +1236,10 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) // nope. don't send to dead circuits if(mVerboseLog) { - llinfos << "MSG: -> " << host << "\tDEAD CIRCUIT\t\t" + LL_INFOS("Messaging") << "MSG: -> " << host << "\tDEAD CIRCUIT\t\t" << mMessageBuilder->getMessageName() << llendl; } - llwarns << "sendMessage - Trying to send message " + LL_WARNS("Messaging") << "sendMessage - Trying to send message " << mMessageBuilder->getMessageName() << " to dead circuit " << host << llendl; return 0; @@ -1283,7 +1283,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) if((mMessageBuilder->getMessageName() != _PREHASH_ChildAgentUpdate) && (mMessageBuilder->getMessageName() != _PREHASH_SendXferPacket)) { - llwarns << "sendMessage - Trying to send " + LL_WARNS("Messaging") << "sendMessage - Trying to send " << ((buffer_length > 4000) ? "EXTRA " : "") << "BIG message " << mMessageBuilder->getMessageName() << " - " << buffer_length << llendl; @@ -1348,7 +1348,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) // append_acout_count is incorrect or that // MAX_BUFFER_SIZE has fallen below MTU which is bad // and probably programmer error. - llerrs << "Buffer packing failed due to size.." << llendl; + LL_ERRS("Messaging") << "Buffer packing failed due to size.." << llendl; } } @@ -1389,13 +1389,9 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) std::ostream_iterator append(str, " "); std::copy(acks.begin(), acks.end(), append); } - llinfos << str.str() << llendl; + LL_INFOS("Messaging") << str.str() << llendl; } - /*lldebugst(LLERR_MESSAGE) << "MessageSent at: " << (S32)totalTime() - << "," << mMessageBuilder->getMessageName() - << " to " << host - << llendl;*/ mPacketsOut++; mBytesOut += buffer_length; @@ -1417,7 +1413,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << " REJECTED"; - llinfos << str.str() << llendl; + LL_INFOS("Messaging") << str.str() << llendl; } // nope! // cout << "Rejecting unexpected message " << mCurrentMessageTemplate->mName << " from " << hex << ip << " , " << dec << port << endl; @@ -1425,7 +1421,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re // Keep track of rejected messages as well if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) { - llwarns << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; + LL_WARNS("Messaging") << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; } else { @@ -1444,13 +1440,13 @@ S32 LLMessageSystem::sendMessage( { if (!(host.isOk())) { - llwarns << "trying to send message to invalid host" << llendl; + LL_WARNS("Messaging") << "trying to send message to invalid host" << llendl; return 0; } newMessage(name); if (mMessageBuilder != mLLSDMessageBuilder) { - llwarns << "trying to send llsd message when builder is not LLSD!" + LL_WARNS("Messaging") << "trying to send llsd message when builder is not LLSD!" << llendl; return 0; } @@ -1466,7 +1462,7 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) // if it's received on a trusted circuit. JC if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit")) { - llwarns << "Received trusted message on untrusted circuit. " + LL_WARNS("Messaging") << "Received trusted message on untrusted circuit. " << "Will reply with deny. " << "Message: " << nullToEmpty(mMessageReader->getMessageName()) << " Host: " << host << llendl; @@ -1474,7 +1470,7 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) { - llwarns << "got more than " << MAX_MESSAGE_COUNT_NUM + LL_WARNS("Messaging") << "got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; } @@ -1494,7 +1490,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r { if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) { - llwarns << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; + LL_WARNS("Messaging") << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; } else { @@ -1523,7 +1519,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r << (recv_reliable ? " reliable" : "") << (recv_resent ? " resent" : "") << (recv_acks ? " acks" : ""); - llinfos << str.str() << llendl; + LL_INFOS("Messaging") << str.str() << llendl; } } @@ -1533,48 +1529,48 @@ void LLMessageSystem::sanityCheck() // if (!mCurrentRMessageData) // { -// llerrs << "mCurrentRMessageData is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentRMessageData is NULL" << llendl; // } // if (!mCurrentRMessageTemplate) // { -// llerrs << "mCurrentRMessageTemplate is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentRMessageTemplate is NULL" << llendl; // } // if (!mCurrentRTemplateBlock) // { -// llerrs << "mCurrentRTemplateBlock is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentRTemplateBlock is NULL" << llendl; // } // if (!mCurrentRDataBlock) // { -// llerrs << "mCurrentRDataBlock is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentRDataBlock is NULL" << llendl; // } // if (!mCurrentSMessageData) // { -// llerrs << "mCurrentSMessageData is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentSMessageData is NULL" << llendl; // } // if (!mCurrentSMessageTemplate) // { -// llerrs << "mCurrentSMessageTemplate is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentSMessageTemplate is NULL" << llendl; // } // if (!mCurrentSTemplateBlock) // { -// llerrs << "mCurrentSTemplateBlock is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentSTemplateBlock is NULL" << llendl; // } // if (!mCurrentSDataBlock) // { -// llerrs << "mCurrentSDataBlock is NULL" << llendl; +// LL_ERRS("Messaging") << "mCurrentSDataBlock is NULL" << llendl; // } } void LLMessageSystem::showCircuitInfo() { - llinfos << mCircuitInfo << llendl; + LL_INFOS("Messaging") << mCircuitInfo << llendl; } @@ -1624,7 +1620,7 @@ void LLMessageSystem::enableCircuit(const LLHost &host, BOOL trusted) void LLMessageSystem::disableCircuit(const LLHost &host) { - llinfos << "LLMessageSystem::disableCircuit for " << host << llendl; + LL_INFOS("Messaging") << "LLMessageSystem::disableCircuit for " << host << llendl; U32 code = gMessageSystem->findCircuitCode( host ); // Don't need to do this, as we're removing the circuit info anyway - djs 01/28/03 @@ -1637,7 +1633,7 @@ void LLMessageSystem::disableCircuit(const LLHost &host) code_session_map_t::iterator it = mCircuitCodes.find(code); if(it != mCircuitCodes.end()) { - llinfos << "Circuit " << code << " removed from list" << llendl; + LL_INFOS("Messaging") << "Circuit " << code << " removed from list" << llendl; //mCircuitCodes.removeData(code); mCircuitCodes.erase(it); } @@ -1653,7 +1649,7 @@ void LLMessageSystem::disableCircuit(const LLHost &host) U32 old_port = (U32)(ip_port & (U64)0xFFFFFFFF); U32 old_ip = (U32)(ip_port >> 32); - llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; + LL_INFOS("Messaging") << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; gMessageSystem->mIPPortToCircuitCode.erase(ip_port); } mCircuitInfo.removeCircuitData(host); @@ -1663,7 +1659,7 @@ void LLMessageSystem::disableCircuit(const LLHost &host) // Sigh, since we can open circuits which don't have circuit // codes, it's possible for this to happen... - llwarns << "Couldn't find circuit code for " << host << llendl; + LL_WARNS("Messaging") << "Couldn't find circuit code for " << host << llendl; } } @@ -1694,7 +1690,7 @@ BOOL LLMessageSystem::checkCircuitBlocked(const U32 circuit) if (!host.isOk()) { - //llinfos << "checkCircuitBlocked: Unknown circuit " << circuit << llendl; + LL_DEBUGS("Messaging") << "checkCircuitBlocked: Unknown circuit " << circuit << llendl; return TRUE; } @@ -1705,7 +1701,7 @@ BOOL LLMessageSystem::checkCircuitBlocked(const U32 circuit) } else { - llinfos << "checkCircuitBlocked(circuit): Unknown host - " << host << llendl; + LL_INFOS("Messaging") << "checkCircuitBlocked(circuit): Unknown host - " << host << llendl; return FALSE; } } @@ -1716,7 +1712,7 @@ BOOL LLMessageSystem::checkCircuitAlive(const U32 circuit) if (!host.isOk()) { - //llinfos << "checkCircuitAlive: Unknown circuit " << circuit << llendl; + LL_DEBUGS("Messaging") << "checkCircuitAlive: Unknown circuit " << circuit << llendl; return FALSE; } @@ -1727,7 +1723,7 @@ BOOL LLMessageSystem::checkCircuitAlive(const U32 circuit) } else { - llinfos << "checkCircuitAlive(circuit): Unknown host - " << host << llendl; + LL_INFOS("Messaging") << "checkCircuitAlive(circuit): Unknown host - " << host << llendl; return FALSE; } } @@ -1741,7 +1737,7 @@ BOOL LLMessageSystem::checkCircuitAlive(const LLHost &host) } else { - //llinfos << "checkCircuitAlive(host): Unknown host - " << host << llendl; + LL_DEBUGS("Messaging") << "checkCircuitAlive(host): Unknown host - " << host << llendl; return FALSE; } } @@ -1891,7 +1887,7 @@ void LLMessageSystem::processAssignCircuitCode(LLMessageSystem* msg, void**) msg->getUUIDFast(_PREHASH_CircuitCode, _PREHASH_SessionID, session_id); if(session_id != msg->getMySessionID()) { - llwarns << "AssignCircuitCode, bad session id. Expecting " + LL_WARNS("Messaging") << "AssignCircuitCode, bad session id. Expecting " << msg->getMySessionID() << " but got " << session_id << llendl; return; @@ -1900,11 +1896,11 @@ void LLMessageSystem::processAssignCircuitCode(LLMessageSystem* msg, void**) msg->getU32Fast(_PREHASH_CircuitCode, _PREHASH_Code, code); if (!code) { - llerrs << "Assigning circuit code of zero!" << llendl; + LL_ERRS("Messaging") << "Assigning circuit code of zero!" << llendl; } msg->mOurCircuitCode = code; - llinfos << "Circuit code " << code << " assigned." << llendl; + LL_INFOS("Messaging") << "Circuit code " << code << " assigned." << llendl; } */ @@ -1928,20 +1924,20 @@ bool LLMessageSystem::addCircuitCode(U32 code, const LLUUID& session_id) { if(!code) { - llwarns << "addCircuitCode: zero circuit code" << llendl; + LL_WARNS("Messaging") << "addCircuitCode: zero circuit code" << llendl; return false; } code_session_map_t::iterator it = mCircuitCodes.find(code); if(it == mCircuitCodes.end()) { - llinfos << "New circuit code " << code << " added" << llendl; + LL_INFOS("Messaging") << "New circuit code " << code << " added" << llendl; //msg->mCircuitCodes[circuit_code] = circuit_code; mCircuitCodes.insert(code_session_map_t::value_type(code, session_id)); } else { - llinfos << "Duplicate circuit code " << code << " added" << llendl; + LL_INFOS("Messaging") << "Duplicate circuit code " << code << " added" << llendl; } return true; } @@ -1973,7 +1969,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, if(it == msg->mCircuitCodes.end()) { // Whoah, abort! We don't know anything about this circuit code. - llwarns << "UseCircuitCode for " << circuit_code_in + LL_WARNS("Messaging") << "UseCircuitCode for " << circuit_code_in << " received without AddCircuitCode message - aborting" << llendl; return; @@ -1985,7 +1981,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, msg->getUUIDFast(_PREHASH_CircuitCode, _PREHASH_SessionID, session_id); if(session_id != (*it).second) { - llwarns << "UseCircuitCode unmatched session id. Got " + LL_WARNS("Messaging") << "UseCircuitCode unmatched session id. Got " << session_id << " but expected " << (*it).second << llendl; return; @@ -2000,7 +1996,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, if ((ip_port_old == ip_port_in) && (circuit_code_old == circuit_code_in)) { // Current information is the same as incoming info, ignore - llinfos << "Got duplicate UseCircuitCode for circuit " << circuit_code_in << " to " << msg->getSender() << llendl; + LL_INFOS("Messaging") << "Got duplicate UseCircuitCode for circuit " << circuit_code_in << " to " << msg->getSender() << llendl; return; } @@ -2010,25 +2006,25 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, msg->mIPPortToCircuitCode.erase(ip_port_old); U32 old_port = (U32)(ip_port_old & (U64)0xFFFFFFFF); U32 old_ip = (U32)(ip_port_old >> 32); - llinfos << "Removing derelict lookup entry for circuit " << circuit_code_old << " to " << LLHost(old_ip, old_port) << llendl; + LL_INFOS("Messaging") << "Removing derelict lookup entry for circuit " << circuit_code_old << " to " << LLHost(old_ip, old_port) << llendl; } if (circuit_code_old) { LLHost cur_host(ip, port); - llwarns << "Disabling existing circuit for " << cur_host << llendl; + LL_WARNS("Messaging") << "Disabling existing circuit for " << cur_host << llendl; msg->disableCircuit(cur_host); if (circuit_code_old == circuit_code_in) { - llwarns << "Asymmetrical circuit to ip/port lookup!" << llendl; - llwarns << "Multiple circuit codes for " << cur_host << " probably!" << llendl; - llwarns << "Permanently disabling circuit" << llendl; + LL_WARNS("Messaging") << "Asymmetrical circuit to ip/port lookup!" << llendl; + LL_WARNS("Messaging") << "Multiple circuit codes for " << cur_host << " probably!" << llendl; + LL_WARNS("Messaging") << "Permanently disabling circuit" << llendl; return; } else { - llwarns << "Circuit code changed for " << msg->getSender() + LL_WARNS("Messaging") << "Circuit code changed for " << msg->getSender() << " from " << circuit_code_old << " to " << circuit_code_in << llendl; } @@ -2070,7 +2066,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, msg->mIPPortToCircuitCode[ip_port_in] = circuit_code_in; msg->mCircuitCodeToIPPort[circuit_code_in] = ip_port_in; - llinfos << "Circuit code " << circuit_code_in << " from " + LL_INFOS("Messaging") << "Circuit code " << circuit_code_in << " from " << msg->getSender() << " for agent " << id << " in session " << session_id << llendl; @@ -2083,7 +2079,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, } else { - llwarns << "Got zero circuit code in use_circuit_code" << llendl; + LL_WARNS("Messaging") << "Got zero circuit code in use_circuit_code" << llendl; } } @@ -2105,7 +2101,7 @@ void LLMessageSystem::processError(LLMessageSystem* msg, void**) msg->getString("Data", "Message", MTUBYTES, buffer); error_message.assign(buffer); - llwarns << "Message error from " << msg->getSender() << " - " + LL_WARNS("Messaging") << "Message error from " << msg->getSender() << " - " << error_code << " " << error_token << " " << error_id << " \"" << error_system << "\" \"" << error_message << "\"" << llendl; } @@ -2143,7 +2139,7 @@ void LLMessageSystem::dispatch( gMessageSystem->mMessageTemplates.end()) && !LLMessageConfig::isValidMessage(msg_name)) { - llwarns << "Ignoring unknown message " << msg_name << llendl; + LL_WARNS("Messaging") << "Ignoring unknown message " << msg_name << llendl; responsep->notFound("Invalid message name"); return; } @@ -2153,12 +2149,12 @@ void LLMessageSystem::dispatch( const LLHTTPNode* handler = messageRootNode().traverse(path, context); if (!handler) { - llwarns << "LLMessageService::dispatch > no handler for " + LL_WARNS("Messaging") << "LLMessageService::dispatch > no handler for " << path << llendl; return; } // enable this for output of message names - //llinfos << "< \"" << msg_name << "\"" << llendl; + //LL_INFOS("Messaging") << "< \"" << msg_name << "\"" << llendl; //lldebugs << "data: " << LLSDNotationStreamer(message) << llendl; handler->post(responsep, context, message); @@ -2177,9 +2173,9 @@ static void check_for_unrecognized_messages( if (templates.find(name) == templates.end()) { - llinfos << " " << type + LL_INFOS("AppInit") << " " << type << " ban list contains unrecognized message " - << name << llendl; + << name << LL_ENDL; } } } @@ -2187,7 +2183,7 @@ static void check_for_unrecognized_messages( void LLMessageSystem::setMessageBans( const LLSD& trusted, const LLSD& untrusted) { - llinfos << "LLMessageSystem::setMessageBans:" << llendl; + LL_DEBUGS("AppInit") << "LLMessageSystem::setMessageBans:" << LL_ENDL; bool any_set = false; for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), @@ -2207,17 +2203,17 @@ void LLMessageSystem::setMessageBans( if (ban_from_trusted || ban_from_untrusted) { - llinfos << " " << name << " banned from " + LL_INFOS("AppInit") << " " << name << " banned from " << (ban_from_trusted ? "TRUSTED " : " ") << (ban_from_untrusted ? "UNTRUSTED " : " ") - << llendl; + << LL_ENDL; any_set = true; } } if (!any_set) { - llinfos << " no messages banned" << llendl; + LL_DEBUGS("AppInit") << " no messages banned" << LL_ENDL; } check_for_unrecognized_messages("trusted", trusted, mMessageTemplates); @@ -2267,7 +2263,7 @@ S32 LLMessageSystem::sendError( } else { - llwarns << "Data and message were too large -- data removed." + LL_WARNS("Messaging") << "Data and message were too large -- data removed." << llendl; addBinaryData("Data", NULL, 0); } @@ -2288,7 +2284,7 @@ void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) for (S32 i = 0; i < ack_count; i++) { msgsystem->getU32Fast(_PREHASH_Packets, _PREHASH_ID, packet_id, i); -// llinfos << "ack recvd' from " << host << " for packet " << (TPACKETID)packet_id << llendl; +// LL_DEBUGS("Messaging") << "ack recvd' from " << host << " for packet " << (TPACKETID)packet_id << llendl; cdp->ackReliablePacket(packet_id); } if (!cdp->getUnackedPacketCount()) @@ -2309,12 +2305,12 @@ void process_log_messages(LLMessageSystem* msg, void**) if (log_message) { - llinfos << "Starting logging via message" << llendl; + LL_INFOS("Messaging") << "Starting logging via message" << llendl; msg->startLogging(); } else { - llinfos << "Stopping logging via message" << llendl; + LL_INFOS("Messaging") << "Stopping logging via message" << llendl; msg->stopLogging(); } }*/ @@ -2333,7 +2329,7 @@ void process_create_trusted_circuit(LLMessageSystem *msg, void **) LLCircuitData *cdp = msg->mCircuitInfo.findCircuit(msg->getSender()); if (!cdp) { - llwarns << "Attempt to create trusted circuit without circuit data: " + LL_WARNS("Messaging") << "Attempt to create trusted circuit without circuit data: " << msg->getSender() << llendl; return; } @@ -2358,7 +2354,7 @@ void process_create_trusted_circuit(LLMessageSystem *msg, void **) if(msg->isMatchingDigestForWindowAndUUIDs(their_digest, TRUST_TIME_WINDOW, local_id, remote_id)) { cdp->setTrusted(TRUE); - llinfos << "Trusted digest from " << msg->getSender() << llendl; + LL_INFOS("Messaging") << "Trusted digest from " << msg->getSender() << llendl; return; } else if (cdp->getTrusted()) @@ -2367,13 +2363,13 @@ void process_create_trusted_circuit(LLMessageSystem *msg, void **) // This means that this could just be the result of a stale deny sent from a while back, and // the message system is being slow. Don't bother sending the deny, as it may continually // ping-pong back and forth on a very hosed circuit. - llwarns << "Ignoring bad digest from known trusted circuit: " << their_digest + LL_WARNS("Messaging") << "Ignoring bad digest from known trusted circuit: " << their_digest << " host: " << msg->getSender() << llendl; return; } else { - llwarns << "Bad digest from known circuit: " << their_digest + LL_WARNS("Messaging") << "Bad digest from known circuit: " << their_digest << " host: " << msg->getSender() << llendl; msg->sendDenyTrustedCircuit(msg->getSender()); return; @@ -2410,7 +2406,7 @@ void process_deny_trusted_circuit(LLMessageSystem *msg, void **) // spin. // *TODO: probably should keep a count of number of resends // per circuit, and stop resending after a while. - llinfos << "Got DenyTrustedCircuit. Sending CreateTrustedCircuit to " + LL_INFOS("Messaging") << "Got DenyTrustedCircuit. Sending CreateTrustedCircuit to " << msg->getSender() << llendl; msg->sendCreateTrustedCircuit(msg->getSender(), local_id, remote_id); } @@ -2419,7 +2415,7 @@ void process_deny_trusted_circuit(LLMessageSystem *msg, void **) void dump_prehash_files() { U32 i; - FILE* fp = LLFile::fopen("../../indra/llmessage/message_prehash.h", "w"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen("../../indra/llmessage/message_prehash.h", "w"); /* Flawfinder: ignore */ if (fp) { fprintf( @@ -2499,7 +2495,7 @@ BOOL start_messaging_system( if (!gMessageSystem) { - llerrs << "Messaging system initialization failed." << llendl; + LL_ERRS("AppInit") << "Messaging system initialization failed." << LL_ENDL; return FALSE; } @@ -2518,12 +2514,12 @@ BOOL start_messaging_system( { if (gMessageSystem->mMessageFileVersionNumber != gPrehashVersionNumber) { - llinfos << "Message template version does not match prehash version number" << llendl; - llinfos << "Run simulator with -prehash command line option to rebuild prehash data" << llendl; + LL_INFOS("AppInit") << "Message template version does not match prehash version number" << LL_ENDL; + LL_INFOS("AppInit") << "Run simulator with -prehash command line option to rebuild prehash data" << llendl; } else { - llinfos << "Message template version matches prehash version number" << llendl; + LL_DEBUGS("AppInit") << "Message template version matches prehash version number" << llendl; } } @@ -2569,7 +2565,7 @@ void LLMessageSystem::startLogging() str << "\t<-\tincoming message" <\toutgoing message" << std::endl; str << " <> host size zero id name"; - llinfos << str.str() << llendl; + LL_INFOS("Messaging") << str.str() << llendl; } void LLMessageSystem::stopLogging() @@ -2577,7 +2573,7 @@ void LLMessageSystem::stopLogging() if(mVerboseLog) { mVerboseLog = FALSE; - llinfos << "END MESSAGE LOG" << llendl; + LL_INFOS("Messaging") << "END MESSAGE LOG" << llendl; } } @@ -2683,7 +2679,7 @@ void end_messaging_system() std::ostringstream str; gMessageSystem->summarizeLogs(str); - llinfos << str.str().c_str() << llendl; + LL_INFOS("Messaging") << str.str().c_str() << llendl; delete gMessageSystem; gMessageSystem = NULL; @@ -2735,7 +2731,7 @@ void LLMessageSystem::dumpReceiveCounts() if(mNumMessageCounts > 0) { - llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; + LL_DEBUGS("Messaging") << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) @@ -2743,7 +2739,7 @@ void LLMessageSystem::dumpReceiveCounts() const LLMessageTemplate* mt = iter->second; if (mt->mReceiveCount > 0) { - llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes + LL_INFOS("Messaging") << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes << " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << llround(100 * mt->mDecodeTimeThisFrame / mReceiveTime) << "%" << llendl; } } @@ -2860,7 +2856,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size) { if ((*data_size ) < LL_MINIMUM_VALID_PACKET_SIZE) { - llwarns << "zeroCodeExpand() called with data_size of " << *data_size + LL_WARNS("Messaging") << "zeroCodeExpand() called with data_size of " << *data_size << llendl; } @@ -2900,7 +2896,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size) { if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-1])) { - llwarns << "attempt to write past reasonable encoded buffer size 1" << llendl; + LL_WARNS("Messaging") << "attempt to write past reasonable encoded buffer size 1" << llendl; callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE); outptr = mEncodedRecvBuffer; break; @@ -2912,7 +2908,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size) *outptr++ = *inptr++; if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-256])) { - llwarns << "attempt to write past reasonable encoded buffer size 2" << llendl; + LL_WARNS("Messaging") << "attempt to write past reasonable encoded buffer size 2" << llendl; callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE); outptr = mEncodedRecvBuffer; count = -1; @@ -2931,7 +2927,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size) { if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-(*inptr)])) { - llwarns << "attempt to write past reasonable encoded buffer size 3" << llendl; + LL_WARNS("Messaging") << "attempt to write past reasonable encoded buffer size 3" << llendl; callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE); outptr = mEncodedRecvBuffer; } @@ -2954,7 +2950,7 @@ void LLMessageSystem::addTemplate(LLMessageTemplate *templatep) { if (mMessageTemplates.count(templatep->mName) > 0) { - llerrs << templatep->mName << " already used as a template name!" + LL_ERRS("Messaging") << templatep->mName << " already used as a template name!" << llendl; } mMessageTemplates[templatep->mName] = templatep; @@ -2971,7 +2967,7 @@ void LLMessageSystem::setHandlerFuncFast(const char *name, void (*handler_func)( } else { - llerrs << name << " is not a known message name!" << llendl; + LL_ERRS("Messaging") << name << " is not a known message name!" << llendl; } } @@ -2983,7 +2979,7 @@ bool LLMessageSystem::callHandler(const char *name, iter = mMessageTemplates.find(name); if(iter == mMessageTemplates.end()) { - llwarns << "LLMessageSystem::callHandler: unknown message " + LL_WARNS("Messaging") << "LLMessageSystem::callHandler: unknown message " << name << llendl; return false; } @@ -2991,7 +2987,7 @@ bool LLMessageSystem::callHandler(const char *name, const LLMessageTemplate* msg_template = iter->second; if (msg_template->isBanned(trustedSource)) { - llwarns << "LLMessageSystem::callHandler: banned message " + LL_WARNS("Messaging") << "LLMessageSystem::callHandler: banned message " << name << " from " << (trustedSource ? "trusted " : "untrusted ") @@ -3131,7 +3127,7 @@ bool LLMessageSystem::generateDigestForWindowAndUUIDs(char* digest, const S32 wi std::string shared_secret = get_shared_secret(); if(shared_secret.empty()) { - llerrs << "Trying to generate complex digest on a machine without a shared secret!" << llendl; + LL_ERRS("Messaging") << "Trying to generate complex digest on a machine without a shared secret!" << llendl; } U32 now = time(NULL); @@ -3150,7 +3146,7 @@ bool LLMessageSystem::isMatchingDigestForWindowAndUUIDs(const char* digest, cons std::string shared_secret = get_shared_secret(); if(shared_secret.empty()) { - llerrs << "Trying to compare complex digests on a machine without a shared secret!" << llendl; + LL_ERRS("Messaging") << "Trying to compare complex digests on a machine without a shared secret!" << llendl; } char our_digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ @@ -3197,7 +3193,7 @@ bool LLMessageSystem::generateDigestForWindow(char* digest, const S32 window) co std::string shared_secret = get_shared_secret(); if(shared_secret.empty()) { - llerrs << "Trying to generate simple digest on a machine without a shared secret!" << llendl; + LL_ERRS("Messaging") << "Trying to generate simple digest on a machine without a shared secret!" << llendl; } U32 now = time(NULL); @@ -3216,7 +3212,7 @@ bool LLMessageSystem::isMatchingDigestForWindow(const char* digest, S32 const wi std::string shared_secret = get_shared_secret(); if(shared_secret.empty()) { - llerrs << "Trying to compare simple digests on a machine without a shared secret!" << llendl; + LL_ERRS("Messaging") << "Trying to compare simple digests on a machine without a shared secret!" << llendl; } char our_digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ @@ -3250,12 +3246,12 @@ void LLMessageSystem::sendCreateTrustedCircuit(const LLHost &host, const LLUUID char digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ if (id1.isNull()) { - llwarns << "Can't send CreateTrustedCircuit to " << host << " because we don't have the local end point ID" << llendl; + LL_WARNS("Messaging") << "Can't send CreateTrustedCircuit to " << host << " because we don't have the local end point ID" << llendl; return; } if (id2.isNull()) { - llwarns << "Can't send CreateTrustedCircuit to " << host << " because we don't have the remote end point ID" << llendl; + LL_WARNS("Messaging") << "Can't send CreateTrustedCircuit to " << host << " because we don't have the remote end point ID" << llendl; return; } generateDigestForWindowAndUUIDs(digest, TRUST_TIME_WINDOW, id1, id2); @@ -3263,7 +3259,7 @@ void LLMessageSystem::sendCreateTrustedCircuit(const LLHost &host, const LLUUID nextBlockFast(_PREHASH_DataBlock); addUUIDFast(_PREHASH_EndPointID, id1); addBinaryDataFast(_PREHASH_Digest, digest, MD5HEX_STR_BYTES); - llinfos << "xmitting digest: " << digest << " Host: " << host << llendl; + LL_INFOS("Messaging") << "xmitting digest: " << digest << " Host: " << host << llendl; sendMessage(host); } @@ -3277,10 +3273,10 @@ void LLMessageSystem::reallySendDenyTrustedCircuit(const LLHost &host) LLCircuitData *cdp = mCircuitInfo.findCircuit(host); if (!cdp) { - llwarns << "Not sending DenyTrustedCircuit to host without a circuit." << llendl; + LL_WARNS("Messaging") << "Not sending DenyTrustedCircuit to host without a circuit." << llendl; return; } - llinfos << "Sending DenyTrustedCircuit to " << host << llendl; + LL_INFOS("Messaging") << "Sending DenyTrustedCircuit to " << host << llendl; newMessageFast(_PREHASH_DenyTrustedCircuit); nextBlockFast(_PREHASH_DataBlock); addUUIDFast(_PREHASH_EndPointID, cdp->getLocalEndPointID()); @@ -3301,7 +3297,7 @@ void LLMessageSystem::establishBidirectionalTrust(const LLHost &host, S64 frame_ std::string shared_secret = get_shared_secret(); if(shared_secret.empty()) { - llerrs << "Trying to establish bidirectional trust on a machine without a shared secret!" << llendl; + LL_ERRS("Messaging") << "Trying to establish bidirectional trust on a machine without a shared secret!" << llendl; } LLTimer timeout; @@ -3353,8 +3349,8 @@ void LLMessageSystem::establishBidirectionalTrust(const LLHost &host, S64 frame_ void LLMessageSystem::dumpPacketToLog() { - llwarns << "Packet Dump from:" << mPacketRing.getLastSender() << llendl; - llwarns << "Packet Size:" << mTrueReceiveSize << llendl; + LL_WARNS("Messaging") << "Packet Dump from:" << mPacketRing.getLastSender() << llendl; + LL_WARNS("Messaging") << "Packet Size:" << mTrueReceiveSize << llendl; char line_buffer[256]; /* Flawfinder: ignore */ S32 i; S32 cur_line_pos = 0; @@ -3369,13 +3365,13 @@ void LLMessageSystem::dumpPacketToLog() if (cur_line_pos >= 16) { cur_line_pos = 0; - llwarns << "PD:" << cur_line << "PD:" << line_buffer << llendl; + LL_WARNS("Messaging") << "PD:" << cur_line << "PD:" << line_buffer << llendl; cur_line++; } } if (cur_line_pos) { - llwarns << "PD:" << cur_line << "PD:" << line_buffer << llendl; + LL_WARNS("Messaging") << "PD:" << cur_line << "PD:" << line_buffer << llendl; } } @@ -3919,7 +3915,7 @@ void LLMessageSystem::getStringFast(const char *block, const char *var, { if(buffer_size <= 0) { - llwarns << "buffer_size <= 0" << llendl; + LL_WARNS("Messaging") << "buffer_size <= 0" << llendl; } mMessageReader->getString(block, var, buffer_size, s, blocknum); } diff --git a/linden/indra/llmessage/net.cpp b/linden/indra/llmessage/net.cpp index 40c19a7..aa095a1 100644 --- a/linden/indra/llmessage/net.cpp +++ b/linden/indra/llmessage/net.cpp @@ -185,7 +185,7 @@ S32 start_net(S32& socket_out, int& nPort) { S32 err = WSAGetLastError(); WSACleanup(); - llwarns << "Windows Sockets initialization failed, err " << err << llendl; + LL_WARNS("AppInit") << "Windows Sockets initialization failed, err " << err << LL_ENDL; return 1; } @@ -195,7 +195,7 @@ S32 start_net(S32& socket_out, int& nPort) { S32 err = WSAGetLastError(); WSACleanup(); - llwarns << "socket() failed, err " << err << llendl; + LL_WARNS("AppInit") << "socket() failed, err " << err << LL_ENDL; return 2; } @@ -205,7 +205,7 @@ S32 start_net(S32& socket_out, int& nPort) stLclAddr.sin_port = htons(nPort); S32 attempt_port = nPort; - llinfos << "attempting to connect on port " << attempt_port << llendl; + LL_DEBUGS("AppInit") << "attempting to connect on port " << attempt_port << LL_ENDL; nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr)); if (nRet == SOCKET_ERROR) @@ -219,7 +219,7 @@ S32 start_net(S32& socket_out, int& nPort) attempt_port++) { stLclAddr.sin_port = htons(attempt_port); - llinfos << "trying port " << attempt_port << llendl; + LL_DEBUGS("AppInit") << "trying port " << attempt_port << LL_ENDL; nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr)); if (!(nRet == SOCKET_ERROR && @@ -231,7 +231,7 @@ S32 start_net(S32& socket_out, int& nPort) if (nRet == SOCKET_ERROR) { - llwarns << "startNet() : Couldn't find available network port." << llendl; + LL_WARNS("AppInit") << "startNet() : Couldn't find available network port." << LL_ENDL; // Fail gracefully here in release return 3; } @@ -239,7 +239,7 @@ S32 start_net(S32& socket_out, int& nPort) else // Some other socket error { - llwarns << llformat("bind() port: %d failed, Err: %d\n", nPort, WSAGetLastError()) << llendl; + LL_WARNS("AppInit") << llformat("bind() port: %d failed, Err: %d\n", nPort, WSAGetLastError()) << LL_ENDL; // Fail gracefully in release. return 4; } @@ -250,7 +250,7 @@ S32 start_net(S32& socket_out, int& nPort) getsockname(hSocket, (SOCKADDR*) &socket_address, &socket_address_size); attempt_port = ntohs(socket_address.sin_port); - llinfos << "connected on port " << attempt_port << llendl; + LL_INFOS("AppInit") << "connected on port " << attempt_port << LL_ENDL; nPort = attempt_port; // Set socket to be non-blocking @@ -266,20 +266,20 @@ S32 start_net(S32& socket_out, int& nPort) nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size); if (nRet) { - llinfos << "Can't set receive buffer size!" << llendl; + LL_INFOS("AppInit") << "Can't set receive buffer size!" << LL_ENDL; } nRet = setsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, buff_size); if (nRet) { - llinfos << "Can't set send buffer size!" << llendl; + LL_INFOS("AppInit") << "Can't set send buffer size!" << LL_ENDL; } getsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, &buff_size); getsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, &buff_size); - llinfos << "startNet - receive buffer size : " << rec_size << llendl; - llinfos << "startNet - send buffer size : " << snd_size << llendl; + LL_DEBUGS("AppInit") << "startNet - receive buffer size : " << rec_size << LL_ENDL; + LL_DEBUGS("AppInit") << "startNet - send buffer size : " << snd_size << LL_ENDL; // Setup a destination address char achMCAddr[MAXADDRSTR] = " "; /* Flawfinder: ignore */ diff --git a/linden/indra/llrender/files.lst b/linden/indra/llrender/files.lst index 3ada47b..5dc9579 100644 --- a/linden/indra/llrender/files.lst +++ b/linden/indra/llrender/files.lst @@ -1,7 +1,7 @@ llrender/llfont.cpp llrender/llfontgl.cpp llrender/llgldbg.cpp -llrender/llglimmediate.cpp +llrender/llrender.cpp llrender/llimagegl.cpp llrender/llrendertarget.cpp llrender/llvertexbuffer.cpp diff --git a/linden/indra/llrender/llfontgl.cpp b/linden/indra/llrender/llfontgl.cpp index 938dd73..253bf50 100644 --- a/linden/indra/llrender/llfontgl.cpp +++ b/linden/indra/llrender/llfontgl.cpp @@ -36,7 +36,7 @@ #include "llfont.h" #include "llfontgl.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "v4color.h" #include "llstl.h" @@ -56,6 +56,7 @@ LLFontGL* LLFontGL::sSansSerif = NULL; LLFontGL* LLFontGL::sSansSerifBig = NULL; LLFontGL* LLFontGL::sSansSerifHuge = NULL; LLFontGL* LLFontGL::sSansSerifBold = NULL; +LLFontList* LLFontGL::sMonospaceFallback = NULL; LLFontList* LLFontGL::sSSFallback = NULL; LLFontList* LLFontGL::sSSSmallFallback = NULL; LLFontList* LLFontGL::sSSBigFallback = NULL; @@ -240,7 +241,7 @@ bool LLFontGL::loadFaceFallback(LLFontList *fontlistp, const LLString& fontname, font_path = sys_path + *token_iter; if (!fontp->loadFace(font_path, point_size, sVertDPI, sHorizDPI, 2, TRUE)) { - llwarns << "Couldn't load font " << *token_iter << llendl; + LL_INFOS_ONCE("ViewerImages") << "Couldn't load font " << *token_iter << LL_ENDL; delete fontp; fontp = NULL; } @@ -267,7 +268,7 @@ bool LLFontGL::loadFace(LLFontGL *fontp, const LLString& fontname, const F32 poi font_path = sys_path + fontname; if (!fontp->loadFace(font_path, point_size, sVertDPI, sHorizDPI, 2, FALSE)) { - llwarns << "Couldn't load font " << fontname << llendl; + LL_WARNS("ViewerImages") << "Couldn't load font " << fontname << LL_ENDL; return false; } } @@ -279,12 +280,12 @@ bool LLFontGL::loadFace(LLFontGL *fontp, const LLString& fontname, const F32 poi // static BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale, - const LLString& monospace_file, F32 monospace_size, - const LLString& sansserif_file, - const LLString& sanserif_fallback_file, F32 ss_fallback_scale, - F32 small_size, F32 medium_size, F32 big_size, F32 huge_size, - const LLString& sansserif_bold_file, F32 bold_size, - const LLString& app_dir) + const LLString& monospace_file, F32 monospace_size, + const LLString& sansserif_file, + const LLString& sanserif_fallback_file, F32 ss_fallback_scale, + F32 small_size, F32 medium_size, F32 big_size, F32 huge_size, + const LLString& sansserif_bold_file, F32 bold_size, + const LLString& app_dir) { BOOL failed = FALSE; sVertDPI = (F32)llfloor(screen_dpi * y_scale); @@ -306,7 +307,21 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale, sMonospace->reset(); } - failed |= !loadFace(sMonospace, monospace_file, monospace_size, NULL); + if (sMonospaceFallback) + { + delete sMonospaceFallback; + } + sMonospaceFallback = new LLFontList(); + if (!loadFaceFallback( + sMonospaceFallback, + sanserif_fallback_file, + monospace_size * ss_fallback_scale)) + { + delete sMonospaceFallback; + sMonospaceFallback = NULL; + } + + failed |= !loadFace(sMonospace, monospace_file, monospace_size, sMonospaceFallback); // // Sans-serif fonts @@ -466,6 +481,9 @@ void LLFontGL::destroyDefaultFonts() delete sSansSerifBold; sSansSerifBold = NULL; + delete sMonospaceFallback; + sMonospaceFallback = NULL; + delete sSSHugeFallback; sSSHugeFallback = NULL; @@ -647,7 +665,8 @@ S32 LLFontGL::render(const LLWString &wstr, mImageGLp->bind(0); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Not guaranteed to be set correctly + // Not guaranteed to be set correctly + gGL.setSceneBlendType(LLRender::BT_ALPHA); cur_x = ((F32)x * sScaleX); cur_y = ((F32)y * sScaleY); diff --git a/linden/indra/llrender/llfontgl.h b/linden/indra/llrender/llfontgl.h index 4df1063..01046af 100644 --- a/linden/indra/llrender/llfontgl.h +++ b/linden/indra/llrender/llfontgl.h @@ -228,6 +228,7 @@ public: static LLString sAppDir; // For loading fonts static LLFontGL* sMonospace; // medium + static LLFontList* sMonospaceFallback; static LLFontGL* sSansSerifSmall; // small static LLFontList* sSSSmallFallback; diff --git a/linden/indra/llrender/llglimmediate.cpp b/linden/indra/llrender/llglimmediate.cpp index edc694a..17c2182 100644 --- a/linden/indra/llrender/llglimmediate.cpp +++ b/linden/indra/llrender/llglimmediate.cpp @@ -1,302 +1 @@ -/** - * @file llglimmediate.cpp - * @brief LLGLImmediate implementation - * - * $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$ - */ - -#include "linden_common.h" - -#include "llglimmediate.h" -#include "llvertexbuffer.h" - -LLGLImmediate gGL; - -bool LLGLImmediate::sClever = false; - -const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD; - -LLGLImmediate::LLGLImmediate() -{ - mCount = 0; - mMode = LLVertexBuffer::TRIANGLES; - mBuffer = new LLVertexBuffer(immediate_mask, 0); - mBuffer->allocateBuffer(4096, 0, TRUE); - mBuffer->getVertexStrider(mVerticesp); - mBuffer->getTexCoordStrider(mTexcoordsp); - mBuffer->getColorStrider(mColorsp); -} - -void LLGLImmediate::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z) -{ - flush(); - glTranslatef(x,y,z); -} - -void LLGLImmediate::pushMatrix() -{ - flush(); - glPushMatrix(); -} - -void LLGLImmediate::popMatrix() -{ - flush(); - glPopMatrix(); -} - -void LLGLImmediate::blendFunc(GLenum sfactor, GLenum dfactor) -{ - flush(); - glBlendFunc(sfactor, dfactor); -} - -void LLGLImmediate::begin(const GLuint& mode) -{ - if (sClever) - { - if (mode != mMode) - { - if (mMode == LLVertexBuffer::QUADS || - mMode == LLVertexBuffer::LINES || - mMode == LLVertexBuffer::TRIANGLES || - mMode == LLVertexBuffer::POINTS) - { - flush(); - } - else if (mCount != 0) - { - llerrs << "gGL.begin() called redundantly." << llendl; - } - - mMode = mode; - } - } - else - { - glBegin(LLVertexBuffer::sGLMode[mode]); - } -} - -void LLGLImmediate::end() -{ - if (sClever) - { - if (mCount == 0) - { - return; - //IMM_ERRS << "GL begin and end called with no vertices specified." << llendl; - } - - if ((mMode != LLVertexBuffer::QUADS && - mMode != LLVertexBuffer::LINES && - mMode != LLVertexBuffer::TRIANGLES && - mMode != LLVertexBuffer::POINTS) || - mCount > 2048) - { - flush(); - } - } - else - { - glEnd(); - } -} - -void LLGLImmediate::flush() -{ - if (sClever) - { - if (mCount > 0) - { -#if 0 - if (!glIsEnabled(GL_VERTEX_ARRAY)) - { - llerrs << "foo 1" << llendl; - } - - if (!glIsEnabled(GL_COLOR_ARRAY)) - { - llerrs << "foo 2" << llendl; - } - - if (!glIsEnabled(GL_TEXTURE_COORD_ARRAY)) - { - llerrs << "foo 3" << llendl; - } - - if (glIsEnabled(GL_NORMAL_ARRAY)) - { - llerrs << "foo 7" << llendl; - } - - GLvoid* pointer; - - glGetPointerv(GL_VERTEX_ARRAY_POINTER, &pointer); - if (pointer != &(mBuffer[0].v)) - { - llerrs << "foo 4" << llendl; - } - - glGetPointerv(GL_COLOR_ARRAY_POINTER, &pointer); - if (pointer != &(mBuffer[0].c)) - { - llerrs << "foo 5" << llendl; - } - - glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &pointer); - if (pointer != &(mBuffer[0].uv)) - { - llerrs << "foo 6" << llendl; - } -#endif - - mBuffer->setBuffer(immediate_mask); - mBuffer->drawArrays(mMode, 0, mCount); - - mVerticesp[0] = mVerticesp[mCount]; - mTexcoordsp[0] = mTexcoordsp[mCount]; - mColorsp[0] = mColorsp[mCount]; - mCount = 0; - } - } -} - -void LLGLImmediate::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z) -{ - if (sClever) - { - if (mCount >= 4096) - { - // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl; - return; - } - - mVerticesp[mCount] = LLVector3(x,y,z); - mCount++; - if (mCount < 4096) - { - mVerticesp[mCount] = mVerticesp[mCount-1]; - mColorsp[mCount] = mColorsp[mCount-1]; - mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; - } - } - else - { - glVertex3f(x,y,z); - } -} - -void LLGLImmediate::vertex2i(const GLint& x, const GLint& y) -{ - vertex3f((GLfloat) x, (GLfloat) y, 0); -} - -void LLGLImmediate::vertex2f(const GLfloat& x, const GLfloat& y) -{ - vertex3f(x,y,0); -} - -void LLGLImmediate::vertex2fv(const GLfloat* v) -{ - vertex3f(v[0], v[1], 0); -} - -void LLGLImmediate::vertex3fv(const GLfloat* v) -{ - vertex3f(v[0], v[1], v[2]); -} - -void LLGLImmediate::texCoord2f(const GLfloat& x, const GLfloat& y) -{ - if (sClever) - { - mTexcoordsp[mCount] = LLVector2(x,y); - } - else - { - glTexCoord2f(x,y); - } -} - -void LLGLImmediate::texCoord2i(const GLint& x, const GLint& y) -{ - texCoord2f((GLfloat) x, (GLfloat) y); -} - -void LLGLImmediate::texCoord2fv(const GLfloat* tc) -{ - texCoord2f(tc[0], tc[1]); -} - -void LLGLImmediate::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a) -{ - if (sClever) - { - mColorsp[mCount] = LLColor4U(r,g,b,a); - } - else - { - glColor4ub(r,g,b,a); - } -} - -void LLGLImmediate::color4ubv(const GLubyte* c) -{ - color4ub(c[0], c[1], c[2], c[3]); -} - -void LLGLImmediate::color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a) -{ - color4ub((GLubyte) (llclamp(r, 0.f, 1.f)*255), - (GLubyte) (llclamp(g, 0.f, 1.f)*255), - (GLubyte) (llclamp(b, 0.f, 1.f)*255), - (GLubyte) (llclamp(a, 0.f, 1.f)*255)); -} - -void LLGLImmediate::color4fv(const GLfloat* c) -{ - color4f(c[0],c[1],c[2],c[3]); -} - -void LLGLImmediate::color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b) -{ - color4f(r,g,b,1); -} - -void LLGLImmediate::color3fv(const GLfloat* c) -{ - color4f(c[0],c[1],c[2],1); -} - -void LLGLImmediate::setClever(bool do_clever) -{ - llassert(mCount == 0); - - sClever = do_clever; -} - +#error This file has been renamed llrender.cpp diff --git a/linden/indra/llrender/llglimmediate.h b/linden/indra/llrender/llglimmediate.h index e0cddff..4a7a0eb 100644 --- a/linden/indra/llrender/llglimmediate.h +++ b/linden/indra/llrender/llglimmediate.h @@ -1,106 +1 @@ -/** - * @file llglimmediate.h - * @brief LLGLImmediate definition - * - * This class acts as a wrapper for OpenGL immediate calls concerning glBegin and glEnd. - * The goal of this class is to minimize the number of api calls due to legacy rendering - * code, and to define an interface for a multiple rendering API abstraction of the UI - * rendering. - * - * $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_LLGLIMMEDIATE_H -#define LL_LLGLIMMEDIATE_H - -#include "stdtypes.h" -#include "llgltypes.h" -#include "llglheaders.h" -#include "llvertexbuffer.h" - -class LLGLImmediate -{ -public: - LLGLImmediate(); - - void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z); - void pushMatrix(); - void popMatrix(); - void blendFunc(GLenum sfactor, GLenum dfactor); - void flush(); - - void begin(const GLuint& mode); - void end(); - void vertex2i(const GLint& x, const GLint& y); - void vertex2f(const GLfloat& x, const GLfloat& y); - void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z); - void vertex2fv(const GLfloat* v); - void vertex3fv(const GLfloat* v); - - void texCoord2i(const GLint& x, const GLint& y); - void texCoord2f(const GLfloat& x, const GLfloat& y); - void texCoord2fv(const GLfloat* tc); - - void color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a); - void color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a); - void color4fv(const GLfloat* c); - void color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b); - void color3fv(const GLfloat* c); - void color4ubv(const GLubyte* c); - - // switch clever mode GL immediate rendering on or off. Setting to true builds - // client arrays manually, setting to false passes through the GL immediate mode - // commands to the GL implementation. Controllable by the RenderUseCleverUI - // debug setting. - // *NOTE: I have measured that this has about a 9% performance cost (0.6ms) for the - // Render/UI fasttimer vs the old #if CLEVER compile time switch. Dave Parks and I - // agreed that this was acceptable at the time due to it enabling better regression - // testing for QA. - // -Brad - void setClever(bool do_clever); - - typedef struct Vertex - { - GLfloat v[3]; - GLubyte c[4]; - GLfloat uv[2]; - }; - -private: - static bool sClever; - - U32 mCount; - U32 mMode; - LLPointer mBuffer; - LLStrider mVerticesp; - LLStrider mTexcoordsp; - LLStrider mColorsp; -}; - -extern LLGLImmediate gGL; - -#endif +#error This file has been renamed llrender.h diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp index 92d8eb4..fd934b9 100644 --- a/linden/indra/llrender/llimagegl.cpp +++ b/linden/indra/llrender/llimagegl.cpp @@ -41,7 +41,7 @@ #include "llmath.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" //---------------------------------------------------------------------------- @@ -130,13 +130,13 @@ void LLImageGL::bindExternalTexture(LLGLuint gl_name, S32 stage, LLGLenum bind_t gGL.flush(); if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + stage); + gGL.getTexUnit(stage)->activate(); } glBindTexture(bind_target, gl_name); sCurrentBoundTextures[stage] = gl_name; if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } @@ -149,9 +149,9 @@ void LLImageGL::unbindTexture(S32 stage, LLGLenum bind_target) gGL.flush(); if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + stage); + gGL.getTexUnit(stage)->activate(); glBindTexture(GL_TEXTURE_2D, 0); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } else { @@ -304,7 +304,9 @@ void LLImageGL::init(BOOL usemipmaps) mIsResident = 0; mClampS = FALSE; mClampT = FALSE; - mMipFilterNearest = FALSE; + mClampR = FALSE; + mMagFilterNearest = FALSE; + mMinFilterNearest = FALSE; mWidth = 0; mHeight = 0; mComponents = 0; @@ -439,7 +441,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const gGL.flush(); if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + stage); + gGL.getTexUnit(stage)->activate(); } glBindTexture(mBindTarget, mTexName); @@ -448,7 +450,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } if (mLastBindTime != sLastFrameTime) @@ -466,12 +468,12 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const gGL.flush(); if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB+stage); + gGL.getTexUnit(stage)->activate(); } glBindTexture(mBindTarget, 0); if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB+stage); + gGL.getTexUnit(0)->activate(); } sCurrentBoundTextures[stage] = 0; return FALSE; @@ -628,7 +630,7 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips) { S32 bytes = w * h * mComponents; llassert(prev_mip_data); - llassert(prev_mip_size == bytes); + llassert(prev_mip_size == bytes*4); U8* new_data = new U8[bytes]; llassert_always(new_data); LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents); @@ -941,7 +943,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_ setImage(data_in, data_hasmips); setClamp(mClampS, mClampT); - setMipFilterNearest(mMipFilterNearest); + setMipFilterNearest(mMagFilterNearest); // things will break if we don't unbind after creation unbindTexture(0, mBindTarget); @@ -1044,8 +1046,23 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre S32 gl_discard = discard_level - mCurrentDiscardLevel; - llverify(bindTextureInternal(0)); - + //explicitly unbind texture + LLImageGL::unbindTexture(0, mTarget); + llverify(bindTextureInternal(0)); + + if (gDebugGL) + { + if (mTarget == GL_TEXTURE_2D) + { + GLint texname; + glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname); + if (texname != mTexName) + { + llerrs << "Invalid texture bound!" << llendl; + } + } + } + LLGLint glwidth = 0; glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth); if (glwidth == 0) @@ -1067,40 +1084,63 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl; } - BOOL return_result = TRUE ; LLGLint is_compressed = 0; if (compressed_ok) { glGetTexLevelParameteriv(mTarget, is_compressed, GL_TEXTURE_COMPRESSED, (GLint*)&is_compressed); } + + //----------------------------------------------------------------------------------------------- + GLenum error ; + while((error = glGetError()) != GL_NO_ERROR) + { + llwarns << "GL Error happens before reading back texture. Error code: " << error << llendl ; + } + //----------------------------------------------------------------------------------------------- + if (is_compressed) { LLGLint glbytes; glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, (GLint*)&glbytes); - imageraw->allocateDataSize(width, height, ncomponents, glbytes); - glGetCompressedTexImageARB(mTarget, gl_discard, (GLvoid*)(imageraw->getData())); - if(glGetError() != GL_NO_ERROR) + if(!imageraw->allocateDataSize(width, height, ncomponents, glbytes)) { - llwarns << "Error happens when reading back the compressed texture image." << llendl ; - imageraw->deleteData() ; - return_result = FALSE ; + llwarns << "Memory allocation failed for reading back texture. Size is: " << glbytes << llendl ; + llwarns << "width: " << width << "height: " << height << "components: " << ncomponents << llendl ; + return FALSE ; } - stop_glerror(); + + glGetCompressedTexImageARB(mTarget, gl_discard, (GLvoid*)(imageraw->getData())); + //stop_glerror(); } else { - imageraw->allocateDataSize(width, height, ncomponents); - glGetTexImage(GL_TEXTURE_2D, gl_discard, mFormatPrimary, mFormatType, (GLvoid*)(imageraw->getData())); - if(glGetError() != GL_NO_ERROR) + if(!imageraw->allocateDataSize(width, height, ncomponents)) { - llwarns << "Error happens when reading back the texture image." << llendl ; - imageraw->deleteData() ; - return_result = FALSE ; + llwarns << "Memory allocation failed for reading back texture." << llendl ; + llwarns << "width: " << width << "height: " << height << "components: " << ncomponents << llendl ; + return FALSE ; } - stop_glerror(); + + glGetTexImage(GL_TEXTURE_2D, gl_discard, mFormatPrimary, mFormatType, (GLvoid*)(imageraw->getData())); + //stop_glerror(); } - return return_result ; + //----------------------------------------------------------------------------------------------- + if((error = glGetError()) != GL_NO_ERROR) + { + llwarns << "GL Error happens after reading back texture. Error code: " << error << llendl ; + imageraw->deleteData() ; + + while((error = glGetError()) != GL_NO_ERROR) + { + llwarns << "GL Error happens after reading back texture. Error code: " << error << llendl ; + } + + return FALSE ; + } + //----------------------------------------------------------------------------------------------- + + return TRUE ; } void LLImageGL::destroyGLTexture() @@ -1130,25 +1170,55 @@ void LLImageGL::destroyGLTexture() //---------------------------------------------------------------------------- -void LLImageGL::setClamp(BOOL clamps, BOOL clampt) +void LLImageGL::glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr) +{ + glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT); + glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT); + glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT); +} + +void LLImageGL::glClamp (BOOL clamps, BOOL clampt) { - mClampS = clamps; - mClampT = clampt; if (mTexName != 0) { - glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT); - glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT); + glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT); + glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT); } - stop_glerror(); } -void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest) +void LLImageGL::setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr) +{ + mClampS = clamps; + mClampT = clampt; + mClampR = clampr; + glClampCubemap (clamps, clampt, clampr); +} + +void LLImageGL::setClamp(BOOL clamps, BOOL clampt) +{ + mClampS = clamps; + mClampT = clampt; + glClamp (clamps, clampt); +} + +void LLImageGL::overrideClamp (BOOL clamps, BOOL clampt) +{ + glClamp (clamps, clampt); +} + +void LLImageGL::restoreClamp (void) +{ + glClamp (mClampS, mClampT); +} + +void LLImageGL::setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest) { - mMipFilterNearest = nearest; + mMagFilterNearest = mag_nearest; + mMinFilterNearest = min_nearest; if (mTexName != 0) { - if (min_nearest) + if (mMinFilterNearest) { glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } @@ -1160,7 +1230,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest) { glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } - if (mMipFilterNearest) + if (mMagFilterNearest) { glTexParameteri(mBindTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } @@ -1170,7 +1240,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest) } if (gGLManager.mHasAnisotropic) { - if (sGlobalUseAnisotropic && !mMipFilterNearest) + if (sGlobalUseAnisotropic && !mMagFilterNearest) { F32 largest_anisotropy; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_anisotropy); diff --git a/linden/indra/llrender/llimagegl.h b/linden/indra/llrender/llimagegl.h index b386294..3f231ee 100644 --- a/linden/indra/llrender/llimagegl.h +++ b/linden/indra/llrender/llimagegl.h @@ -81,6 +81,10 @@ protected: virtual ~LLImageGL(); BOOL bindTextureInternal(const S32 stage = 0) const; +private: + void glClamp (BOOL clamps, BOOL clampt); + void glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE); + public: virtual void dump(); // debugging info to llinfos virtual BOOL bind(const S32 stage = 0) const; @@ -99,8 +103,11 @@ public: BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok); void destroyGLTexture(); + void setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE); void setClamp(BOOL clamps, BOOL clampt); - void setMipFilterNearest(BOOL nearest, BOOL min_nearest = FALSE); + void overrideClamp (BOOL clamps, BOOL clampt); + void restoreClamp (void); + void setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest = FALSE); void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE); void dontDiscard() { mDontDiscard = 1; } @@ -117,7 +124,8 @@ public: BOOL getClampS() const { return mClampS; } BOOL getClampT() const { return mClampT; } - BOOL getMipFilterNearest() const { return mMipFilterNearest; } + BOOL getClampR() const { return mClampR; } + BOOL getMipFilterNearest() const { return mMagFilterNearest; } BOOL getHasGLTexture() const { return mTexName != 0; } LLGLuint getTexName() const { return mTexName; } @@ -167,7 +175,9 @@ protected: S8 mClampS; // Need to save clamp state S8 mClampT; - S8 mMipFilterNearest; // if TRUE, set magfilter to GL_NEAREST + S8 mClampR; + S8 mMagFilterNearest; // if TRUE, set magfilter to GL_NEAREST + S8 mMinFilterNearest; // if TRUE, set minfilter to GL_NEAREST LLGLint mFormatInternal; // = GL internalformat LLGLenum mFormatPrimary; // = GL format (pixel data format) diff --git a/linden/indra/llrender/llrender.cpp b/linden/indra/llrender/llrender.cpp new file mode 100644 index 0000000..e9c1227 --- /dev/null +++ b/linden/indra/llrender/llrender.cpp @@ -0,0 +1,704 @@ +/** + * @file llrender.cpp + * @brief LLRender implementation + * + * $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$ + */ + +#include "linden_common.h" + +#include "llrender.h" +#include "llvertexbuffer.h" + +LLRender gGL; + +static const U32 LL_NUM_TEXTURE_LAYERS = 8; + +static GLenum sGLCompareFunc[] = +{ + GL_NEVER, + GL_ALWAYS, + GL_LESS, + GL_LEQUAL, + GL_EQUAL, + GL_NOTEQUAL, + GL_GEQUAL, + GL_GREATER +}; + +const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD; + +static GLenum sGLBlendFactor[] = +{ + GL_ONE, + GL_ZERO, + GL_DST_COLOR, + GL_SRC_COLOR, + GL_ONE_MINUS_DST_COLOR, + GL_ONE_MINUS_SRC_COLOR, + GL_DST_ALPHA, + GL_SRC_ALPHA, + GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_SRC_ALPHA +}; + +LLTexUnit::LLTexUnit(U32 index) +: mIsEnabled(false), mCurrBlendType(TB_MULT), +mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT), +mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR), +mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA), +mCurrColorScale(1), mCurrAlphaScale(1) +{ + llassert_always(index < LL_NUM_TEXTURE_LAYERS); + mIndex = index; +} + +U32 LLTexUnit::getIndex(void) +{ + return mIndex; +} + +void LLTexUnit::enable(void) +{ + if (!mIsEnabled) + { + activate(); + glEnable(GL_TEXTURE_2D); + mIsEnabled = true; + } +} + +void LLTexUnit::disable(void) +{ + if (mIsEnabled) + { + activate(); + glDisable(GL_TEXTURE_2D); + mIsEnabled = false; + } +} + +void LLTexUnit::activate(void) +{ + //if (gGL.mCurrTextureUnitIndex != mIndex) + { + glActiveTextureARB(GL_TEXTURE0_ARB + mIndex); + gGL.mCurrTextureUnitIndex = mIndex; + } +} + +// Useful for debugging that you've manually assigned a texture operation to the correct +// texture unit based on the currently set active texture in opengl. +void LLTexUnit::debugTextureUnit(void) +{ + GLint activeTexture; + glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture); + if ((GL_TEXTURE0_ARB + mIndex) != activeTexture) + { + llerrs << "Incorrect Texture Unit! Expected: " << (activeTexture - GL_TEXTURE0_ARB) << " Actual: " << mIndex << llendl; + } +} + +void LLTexUnit::bindTexture(const LLImageGL* texture) +{ + if (texture != NULL) + { + activate(); + texture->bind(mIndex); + } +} + +void LLTexUnit::unbindTexture(void) +{ + activate(); + glBindTexture(GL_TEXTURE_2D, 0); +} + +void LLTexUnit::setTextureBlendType(eTextureBlendType type) +{ + // Do nothing if it's already correctly set. + if (mCurrBlendType == type) + { + return; + } + + activate(); + mCurrBlendType = type; + S32 scale_amount = 1; + switch (type) + { + case TB_REPLACE: + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + break; + case TB_ADD: + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); + break; + case TB_MULT: + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + break; + case TB_MULT_X2: + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + scale_amount = 2; + break; + case TB_ALPHA_BLEND: + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + break; + case TB_COMBINE: + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); + break; + default: + llerrs << "Unknown Texture Blend Type: " << type << llendl; + break; + } + setColorScale(scale_amount); + setAlphaScale(1); +} + +GLint LLTexUnit::getTextureSource(eTextureBlendSrc src) +{ + switch(src) + { + // All four cases should return the same value. + case TBS_PREV_COLOR: + case TBS_PREV_ALPHA: + case TBS_ONE_MINUS_PREV_COLOR: + case TBS_ONE_MINUS_PREV_ALPHA: + return GL_PREVIOUS_ARB; + + // All four cases should return the same value. + case TBS_TEX_COLOR: + case TBS_TEX_ALPHA: + case TBS_ONE_MINUS_TEX_COLOR: + case TBS_ONE_MINUS_TEX_ALPHA: + return GL_TEXTURE; + + // All four cases should return the same value. + case TBS_VERT_COLOR: + case TBS_VERT_ALPHA: + case TBS_ONE_MINUS_VERT_COLOR: + case TBS_ONE_MINUS_VERT_ALPHA: + return GL_PRIMARY_COLOR_ARB; + + // All four cases should return the same value. + case TBS_CONST_COLOR: + case TBS_CONST_ALPHA: + case TBS_ONE_MINUS_CONST_COLOR: + case TBS_ONE_MINUS_CONST_ALPHA: + return GL_CONSTANT_ARB; + + default: + llwarns << "Unknown eTextureBlendSrc: " << src << ". Using Vertex Color instead." << llendl; + return GL_PRIMARY_COLOR_ARB; + } +} + +GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha) +{ + switch(src) + { + // All four cases should return the same value. + case TBS_PREV_COLOR: + case TBS_TEX_COLOR: + case TBS_VERT_COLOR: + case TBS_CONST_COLOR: + return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR; + + // All four cases should return the same value. + case TBS_PREV_ALPHA: + case TBS_TEX_ALPHA: + case TBS_VERT_ALPHA: + case TBS_CONST_ALPHA: + return GL_SRC_ALPHA; + + // All four cases should return the same value. + case TBS_ONE_MINUS_PREV_COLOR: + case TBS_ONE_MINUS_TEX_COLOR: + case TBS_ONE_MINUS_VERT_COLOR: + case TBS_ONE_MINUS_CONST_COLOR: + return (isAlpha) ? GL_ONE_MINUS_SRC_ALPHA : GL_ONE_MINUS_SRC_COLOR; + + // All four cases should return the same value. + case TBS_ONE_MINUS_PREV_ALPHA: + case TBS_ONE_MINUS_TEX_ALPHA: + case TBS_ONE_MINUS_VERT_ALPHA: + case TBS_ONE_MINUS_CONST_ALPHA: + return GL_ONE_MINUS_SRC_ALPHA; + + default: + llwarns << "Unknown eTextureBlendSrc: " << src << ". Using Source Color or Alpha instead." << llendl; + return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR; + } +} + +void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha) +{ + activate(); + if (mCurrBlendType != TB_COMBINE) + { + mCurrBlendType = TB_COMBINE; + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); + } + + // We want an early out, because this function does a LOT of stuff. + if ( (isAlpha && (mCurrAlphaOp == op) && (mCurrAlphaSrc1 == src1) && (mCurrAlphaSrc2 == src2) ) + || (!isAlpha && (mCurrColorOp == op) && (mCurrColorSrc1 == src1) && (mCurrColorSrc2 == src2) )) + { + return; + } + + // Get the gl source enums according to the eTextureBlendSrc sources passed in + GLint source1 = getTextureSource(src1); + GLint source2 = getTextureSource(src2); + // Get the gl operand enums according to the eTextureBlendSrc sources passed in + GLint operand1 = getTextureSourceType(src1, isAlpha); + GLint operand2 = getTextureSourceType(src2, isAlpha); + // Default the scale amount to 1 + S32 scale_amount = 1; + GLenum comb_enum, src0_enum, src1_enum, src2_enum, operand0_enum, operand1_enum, operand2_enum; + + if (isAlpha) + { + // Set enums to ALPHA ones + comb_enum = GL_COMBINE_ALPHA_ARB; + src0_enum = GL_SOURCE0_ALPHA_ARB; + src1_enum = GL_SOURCE1_ALPHA_ARB; + src2_enum = GL_SOURCE2_ALPHA_ARB; + operand0_enum = GL_OPERAND0_ALPHA_ARB; + operand1_enum = GL_OPERAND1_ALPHA_ARB; + operand2_enum = GL_OPERAND2_ALPHA_ARB; + + // cache current combiner + mCurrAlphaOp = op; + mCurrAlphaSrc1 = src1; + mCurrAlphaSrc2 = src2; + } + else + { + // Set enums to ALPHA ones + comb_enum = GL_COMBINE_RGB_ARB; + src0_enum = GL_SOURCE0_RGB_ARB; + src1_enum = GL_SOURCE1_RGB_ARB; + src2_enum = GL_SOURCE2_RGB_ARB; + operand0_enum = GL_OPERAND0_RGB_ARB; + operand1_enum = GL_OPERAND1_RGB_ARB; + operand2_enum = GL_OPERAND2_RGB_ARB; + + // cache current combiner + mCurrColorOp = op; + mCurrColorSrc1 = src1; + mCurrColorSrc2 = src2; + } + + switch(op) + { + case TBO_REPLACE: + // Slightly special syntax (no second sources), just set all and return. + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE); + glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1); + glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1); + (isAlpha) ? setAlphaScale(1) : setColorScale(1); + return; + + case TBO_MULT: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE); + break; + + case TBO_MULT_X2: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE); + scale_amount = 2; + break; + + case TBO_MULT_X4: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE); + scale_amount = 4; + break; + + case TBO_ADD: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD); + break; + + case TBO_ADD_SIGNED: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD_SIGNED_ARB); + break; + + case TBO_SUBTRACT: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_SUBTRACT_ARB); + break; + + case TBO_LERP_VERT_ALPHA: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); + glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB); + glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); + break; + + case TBO_LERP_TEX_ALPHA: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); + glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_TEXTURE); + glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); + break; + + case TBO_LERP_PREV_ALPHA: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); + glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PREVIOUS_ARB); + glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); + break; + + case TBO_LERP_CONST_ALPHA: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); + glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_CONSTANT_ARB); + glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); + break; + + case TBO_LERP_VERT_COLOR: + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); + glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB); + glTexEnvi(GL_TEXTURE_ENV, operand2_enum, (isAlpha) ? GL_SRC_ALPHA : GL_SRC_COLOR); + break; + + default: + llwarns << "Unknown eTextureBlendOp: " << op << ". Setting op to replace." << llendl; + // Slightly special syntax (no second sources), just set all and return. + glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE); + glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1); + glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1); + (isAlpha) ? setAlphaScale(1) : setColorScale(1); + return; + } + + // Set sources, operands, and scale accordingly + glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1); + glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1); + glTexEnvi(GL_TEXTURE_ENV, src1_enum, source2); + glTexEnvi(GL_TEXTURE_ENV, operand1_enum, operand2); + (isAlpha) ? setAlphaScale(scale_amount) : setColorScale(scale_amount); +} + +void LLTexUnit::setColorScale(S32 scale) +{ + if (mCurrColorScale != scale) + { + mCurrColorScale = scale; + glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale ); + } +} + +void LLTexUnit::setAlphaScale(S32 scale) +{ + if (mCurrAlphaScale != scale) + { + mCurrAlphaScale = scale; + glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale ); + } +} + +LLRender::LLRender() +{ + mCount = 0; + mMode = LLVertexBuffer::TRIANGLES; + mBuffer = new LLVertexBuffer(immediate_mask, 0); + mBuffer->allocateBuffer(4096, 0, TRUE); + mBuffer->getVertexStrider(mVerticesp); + mBuffer->getTexCoordStrider(mTexcoordsp); + mBuffer->getColorStrider(mColorsp); + + for (unsigned int i = 0; i < LL_NUM_TEXTURE_LAYERS; i++) + { + mTexUnits.push_back(new LLTexUnit(i)); + } +} + +LLRender::~LLRender() +{ + for (U32 i = 0; i < mTexUnits.size(); i++) + { + delete mTexUnits[i]; + } +} + +void LLRender::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z) +{ + flush(); + glTranslatef(x,y,z); +} + +void LLRender::pushMatrix() +{ + flush(); + glPushMatrix(); +} + +void LLRender::popMatrix() +{ + flush(); + glPopMatrix(); +} + +void LLRender::setColorMask(bool writeColor, bool writeAlpha) +{ + setColorMask(writeColor, writeColor, writeColor, writeAlpha); +} + +void LLRender::setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha) +{ + flush(); + glColorMask(writeColorR, writeColorG, writeColorB, writeAlpha); +} + +void LLRender::setSceneBlendType(eBlendType type) +{ + flush(); + switch (type) + { + case BT_ALPHA: + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + break; + case BT_ADD: + glBlendFunc(GL_ONE, GL_ONE); + break; + case BT_ADD_WITH_ALPHA: + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + break; + case BT_MULT: + glBlendFunc(GL_DST_COLOR, GL_ZERO); + break; + case BT_MULT_X2: + glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR); + break; + case BT_REPLACE: + glBlendFunc(GL_ONE, GL_ZERO); + break; + default: + llerrs << "Unknown Scene Blend Type: " << type << llendl; + break; + } +} + +void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value) +{ + flush(); + if (func == CF_DEFAULT) + { + glAlphaFunc(GL_GREATER, 0.01f); + } + else + { + glAlphaFunc(sGLCompareFunc[func], value); + } +} + +void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor) +{ + flush(); + glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]); +} + +LLTexUnit* LLRender::getTexUnit(U32 index) +{ + if (index < mTexUnits.size()) + { + return mTexUnits[index]; + } + llerrs << "Non-existing texture unit layer requested: " << index << llendl; + return NULL; +} + +void LLRender::begin(const GLuint& mode) +{ + if (mode != mMode) + { + if (mMode == LLVertexBuffer::QUADS || + mMode == LLVertexBuffer::LINES || + mMode == LLVertexBuffer::TRIANGLES || + mMode == LLVertexBuffer::POINTS) + { + flush(); + } + else if (mCount != 0) + { + llerrs << "gGL.begin() called redundantly." << llendl; + } + + mMode = mode; + } +} + +void LLRender::end() +{ + if (mCount == 0) + { + return; + //IMM_ERRS << "GL begin and end called with no vertices specified." << llendl; + } + + if ((mMode != LLVertexBuffer::QUADS && + mMode != LLVertexBuffer::LINES && + mMode != LLVertexBuffer::TRIANGLES && + mMode != LLVertexBuffer::POINTS) || + mCount > 2048) + { + flush(); + } +} +void LLRender::flush() +{ + if (mCount > 0) + { +#if 0 + if (!glIsEnabled(GL_VERTEX_ARRAY)) + { + llerrs << "foo 1" << llendl; + } + + if (!glIsEnabled(GL_COLOR_ARRAY)) + { + llerrs << "foo 2" << llendl; + } + + if (!glIsEnabled(GL_TEXTURE_COORD_ARRAY)) + { + llerrs << "foo 3" << llendl; + } + + if (glIsEnabled(GL_NORMAL_ARRAY)) + { + llerrs << "foo 7" << llendl; + } + + GLvoid* pointer; + + glGetPointerv(GL_VERTEX_ARRAY_POINTER, &pointer); + if (pointer != &(mBuffer[0].v)) + { + llerrs << "foo 4" << llendl; + } + + glGetPointerv(GL_COLOR_ARRAY_POINTER, &pointer); + if (pointer != &(mBuffer[0].c)) + { + llerrs << "foo 5" << llendl; + } + + glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &pointer); + if (pointer != &(mBuffer[0].uv)) + { + llerrs << "foo 6" << llendl; + } +#endif + + mBuffer->setBuffer(immediate_mask); + mBuffer->drawArrays(mMode, 0, mCount); + + mVerticesp[0] = mVerticesp[mCount]; + mTexcoordsp[0] = mTexcoordsp[mCount]; + mColorsp[0] = mColorsp[mCount]; + mCount = 0; + } +} +void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z) +{ + if (mCount >= 4096) + { + // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl; + return; + } + + mVerticesp[mCount] = LLVector3(x,y,z); + mCount++; + if (mCount < 4096) + { + mVerticesp[mCount] = mVerticesp[mCount-1]; + mColorsp[mCount] = mColorsp[mCount-1]; + mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; + } +} +void LLRender::vertex2i(const GLint& x, const GLint& y) +{ + vertex3f((GLfloat) x, (GLfloat) y, 0); +} + +void LLRender::vertex2f(const GLfloat& x, const GLfloat& y) +{ + vertex3f(x,y,0); +} + +void LLRender::vertex2fv(const GLfloat* v) +{ + vertex3f(v[0], v[1], 0); +} + +void LLRender::vertex3fv(const GLfloat* v) +{ + vertex3f(v[0], v[1], v[2]); +} + +void LLRender::texCoord2f(const GLfloat& x, const GLfloat& y) +{ + mTexcoordsp[mCount] = LLVector2(x,y); +} + +void LLRender::texCoord2i(const GLint& x, const GLint& y) +{ + texCoord2f((GLfloat) x, (GLfloat) y); +} + +void LLRender::texCoord2fv(const GLfloat* tc) +{ + texCoord2f(tc[0], tc[1]); +} + +void LLRender::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a) +{ + mColorsp[mCount] = LLColor4U(r,g,b,a); +} +void LLRender::color4ubv(const GLubyte* c) +{ + color4ub(c[0], c[1], c[2], c[3]); +} + +void LLRender::color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a) +{ + color4ub((GLubyte) (llclamp(r, 0.f, 1.f)*255), + (GLubyte) (llclamp(g, 0.f, 1.f)*255), + (GLubyte) (llclamp(b, 0.f, 1.f)*255), + (GLubyte) (llclamp(a, 0.f, 1.f)*255)); +} + +void LLRender::color4fv(const GLfloat* c) +{ + color4f(c[0],c[1],c[2],c[3]); +} + +void LLRender::color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b) +{ + color4f(r,g,b,1); +} + +void LLRender::color3fv(const GLfloat* c) +{ + color4f(c[0],c[1],c[2],1); +} + diff --git a/linden/indra/llrender/llrender.h b/linden/indra/llrender/llrender.h new file mode 100644 index 0000000..03280fe --- /dev/null +++ b/linden/indra/llrender/llrender.h @@ -0,0 +1,239 @@ +/** + * @file llrender.h + * @brief LLRender definition + * + * This class acts as a wrapper for OpenGL calls. + * The goal of this class is to minimize the number of api calls due to legacy rendering + * code, to define an interface for a multiple rendering API abstraction of the UI + * rendering, and to abstract out direct rendering calls in a way that is cleaner and easier to maintain. + * + * $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_LLGLRENDER_H +#define LL_LLGLRENDER_H + +#include "stdtypes.h" +#include "llgltypes.h" +#include "llglheaders.h" +#include "llvertexbuffer.h" + +class LLTexUnit +{ +public: + typedef enum + { + TB_REPLACE = 0, + TB_ADD, + TB_MULT, + TB_MULT_X2, + TB_ALPHA_BLEND, + TB_COMBINE // Doesn't need to be set directly, setTexture___Blend() set TB_COMBINE automatically + } eTextureBlendType; + + typedef enum + { + TBO_REPLACE = 0, // Use Source 1 + TBO_MULT, // Multiply: ( Source1 * Source2 ) + TBO_MULT_X2, // Multiply then scale by 2: ( 2.0 * ( Source1 * Source2 ) ) + TBO_MULT_X4, // Multiply then scale by 4: ( 4.0 * ( Source1 * Source2 ) ) + TBO_ADD, // Add: ( Source1 + Source2 ) + TBO_ADD_SIGNED, // Add then subtract 0.5: ( ( Source1 + Source2 ) - 0.5 ) + TBO_SUBTRACT, // Subtract Source2 from Source1: ( Source1 - Source2 ) + TBO_LERP_VERT_ALPHA, // Interpolate based on Vertex Alpha (VA): ( Source1 * VA + Source2 * (1-VA) ) + TBO_LERP_TEX_ALPHA, // Interpolate based on Texture Alpha (TA): ( Source1 * TA + Source2 * (1-TA) ) + TBO_LERP_PREV_ALPHA, // Interpolate based on Previous Alpha (PA): ( Source1 * PA + Source2 * (1-PA) ) + TBO_LERP_CONST_ALPHA, // Interpolate based on Const Alpha (CA): ( Source1 * CA + Source2 * (1-CA) ) + TBO_LERP_VERT_COLOR // Interpolate based on Vertex Col (VC): ( Source1 * VC + Source2 * (1-VC) ) + // *Note* TBO_LERP_VERTEX_COLOR only works with setTextureColorBlend(), + // and falls back to TBO_LERP_VERTEX_ALPHA for setTextureAlphaBlend(). + } eTextureBlendOp; + + typedef enum + { + TBS_PREV_COLOR = 0, // Color from the previous texture stage + TBS_PREV_ALPHA, + TBS_ONE_MINUS_PREV_COLOR, + TBS_ONE_MINUS_PREV_ALPHA, + TBS_TEX_COLOR, // Color from the texture bound to this stage + TBS_TEX_ALPHA, + TBS_ONE_MINUS_TEX_COLOR, + TBS_ONE_MINUS_TEX_ALPHA, + TBS_VERT_COLOR, // The vertex color currently set + TBS_VERT_ALPHA, + TBS_ONE_MINUS_VERT_COLOR, + TBS_ONE_MINUS_VERT_ALPHA, + TBS_CONST_COLOR, // The constant color value currently set + TBS_CONST_ALPHA, + TBS_ONE_MINUS_CONST_COLOR, + TBS_ONE_MINUS_CONST_ALPHA + } eTextureBlendSrc; + + LLTexUnit(U32 index); + U32 getIndex(void); + + void enable(void); + void disable(void); + void activate(void); + + void bindTexture(const LLImageGL* texture); + void unbindTexture(void); + + void setTextureBlendType(eTextureBlendType type); + + inline void setTextureColorBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_COLOR) + { setTextureCombiner(op, src1, src2, false); } + + // NOTE: If *_COLOR enums are passed to src1 or src2, the corresponding *_ALPHA enum will be used instead. + inline void setTextureAlphaBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_ALPHA) + { setTextureCombiner(op, src1, src2, true); } + +private: + U32 mIndex; + bool mIsEnabled; + eTextureBlendType mCurrBlendType; + eTextureBlendOp mCurrColorOp; + eTextureBlendSrc mCurrColorSrc1; + eTextureBlendSrc mCurrColorSrc2; + eTextureBlendOp mCurrAlphaOp; + eTextureBlendSrc mCurrAlphaSrc1; + eTextureBlendSrc mCurrAlphaSrc2; + S32 mCurrColorScale; + S32 mCurrAlphaScale; + + void debugTextureUnit(void); + void setColorScale(S32 scale); + void setAlphaScale(S32 scale); + GLint getTextureSource(eTextureBlendSrc src); + GLint getTextureSourceType(eTextureBlendSrc src, bool isAlpha = false); + void setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha = false); +}; + +class LLRender +{ + friend class LLTexUnit; +public: + typedef enum + { + CF_NEVER = 0, + CF_ALWAYS, + CF_LESS, + CF_LESS_EQUAL, + CF_EQUAL, + CF_NOT_EQUAL, + CF_GREATER_EQUAL, + CF_GREATER, + CF_DEFAULT + } eCompareFunc; + + typedef enum + { + BT_ALPHA = 0, + BT_ADD, + BT_ADD_WITH_ALPHA, // Additive blend modulated by the fragment's alpha. + BT_MULT, + BT_MULT_X2, + BT_REPLACE + } eBlendType; + + typedef enum + { + BF_ONE = 0, + BF_ZERO, + BF_DEST_COLOR, + BF_SOURCE_COLOR, + BF_ONE_MINUS_DEST_COLOR, + BF_ONE_MINUS_SOURCE_COLOR, + BF_DEST_ALPHA, + BF_SOURCE_ALPHA, + BF_ONE_MINUS_DEST_ALPHA, + BF_ONE_MINUS_SOURCE_ALPHA + } eBlendFactor; + + LLRender(); + ~LLRender(); + + void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z); + void pushMatrix(); + void popMatrix(); + + void flush(); + + void begin(const GLuint& mode); + void end(); + void vertex2i(const GLint& x, const GLint& y); + void vertex2f(const GLfloat& x, const GLfloat& y); + void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z); + void vertex2fv(const GLfloat* v); + void vertex3fv(const GLfloat* v); + + void texCoord2i(const GLint& x, const GLint& y); + void texCoord2f(const GLfloat& x, const GLfloat& y); + void texCoord2fv(const GLfloat* tc); + + void color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a); + void color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a); + void color4fv(const GLfloat* c); + void color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b); + void color3fv(const GLfloat* c); + void color4ubv(const GLubyte* c); + + void setColorMask(bool writeColor, bool writeAlpha); + void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha); + void setSceneBlendType(eBlendType type); + + void setAlphaRejectSettings(eCompareFunc func, F32 value = 0.01f); + + void blendFunc(eBlendFactor sfactor, eBlendFactor dfactor); + + LLTexUnit* getTexUnit(U32 index); + + typedef struct Vertex + { + GLfloat v[3]; + GLubyte c[4]; + GLfloat uv[2]; + }; + +public: + +private: + U32 mCount; + U32 mMode; + U32 mCurrTextureUnitIndex; + LLPointer mBuffer; + LLStrider mVerticesp; + LLStrider mTexcoordsp; + LLStrider mColorsp; + std::vector mTexUnits; +}; + + + +extern LLRender gGL; + +#endif diff --git a/linden/indra/llrender/llrender.vcproj b/linden/indra/llrender/llrender.vcproj index 2c6e2d2..d9144cb 100644 --- a/linden/indra/llrender/llrender.vcproj +++ b/linden/indra/llrender/llrender.vcproj @@ -165,7 +165,7 @@ RelativePath=".\llgldbg.cpp"> + RelativePath=".\llrender.cpp"> @@ -206,7 +206,7 @@ RelativePath=".\llgldbg.h"> + RelativePath=".\llrender.h"> diff --git a/linden/indra/llrender/llrender_vc8.vcproj b/linden/indra/llrender/llrender_vc8.vcproj index 8c0f82a..2147cec 100644 --- a/linden/indra/llrender/llrender_vc8.vcproj +++ b/linden/indra/llrender/llrender_vc8.vcproj @@ -243,11 +243,11 @@ > r("button"); @@ -574,9 +574,9 @@ void LLButton::draw() mImagep->draw(getLocalRect(), getEnabled() ? mImageColor : mDisabledImageColor ); if (mCurGlowStrength > 0.01f) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } } else @@ -584,9 +584,9 @@ void LLButton::draw() mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor ); if (mCurGlowStrength > 0.01f) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } } } diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp index 0523a11..d5edba7 100644 --- a/linden/indra/llui/llcombobox.cpp +++ b/linden/indra/llui/llcombobox.cpp @@ -565,6 +565,8 @@ void LLComboBox::showList() S32 min_width = getRect().getWidth(); S32 max_width = llmax(min_width, MAX_COMBO_WIDTH); + // make sure we have up to date content width metrics + mList->calcColumnWidths(); S32 list_width = llclamp(mList->getMaxContentWidth(), min_width, max_width); if (mListPosition == BELOW) @@ -781,8 +783,18 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask) mList->highlightNthItem(mList->getItemIndex(last_selected_item)); } result = mList->handleKeyHere(key, mask); + + // will only see return key if it is originating from line editor + // since the dropdown button eats the key + if (key == KEY_RETURN) + { + // don't show list and don't eat key input when committing + // free-form text entry with RETURN since user already knows + // what they are trying to select + return FALSE; + } // if selection has changed, pop open list - if (mList->getLastSelectedItem() != last_selected_item) + else if (mList->getLastSelectedItem() != last_selected_item) { showList(); } diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp index bf50830..759fae0 100644 --- a/linden/indra/llui/llfloater.cpp +++ b/linden/indra/llui/llfloater.cpp @@ -832,8 +832,14 @@ void LLFloater::setMinimized(BOOL minimize) for (S32 i = 0; i < 4; i++) { - if (mResizeBar[i]) mResizeBar[i]->setEnabled(FALSE); - if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(FALSE); + if (mResizeBar[i] != NULL) + { + mResizeBar[i]->setEnabled(FALSE); + } + if (mResizeHandle[i] != NULL) + { + mResizeHandle[i]->setEnabled(FALSE); + } } mMinimized = TRUE; @@ -875,8 +881,14 @@ void LLFloater::setMinimized(BOOL minimize) for (S32 i = 0; i < 4; i++) { - if (mResizeBar[i]) mResizeBar[i]->setEnabled(isResizable()); - if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(isResizable()); + if (mResizeBar[i] != NULL) + { + mResizeBar[i]->setEnabled(isResizable()); + } + if (mResizeHandle[i] != NULL) + { + mResizeHandle[i]->setEnabled(isResizable()); + } } mMinimized = FALSE; diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp index aeb906c..a12c9d8 100644 --- a/linden/indra/llui/lllineeditor.cpp +++ b/linden/indra/llui/lllineeditor.cpp @@ -132,7 +132,8 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect, mSelectAllonFocusReceived( FALSE ), mPassDelete(FALSE), mReadOnly(FALSE), - mImage( sImage ) + mImage( sImage ), + mReplaceNewlinesWithSpaces( TRUE ) { llassert( max_length_bytes > 0 ); @@ -961,7 +962,7 @@ void LLLineEditor::paste() LLWString clean_string(paste); LLWString::replaceTabsWithSpaces(clean_string, 1); //clean_string = wstring_detabify(paste, 1); - LLWString::replaceChar(clean_string, '\n', ' '); + LLWString::replaceChar(clean_string, '\n', mReplaceNewlinesWithSpaces ? ' ' : 182); // 182 == paragraph character // Insert the string @@ -2547,6 +2548,10 @@ S32 LLLineEditor::getPreeditFontSize() const return llround(mGLFont->getLineHeight() * LLUI::sGLScaleFactor.mV[VY]); } +void LLLineEditor::setReplaceNewlinesWithSpaces(BOOL replace) +{ + mReplaceNewlinesWithSpaces = replace; +} static LLRegisterWidget r2("search_editor"); diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h index bf0dcb5..c96e34d 100644 --- a/linden/indra/llui/lllineeditor.h +++ b/linden/indra/llui/lllineeditor.h @@ -211,6 +211,8 @@ public: void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off void updateHistory(); // stores current line in history + void setReplaceNewlinesWithSpaces(BOOL replace); + private: // private helper methods void removeChar(); @@ -311,6 +313,8 @@ private: // Instances that by default point to the statics but can be overidden in XML. LLPointer mImage; + BOOL mReplaceNewlinesWithSpaces; // if false, will replace pasted newlines with paragraph symbol. + // private helper class class LLLineEditorRollback { diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp index f2486f1..5e46ab7 100644 --- a/linden/indra/llui/llmenugl.cpp +++ b/linden/indra/llui/llmenugl.cpp @@ -47,7 +47,7 @@ #include "llmath.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llfocusmgr.h" #include "llfont.h" #include "llcoord.h" diff --git a/linden/indra/llui/llresizebar.cpp b/linden/indra/llui/llresizebar.cpp index e89bfee..fd571a1 100644 --- a/linden/indra/llui/llresizebar.cpp +++ b/linden/indra/llui/llresizebar.cpp @@ -50,6 +50,7 @@ LLResizeBar::LLResizeBar( const LLString& name, LLView* resizing_view, const LLR mMaxSize( max_size ), mSide( side ), mSnappingEnabled(TRUE), + mAllowDoubleClickSnapping(TRUE), mResizingView(resizing_view) { // set up some generically good follow code. @@ -260,27 +261,31 @@ BOOL LLResizeBar::handleDoubleClick(S32 x, S32 y, MASK mask) LLRect orig_rect = mResizingView->getRect(); LLRect scaled_rect = orig_rect; - if (mSnappingEnabled) + if (mSnappingEnabled && mAllowDoubleClickSnapping) { switch( mSide ) { case LEFT: mResizingView->findSnapEdge(scaled_rect.mLeft, LLCoordGL(0, 0), SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, S32_MAX); + scaled_rect.mLeft = scaled_rect.mRight - llclamp(scaled_rect.getWidth(), mMinSize, mMaxSize); break; case TOP: mResizingView->findSnapEdge(scaled_rect.mTop, LLCoordGL(0, 0), SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, S32_MAX); + scaled_rect.mTop = scaled_rect.mBottom + llclamp(scaled_rect.getHeight(), mMinSize, mMaxSize); break; case RIGHT: mResizingView->findSnapEdge(scaled_rect.mRight, LLCoordGL(0, 0), SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, S32_MAX); + scaled_rect.mRight = scaled_rect.mLeft + llclamp(scaled_rect.getWidth(), mMinSize, mMaxSize); break; case BOTTOM: mResizingView->findSnapEdge(scaled_rect.mBottom, LLCoordGL(0, 0), SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, S32_MAX); + scaled_rect.mBottom = scaled_rect.mTop - llclamp(scaled_rect.getHeight(), mMinSize, mMaxSize); break; } + + mResizingView->userSetShape(scaled_rect); } - mResizingView->reshape(scaled_rect.getWidth(), scaled_rect.getHeight()); - mResizingView->setOrigin(scaled_rect.mLeft, scaled_rect.mBottom); return TRUE; } diff --git a/linden/indra/llui/llresizebar.h b/linden/indra/llui/llresizebar.h index d03dafa..f8a7514 100644 --- a/linden/indra/llui/llresizebar.h +++ b/linden/indra/llui/llresizebar.h @@ -50,6 +50,7 @@ public: void setResizeLimits( S32 min_size, S32 max_size ) { mMinSize = min_size; mMaxSize = max_size; } void setEnableSnapping(BOOL enable) { mSnappingEnabled = enable; } + void setAllowDoubleClickSnapping(BOOL allow) { mAllowDoubleClickSnapping = allow; } private: S32 mDragLastScreenX; @@ -61,6 +62,7 @@ private: S32 mMaxSize; const Side mSide; BOOL mSnappingEnabled; + BOOL mAllowDoubleClickSnapping; LLView* mResizingView; }; diff --git a/linden/indra/llui/llscrollbar.cpp b/linden/indra/llui/llscrollbar.cpp index 8940b80..3d412c1 100644 --- a/linden/indra/llui/llscrollbar.cpp +++ b/linden/indra/llui/llscrollbar.cpp @@ -46,7 +46,7 @@ #include "llwindow.h" #include "llglheaders.h" #include "llcontrol.h" -#include "llglimmediate.h" +#include "llrender.h" LLScrollbar::LLScrollbar( const LLString& name, LLRect rect, @@ -520,9 +520,9 @@ void LLScrollbar::draw() rounded_rect_imagep->draw(mThumbRect, mThumbColor); if (mCurGlowStrength > 0.01f) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); rounded_rect_imagep->drawSolid(mThumbRect, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } } diff --git a/linden/indra/llui/llscrollcontainer.cpp b/linden/indra/llui/llscrollcontainer.cpp index f0b0b81..1217a58 100644 --- a/linden/indra/llui/llscrollcontainer.cpp +++ b/linden/indra/llui/llscrollcontainer.cpp @@ -33,7 +33,7 @@ #include "linden_common.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llscrollcontainer.h" #include "llscrollbar.h" diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp index 32c4e82..9693df4 100644 --- a/linden/indra/llui/llscrolllistctrl.cpp +++ b/linden/indra/llui/llscrolllistctrl.cpp @@ -43,7 +43,7 @@ #include "llclipboard.h" #include "llfocusmgr.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llglheaders.h" #include "llresmgr.h" #include "llscrollbar.h" @@ -1117,9 +1117,7 @@ BOOL LLScrollListCtrl::selectItemRange( S32 first_index, S32 last_index ) if( itemp->getEnabled() ) { selectItem(itemp, FALSE); - success = TRUE; - if (!success) - mOriginalSelection = first_index; + success = TRUE; } } else @@ -1198,7 +1196,7 @@ void LLScrollListCtrl::deleteItems(const LLSD& sd) mLastSelected = NULL; } delete itemp; - mItemList.erase(iter++); + iter = mItemList.erase(iter); } else { diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp index 9e85b20..f196975 100644 --- a/linden/indra/llui/llspinctrl.cpp +++ b/linden/indra/llui/llspinctrl.cpp @@ -249,6 +249,18 @@ void LLSpinCtrl::setValue(const LLSD& value ) } } +//no matter if Editor has the focus, update the value +void LLSpinCtrl::forceSetValue(const LLSD& value ) +{ + F32 v = (F32)value.asReal(); + if (mValue != v || !mbHasBeenSet) + { + mbHasBeenSet = TRUE; + mValue = v; + + updateEditor(); + } +} void LLSpinCtrl::clear() { diff --git a/linden/indra/llui/llspinctrl.h b/linden/indra/llui/llspinctrl.h index 790e216..5d040fd 100644 --- a/linden/indra/llui/llspinctrl.h +++ b/linden/indra/llui/llspinctrl.h @@ -66,6 +66,7 @@ public: virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); + virtual void forceSetValue(const LLSD& value ) ; virtual void setValue(const LLSD& value ); virtual LLSD getValue() const { return mValue; } F32 get() const { return (F32)getValue().asReal(); } @@ -87,6 +88,7 @@ public: virtual void setIncrement(F32 inc) { mIncrement = inc; } virtual F32 getMinValue() { return mMinValue ; } virtual F32 getMaxValue() { return mMaxValue ; } + virtual F32 getIncrement() { return mIncrement ; } void setLabel(const LLStringExplicit& label); void setLabelColor(const LLColor4& c) { mTextEnabledColor = c; } diff --git a/linden/indra/llui/llstyle.h b/linden/indra/llui/llstyle.h index 6f0099c..56f1398 100644 --- a/linden/indra/llui/llstyle.h +++ b/linden/indra/llui/llstyle.h @@ -37,7 +37,7 @@ #include "llfont.h" #include "llui.h" -class LLStyle +class LLStyle : public LLRefCount { public: LLStyle(); @@ -46,8 +46,6 @@ public: LLStyle &operator=(const LLStyle &rhs); - virtual ~LLStyle() { } - virtual void init (BOOL is_visible, const LLColor4 &color, const LLString& font_name); virtual const LLColor4& getColor() const { return mColor; } @@ -101,6 +99,9 @@ public: S32 mImageWidth; S32 mImageHeight; +protected: + virtual ~LLStyle() { } + private: BOOL mVisible; LLColor4 mColor; @@ -111,4 +112,6 @@ private: BOOL mIsEmbeddedItem; }; +typedef LLPointer LLStyleSP; + #endif // LL_LLSTYLE_H diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp index 44f1f20..827d4fb 100644 --- a/linden/indra/llui/lltabcontainer.cpp +++ b/linden/indra/llui/lltabcontainer.cpp @@ -40,7 +40,7 @@ #include "llcriticaldamp.h" #include "lluictrlfactory.h" #include "lltabcontainervertical.h" -#include "llglimmediate.h" +#include "llrender.h" const F32 SCROLL_STEP_TIME = 0.4f; diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp index 4ed936f..71522e5 100644 --- a/linden/indra/llui/lltexteditor.cpp +++ b/linden/indra/llui/lltexteditor.cpp @@ -37,7 +37,7 @@ #include "llfontgl.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llui.h" #include "lluictrlfactory.h" #include "llrect.h" @@ -1244,14 +1244,14 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask) const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); if( cur_segment ) { - if(cur_segment->getStyle().isLink()) + if(cur_segment->getStyle()->isLink()) { lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl; getWindow()->setCursor(UI_CURSOR_HAND); handled = TRUE; } else - if(cur_segment->getStyle().getIsEmbeddedItem()) + if(cur_segment->getStyle()->getIsEmbeddedItem()) { lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl; getWindow()->setCursor(UI_CURSOR_HAND); @@ -2928,23 +2928,26 @@ void LLTextEditor::drawText() S32 clipped_len = clipped_end - seg_start; if( clipped_len > 0 ) { - LLStyle style = cur_segment->getStyle(); - if ( style.isImage() && (cur_segment->getStart() >= seg_start) && (cur_segment->getStart() <= clipped_end)) + LLStyleSP style = cur_segment->getStyle(); + if ( style->isImage() && (cur_segment->getStart() >= seg_start) && (cur_segment->getStart() <= clipped_end)) { - LLUIImagePtr image = style.getImage(); - image->draw(llround(text_x), llround(text_y)+line_height-style.mImageHeight, style.mImageWidth, style.mImageHeight); + S32 style_image_height = style->mImageHeight; + S32 style_image_width = style->mImageWidth; + LLUIImagePtr image = style->getImage(); + image->draw(llround(text_x), llround(text_y)+line_height-style_image_height, + style_image_width, style_image_height); } - if (cur_segment == mHoverSegment && style.getIsEmbeddedItem()) + if (cur_segment == mHoverSegment && style->getIsEmbeddedItem()) { - style.mUnderline = TRUE; + style->mUnderline = TRUE; } S32 left_pos = llmin( mSelectionStart, mSelectionEnd ); if ( (mParseHTML) && (left_pos > seg_start) && (left_pos < clipped_end) && mIsSelecting && (mSelectionStart == mSelectionEnd) ) { - mHTML = style.getLinkHREF(); + mHTML = style->getLinkHREF(); } drawClippedSegment( text, seg_start, clipped_end, text_x, text_y, selection_left, selection_right, style, &text_x ); @@ -2963,38 +2966,38 @@ void LLTextEditor::drawText() } // Draws a single text segment, reversing the color for selection if needed. -void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyle& style, F32* right_x ) +void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyleSP& style, F32* right_x ) { - if (!style.isVisible()) + if (!style->isVisible()) { return; } const LLFontGL* font = mGLFont; - LLColor4 color = style.getColor(); + LLColor4 color = style->getColor(); - if ( style.getFontString()[0] ) + if ( style->getFontString()[0] ) { - font = LLResMgr::getInstance()->getRes(style.getFontID()); + font = LLResMgr::getInstance()->getRes(style->getFontID()); } U8 font_flags = LLFontGL::NORMAL; - if (style.mBold) + if (style->mBold) { font_flags |= LLFontGL::BOLD; } - if (style.mItalic) + if (style->mItalic) { font_flags |= LLFontGL::ITALIC; } - if (style.mUnderline) + if (style->mUnderline) { font_flags |= LLFontGL::UNDERLINE; } - if (style.getIsEmbeddedItem()) + if (style->getIsEmbeddedItem()) { if (mReadOnly) { @@ -3434,17 +3437,17 @@ void LLTextEditor::appendColoredText(const LLString &new_text, const LLColor4 &color, const LLString& font_name) { - LLStyle style; - style.setVisible(true); - style.setColor(color); - style.setFontName(font_name); + LLStyleSP style(new LLStyle); + style->setVisible(true); + style->setColor(color); + style->setFontName(font_name); appendStyledText(new_text, allow_undo, prepend_newline, &style); } void LLTextEditor::appendStyledText(const LLString &new_text, bool allow_undo, bool prepend_newline, - const LLStyle* style) + const LLStyleSP *stylep) { if(mParseHTML) { @@ -3453,17 +3456,17 @@ void LLTextEditor::appendStyledText(const LLString &new_text, LLString text = new_text; while ( findHTML(text, &start, &end) ) { - LLStyle html; - html.setVisible(true); - html.setColor(mLinkColor); - if (style) + LLStyleSP html(new LLStyle); + html->setVisible(true); + html->setColor(mLinkColor); + if (stylep) { - html.setFontName(style->getFontString()); + html->setFontName((*stylep)->getFontString()); } - html.mUnderline = TRUE; + html->mUnderline = TRUE; - if (start > 0) appendText(text.substr(0,start),allow_undo, prepend_newline, style); - html.setLinkHREF(text.substr(start,end-start)); + if (start > 0) appendText(text.substr(0,start),allow_undo, prepend_newline, stylep); + html->setLinkHREF(text.substr(start,end-start)); appendText(text.substr(start, end-start),allow_undo, prepend_newline, &html); if (end < (S32)text.length()) { @@ -3475,17 +3478,17 @@ void LLTextEditor::appendStyledText(const LLString &new_text, break; } } - if (end < (S32)text.length()) appendText(text,allow_undo, prepend_newline, style); + if (end < (S32)text.length()) appendText(text,allow_undo, prepend_newline, stylep); } else { - appendText(new_text, allow_undo, prepend_newline, style); + appendText(new_text, allow_undo, prepend_newline, stylep); } } // Appends new text to end of document void LLTextEditor::appendText(const LLString &new_text, bool allow_undo, bool prepend_newline, - const LLStyle* segment_style) + const LLStyleSP *stylep) { // Save old state BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax()); @@ -3513,11 +3516,11 @@ void LLTextEditor::appendText(const LLString &new_text, bool allow_undo, bool pr append(utf8str_to_wstring(new_text), TRUE ); } - if (segment_style) + if (stylep) { S32 segment_start = old_length; S32 segment_end = getLength(); - LLTextSegment* segment = new LLTextSegment(*segment_style, segment_start, segment_end ); + LLTextSegment* segment = new LLTextSegment(*stylep, segment_start, segment_end ); mSegments.push_back(segment); } @@ -3803,8 +3806,8 @@ void LLTextEditor::findEmbeddedItemSegments() in_text = TRUE; } - LLStyle embedded_style; - embedded_style.setIsEmbeddedItem( TRUE ); + LLStyleSP embedded_style(new LLStyle); + embedded_style->setIsEmbeddedItem( TRUE ); // Start with i just after the first embedded item while ( text[idx] ) @@ -4003,7 +4006,7 @@ BOOL LLTextEditor::exportBuffer(LLString &buffer ) LLTextSegment::LLTextSegment(S32 start) : mStart(start) { } -LLTextSegment::LLTextSegment( const LLStyle& style, S32 start, S32 end ) : +LLTextSegment::LLTextSegment( const LLStyleSP& style, S32 start, S32 end ) : mStyle( style ), mStart( start), mEnd( end ), @@ -4011,9 +4014,8 @@ LLTextSegment::LLTextSegment( const LLStyle& style, S32 start, S32 end ) : mIsDefault(FALSE) { } -LLTextSegment::LLTextSegment( - const LLColor4& color, S32 start, S32 end, BOOL is_visible) : - mStyle( is_visible, color,"" ), +LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end, BOOL is_visible) : + mStyle(new LLStyle(is_visible,color,"")), mStart( start), mEnd( end ), mToken(NULL), @@ -4021,7 +4023,7 @@ LLTextSegment::LLTextSegment( { } LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end ) : - mStyle( TRUE, color,"" ), + mStyle(new LLStyle(TRUE, color,"" )), mStart( start), mEnd( end ), mToken(NULL), @@ -4029,7 +4031,7 @@ LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end ) : { } LLTextSegment::LLTextSegment( const LLColor3& color, S32 start, S32 end ) : - mStyle( TRUE, color,"" ), + mStyle(new LLStyle(TRUE, color,"" )), mStart( start), mEnd( end ), mToken(NULL), diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h index 54a34cc..d5a68ca 100644 --- a/linden/indra/llui/lltexteditor.h +++ b/linden/indra/llui/lltexteditor.h @@ -139,7 +139,7 @@ public: void insertText(const LLString &text); // appends text at end void appendText(const LLString &wtext, bool allow_undo, bool prepend_newline, - const LLStyle* segment_style = NULL); + const LLStyleSP *stylep = NULL); void appendColoredText(const LLString &wtext, bool allow_undo, bool prepend_newline, @@ -148,7 +148,7 @@ public: // if styled text starts a line, you need to prepend a newline. void appendStyledText(const LLString &new_text, bool allow_undo, bool prepend_newline, - const LLStyle* style); + const LLStyleSP *stylep = NULL); // Removes text from the end of document // Does not change highlight or cursor position. @@ -429,7 +429,7 @@ private: void drawSelectionBackground(); void drawCursor(); void drawText(); - void drawClippedSegment(const LLWString &wtext, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyle& color, F32* right_x); + void drawClippedSegment(const LLWString &wtext, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyleSP& color, F32* right_x); // // Data @@ -528,7 +528,7 @@ class LLTextSegment public: // for creating a compare value LLTextSegment(S32 start); - LLTextSegment( const LLStyle& style, S32 start, S32 end ); + LLTextSegment( const LLStyleSP& style, S32 start, S32 end ); LLTextSegment( const LLColor4& color, S32 start, S32 end, BOOL is_visible); LLTextSegment( const LLColor4& color, S32 start, S32 end ); LLTextSegment( const LLColor3& color, S32 start, S32 end ); @@ -536,10 +536,10 @@ public: S32 getStart() const { return mStart; } S32 getEnd() const { return mEnd; } void setEnd( S32 end ) { mEnd = end; } - const LLColor4& getColor() const { return mStyle.getColor(); } - void setColor(const LLColor4 &color) { mStyle.setColor(color); } - const LLStyle& getStyle() const { return mStyle; } - void setStyle(const LLStyle &style) { mStyle = style; } + const LLColor4& getColor() const { return mStyle->getColor(); } + void setColor(const LLColor4 &color) { mStyle->setColor(color); } + const LLStyleSP& getStyle() const { return mStyle; } + void setStyle(const LLStyleSP &style) { mStyle = style; } void setIsDefault(BOOL b) { mIsDefault = b; } BOOL getIsDefault() const { return mIsDefault; } void setToken( LLKeywordToken* token ) { mToken = token; } @@ -557,7 +557,7 @@ public: }; private: - LLStyle mStyle; + LLStyleSP mStyle; S32 mStart; S32 mEnd; LLKeywordToken* mToken; diff --git a/linden/indra/llui/llui.cpp b/linden/indra/llui/llui.cpp index 45b1175..d2084e3 100644 --- a/linden/indra/llui/llui.cpp +++ b/linden/indra/llui/llui.cpp @@ -42,7 +42,7 @@ #include "v2math.h" #include "v4color.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llrect.h" #include "llimagegl.h" //#include "llviewerimage.h" @@ -493,18 +493,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma if (solid_color) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); } gGL.pushMatrix(); @@ -640,7 +630,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma if (solid_color) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } } diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp index cc8135c..7df6ebe 100644 --- a/linden/indra/llui/lluictrlfactory.cpp +++ b/linden/indra/llui/lluictrlfactory.cpp @@ -104,10 +104,17 @@ static LLRegisterWidget r2("pad"); // LLUICtrlFactory() //----------------------------------------------------------------------------- LLUICtrlFactory::LLUICtrlFactory() + : mDummyPanel(NULL) { setupPaths(); } +LLUICtrlFactory::~LLUICtrlFactory() +{ + delete mDummyPanel; + mDummyPanel = NULL; +} + void LLUICtrlFactory::setupPaths() { LLString filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "paths.xml"); @@ -428,10 +435,6 @@ void LLUICtrlFactory::rebuild() LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node) { - // panel for holding dummy widgets, so they have a parent for layout purposes, etc. - // does not manage lifetime of child widgets - static LLPanel dummy_panel; - LLString ctrl_type = node->getName()->mString; LLString::toLower(ctrl_type); @@ -445,7 +448,11 @@ LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node) if (parent == NULL) { - parent = &dummy_panel; + if (mDummyPanel == NULL) + { + mDummyPanel = new LLPanel; + } + parent = mDummyPanel; } LLView *ctrl = func(node, parent, this); diff --git a/linden/indra/llui/lluictrlfactory.h b/linden/indra/llui/lluictrlfactory.h index b9325a0..0c1d9dd 100644 --- a/linden/indra/llui/lluictrlfactory.h +++ b/linden/indra/llui/lluictrlfactory.h @@ -46,7 +46,7 @@ class LLUICtrlFactory : public LLSingleton public: LLUICtrlFactory(); // do not call! needs to be public so run-time can clean up the singleton - virtual ~LLUICtrlFactory() {} + virtual ~LLUICtrlFactory(); void setupPaths(); @@ -88,6 +88,8 @@ private: std::deque mFactoryStack; static std::vector mXUIPaths; + + LLPanel* mDummyPanel; }; diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp index 750821c..91c9564 100644 --- a/linden/indra/llui/llview.cpp +++ b/linden/indra/llui/llview.cpp @@ -37,7 +37,7 @@ #include #include -#include "llglimmediate.h" +#include "llrender.h" #include "llevent.h" #include "llfontgl.h" #include "llfocusmgr.h" diff --git a/linden/indra/llui/llviewborder.cpp b/linden/indra/llui/llviewborder.cpp index e9b7ca5..c354ac5 100644 --- a/linden/indra/llui/llviewborder.cpp +++ b/linden/indra/llui/llviewborder.cpp @@ -30,7 +30,7 @@ #include "linden_common.h" #include "llviewborder.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llfocusmgr.h" static LLRegisterWidget r("view_border"); diff --git a/linden/indra/llvfs/lldir.cpp b/linden/indra/llvfs/lldir.cpp index dc0ffea..084d3aa 100644 --- a/linden/indra/llvfs/lldir.cpp +++ b/linden/indra/llvfs/lldir.cpp @@ -492,21 +492,21 @@ bool LLDir::setCacheDir(const std::string &path) void LLDir::dumpCurrentDirectories() { - llinfos << "Current Directories:" << llendl; - - llinfos << " CurPath: " << getCurPath() << llendl; - llinfos << " AppName: " << getAppName() << llendl; - llinfos << " ExecutableFilename: " << getExecutableFilename() << llendl; - llinfos << " ExecutableDir: " << getExecutableDir() << llendl; - llinfos << " ExecutablePathAndName: " << getExecutablePathAndName() << llendl; - llinfos << " WorkingDir: " << getWorkingDir() << llendl; - llinfos << " AppRODataDir: " << getAppRODataDir() << llendl; - llinfos << " OSUserDir: " << getOSUserDir() << llendl; - llinfos << " OSUserAppDir: " << getOSUserAppDir() << llendl; - llinfos << " LindenUserDir: " << getLindenUserDir() << llendl; - llinfos << " TempDir: " << getTempDir() << llendl; - llinfos << " CAFile: " << getCAFile() << llendl; - llinfos << " SkinDir: " << getSkinDir() << llendl; + LL_DEBUGS2("AppInit","Directories") << "Current Directories:" << LL_ENDL; + + LL_DEBUGS2("AppInit","Directories") << " CurPath: " << getCurPath() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " AppName: " << getAppName() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " ExecutableFilename: " << getExecutableFilename() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " ExecutableDir: " << getExecutableDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " ExecutablePathAndName: " << getExecutablePathAndName() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " WorkingDir: " << getWorkingDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " AppRODataDir: " << getAppRODataDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " OSUserDir: " << getOSUserDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " OSUserAppDir: " << getOSUserAppDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " LindenUserDir: " << getLindenUserDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " TempDir: " << getTempDir() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " CAFile: " << getCAFile() << LL_ENDL; + LL_DEBUGS2("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL; } diff --git a/linden/indra/llvfs/llvfs.cpp b/linden/indra/llvfs/llvfs.cpp index e0957db..7903e83 100644 --- a/linden/indra/llvfs/llvfs.cpp +++ b/linden/indra/llvfs/llvfs.cpp @@ -248,7 +248,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r mDataFilename = new char[strlen(data_filename) + 1]; /* Flawfinder: ignore */ if (mIndexFilename == NULL || mDataFilename == NULL) { - llerrs << "Memory Allocation Failure" << llendl; + LL_ERRS("VFS") << "Memory Allocation Failure" << LL_ENDL; return; } strcpy(mIndexFilename, index_filename); /* Flawfinder: ignore */ @@ -261,7 +261,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r if (mReadOnly) { - llwarns << "Can't find " << mDataFilename << " to open read-only VFS" << llendl; + LL_WARNS("VFS") << "Can't find " << mDataFilename << " to open read-only VFS" << LL_ENDL; mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY; return; } @@ -274,18 +274,18 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r } else { - llwarns << "Can't open VFS data file " << mDataFilename << " attempting to use alternate" << llendl; + LL_WARNS("VFS") << "Can't open VFS data file " << mDataFilename << " attempting to use alternate" << LL_ENDL; char *temp_index = new char[strlen(mIndexFilename) + 10]; /* Flawfinder: ignore */ if (!temp_index) { - llerrs << "Out of the memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; + LL_ERRS("VFS") << "Out of the memory in LLVFS::LLVFS()" << LL_ENDL; return; } char *temp_data = new char[strlen(mDataFilename) + 10]; /* Flawfinder: ignore */ if (!temp_data) { - llerrs << "Out of the memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; + LL_ERRS("VFS") << "Out of the memory in LLVFS::LLVFS()" << LL_ENDL; return; } @@ -310,7 +310,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r if (! mDataFP) { - llwarns << "Couldn't open vfs data file after trying many alternates" << llendl; + LL_WARNS("VFS") << "Couldn't open vfs data file after trying many alternates" << LL_ENDL; mValid = VFSVALID_BAD_CANNOT_CREATE; delete[] temp_index; delete[] temp_data; @@ -338,7 +338,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r char* marker = new char[strlen(mDataFilename) + strlen(".open") + 1]; /* Flawfinder: ignore */ if (!marker ) { - llerrs << "Out of memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; + LL_ERRS("VFS") << "Out of memory in LLVFS::LLVFS()" << LL_ENDL; return; } sprintf(marker, "%s.open", mDataFilename); /* Flawfinder: ignore */ @@ -348,7 +348,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r unlockAndClose(mDataFP); mDataFP = NULL; - llwarns << "VFS: File left open on last run, removing old VFS file " << mDataFilename << llendl; + LL_WARNS("VFS") << "VFS: File left open on last run, removing old VFS file " << mDataFilename << LL_ENDL; LLFile::remove(mIndexFilename); LLFile::remove(mDataFilename); LLFile::remove(marker); @@ -356,7 +356,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r mDataFP = openAndLock(mDataFilename, "w+b", FALSE); if (!mDataFP) { - llwarns << "Can't open VFS data file in crash recovery" << llendl; + LL_WARNS("VFS") << "Can't open VFS data file in crash recovery" << LL_ENDL; mValid = VFSVALID_BAD_CANNOT_CREATE; return; } @@ -414,9 +414,9 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r if (block->mLength && block->mSize > 0) { // this is corrupt, not empty - llwarns << "VFS corruption: " << block->mFileID << " (" << block->mFileType << ") at index " << block->mIndexLocation << " DS: " << data_size << llendl; - llwarns << "Length: " << block->mLength << "\tLocation: " << block->mLocation << "\tSize: " << block->mSize << llendl; - llwarns << "File has bad data - VFS removed" << llendl; + LL_WARNS("VFS") << "VFS corruption: " << block->mFileID << " (" << block->mFileType << ") at index " << block->mIndexLocation << " DS: " << data_size << LL_ENDL; + LL_WARNS("VFS") << "Length: " << block->mLength << "\tLocation: " << block->mLocation << "\tSize: " << block->mSize << LL_ENDL; + LL_WARNS("VFS") << "File has bad data - VFS removed" << LL_ENDL; delete[] buffer; delete block; @@ -481,13 +481,13 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r if (cur_file_block->mLocation == last_file_block->mLocation && cur_file_block->mLength == last_file_block->mLength) { - llwarns << "VFS: removing duplicate entry" + LL_WARNS("VFS") << "VFS: removing duplicate entry" << " at " << cur_file_block->mLocation << " length " << cur_file_block->mLength << " size " << cur_file_block->mSize << " ID " << cur_file_block->mFileID << " type " << cur_file_block->mFileType - << llendl; + << LL_ENDL; // Duplicate entries. Nuke them both for safety. mFileBlocks.erase(*cur_file_block); // remove ID/type entry @@ -528,12 +528,12 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r mDataFP = NULL; LLFile::remove( mDataFilename ); - llwarns << "VFS: overlapping entries" + LL_WARNS("VFS") << "VFS: overlapping entries" << " at " << cur_file_block->mLocation << " length " << cur_file_block->mLength << " ID " << cur_file_block->mFileID << " type " << cur_file_block->mFileType - << llendl; + << LL_ENDL; mValid = VFSVALID_BAD_CORRUPT; return; } @@ -563,7 +563,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r { if (mReadOnly) { - llwarns << "Can't find " << mIndexFilename << " to open read-only VFS" << llendl; + LL_WARNS("VFS") << "Can't find " << mIndexFilename << " to open read-only VFS" << LL_ENDL; mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY; return; } @@ -572,7 +572,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r mIndexFP = openAndLock(mIndexFilename, "w+b", FALSE); if (!mIndexFP) { - llwarns << "Couldn't open an index file for the VFS, probably a sharing violation!" << llendl; + LL_WARNS("VFS") << "Couldn't open an index file for the VFS, probably a sharing violation!" << LL_ENDL; unlockAndClose( mDataFP ); mDataFP = NULL; @@ -593,11 +593,11 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r char* marker = new char[strlen(mDataFilename) + strlen(".open") + 1]; if (!marker) { - llerrs << "Out of memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; + LL_ERRS("VFS") << "Out of memory in LLVFS::LLVFS()" << LL_ENDL; return; } sprintf(marker, "%s.open", mDataFilename); /* Flawfinder: ignore */ - FILE* marker_fp = LLFile::fopen(marker, "w"); /* Flawfinder: ignore */ + LLFILE* marker_fp = LLFile::fopen(marker, "w"); /* Flawfinder: ignore */ if (marker_fp) { fclose(marker_fp); @@ -607,7 +607,8 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r marker = NULL; } - llinfos << "VFS: Using index file " << mIndexFilename << " and data file " << mDataFilename << llendl; + LL_WARNS("VFS") << "Using index file " << mIndexFilename << LL_ENDL; + LL_WARNS("VFS") << "Using data file " << mDataFilename << LL_ENDL; mValid = VFSVALID_OK; } @@ -616,7 +617,7 @@ LLVFS::~LLVFS() { if (mDataMutex->isLocked()) { - llerrs << "LLVFS destroyed with mutex locked" << llendl; + LL_ERRS("VFS") << "LLVFS destroyed with mutex locked" << LL_ENDL; } unlockAndClose(mIndexFP); @@ -642,7 +643,7 @@ LLVFS::~LLVFS() char* marker_file = new char[strlen(mDataFilename) + strlen(".open") + 1]; if (marker_file == NULL) { - llerrs << "Memory Allocation Failure" << llendl; + LL_ERRS("VFS") << "Memory Allocation Failure" << LL_ENDL; return; } sprintf(marker_file, "%s.open", mDataFilename); /* Flawfinder: ignore */ @@ -2134,7 +2135,7 @@ void LLVFS::dumpFiles() //============================================================================ // static -FILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock) +LLFILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock) { #if LL_WINDOWS @@ -2142,7 +2143,7 @@ FILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock) #else - FILE *fp; + LLFILE *fp; int fd; // first test the lock in a non-destructive way @@ -2192,7 +2193,7 @@ FILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock) } // static -void LLVFS::unlockAndClose(FILE *fp) +void LLVFS::unlockAndClose(LLFILE *fp) { if (fp) { diff --git a/linden/indra/llvfs/llvfs.h b/linden/indra/llvfs/llvfs.h index e07e85a..7465bb4 100644 --- a/linden/indra/llvfs/llvfs.h +++ b/linden/indra/llvfs/llvfs.h @@ -131,8 +131,8 @@ protected: void sync(LLVFSFileBlock *block, BOOL remove = FALSE); void presizeDataFile(const U32 size); - static FILE *openAndLock(const char *filename, const char *mode, BOOL read_lock); - static void unlockAndClose(FILE *fp); + static LLFILE *openAndLock(const char *filename, const char *mode, BOOL read_lock); + static void unlockAndClose(LLFILE *fp); // Can initiate LRU-based file removal to make space. // The immune file block will not be removed. @@ -153,8 +153,8 @@ protected: typedef std::multimap blocks_location_map_t; blocks_location_map_t mFreeBlocksByLocation; - FILE *mDataFP; - FILE *mIndexFP; + LLFILE *mDataFP; + LLFILE *mIndexFP; std::deque mIndexHoles; diff --git a/linden/indra/llwindow/files.linux.lst b/linden/indra/llwindow/files.linux.lst index e41ac2a..a2dfa07 100644 --- a/linden/indra/llwindow/files.linux.lst +++ b/linden/indra/llwindow/files.linux.lst @@ -1,4 +1,3 @@ llwindow/llkeyboardsdl.cpp llwindow/llwindowsdl.cpp -llwindow/llwindowlinux.cpp llwindow/llwindowmesaheadless.cpp diff --git a/linden/indra/llwindow/files.sunos5.lst b/linden/indra/llwindow/files.sunos5.lst index ee20b05..a2dfa07 100644 --- a/linden/indra/llwindow/files.sunos5.lst +++ b/linden/indra/llwindow/files.sunos5.lst @@ -1,4 +1,3 @@ llwindow/llkeyboardsdl.cpp llwindow/llwindowsdl.cpp -llwindow/llwindowsolaris.cpp llwindow/llwindowmesaheadless.cpp diff --git a/linden/indra/llwindow/lldxhardware.cpp b/linden/indra/llwindow/lldxhardware.cpp index 4eb8cab..c2d94c3 100644 --- a/linden/indra/llwindow/lldxhardware.cpp +++ b/linden/indra/llwindow/lldxhardware.cpp @@ -304,7 +304,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) IDxDiagContainer *driver_containerp = NULL; // CoCreate a IDxDiagProvider* - llinfos << "CoCreateInstance IID_IDxDiagProvider" << llendl; + LL_DEBUGS("AppInit") << "CoCreateInstance IID_IDxDiagProvider" << LL_ENDL; hr = CoCreateInstance(CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, @@ -313,7 +313,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) if (FAILED(hr)) { - llwarns << "No DXDiag provider found! DirectX 9 not installed!" << llendl; + LL_WARNS("AppInit") << "No DXDiag provider found! DirectX 9 not installed!" << LL_ENDL; gWriteDebug("No DXDiag provider found! DirectX 9 not installed!\n"); goto LCleanup; } @@ -331,14 +331,14 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) dx_diag_init_params.bAllowWHQLChecks = TRUE; dx_diag_init_params.pReserved = NULL; - llinfos << "dx_diag_providerp->Initialize" << llendl; + LL_DEBUGS("AppInit") << "dx_diag_providerp->Initialize" << LL_ENDL; hr = dx_diag_providerp->Initialize(&dx_diag_init_params); if(FAILED(hr)) { goto LCleanup; } - llinfos << "dx_diag_providerp->GetRootContainer" << llendl; + LL_DEBUGS("AppInit") << "dx_diag_providerp->GetRootContainer" << LL_ENDL; hr = dx_diag_providerp->GetRootContainer( &dx_diag_rootp ); if(FAILED(hr) || !dx_diag_rootp) { @@ -348,7 +348,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) HRESULT hr; // Get display driver information - llinfos << "dx_diag_rootp->GetChildContainer" << llendl; + LL_DEBUGS("AppInit") << "dx_diag_rootp->GetChildContainer" << LL_ENDL; hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp); if(FAILED(hr) || !devices_containerp) { @@ -356,7 +356,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) } // Get device 0 - llinfos << "devices_containerp->GetChildContainer" << llendl; + LL_DEBUGS("AppInit") << "devices_containerp->GetChildContainer" << LL_ENDL; hr = devices_containerp->GetChildContainer(L"0", &device_containerp); if(FAILED(hr) || !device_containerp) { @@ -373,10 +373,9 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) // Dump the string as an int into the structure char *stopstring; mVRAM = strtol(ram_str.c_str(), &stopstring, 10); - llinfos << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << llendl; + LL_INFOS("AppInit") << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << LL_ENDL; } - if (vram_only) { ok = TRUE; @@ -393,7 +392,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) // This call may take some time while dxdiag gathers the info. DWORD num_devices = 0; WCHAR wszContainer[256]; - llinfos << "dx_diag_rootp->GetChildContainer DxDiag_SystemDevices" << llendl; + LL_DEBUGS("AppInit") << "dx_diag_rootp->GetChildContainer DxDiag_SystemDevices" << LL_ENDL; hr = dx_diag_rootp->GetChildContainer(L"DxDiag_SystemDevices", &system_device_containerp); if (FAILED(hr)) { @@ -406,7 +405,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) goto LCleanup; } - llinfos << "DX9 iterating over devices" << llendl; + LL_DEBUGS("AppInit") << "DX9 iterating over devices" << LL_ENDL; S32 device_num = 0; for (device_num = 0; device_num < (S32)num_devices; device_num++) { @@ -523,7 +522,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) LCleanup: if (!ok) { - llwarns << "DX9 probe failed" << llendl; + LL_WARNS("AppInit") << "DX9 probe failed" << LL_ENDL; gWriteDebug("DX9 probe failed\n"); } diff --git a/linden/indra/llwindow/llgl.cpp b/linden/indra/llwindow/llgl.cpp index 229fdf2..e8169b6 100644 --- a/linden/indra/llwindow/llgl.cpp +++ b/linden/indra/llwindow/llgl.cpp @@ -41,7 +41,7 @@ #include "llsys.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llerror.h" #include "llquaternion.h" @@ -55,6 +55,7 @@ //#define GL_STATE_VERIFY #endif +BOOL gDebugGL = FALSE; BOOL gClothRipple = FALSE; BOOL gNoRender = FALSE; LLMatrix4 gGLObliqueProjectionInverse; @@ -253,50 +254,50 @@ PFNGLCOLORTABLEEXTPROC glColorTableEXT = NULL; LLGLManager gGLManager; -LLGLManager::LLGLManager() -{ - mInited = FALSE; - mIsDisabled = FALSE; - mHasCubeMap = FALSE; - mHasMultitexture = FALSE; - mHasMipMapGeneration = FALSE; - mHasAnisotropic = FALSE; - mHasCompressedTextures = FALSE; - mHasARBEnvCombine = FALSE; - mIsGF2or4MX = FALSE; - mIsGF3 = FALSE; - mIsGFFX = FALSE; - mIsATI = FALSE; - mATIOffsetVerticalLines = FALSE; - mHasVertexShader = FALSE; - mHasFragmentShader = FALSE; - mHasShaderObjects = FALSE; - mHasPointParameters = FALSE; - -#if LL_WINDOWS - mHasWGLARBPixelFormat = FALSE; -#endif // LL_WINDOWS - -#if LL_DARWIN - mHasAPPLEVertexArrayRange = FALSE; - mHasAPPLEFence = FALSE; - mHasAPPLEVAO = FALSE; -#endif - - mIsNVIDIA = FALSE; - mIsIntel = FALSE; +LLGLManager::LLGLManager() : + mInited(FALSE), + mIsDisabled(FALSE), + + mHasMultitexture(FALSE), + mNumTextureUnits(1), + mHasMipMapGeneration(FALSE), + mHasPalettedTextures(FALSE), + mHasCompressedTextures(FALSE), + mHasFramebufferObject(FALSE), + + mHasVertexBufferObject(FALSE), + mHasPBuffer(FALSE), + mHasShaderObjects(FALSE), + mHasVertexShader(FALSE), + mHasFragmentShader(FALSE), + mHasOcclusionQuery(FALSE), + mHasPointParameters(FALSE), + + mHasAnisotropic(FALSE), + mHasARBEnvCombine(FALSE), + mHasCubeMap(FALSE), + + mIsATI(FALSE), + mIsNVIDIA(FALSE), + mIsIntel(FALSE), + mIsGF2or4MX(FALSE), + mIsGF3(FALSE), + mIsGFFX(FALSE), + mATIOffsetVerticalLines(FALSE), + + mHasRequirements(TRUE), + + mHasSeparateSpecularColor(FALSE), + + mDriverVersionMajor(1), + mDriverVersionMinor(0), + mDriverVersionRelease(0), + mGLVersion(1.0f), - mDriverVersionMajor = 1; - mDriverVersionMinor = 0; - mDriverVersionRelease = 0; - mGLVersion = 1.0f; - - mNumTextureUnits = 1; - mVRAM = 0; - mGLMaxVertexRange = 0; - mGLMaxIndexRange = 0; - - mHasRequirements = TRUE; + mVRAM(0), + mGLMaxVertexRange(0), + mGLMaxIndexRange(0) +{ } //--------------------------------------------------------------------- @@ -308,7 +309,7 @@ void LLGLManager::initWGL() #if LL_WINDOWS && !LL_MESA_HEADLESS if (!glh_init_extensions("WGL_ARB_pixel_format")) { - llwarns << "No ARB pixel format extensions" << llendl; + LL_WARNS("RenderInit") << "No ARB pixel format extensions" << LL_ENDL; } if (ExtensionExists("WGL_EXT_swap_control", gGLHExts.mSysExts)) @@ -316,15 +317,14 @@ void LLGLManager::initWGL() GLH_EXT_NAME(wglSwapIntervalEXT) = (PFNWGLSWAPINTERVALEXTPROC)GLH_EXT_GET_PROC_ADDRESS("wglSwapIntervalEXT"); } - mHasWGLARBPixelFormat = glh_init_extensions("WGL_ARB_pbuffer"); - if( !mHasWGLARBPixelFormat ) + if( !glh_init_extensions("WGL_ARB_pbuffer") ) { - llwarns << "No ARB WGL PBuffer extensions" << llendl; + LL_WARNS("RenderInit") << "No ARB WGL PBuffer extensions" << LL_ENDL; } if( !glh_init_extensions("WGL_ARB_render_texture") ) { - llwarns << "No ARB WGL render texture extensions" << llendl; + LL_WARNS("RenderInit") << "No ARB WGL render texture extensions" << LL_ENDL; } mHasPBuffer = ExtensionExists("WGL_ARB_pbuffer", gGLHExts.mSysExts) && @@ -338,19 +338,15 @@ bool LLGLManager::initGL() { if (mInited) { - llerrs << "Calling init on LLGLManager after already initialized!" << llendl; + LL_ERRS("RenderInit") << "Calling init on LLGLManager after already initialized!" << LL_ENDL; } GLint alpha_bits; glGetIntegerv( GL_ALPHA_BITS, &alpha_bits ); if( 8 != alpha_bits ) { - llwarns << "Frame buffer has less than 8 bits of alpha. Avatar texture compositing will fail." << llendl; + LL_WARNS("RenderInit") << "Frame buffer has less than 8 bits of alpha. Avatar texture compositing will fail." << LL_ENDL; } - - // This function uses at least one variable that's initialized below. - // Moved this call down to after we figure out which card we're dealing with. -- MBW 2003.10.07 -// initExtensions(); // Extract video card strings and convert to upper case to // work around driver-to-driver variation in capitalization. @@ -445,7 +441,7 @@ bool LLGLManager::initGL() mHasRequirements = FALSE; // We don't support cards that don't support the GL_ARB_multitexture extension - llwarns << "GL Drivers do not support GL_ARB_multitexture" << llendl; + LL_WARNS("RenderInit") << "GL Drivers do not support GL_ARB_multitexture" << LL_ENDL; return false; } @@ -489,6 +485,22 @@ LLString LLGLManager::getGLInfoString() return info_str; } +void LLGLManager::printGLInfoString() +{ + LLString info_str; + LLString all_exts, line; + + LL_INFOS("RenderInit") << "GL_VENDOR: " << ((const char *)glGetString(GL_VENDOR)) << LL_ENDL; + LL_INFOS("RenderInit") << "GL_RENDERER: " << ((const char *)glGetString(GL_RENDERER)) << LL_ENDL; + LL_INFOS("RenderInit") << "GL_VERSION: " << ((const char *)glGetString(GL_VERSION)) << LL_ENDL; + +#if !LL_MESA_HEADLESS + all_exts = (const char *)gGLHExts.mSysExts; + LLString::replaceChar(all_exts, ' ', '\n'); + LL_DEBUGS("RenderInit") << "GL_EXTENSIONS:\n" << all_exts << LL_ENDL; +#endif +} + LLString LLGLManager::getRawGLString() { LLString gl_string; @@ -595,8 +607,7 @@ void LLGLManager::initExtensions() mHasShaderObjects = FALSE; mHasVertexShader = FALSE; mHasFragmentShader = FALSE; - llwarns << "GL extension support DISABLED via LL_GL_NOEXT" << - llendl; + LL_WARNS("RenderInit") << "GL extension support DISABLED via LL_GL_NOEXT" << LL_ENDL; } else if (getenv("LL_GL_BASICEXT")) /* Flawfinder: ignore */ { @@ -612,8 +623,7 @@ void LLGLManager::initExtensions() mHasShaderObjects = FALSE; mHasVertexShader = FALSE; mHasFragmentShader = FALSE; - llwarns << "GL extension support forced to SIMPLE level via LL_GL_BASICEXT" << - llendl; + LL_WARNS("RenderInit") << "GL extension support forced to SIMPLE level via LL_GL_BASICEXT" << LL_ENDL; } if (getenv("LL_GL_BLACKLIST")) /* Flawfinder: ignore */ { @@ -621,7 +631,7 @@ void LLGLManager::initExtensions() // GL extensions to isolate problems with their hardware. // SL-28126 const char *const blacklist = getenv("LL_GL_BLACKLIST"); /* Flawfinder: ignore */ - llwarns << "GL extension support partially disabled via LL_GL_BLACKLIST: " << blacklist << llendl; + LL_WARNS("RenderInit") << "GL extension support partially disabled via LL_GL_BLACKLIST: " << blacklist << LL_ENDL; if (strchr(blacklist,'a')) mHasARBEnvCombine = FALSE; if (strchr(blacklist,'b')) mHasCompressedTextures = FALSE; if (strchr(blacklist,'c')) mHasVertexBufferObject = FALSE; @@ -651,62 +661,62 @@ void LLGLManager::initExtensions() if (!mHasMultitexture) { - llinfos << "Couldn't initialize multitexturing" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize multitexturing" << LL_ENDL; } if (!mHasMipMapGeneration) { - llinfos << "Couldn't initialize mipmap generation" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize mipmap generation" << LL_ENDL; } if (!mHasARBEnvCombine) { - llinfos << "Couldn't initialize GL_ARB_texture_env_combine" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_texture_env_combine" << LL_ENDL; } if (!mHasPalettedTextures) { - llinfos << "Couldn't initialize GL_EXT_paletted_texture" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_EXT_paletted_texture" << LL_ENDL; } if (!mHasSeparateSpecularColor) { - llinfos << "Couldn't initialize separate specular color" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize separate specular color" << LL_ENDL; } if (!mHasAnisotropic) { - llinfos << "Couldn't initialize anisotropic filtering" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize anisotropic filtering" << LL_ENDL; } if (!mHasCompressedTextures) { - llinfos << "Couldn't initialize GL_ARB_texture_compression" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_texture_compression" << LL_ENDL; } if (!mHasOcclusionQuery) { - llinfos << "Couldn't initialize GL_ARB_occlusion_query" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_occlusion_query" << LL_ENDL; } if (!mHasPointParameters) { - llinfos << "Couldn't initialize GL_ARB_point_parameters" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_point_parameters" << LL_ENDL; } if (!mHasShaderObjects) { - llinfos << "Couldn't initialize GL_ARB_shader_objects" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_shader_objects" << LL_ENDL; } if (!mHasVertexShader) { - llinfos << "Couldn't initialize GL_ARB_vertex_shader" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_vertex_shader" << LL_ENDL; } if (!mHasFragmentShader) { - llinfos << "Couldn't initialize GL_ARB_fragment_shader" << llendl; + LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_fragment_shader" << LL_ENDL; } // Disable certain things due to known bugs if (mIsIntel && mHasMipMapGeneration) { - llinfos << "Disabling mip-map generation for Intel GPUs" << llendl; + LL_INFOS("RenderInit") << "Disabling mip-map generation for Intel GPUs" << LL_ENDL; mHasMipMapGeneration = FALSE; } if (mIsATI && mHasMipMapGeneration) { - llinfos << "Disabling mip-map generation for ATI GPUs (performance opt)" << llendl; + LL_INFOS("RenderInit") << "Disabling mip-map generation for ATI GPUs (performance opt)" << LL_ENDL; mHasMipMapGeneration = FALSE; } @@ -714,30 +724,8 @@ void LLGLManager::initExtensions() glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange); glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange); - // Apple specific -#if LL_DARWIN - mHasAPPLEVertexArrayRange = glh_init_extensions("GL_APPLE_vertex_array_range"); - if (!mHasAPPLEVertexArrayRange) - { - llinfos << "Couldn't initialize GL_APPLE_vertex_array_range" << llendl; - } - - mHasAPPLEFence = glh_init_extensions("GL_APPLE_fence"); - if (!mHasAPPLEFence) - { - llinfos << "Couldn't initialize GL_APPLE_fence" << llendl; - } - - mHasAPPLEVAO = glh_init_extensions("GL_APPLE_vertex_array_object"); - if (mHasAPPLEVAO) - { - llinfos << "Has GL_APPLE_vertex_array_object!" << llendl; - } - -#endif // LL_DARWIN - #if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS - llinfos << "GL Probe: Getting symbols" << llendl; + LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL; if (mHasVertexBufferObject) { glBindBufferARB = (PFNGLBINDBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBindBufferARB"); @@ -921,7 +909,7 @@ void LLGLManager::initExtensions() glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glgetVertexAttribPointervARB"); glIsProgramARB = (PFNGLISPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glIsProgramARB"); } - llinfos << "GL Probe: Got symbols" << llendl; + LL_DEBUGS("RenderInit") << "GL Probe: Got symbols" << LL_ENDL; #endif mInited = TRUE; @@ -941,33 +929,41 @@ void flush_glerror() void assert_glerror() { - if (gNoRender) + if (gNoRender || !gDebugGL) { return; } if (!gGLManager.mInited) { - llerrs << "GL not initialized" << llendl; + LL_ERRS("RenderInit") << "GL not initialized" << LL_ENDL; } // Create or update texture to be used with this data GLenum error; error = glGetError(); - if (error) + BOOL quit = FALSE; + while (error) { + quit = TRUE; #ifndef LL_LINUX // *FIX: ! This should be an error for linux as well. GLubyte const * gl_error_msg = gluErrorString(error); if (NULL != gl_error_msg) { - llerrs << "GL Error:" << gl_error_msg << llendl; + LL_WARNS("RenderState") << "GL Error:" << gl_error_msg << LL_ENDL; } else { // gluErrorString returns NULL for some extensions' error codes. // you'll probably have to grep for the number in glext.h. - llerrs << "GL Error: UNKNOWN 0x" << std::hex << error << llendl; + LL_WARNS("RenderState") << "GL Error: UNKNOWN 0x" << std::hex << error << LL_ENDL; } + error = glGetError(); #endif } + + if (quit) + { + llerrs << "One or more unhandled GL errors." << llendl; + } } void clear_glerror() @@ -977,8 +973,7 @@ void clear_glerror() error = glGetError(); } -//============================================================================ - +/////////////////////////////////////////////////////////////// // // LLGLState // @@ -1014,7 +1009,7 @@ void LLGLState::resetTextureStates() glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits); for (S32 j = maxTextureUnits-1; j >=0; j--) { - glActiveTextureARB(GL_TEXTURE0_ARB+j); + gGL.getTexUnit(j)->activate(); glClientActiveTextureARB(GL_TEXTURE0_ARB+j); j == 0 ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D); } @@ -1022,17 +1017,21 @@ void LLGLState::resetTextureStates() void LLGLState::dumpStates() { - llinfos << "GL States:" << llendl; + LL_INFOS("RenderState") << "GL States:" << LL_ENDL; for (std::map::iterator iter = sStateMap.begin(); iter != sStateMap.end(); ++iter) { - llinfos << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << llendl; + LL_INFOS("RenderState") << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << LL_ENDL; } } void LLGLState::checkStates() { -#if LL_DEBUG_GL + if (!gDebugGL) + { + return; + } + stop_glerror(); GLint activeTexture; @@ -1040,7 +1039,7 @@ void LLGLState::checkStates() if (activeTexture != GL_TEXTURE0_ARB) { - LL_GL_ERRS << "Texture channel corrupted. " << llendl; + LL_GL_ERRS << "Texture channel corrupted. " << LL_ENDL; } GLint src; @@ -1050,7 +1049,7 @@ void LLGLState::checkStates() if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA) { - LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << llendl; + LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << LL_ENDL; } for (std::map::iterator iter = sStateMap.begin(); @@ -1062,17 +1061,20 @@ void LLGLState::checkStates() if(cur_state != gl_state) { dumpStates(); - LL_GL_ERRS << llformat("LLGLState error. State: 0x%04x",state) << llendl; + LL_GL_ERRS << llformat("LLGLState error. State: 0x%04x",state) << LL_ENDL; } } stop_glerror(); -#endif } void LLGLState::checkTextureChannels() { -#if LL_DEBUG_GL + if (!gDebugGL) + { + return; + } + GLint activeTexture; glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture); @@ -1081,12 +1083,12 @@ void LLGLState::checkTextureChannels() if (activeTexture != GL_TEXTURE0_ARB) { error = TRUE; - llwarns << "Active texture channel corrupted. " << llendl; + LL_WARNS("RenderState") << "Active texture channel corrupted. " << LL_ENDL; } else if (!glIsEnabled(GL_TEXTURE_2D)) { error = TRUE; - llwarns << "GL_TEXTURE_2D not enabled on texture channel 0." << llendl; + LL_WARNS("RenderState") << "GL_TEXTURE_2D not enabled on texture channel 0." << LL_ENDL; } else { @@ -1096,7 +1098,7 @@ void LLGLState::checkTextureChannels() if (tex_env_mode != GL_MODULATE) { error = TRUE; - llwarns << "GL_TEXTURE_ENV_MODE invalid: " << std::hex << tex_env_mode << llendl; + LL_WARNS("RenderState") << "GL_TEXTURE_ENV_MODE invalid: " << std::hex << tex_env_mode << LL_ENDL; } } @@ -1133,7 +1135,7 @@ void LLGLState::checkTextureChannels() for (GLint i = 0; i < maxTextureUnits; i++) { - glActiveTextureARB(GL_TEXTURE0_ARB+i); + gGL.getTexUnit(i)->activate(); glClientActiveTextureARB(GL_TEXTURE0_ARB+i); glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &stackDepth); @@ -1141,7 +1143,7 @@ void LLGLState::checkTextureChannels() if (stackDepth != 1) { error = TRUE; - llwarns << "Texture matrix stack corrupted." << llendl; + LL_WARNS("RenderState") << "Texture matrix stack corrupted." << LL_ENDL; } glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) matrix.mMatrix); @@ -1149,7 +1151,7 @@ void LLGLState::checkTextureChannels() if (matrix != identity) { error = TRUE; - llwarns << "Texture matrix in channel " << i << " corrupt." << llendl; + LL_WARNS("RenderState") << "Texture matrix in channel " << i << " corrupt." << LL_ENDL; } for (S32 j = (i == 0 ? 1 : 0); j < 8; j++) @@ -1157,24 +1159,27 @@ void LLGLState::checkTextureChannels() if (glIsEnabled(value[j])) { error = TRUE; - llwarns << "Texture channel " << i << " still has " << label[j] << " enabled." << llendl; + LL_WARNS("RenderState") << "Texture channel " << i << " still has " << label[j] << " enabled." << LL_ENDL; } } } - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glClientActiveTextureARB(GL_TEXTURE0_ARB); if (error) { - LL_GL_ERRS << "GL texture state corruption detected." << llendl; + LL_GL_ERRS << "GL texture state corruption detected." << LL_ENDL; } -#endif } void LLGLState::checkClientArrays(U32 data_mask) { -#if LL_DEBUG_GL + if (!gDebugGL) + { + return; + } + stop_glerror(); BOOL error = FALSE; @@ -1226,7 +1231,7 @@ void LLGLState::checkClientArrays(U32 data_mask) if (!(mask[j] & data_mask)) { error = TRUE; - llwarns << "GL still has " << label[j] << " enabled." << llendl; + LL_WARNS("RenderState") << "GL still has " << label[j] << " enabled." << LL_ENDL; } } else @@ -1234,19 +1239,19 @@ void LLGLState::checkClientArrays(U32 data_mask) if (mask[j] & data_mask) { error = TRUE; - llwarns << "GL does not have " << label[j] << " enabled." << llendl; + LL_WARNS("RenderState") << "GL does not have " << label[j] << " enabled." << LL_ENDL; } } } glClientActiveTextureARB(GL_TEXTURE1_ARB); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); if (glIsEnabled(GL_TEXTURE_COORD_ARRAY)) { if (!(data_mask & 0x0008)) { error = TRUE; - llwarns << "GL still has GL_TEXTURE_COORD_ARRAY enabled on channel 1." << llendl; + LL_WARNS("RenderState") << "GL still has GL_TEXTURE_COORD_ARRAY enabled on channel 1." << LL_ENDL; } } else @@ -1254,7 +1259,7 @@ void LLGLState::checkClientArrays(U32 data_mask) if (data_mask & 0x0008) { error = TRUE; - llwarns << "GL does not have GL_TEXTURE_COORD_ARRAY enabled on channel 1." << llendl; + LL_WARNS("RenderState") << "GL does not have GL_TEXTURE_COORD_ARRAY enabled on channel 1." << LL_ENDL; } } @@ -1263,7 +1268,7 @@ void LLGLState::checkClientArrays(U32 data_mask) if (!(data_mask & 0x0008)) { error = TRUE; - llwarns << "GL still has GL_TEXTURE_2D enabled on channel 1." << llendl; + LL_WARNS("RenderState") << "GL still has GL_TEXTURE_2D enabled on channel 1." << LL_ENDL; } } else @@ -1271,26 +1276,25 @@ void LLGLState::checkClientArrays(U32 data_mask) if (data_mask & 0x0008) { error = TRUE; - llwarns << "GL does not have GL_TEXTURE_2D enabled on channel 1." << llendl; + LL_WARNS("RenderState") << "GL does not have GL_TEXTURE_2D enabled on channel 1." << LL_ENDL; } } glClientActiveTextureARB(GL_TEXTURE0_ARB); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); if (error) { - LL_GL_ERRS << "GL client array corruption detected." << llendl; + LL_GL_ERRS << "GL client array corruption detected." << LL_ENDL; } -#endif } -//============================================================================ +/////////////////////////////////////////////////////////////////////// -LLGLState::LLGLState(LLGLenum state, S32 enabled) +LLGLState::LLGLState(LLGLenum state, S32 enabled) : + mState(state), mWasEnabled(FALSE), mIsEnabled(FALSE) { stop_glerror(); - mState = state; if (state) { mWasEnabled = sStateMap[state]; @@ -1330,9 +1334,11 @@ LLGLState::~LLGLState() stop_glerror(); if (mState) { -#if LL_DEBUG_GL - llassert(sStateMap[mState] == glIsEnabled(mState)); -#endif + if (gDebugGL) + { + llassert_always(sStateMap[mState] == glIsEnabled(mState)); + } + if (mIsEnabled != mWasEnabled) { gGL.flush(); @@ -1351,7 +1357,7 @@ LLGLState::~LLGLState() stop_glerror(); } -//============================================================================ +//////////////////////////////////////////////////////////////////////////////// void LLGLManager::initGLStates() { @@ -1359,7 +1365,7 @@ void LLGLManager::initGLStates() LLGLState::initClass(); } -//============================================================================ +//////////////////////////////////////////////////////////////////////////////// void enable_vertex_weighting(const S32 index) { diff --git a/linden/indra/llwindow/llgl.h b/linden/indra/llwindow/llgl.h index e8f17bf..2618dca 100644 --- a/linden/indra/llwindow/llgl.h +++ b/linden/indra/llwindow/llgl.h @@ -48,9 +48,9 @@ #include "llglheaders.h" #include "glh/glh_linear.h" -#define LL_DEBUG_GL 1 +extern BOOL gDebugGL; -#define LL_GL_ERRS llerrs +#define LL_GL_ERRS LL_ERRS("RenderState") class LLSD; @@ -92,7 +92,7 @@ public: BOOL mHasARBEnvCombine; BOOL mHasCubeMap; - // Vender specific extensions + // Vendor-specific extensions BOOL mIsATI; BOOL mIsNVIDIA; BOOL mIsIntel; @@ -104,18 +104,7 @@ public: // Whether this version of GL is good enough for SL to use BOOL mHasRequirements; -#if LL_WINDOWS - BOOL mHasWGLARBPixelFormat; -#endif // LL_WINDOWS - -#if LL_DARWIN - // Apple extensions. - BOOL mHasAPPLEVertexArrayRange; - BOOL mHasAPPLEFence; - BOOL mHasAPPLEVAO; -#endif - - // Misc exitensions + // Misc extensions BOOL mHasSeparateSpecularColor; S32 mDriverVersionMajor; @@ -131,6 +120,7 @@ public: void getPixelFormat(); // Get the best pixel format LLString getGLInfoString(); + void printGLInfoString(); void getGLInfo(LLSD& info); // In ALL CAPS @@ -159,13 +149,13 @@ void assert_glerror(); void clear_glerror(); -#if LL_DEBUG +//#if LL_DEBUG # define stop_glerror() assert_glerror() # define llglassertok() assert_glerror() -#else -# define stop_glerror() -# define llglassertok() -#endif +//#else +//# define stop_glerror() +//# define llglassertok() +//#endif #define llglassertok_always() assert_glerror() diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp index 9963228..ffb6393 100644 --- a/linden/indra/llwindow/llwindow.cpp +++ b/linden/indra/llwindow/llwindow.cpp @@ -40,8 +40,6 @@ #include "llwindowwin32.h" #elif LL_DARWIN #include "llwindowmacosx.h" -#elif LL_LINUX -#include "llwindowlinux.h" // currently just a dummy wrapper #endif #include "llerror.h" @@ -287,6 +285,20 @@ void LLWindow::setCallbacks(LLWindowCallbacks *callbacks) } } +// static +std::string LLWindow::getFontListSans() +{ +#if LL_WINDOWS + return LLWindowWin32::getFontListSans(); +#elif LL_DARWIN + return LLWindowMacOSX::getFontListSans(); +#elif LL_SDL + return LLWindowSDL::getFontListSans(); +#else + return ""; +#endif +} + #define UTF16_IS_HIGH_SURROGATE(U) ((U16)((U) - 0xD800) < 0x0400) #define UTF16_IS_LOW_SURROGATE(U) ((U16)((U) - 0xDC00) < 0x0400) #define UTF16_SURROGATE_PAIR_TO_UTF32(H,L) (((H) << 10) + (L) - (0xD800 << 10) - 0xDC00 + 0x00010000) @@ -450,10 +462,6 @@ LLWindow* LLWindowManager::createWindow( new_window = new LLWindowMacOSX( title, name, x, y, width, height, flags, fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth, fsaa_samples); -#elif LL_LINUX - new_window = new LLWindowLinux( - title, name, x, y, width, height, flags, - fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth); #endif } else diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h index 89de5a0..a63c8d5 100644 --- a/linden/indra/llwindow/llwindow.h +++ b/linden/indra/llwindow/llwindow.h @@ -234,6 +234,8 @@ public: virtual void updateLanguageTextInputArea() {} virtual void interruptLanguageTextInput() {} + static std::string getFontListSans(); + protected: LLWindow(BOOL fullscreen, U32 flags); virtual ~LLWindow() {} diff --git a/linden/indra/llwindow/llwindowlinux.cpp b/linden/indra/llwindow/llwindowlinux.cpp deleted file mode 100644 index 6c026e4..0000000 --- a/linden/indra/llwindow/llwindowlinux.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/** - * @file llwindowlinux.cpp - * @brief Platform-dependent implementation of llwindow - * - * $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$ - */ - -#if LL_LINUX - -#include "linden_common.h" -#include "indra_constants.h" - -#include "llwindowlinux.h" -#include "llgl.h" -#include "llglheaders.h" - -// -// LLWindowLinux -// -LLWindowLinux::LLWindowLinux(char *title, char *name, S32 x, S32 y, S32 width, S32 height, - U32 flags, BOOL fullscreen, BOOL clearBg, - BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth) - : LLWindow(fullscreen, flags) -{ - llerrs << "Linux window not yet supported" << llendl; -} - - -LLWindowLinux::~LLWindowLinux() -{ -} - -void LLWindowLinux::swapBuffers() -{ -} - -#endif // LL_LINUX diff --git a/linden/indra/llwindow/llwindowlinux.h b/linden/indra/llwindow/llwindowlinux.h deleted file mode 100644 index da80fd4..0000000 --- a/linden/indra/llwindow/llwindowlinux.h +++ /dev/null @@ -1,119 +0,0 @@ -/** - * @file llwindowlinux.h - * @brief Linux implementation of LLWindow class - * - * $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_LLWINDOWWIN32_H -#define LL_LLWINDOWWIN32_H - -#include "llwindow.h" - -class LLWindowLinux : public LLWindow -{ -public: - /*virtual*/ void show() {}; - /*virtual*/ void hide() {}; - /*virtual*/ void close() {}; - /*virtual*/ BOOL getVisible() {return FALSE;}; - /*virtual*/ BOOL getMinimized() {return FALSE;}; - /*virtual*/ BOOL getMaximized() {return FALSE;}; - /*virtual*/ BOOL maximize() {return FALSE;}; - /*virtual*/ BOOL getFullscreen() {return FALSE;}; - /*virtual*/ BOOL getPosition(LLCoordScreen *position) {return FALSE;}; - /*virtual*/ BOOL getSize(LLCoordScreen *size) {return FALSE;}; - /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; - /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; - /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; - /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;}; - /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; - /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; - /*virtual*/ void showCursor() {}; - /*virtual*/ void hideCursor() {}; - /*virtual*/ void showCursorFromMouseMove() {}; - /*virtual*/ void hideCursorUntilMouseMove() {}; - /*virtual*/ BOOL isCursorHidden() {return FALSE;}; - /*virtual*/ void setCursor(ECursorType cursor) {}; - //virtual ECursorType getCursor() { return mCurrentCursor; }; - /*virtual*/ void captureMouse() {}; - /*virtual*/ void releaseMouse() {}; - /*virtual*/ void setMouseClipping( BOOL b ) {}; - /*virtual*/ BOOL isClipboardTextAvailable() {return FALSE; }; - /*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst) {return FALSE; }; - /*virtual*/ BOOL copyTextToClipboard(const LLWString &src) {return FALSE; }; - /*virtual*/ void flashIcon(F32 seconds) {}; - /*virtual*/ F32 getGamma() {return 1.0f; }; - /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma - /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma) - //virtual ESwapMethod getSwapMethod() { return mSwapMethod; } - /*virtual*/ void gatherInput() {}; - /*virtual*/ void delayInputProcessing() {}; - /*virtual*/ void swapBuffers(); - - /*virtual*/ LLString getTempFileName() {return LLString(""); }; - /*virtual*/ void deleteFile( const char* file_name ) {}; - /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info ) {return 0; }; - /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL) { return FALSE; }; - - - // handy coordinate space conversion routines - /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordGL *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordWindow *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordGL *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordScreen *to) { return FALSE; }; - - /*virtual*/ LLWindowResolution* getSupportedResolutions(S32 &num_resolutions) { return NULL; }; - /*virtual*/ F32 getNativeAspectRatio() { return 1.0f; }; - /*virtual*/ F32 getPixelAspectRatio() { return 1.0f; }; - /*virtual*/ void setNativeAspectRatio(F32 ratio) {} - - //virtual BOOL dialog_color_picker (F32 *r, F32 *g, F32 *b ); - - /*virtual*/ void *getPlatformWindow() { return NULL; } - - LLWindowLinux(char *title, char *name, S32 x, S32 y, S32 width, S32 height, - U32 flags, BOOL fullscreen, BOOL clearBg, - BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth); - ~LLWindowLinux(); -}; - -class LLSplashScreenLinux : public LLSplashScreen -{ -public: - LLSplashScreenLinux() {}; - virtual ~LLSplashScreenLinux() {}; - - /*virtual*/ void showImpl() {}; - /*virtual*/ void updateImpl(const char* mesg) {}; - /*virtual*/ void hideImpl() {}; - -}; - -#endif //LL_LLWINDOWWIN32_H diff --git a/linden/indra/llwindow/llwindowmacosx-objc.mm b/linden/indra/llwindow/llwindowmacosx-objc.mm index d2efd77..d4ea2be 100644 --- a/linden/indra/llwindow/llwindowmacosx-objc.mm +++ b/linden/indra/llwindow/llwindowmacosx-objc.mm @@ -47,6 +47,8 @@ void setupCocoa() if(!inited) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + // This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor": // http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html @@ -55,6 +57,8 @@ void setupCocoa() // Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image [[[NSWindow alloc] init] release]; + + [pool release]; } } @@ -82,8 +86,10 @@ OSErr releaseImageCursor(CursorRef ref) { if( ref != NULL ) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSCursor *cursor = (NSCursor*)ref; [cursor release]; + [pool release]; } else { @@ -97,8 +103,10 @@ OSErr setImageCursor(CursorRef ref) { if( ref != NULL ) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSCursor *cursor = (NSCursor*)ref; [cursor set]; + [pool release]; } else { diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp index f5cc8c6..5ab0ba6 100644 --- a/linden/indra/llwindow/llwindowmacosx.cpp +++ b/linden/indra/llwindow/llwindowmacosx.cpp @@ -359,7 +359,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits if (mFullscreen && (mOldDisplayMode == NULL)) { - llinfos << "createContext: setting up fullscreen " << width << "x" << height << llendl; + LL_INFOS("Window") << "createContext: setting up fullscreen " << width << "x" << height << LL_ENDL; // NOTE: The refresh rate will be REPORTED AS 0 for many DVI and notebook displays. Plan accordingly. double refresh = getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate); @@ -380,18 +380,18 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits U32 closestWidth = 0; int i; - llinfos << "createContext: searching for a display mode, original aspect is " << mOriginalAspectRatio << llendl; + LL_DEBUGS("Window") << "createContext: searching for a display mode, original aspect is " << mOriginalAspectRatio << LL_ENDL; for(i=0; i < resolutionCount; i++) { F32 aspect = (F32)resolutionList[i].mWidth / (F32)resolutionList[i].mHeight; - llinfos << "createContext: width " << resolutionList[i].mWidth << " height " << resolutionList[i].mHeight << " aspect " << aspect << llendl; + LL_DEBUGS("Window") << "createContext: width " << resolutionList[i].mWidth << " height " << resolutionList[i].mHeight << " aspect " << aspect << LL_ENDL; if( (resolutionList[i].mHeight >= 700) && (resolutionList[i].mHeight <= 800) && (fabs(aspect - mOriginalAspectRatio) < fabs(closestAspect - mOriginalAspectRatio))) { - llinfos << " (new closest mode) " << llendl; + LL_DEBUGS("Window") << " (new closest mode) " << LL_ENDL; // This is the closest mode we've seen yet. closestWidth = resolutionList[i].mWidth; @@ -437,7 +437,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits if (refDisplayMode) { - llinfos << "createContext: switching display resolution" << llendl; + LL_DEBUGS("Window") << "createContext: switching display resolution" << LL_ENDL; mOldDisplayMode = CGDisplayCurrentMode (mDisplay); CGDisplaySwitchToMode (mDisplay, refDisplayMode); // CFRelease(refDisplayMode); @@ -452,11 +452,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits mFullscreenBits = CGDisplayBitsPerPixel(mDisplay); mFullscreenRefresh = llround(getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate)); - llinfos << "Running at " << mFullscreenWidth + LL_INFOS("Window") << "Running at " << mFullscreenWidth << "x" << mFullscreenHeight << "x" << mFullscreenBits << " @ " << mFullscreenRefresh - << llendl; + << LL_ENDL; } else { @@ -480,7 +480,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits //int displayHeight = CGDisplayPixelsHigh(mDisplay); //const int menuBarPlusTitleBar = 44; // Ugly magic number. - llinfos << "createContext: creating window" << llendl; + LL_DEBUGS("Window") << "createContext: creating window" << LL_ENDL; window_rect.left = (long) x; window_rect.right = (long) x + width; @@ -534,7 +534,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits err = NewTSMDocument(1, types, &mTSMDocument, 0); if (err != noErr) { - llwarns << "createContext: couldn't create a TSMDocument (" << err << ")" << llendl; + LL_WARNS("Window") << "createContext: couldn't create a TSMDocument (" << err << ")" << LL_ENDL; } if (mTSMDocument) { @@ -575,7 +575,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits AGL_NONE }; - llinfos << "createContext: creating fullscreen pixelformat" << llendl; + LL_DEBUGS("Window") << "createContext: creating fullscreen pixelformat" << LL_ENDL; GDHandle gdhDisplay = NULL; err = DMGetGDeviceByDisplayID ((DisplayIDType)mDisplay, &gdhDisplay, false); @@ -602,7 +602,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits AGL_NONE }; - llinfos << "createContext: creating windowed pixelformat" << llendl; + LL_DEBUGS("Window") << "createContext: creating windowed pixelformat" << LL_ENDL; mPixelFormat = aglChoosePixelFormat(NULL, 0, windowedAttrib); @@ -622,7 +622,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits if(mPixelFormat) { - llinfos << "createContext: creating GL context" << llendl; + LL_DEBUGS("Window") << "createContext: creating GL context" << LL_ENDL; mContext = aglCreateContext(mPixelFormat, NULL); } @@ -670,7 +670,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits { // We successfully captured the display. Use a fullscreen drawable - llinfos << "createContext: attaching fullscreen drawable" << llendl; + LL_DEBUGS("Window") << "createContext: attaching fullscreen drawable" << LL_ENDL; #if CAPTURE_ALL_DISPLAYS // Capture all displays (may want to do this for final build) @@ -688,7 +688,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits } else if(!mFullscreen && (mWindow != NULL)) { - llinfos << "createContext: attaching windowed drawable" << llendl; + LL_DEBUGS("Window") << "createContext: attaching windowed drawable" << LL_ENDL; // We created a window. Use it as the drawable. if(!aglSetDrawable(mContext, GetWindowPort (mWindow))) @@ -705,7 +705,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits if(mContext != NULL) { - llinfos << "createContext: setting current context" << llendl; + LL_DEBUGS("Window") << "createContext: setting current context" << LL_ENDL; if (!aglSetCurrentContext(mContext)) { @@ -759,11 +759,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits return FALSE; } - llinfos << "GL buffer: Color Bits " << S32(colorBits) + LL_INFOS("GLInit") << "GL buffer: Color Bits " << S32(colorBits) << " Alpha Bits " << S32(alphaBits) << " Depth Bits " << S32(depthBits) << " Stencil Bits" << S32(stencilBits) - << llendl; + << LL_ENDL; if (colorBits < 32) { @@ -798,12 +798,12 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits GLint frames_per_swap = 0; if (disable_vsync) { - llinfos << "Disabling vertical sync" << llendl; + LL_DEBUGS("GLInit") << "Disabling vertical sync" << LL_ENDL; frames_per_swap = 0; } else { - llinfos << "Keeping vertical sync" << llendl; + LL_DEBUGS("GLinit") << "Keeping vertical sync" << LL_ENDL; frames_per_swap = 1; } aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap); @@ -818,11 +818,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits if (cgl_err != kCGLNoError ) { - llinfos << "Multi-threaded OpenGL not available." << llendl; + LL_DEBUGS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL; } else { - llinfos << "Multi-threaded OpenGL enabled." << llendl; + LL_DEBUGS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL; } } @@ -869,11 +869,11 @@ BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, const LLCoordScreen &size, B mFullscreenBits = CGDisplayBitsPerPixel(mDisplay); mFullscreenRefresh = llround(getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate)); - llinfos << "Switched resolution to " << mFullscreenWidth + LL_INFOS("Window") << "Switched resolution to " << mFullscreenWidth << "x" << mFullscreenHeight << "x" << mFullscreenBits << " @ " << mFullscreenRefresh - << llendl; + << LL_ENDL; // Update the GL context to the new screen size if (!aglUpdateContext(mContext)) @@ -943,7 +943,7 @@ void LLWindowMacOSX::destroyContext() // Unhook the GL context from any drawable it may have if(mContext != NULL) { - llinfos << "destroyContext: unhooking drawable " << llendl; + LL_DEBUGS("Window") << "destroyContext: unhooking drawable " << LL_ENDL; aglSetCurrentContext (NULL); aglSetDrawable(mContext, NULL); @@ -952,7 +952,7 @@ void LLWindowMacOSX::destroyContext() // Make sure the display resolution gets restored if(mOldDisplayMode != NULL) { - llinfos << "destroyContext: restoring display resolution " << llendl; + LL_DEBUGS("Window") << "destroyContext: restoring display resolution " << LL_ENDL; CGDisplaySwitchToMode (mDisplay, mOldDisplayMode); @@ -978,7 +978,7 @@ void LLWindowMacOSX::destroyContext() // Clean up the pixel format if(mPixelFormat != NULL) { - llinfos << "destroyContext: destroying pixel format " << llendl; + LL_DEBUGS("Window") << "destroyContext: destroying pixel format " << LL_ENDL; aglDestroyPixelFormat(mPixelFormat); mPixelFormat = NULL; } @@ -986,14 +986,14 @@ void LLWindowMacOSX::destroyContext() // Remove any Carbon Event handlers we installed if(mGlobalHandlerRef != NULL) { - llinfos << "destroyContext: removing global event handler" << llendl; + LL_DEBUGS("Window") << "destroyContext: removing global event handler" << LL_ENDL; RemoveEventHandler(mGlobalHandlerRef); mGlobalHandlerRef = NULL; } if(mWindowHandlerRef != NULL) { - llinfos << "destroyContext: removing window event handler" << llendl; + LL_DEBUGS("Window") << "destroyContext: removing window event handler" << LL_ENDL; RemoveEventHandler(mWindowHandlerRef); mWindowHandlerRef = NULL; } @@ -1001,7 +1001,7 @@ void LLWindowMacOSX::destroyContext() // Cleanup any TSM document we created. if(mTSMDocument != NULL) { - llinfos << "destroyContext: deleting TSM document" << llendl; + LL_DEBUGS("Window") << "destroyContext: deleting TSM document" << LL_ENDL; DeactivateTSMDocument(mTSMDocument); DeleteTSMDocument(mTSMDocument); mTSMDocument = NULL; @@ -1010,7 +1010,7 @@ void LLWindowMacOSX::destroyContext() // Close the window if(mWindow != NULL) { - llinfos << "destroyContext: disposing window" << llendl; + LL_DEBUGS("Window") << "destroyContext: disposing window" << LL_ENDL; DisposeWindow(mWindow); mWindow = NULL; } @@ -1018,7 +1018,7 @@ void LLWindowMacOSX::destroyContext() // Clean up the GL context if(mContext != NULL) { - llinfos << "destroyContext: destroying GL context" << llendl; + LL_DEBUGS("Window") << "destroyContext: destroying GL context" << LL_ENDL; aglDestroyContext(mContext); mContext = NULL; } @@ -3394,4 +3394,13 @@ void LLWindowMacOSX::interruptLanguageTextInput() // Well, if Apple's TSM document is correct, we don't. } +//static +std::string LLWindowMacOSX::getFontListSans() +{ + // This is a fairly complete Japanese font that ships with Mac OS X. + // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3". + // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light" + return "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf"; +} + #endif // LL_DARWIN diff --git a/linden/indra/llwindow/llwindowmacosx.h b/linden/indra/llwindow/llwindowmacosx.h index 1edb218..d8a0788 100644 --- a/linden/indra/llwindow/llwindowmacosx.h +++ b/linden/indra/llwindow/llwindowmacosx.h @@ -116,6 +116,8 @@ public: /*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b); /*virtual*/ void interruptLanguageTextInput(); + static std::string getFontListSans(); + protected: LLWindowMacOSX( char *title, char *name, int x, int y, int width, int height, U32 flags, diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp index d9dc040..0d1d622 100644 --- a/linden/indra/llwindow/llwindowsdl.cpp +++ b/linden/indra/llwindow/llwindowsdl.cpp @@ -39,6 +39,7 @@ #include "llgl.h" #include "llstring.h" #include "lldir.h" +#include "llfindlocale.h" #include "llglheaders.h" @@ -51,6 +52,10 @@ extern "C" { #include #endif // LL_GTK +extern "C" { +# include "fontconfig/fontconfig.h" +} + #if LL_LINUX || LL_SOLARIS // not necessarily available on random SDL platforms, so #if LL_LINUX // for execv(), waitpid(), fork() @@ -2030,7 +2035,8 @@ void LLWindowSDL::gatherInput() // the locale to protect it, as exotic/non-C locales // causes our code lots of general critical weirdness // and crashness. (SL-35450) - std::string saved_locale = setlocale(LC_ALL, NULL); + static std::string saved_locale; + saved_locale = ll_safe_string(setlocale(LC_ALL, NULL)); // Pump until we've nothing left to do or passed 1/15th of a // second pumping for this frame. @@ -2751,8 +2757,8 @@ void spawn_web_browser(const char* escaped_url) # endif // LL_X11 std::string cmd; - cmd = gDirUtilp->getAppRODataDir().c_str(); - cmd += gDirUtilp->getDirDelimiter().c_str(); + cmd = gDirUtilp->getAppRODataDir(); + cmd += gDirUtilp->getDirDelimiter(); cmd += "launch_url.sh"; char* const argv[] = {(char*)cmd.c_str(), (char*)escaped_url, NULL}; @@ -2829,4 +2835,90 @@ void LLWindowSDL::bringToFront() #endif // LL_X11 } +//static +std::string LLWindowSDL::getFontListSans() +{ + // Use libfontconfig to find us a nice ordered list of fallback fonts + // specific to this system. + std::string final_fallback("/usr/share/fonts/truetype/kochi/kochi-gothic.ttf"); + // Our 'ideal' font properties which define the sorting results. + // slant=0 means Roman, index=0 means the first face in a font file + // (the one we actually use), weight=80 means medium weight, + // spacing=0 means proportional spacing. + std::string sort_order("slant=0:index=0:weight=80:spacing=0"); + // elide_unicode_coverage removes fonts from the list whose unicode + // range is covered by fonts earlier in the list. This usually + // removes ~90% of the fonts as redundant (which is great because + // the font list can be huge), but might unnecessarily reduce the + // renderable range if for some reason our FreeType actually fails + // to use some of the fonts we want it to. + const bool elide_unicode_coverage = true; + std::string rtn; + FcFontSet *fs = NULL; + FcPattern *sortpat = NULL; + int font_count = 0; + + llinfos << "Getting system font list from FontConfig..." << llendl; + + // If the user has a system-wide language preference, then favor + // fonts from that language group. This doesn't affect the types + // of languages that can be displayed, but ensures that their + // preferred language is rendered from a single consistent font where + // possible. + FL_Locale *locale = NULL; + FL_Success success = FL_FindLocale(&locale, FL_MESSAGES); + if (success != 0) + { + if (success >= 2 && locale->lang) // confident! + { + llinfos << "Preferring fonts of language: " + << locale->lang + << llendl; + sort_order = "lang=" + std::string(locale->lang) + ":" + + sort_order; + } + FL_FreeLocale(&locale); + } + + if (!FcInit()) + { + llwarns << "FontConfig failed to initialize." << llendl; + return final_fallback; + } + + sortpat = FcNameParse((FcChar8*) sort_order.c_str()); + if (sortpat) + { + // Sort the list of system fonts from most-to-least-desirable. + fs = FcFontSort(NULL, sortpat, elide_unicode_coverage, + NULL, NULL); + FcPatternDestroy(sortpat); + } + + if (fs) + { + // Get the full pathnames to the fonts, where available, + // which is what we really want. + int i; + for (i=0; infont; ++i) + { + FcChar8 *filename; + if (FcResultMatch == FcPatternGetString(fs->fonts[i], + FC_FILE, 0, + &filename) + && filename) + { + rtn += std::string((const char*)filename)+";"; + ++font_count; + } + } + FcFontSetDestroy (fs); + } + + lldebugs << "Using font list: " << rtn << llendl; + llinfos << "Using " << font_count << " system font(s)." << llendl; + + return rtn + final_fallback; +} + #endif // LL_SDL diff --git a/linden/indra/llwindow/llwindowsdl.h b/linden/indra/llwindow/llwindowsdl.h index d1b2b77..5aed4e6 100644 --- a/linden/indra/llwindow/llwindowsdl.h +++ b/linden/indra/llwindow/llwindowsdl.h @@ -120,6 +120,8 @@ public: /*virtual*/ void *getPlatformWindow(); /*virtual*/ void bringToFront(); + static std::string getFontListSans(); + // Not great that these are public, but they have to be accessible // by non-class code and it's better than making them global. #if LL_X11 @@ -154,7 +156,6 @@ protected: BOOL shouldPostQuit() { return mPostQuit; } - protected: // // Platform specific methods diff --git a/linden/indra/llwindow/llwindowsolaris.cpp b/linden/indra/llwindow/llwindowsolaris.cpp deleted file mode 100644 index 54a77ae..0000000 --- a/linden/indra/llwindow/llwindowsolaris.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/** - * @file fmodwrapper.cpp - * @brief dummy source file for building a shared library to wrap libfmod.a - * - * $LicenseInfo:firstyear=2005&license=viewergpl$ - * - * Copyright (c) 2005-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$ - */ - -#if LL_SOLARIS - -#include "linden_common.h" -#include "indra_constants.h" - -#include "llwindowsolaris.h" -#include "llgl.h" -#include "llglheaders.h" - -// -// LLWindowSolaris -// -LLWindowSolaris::LLWindowSolaris(char *title, char *name, S32 x, S32 y, S32 width, S32 height, - U32 flags, BOOL fullscreen, BOOL clearBg, - BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth) - : LLWindow(fullscreen, flags) -{ - llerrs << "Solaris window not yet supported" << llendl; -} - - -LLWindowSolaris::~LLWindowSolaris() -{ -} - -void LLWindowSolaris::swapBuffers() -{ -} - -#endif // LL_SOLARIS diff --git a/linden/indra/llwindow/llwindowsolaris.h b/linden/indra/llwindow/llwindowsolaris.h deleted file mode 100644 index 7a271c0..0000000 --- a/linden/indra/llwindow/llwindowsolaris.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file fmodwrapper.cpp - * @brief dummy source file for building a shared library to wrap libfmod.a - * - * $LicenseInfo:firstyear=2005&license=viewergpl$ - * - * Copyright (c) 2005-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_LLWINDOWSOLARIS_H -#define LL_LLWINDOWSOLARIS_H - -#include "llwindow.h" - -class LLWindowSolaris : public LLWindow -{ -public: - /*virtual*/ void show() {}; - /*virtual*/ void hide() {}; - /*virtual*/ void close() {}; - /*virtual*/ BOOL getVisible() {return FALSE;}; - /*virtual*/ BOOL getMinimized() {return FALSE;}; - /*virtual*/ BOOL getMaximized() {return FALSE;}; - /*virtual*/ BOOL maximize() {return FALSE;}; - /*virtual*/ BOOL getFullscreen() {return FALSE;}; - /*virtual*/ BOOL getPosition(LLCoordScreen *position) {return FALSE;}; - /*virtual*/ BOOL getSize(LLCoordScreen *size) {return FALSE;}; - /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; - /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; - /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; - /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;}; - /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; - /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; - /*virtual*/ void showCursor() {}; - /*virtual*/ void hideCursor() {}; - /*virtual*/ void showCursorFromMouseMove() {}; - /*virtual*/ void hideCursorUntilMouseMove() {}; - /*virtual*/ BOOL isCursorHidden() {return FALSE;}; - /*virtual*/ void setCursor(ECursorType cursor) {}; - //virtual ECursorType getCursor() { return mCurrentCursor; }; - /*virtual*/ void captureMouse() {}; - /*virtual*/ void releaseMouse() {}; - /*virtual*/ void setMouseClipping( BOOL b ) {}; - /*virtual*/ BOOL isClipboardTextAvailable() {return FALSE; }; - /*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst) {return FALSE; }; - /*virtual*/ BOOL copyTextToClipboard(const LLWString &src) {return FALSE; }; - /*virtual*/ void flashIcon(F32 seconds) {}; - /*virtual*/ F32 getGamma() {return 1.0f; }; - /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma - /*virtual*/ U32 getFSAASamples() { return 0; } - /*virtual*/ void setFSAASamples(const U32 samples) { } - /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma) - //virtual ESwapMethod getSwapMethod() { return mSwapMethod; } - /*virtual*/ void gatherInput() {}; - /*virtual*/ void delayInputProcessing() {}; - /*virtual*/ void swapBuffers(); - - /*virtual*/ LLString getTempFileName() {return LLString(""); }; - /*virtual*/ void deleteFile( const char* file_name ) {}; - /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info ) {return 0; }; - /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL) { return FALSE; }; - - - // handy coordinate space conversion routines - /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordGL *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordWindow *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordGL *to) { return FALSE; }; - /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordScreen *to) { return FALSE; }; - - /*virtual*/ LLWindowResolution* getSupportedResolutions(S32 &num_resolutions) { return NULL; }; - /*virtual*/ F32 getNativeAspectRatio() { return 1.0f; }; - /*virtual*/ F32 getPixelAspectRatio() { return 1.0f; }; - /*virtual*/ void setNativeAspectRatio(F32 ratio) {} - - //virtual BOOL dialog_color_picker (F32 *r, F32 *g, F32 *b ); - - /*virtual*/ void *getPlatformWindow() { return NULL; } - - LLWindowSolaris(char *title, char *name, S32 x, S32 y, S32 width, S32 height, - U32 flags, BOOL fullscreen, BOOL clearBg, - BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth); - ~LLWindowSolaris(); -}; - -class LLSplashScreenLinux : public LLSplashScreen -{ -public: - LLSplashScreenLinux() {}; - virtual ~LLSplashScreenLinux() {}; - - /*virtual*/ void showImpl() {}; - /*virtual*/ void updateImpl(const char* mesg) {}; - /*virtual*/ void hideImpl() {}; - -}; - -#endif //LL_LLWINDOWSOLARIS_H diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp index 9963493..f2a2727 100644 --- a/linden/indra/llwindow/llwindowwin32.cpp +++ b/linden/indra/llwindow/llwindowwin32.cpp @@ -84,7 +84,7 @@ LLW32MsgCallback gAsyncMsgCallback = NULL; void show_window_creation_error(const char* title) { - llwarns << title << llendl; + LL_WARNS("Window") << title << LL_ENDL; } //static @@ -534,7 +534,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, if (closest_refresh == 0) { - llwarns << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << llendl; + LL_WARNS("Window") << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << LL_ENDL; success = FALSE; } @@ -557,11 +557,11 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, mFullscreenBits = dev_mode.dmBitsPerPel; mFullscreenRefresh = dev_mode.dmDisplayFrequency; - llinfos << "Running at " << dev_mode.dmPelsWidth + LL_INFOS("Window") << "Running at " << dev_mode.dmPelsWidth << "x" << dev_mode.dmPelsHeight << "x" << dev_mode.dmBitsPerPel << " @ " << dev_mode.dmDisplayFrequency - << llendl; + << LL_ENDL; } else { @@ -576,7 +576,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, OSMessageBox(error, "Error", OSMB_OK); } } - + // TODO: add this after resolving _WIN32_WINNT issue // if (!fullscreen) // { @@ -588,7 +588,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, // TrackMouseEvent( &track_mouse_event ); // } - + //----------------------------------------------------------------------- // Create GL drawing context //----------------------------------------------------------------------- @@ -657,7 +657,7 @@ void LLWindowWin32::restore() // Usually called from LLWindowManager::destroyWindow() void LLWindowWin32::close() { - llinfos << "Closing LLWindowWin32" << llendl; + LL_DEBUGS("Window") << "Closing LLWindowWin32" << LL_ENDL; // Is window is already closed? if (!mWindowHandle) { @@ -675,20 +675,20 @@ void LLWindowWin32::close() } // Clean up remaining GL state - llinfos << "Shutting down GL" << llendl; + LL_DEBUGS("Window") << "Shutting down GL" << LL_ENDL; gGLManager.shutdownGL(); - llinfos << "Releasing Context" << llendl; + LL_DEBUGS("Window") << "Releasing Context" << LL_ENDL; if (mhRC) { if (!wglMakeCurrent(NULL, NULL)) { - llwarns << "Release of DC and RC failed" << llendl; + LL_WARNS("Window") << "Release of DC and RC failed" << LL_ENDL; } if (!wglDeleteContext(mhRC)) { - llwarns << "Release of rendering context failed" << llendl; + LL_WARNS("Window") << "Release of rendering context failed" << LL_ENDL; } mhRC = NULL; @@ -699,11 +699,11 @@ void LLWindowWin32::close() if (mhDC && !ReleaseDC(mWindowHandle, mhDC)) { - llwarns << "Release of ghDC failed" << llendl; + LL_WARNS("Window") << "Release of ghDC failed" << LL_ENDL; mhDC = NULL; } - llinfos << "Destroying Window" << llendl; + LL_DEBUGS("Window") << "Destroying Window" << LL_ENDL; // Don't process events in our mainWindowProc any longer. SetWindowLong(mWindowHandle, GWL_USERDATA, NULL); @@ -866,12 +866,12 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO { if (!wglMakeCurrent(NULL, NULL)) { - llwarns << "Release of DC and RC failed" << llendl; + LL_WARNS("Window") << "Release of DC and RC failed" << LL_ENDL; } if (!wglDeleteContext(mhRC)) { - llwarns << "Release of rendering context failed" << llendl; + LL_WARNS("Window") << "Release of rendering context failed" << LL_ENDL; } mhRC = NULL; @@ -905,7 +905,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO if (closest_refresh == 0) { - llwarns << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << llendl; + LL_WARNS("Window") << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << LL_ENDL; return FALSE; } @@ -927,11 +927,11 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO mFullscreenBits = dev_mode.dmBitsPerPel; mFullscreenRefresh = dev_mode.dmDisplayFrequency; - llinfos << "Running at " << dev_mode.dmPelsWidth + LL_INFOS("Window") << "Running at " << dev_mode.dmPelsWidth << "x" << dev_mode.dmPelsHeight << "x" << dev_mode.dmBitsPerPel << " @ " << dev_mode.dmDisplayFrequency - << llendl; + << LL_ENDL; window_rect.left = (long) 0; window_rect.right = (long) width; // Windows GDI rects don't include rightmost pixel @@ -952,8 +952,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO mFullscreenBits = -1; mFullscreenRefresh = -1; - llinfos << "Unable to run fullscreen at " << width << "x" << height << llendl; - llinfos << "Running in window." << llendl; + LL_INFOS("Window") << "Unable to run fullscreen at " << width << "x" << height << LL_ENDL; return FALSE; } } @@ -1146,7 +1145,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO { if (end_attrib > 0) { - llinfos << "No valid pixel format for " << mFSAASamples << "x anti-aliasing." << llendl; + LL_INFOS("Window") << "No valid pixel format for " << mFSAASamples << "x anti-aliasing." << LL_ENDL; attrib_list[end_attrib] = 0; BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); @@ -1160,7 +1159,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO if (!num_formats) { - llinfos << "No 32 bit z-buffer, trying 24 bits instead" << llendl; + LL_INFOS("Window") << "No 32 bit z-buffer, trying 24 bits instead" << LL_ENDL; // Try 24-bit format attrib_list[1] = 24; BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); @@ -1173,7 +1172,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO if (!num_formats) { - llwarns << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << llendl; + LL_WARNS("Window") << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << LL_ENDL; attrib_list[1] = 16; BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); if (!result || !num_formats) @@ -1185,7 +1184,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO } } - llinfos << "Choosing pixel formats: " << num_formats << " pixel formats returned" << llendl; + LL_INFOS("Window") << "Choosing pixel formats: " << num_formats << " pixel formats returned" << LL_ENDL; } pixel_format = pixel_formats[0]; @@ -1241,26 +1240,26 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO { case WGL_SWAP_EXCHANGE_ARB: mSwapMethod = SWAP_METHOD_EXCHANGE; - llinfos << "Swap Method: Exchange" << llendl; + LL_DEBUGS("Window") << "Swap Method: Exchange" << LL_ENDL; break; case WGL_SWAP_COPY_ARB: mSwapMethod = SWAP_METHOD_COPY; - llinfos << "Swap Method: Copy" << llendl; + LL_DEBUGS("Window") << "Swap Method: Copy" << LL_ENDL; break; case WGL_SWAP_UNDEFINED_ARB: mSwapMethod = SWAP_METHOD_UNDEFINED; - llinfos << "Swap Method: Undefined" << llendl; + LL_DEBUGS("Window") << "Swap Method: Undefined" << LL_ENDL; break; default: mSwapMethod = SWAP_METHOD_UNDEFINED; - llinfos << "Swap Method: Unknown" << llendl; + LL_DEBUGS("Window") << "Swap Method: Unknown" << LL_ENDL; break; } } } else { - llwarns << "No wgl_ARB_pixel_format extension, using default ChoosePixelFormat!" << llendl; + LL_WARNS("Window") << "No wgl_ARB_pixel_format extension, using default ChoosePixelFormat!" << LL_ENDL; } // Verify what pixel format we actually received. @@ -1272,10 +1271,10 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO return FALSE; } - llinfos << "GL buffer: Color Bits " << S32(pfd.cColorBits) + LL_INFOS("Window") << "GL buffer: Color Bits " << S32(pfd.cColorBits) << " Alpha Bits " << S32(pfd.cAlphaBits) << " Depth Bits " << S32(pfd.cDepthBits) - << llendl; + << LL_ENDL; // make sure we have 32 bits per pixel if (pfd.cColorBits < 32 || GetDeviceCaps(mhDC, BITSPIXEL) < 32) @@ -1338,12 +1337,12 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO // Disable vertical sync for swap if (disable_vsync && wglSwapIntervalEXT) { - llinfos << "Disabling vertical sync" << llendl; + LL_DEBUGS("Window") << "Disabling vertical sync" << LL_ENDL; wglSwapIntervalEXT(0); } else { - llinfos << "Keeping vertical sync" << llendl; + LL_DEBUGS("Window") << "Keeping vertical sync" << LL_ENDL; } SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this); @@ -1701,11 +1700,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ if (gDebugWindowProc) { - llinfos << "WINDOWPROC ActivateApp " + LL_INFOS("Window") << "WINDOWPROC ActivateApp " << " activating " << S32(activating) << " minimized " << S32(minimized) << " fullscreen " << S32(window_imp->mFullscreen) - << llendl; + << LL_ENDL; } if (window_imp->mFullscreen) @@ -1746,10 +1745,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ // properly when we run fullscreen. if (gDebugWindowProc) { - llinfos << "WINDOWPROC Activate " + LL_INFOS("Window") << "WINDOWPROC Activate " << " activating " << S32(activating) << " minimized " << S32(minimized) - << llendl; + << LL_ENDL; } // Don't handle this. @@ -1805,9 +1804,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ { if (gDebugWindowProc) { - llinfos << "Debug WindowProc WM_KEYDOWN " + LL_INFOS("Window") << "Debug WindowProc WM_KEYDOWN " << " key " << S32(w_param) - << llendl; + << LL_ENDL; } if(gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke) { @@ -1824,9 +1823,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ if (gDebugWindowProc) { - llinfos << "Debug WindowProc WM_KEYUP " + LL_INFOS("Window") << "Debug WindowProc WM_KEYUP " << " key " << S32(w_param) - << llendl; + << LL_ENDL; } if (gKeyboard->handleKeyUp(w_param, mask) && eat_keystroke) { @@ -1909,13 +1908,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ // it is worth trying. The good old WM_CHAR works just fine even for supplementary // characters. We just need to take care of surrogate pairs sent as two WM_CHAR's // by ourselves. It is not that tough. -- Alissa Sabre @ SL - // - // llinfos << "WM_CHAR: " << w_param << llendl; if (gDebugWindowProc) { - llinfos << "Debug WindowProc WM_CHAR " + LL_INFOS("Window") << "Debug WindowProc WM_CHAR " << " key " << S32(w_param) - << llendl; + << LL_ENDL; } // Even if LLWindowCallbacks::handleUnicodeChar(llwchar, BOOL) returned FALSE, // we *did* processed the event, so I believe we should not pass it to DefWindowProc... @@ -1985,7 +1982,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ LLFastTimer t2(LLFastTimer::FTM_MOUSEHANDLER); //if (gDebugClicks) //{ - // llinfos << "WndProc left button up" << llendl; + // LL_INFOS("Window") << "WndProc left button up" << LL_ENDL; //} // Because we move the cursor position in the app, we need to query // to find out where the cursor at the time the event is handled. @@ -2181,12 +2178,12 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ BOOL restored = ( w_param == SIZE_RESTORED ); BOOL minimized = ( w_param == SIZE_MINIMIZED ); - llinfos << "WINDOWPROC Size " + LL_INFOS("Window") << "WINDOWPROC Size " << width << "x" << height << " max " << S32(maximized) << " min " << S32(minimized) << " rest " << S32(restored) - << llendl; + << LL_ENDL; } // There's an odd behavior with WM_SIZE that I would call a bug. If @@ -2232,7 +2229,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ case WM_SETFOCUS: if (gDebugWindowProc) { - llinfos << "WINDOWPROC SetFocus" << llendl; + LL_INFOS("Window") << "WINDOWPROC SetFocus" << LL_ENDL; } window_imp->mCallbacks->handleFocus(window_imp); return 0; @@ -2240,7 +2237,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ case WM_KILLFOCUS: if (gDebugWindowProc) { - llinfos << "WINDOWPROC KillFocus" << llendl; + LL_INFOS("Window") << "WINDOWPROC KillFocus" << LL_ENDL; } window_imp->mCallbacks->handleFocusLost(window_imp); return 0; @@ -2596,7 +2593,7 @@ BOOL LLWindowWin32::setGamma(const F32 gamma) { mCurrentGamma = gamma; - llinfos << "Setting gamma to " << gamma << llendl; + LL_DEBUGS("Window") << "Setting gamma to " << gamma << LL_ENDL; for ( int i = 0; i < 256; ++i ) { @@ -2737,8 +2734,8 @@ BOOL LLWindowWin32::setDisplayResolution(S32 width, S32 height, S32 bits, S32 re if (!success) { - llwarns << "setDisplayResolution failed, " - << width << "x" << height << "x" << bits << " @ " << refresh << llendl; + LL_WARNS("Window") << "setDisplayResolution failed, " + << width << "x" << height << "x" << bits << " @ " << refresh << LL_ENDL; } return success; @@ -2760,7 +2757,7 @@ BOOL LLWindowWin32::setFullscreenResolution() // protected BOOL LLWindowWin32::resetDisplayResolution() { - llinfos << "resetDisplayResolution START" << llendl; + LL_DEBUGS("Window") << "resetDisplayResolution START" << LL_ENDL; LONG cds_result = ChangeDisplaySettings(NULL, 0); @@ -2768,10 +2765,10 @@ BOOL LLWindowWin32::resetDisplayResolution() if (!success) { - llwarns << "resetDisplayResolution failed" << llendl; + LL_WARNS("Window") << "resetDisplayResolution failed" << LL_ENDL; } - llinfos << "resetDisplayResolution END" << llendl; + LL_DEBUGS("Window") << "resetDisplayResolution END" << LL_ENDL; return success; } @@ -2908,11 +2905,11 @@ void spawn_web_browser(const char* escaped_url ) if (!found) { - llwarns << "spawn_web_browser() called for url with protocol not on whitelist: " << escaped_url << llendl; + LL_WARNS("Window") << "spawn_web_browser() called for url with protocol not on whitelist: " << escaped_url << LL_ENDL; return; } - llinfos << "Opening URL " << escaped_url << llendl; + LL_INFOS("Window") << "Opening URL " << escaped_url << LL_ENDL; // replaced ShellExecute code with ShellExecuteEx since ShellExecute doesn't work // reliablly on Vista. @@ -2952,7 +2949,7 @@ void spawn_web_browser(const char* escaped_url ) if (browser_open_wstring.length() < 2) { - llwarns << "Invalid browser executable in registry " << browser_open_wstring << llendl; + LL_WARNS("Window") << "Invalid browser executable in registry " << browser_open_wstring << LL_ENDL; return; } @@ -2972,8 +2969,8 @@ void spawn_web_browser(const char* escaped_url ) browser_executable = browser_open_wstring.substr(0, space_pos); } - llinfos << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << llendl; - llinfos << "Browser executable: " << wstring_to_utf8str(browser_executable) << llendl; + LL_DEBUGS("Window") << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << LL_ENDL; + LL_INFOS("Window") << "Browser executable: " << wstring_to_utf8str(browser_executable) << LL_ENDL; // Convert URL to wide string for Windows API // Assume URL is UTF8, as can come from scripts @@ -2995,11 +2992,11 @@ void spawn_web_browser(const char* escaped_url ) SW_SHOWNORMAL); if (retval > 32) { - llinfos << "load_url success with " << retval << llendl; + LL_DEBUGS("Window") << "load_url success with " << retval << LL_ENDL; } else { - llinfos << "load_url failure with " << retval << llendl; + LL_INFOS("Window") << "load_url failure with " << retval << LL_ENDL; } */ } @@ -3541,7 +3538,7 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result) if (!mPreeditor->getPreeditLocation(position, &caret_coord, &preedit_bounds, &text_control)) { - llwarns << "*** IMR_QUERYCHARPOSITON called but getPreeditLocation failed." << llendl; + LL_WARNS("Window") << "*** IMR_QUERYCHARPOSITON called but getPreeditLocation failed." << LL_ENDL; return FALSE; } fillCharPosition(caret_coord, preedit_bounds, text_control, char_position); @@ -3628,5 +3625,13 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result) return FALSE; } +//static +std::string LLWindowWin32::getFontListSans() +{ + // Lists Japanese, Korean, and Chinese sanserif fonts available in + // Windows XP and Vista, as well as "Arial Unicode MS". + return "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf"; +} + #endif // LL_WINDOWS diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h index 5535af4..feb1c74 100644 --- a/linden/indra/llwindow/llwindowwin32.h +++ b/linden/indra/llwindow/llwindowwin32.h @@ -116,6 +116,8 @@ public: /*virtual*/ void updateLanguageTextInputArea(); /*virtual*/ void interruptLanguageTextInput(); + static std::string getFontListSans(); + protected: LLWindowWin32( char *title, char *name, int x, int y, int width, int height, U32 flags, diff --git a/linden/indra/llxml/llcontrol.cpp b/linden/indra/llxml/llcontrol.cpp index 8c74127..09719a5 100644 --- a/linden/indra/llxml/llcontrol.cpp +++ b/linden/indra/llxml/llcontrol.cpp @@ -50,44 +50,53 @@ #include "llsdserialize.h" #if LL_RELEASE_FOR_DOWNLOAD -#define CONTROL_ERRS llwarns +#define CONTROL_ERRS LL_WARNS("ControlErrors") #else -#define CONTROL_ERRS llerrs +#define CONTROL_ERRS LL_ERRS("ControlErrors") #endif //this defines the current version of the settings file const S32 CURRENT_VERSION = 101; -BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b) +bool LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b) { + bool result = false; switch (mType) { case TYPE_U32: case TYPE_S32: - return a.asInteger() == b.asInteger(); + result = a.asInteger() == b.asInteger(); + break; case TYPE_BOOLEAN: - return a.asBoolean() == b.asBoolean(); + result = a.asBoolean() == b.asBoolean(); + break; case TYPE_F32: - return a.asReal() == b.asReal(); + result = a.asReal() == b.asReal(); + break; case TYPE_VEC3: case TYPE_VEC3D: - return LLVector3d(a) == LLVector3d(b); + result = LLVector3d(a) == LLVector3d(b); + break; case TYPE_RECT: - return LLRect(a) == LLRect(b); + result = LLRect(a) == LLRect(b); + break; case TYPE_COL4: - return LLColor4(a) == LLColor4(b); + result = LLColor4(a) == LLColor4(b); + break; case TYPE_COL3: - return LLColor3(a) == LLColor3(b); + result = LLColor3(a) == LLColor3(b); + break; case TYPE_COL4U: - return LLColor4U(a) == LLColor4U(b); + result = LLColor4U(a) == LLColor4U(b); + break; case TYPE_STRING: - return a.asString() == b.asString(); + result = a.asString() == b.asString(); + break; default: - // no-op break; } - return FALSE; + return result; } LLControlVariable::LLControlVariable(const LLString& name, eControlType type, @@ -114,14 +123,34 @@ LLControlVariable::~LLControlVariable() void LLControlVariable::setValue(const LLSD& value, bool saved_value) { - bool value_changed = llsd_compare(getValue(), value) == FALSE; + // *FIX:MEP - The following is needed to make the LLSD::ImplString + // work with boolean controls... + LLSD storable_value; + if(TYPE_BOOLEAN == type() && value.isString()) + { + BOOL temp; + if(LLString::convertToBOOL(value.asString(), temp)) + { + storable_value = temp; + } + else + { + storable_value = FALSE; + } + } + else + { + storable_value = value; + } + + bool value_changed = llsd_compare(getValue(), storable_value) == FALSE; if(saved_value) { // If we're going to save this value, return to default but don't fire resetToDefault(false); - if (llsd_compare(mValues.back(), value) == FALSE) + if (llsd_compare(mValues.back(), storable_value) == FALSE) { - mValues.push_back(value); + mValues.push_back(storable_value); } } else @@ -129,7 +158,7 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value) // This is a unsaved value. Its needs to reside at // mValues[2] (or greater). It must not affect // the result of getSaveValue() - if (llsd_compare(mValues.back(), value) == FALSE) + if (llsd_compare(mValues.back(), storable_value) == FALSE) { while(mValues.size() > 2) { @@ -144,13 +173,14 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value) } // Add the 'un-save' value. - mValues.push_back(value); + mValues.push_back(storable_value); } } + if(value_changed) { - mSignal(value); + mSignal(storable_value); } } @@ -1147,3 +1177,4 @@ void main() #endif + diff --git a/linden/indra/llxml/llcontrol.h b/linden/indra/llxml/llcontrol.h index 2511940..91545ce 100644 --- a/linden/indra/llxml/llcontrol.h +++ b/linden/indra/llxml/llcontrol.h @@ -127,7 +127,7 @@ public: { mSignal(mValues.back()); } - BOOL llsd_compare(const LLSD& a, const LLSD& b); + bool llsd_compare(const LLSD& a, const LLSD& b); }; //const U32 STRING_CACHE_SIZE = 10000; diff --git a/linden/indra/llxml/llxmlnode.cpp b/linden/indra/llxml/llxmlnode.cpp index 757e2f7..f9852d3 100644 --- a/linden/indra/llxml/llxmlnode.cpp +++ b/linden/indra/llxml/llxmlnode.cpp @@ -572,7 +572,7 @@ bool LLXMLNode::parseFile( LLXMLNode* defaults_tree) { // Read file - FILE* fp = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ if (fp == NULL) { node = new LLXMLNode(); @@ -741,12 +741,12 @@ BOOL LLXMLNode::isFullyDefault() } // static -void LLXMLNode::writeHeaderToFile(FILE *fOut) +void LLXMLNode::writeHeaderToFile(LLFILE *fOut) { fprintf(fOut, "\n"); } -void LLXMLNode::writeToFile(FILE *fOut, LLString indent) +void LLXMLNode::writeToFile(LLFILE *fOut, LLString indent) { if (isFullyDefault()) { diff --git a/linden/indra/llxml/llxmlnode.h b/linden/indra/llxml/llxmlnode.h index 6183ec1..269108c 100644 --- a/linden/indra/llxml/llxmlnode.h +++ b/linden/indra/llxml/llxmlnode.h @@ -32,7 +32,9 @@ #ifndef LL_LLXMLNODE_H #define LL_LLXMLNODE_H -#define XML_STATIC +#ifndef XML_STATIC +#define XML_STATIC 1 +#endif #ifdef LL_STANDALONE #include #else @@ -131,8 +133,8 @@ public: static bool updateNode( LLXMLNodePtr& node, LLXMLNodePtr& update_node); - static void writeHeaderToFile(FILE *fOut); - void writeToFile(FILE *fOut, LLString indent = LLString()); + static void writeHeaderToFile(LLFILE *fOut); + void writeToFile(LLFILE *fOut, LLString indent = LLString()); void writeToOstream(std::ostream& output_stream, const LLString& indent = LLString()); // Utility diff --git a/linden/indra/llxml/llxmlparser.cpp b/linden/indra/llxml/llxmlparser.cpp index 0cbb82b..3b4d944 100644 --- a/linden/indra/llxml/llxmlparser.cpp +++ b/linden/indra/llxml/llxmlparser.cpp @@ -77,7 +77,7 @@ BOOL LLXmlParser::parseFile(const std::string &path) BOOL success = TRUE; - FILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */ if( !file ) { snprintf( mAuxErrorString, sizeof(mAuxErrorString), "Couldn't open file %s", path.c_str()); /* Flawfinder: ignore */ @@ -393,7 +393,7 @@ int main() { char buf[1024]; - FILE* file = LLFile::fopen("test.xml", "rb"); + LLFILE* file = LLFile::fopen("test.xml", "rb"); if( !file ) { return 1; diff --git a/linden/indra/llxml/llxmlparser.h b/linden/indra/llxml/llxmlparser.h index 611605f..7ce5524 100644 --- a/linden/indra/llxml/llxmlparser.h +++ b/linden/indra/llxml/llxmlparser.h @@ -32,7 +32,9 @@ #ifndef LL_LLXMLPARSER_H #define LL_LLXMLPARSER_H -#define XML_STATIC +#ifndef XML_STATIC +#define XML_STATIC 1 +#endif #ifdef LL_STANDALONE #include #else diff --git a/linden/indra/lscript/lscript_alloc.h b/linden/indra/lscript/lscript_alloc.h index 948eb26..2cdd03d 100644 --- a/linden/indra/lscript/lscript_alloc.h +++ b/linden/indra/lscript/lscript_alloc.h @@ -118,7 +118,7 @@ inline void bytestream2alloc_entry(LLScriptAllocEntry &entry, U8 *buffer, S32 &o // create a heap from the HR to TM BOOL lsa_create_heap(U8 *heap_start, S32 size); -void lsa_fprint_heap(U8 *buffer, FILE *fp); +void lsa_fprint_heap(U8 *buffer, LLFILE *fp); void lsa_print_heap(U8 *buffer); diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l index 03c8321..ba10ef6 100644 --- a/linden/indra/lscript/lscript_compile/indra.l +++ b/linden/indra/lscript/lscript_compile/indra.l @@ -606,6 +606,11 @@ extern "C" { int yyerror(const char *fmt, ...); } "CLICK_ACTION_PLAY" { count(); yylval.ival = CLICK_ACTION_PLAY; return(INTEGER_CONSTANT); } "CLICK_ACTION_OPEN_MEDIA" { count(); yylval.ival = CLICK_ACTION_OPEN_MEDIA; return(INTEGER_CONSTANT); } +"TEXTURE_BLANK" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "5748decc-f629-461c-9a36-a35a221fe21f"); return(STRING_CONSTANT); } +"TEXTURE_DEFAULT" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"); return(STRING_CONSTANT); } +"TEXTURE_PLYWOOD" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "89556747-24cb-43ed-920b-47caed15465f"); return(STRING_CONSTANT); } +"TEXTURE_TRANSPARENT" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "59facb66-4a72-40a2-815c-7d9b42c56f60"); return(STRING_CONSTANT); } + {L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); } {N}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } @@ -706,7 +711,7 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, #ifdef EMERGENCY_DEBUG_PRINTOUTS char compiled[256]; sprintf(compiled, "%s.o", src_filename); - FILE* compfile; + LLFILE* compfile; compfile = LLFile::fopen(compiled, "w"); #endif @@ -733,7 +738,7 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, #endif #ifdef EMIT_CIL_ASSEMBLER const char* cil_output_file_name = dst_filename? dst_filename : "lscript.cil"; - FILE* cilout = LLFile::fopen(cil_output_file_name, "w"); + LLFILE* cilout = LLFile::fopen(cil_output_file_name, "w"); if(NULL == cilout) { fprintf(yyout, "Error opening cil output file %s\n", cil_output_file_name); diff --git a/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp b/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp index 5838bc3..31ab909 100644 --- a/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp +++ b/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp @@ -245,7 +245,7 @@ LLScriptScriptCodeChunk::~LLScriptScriptCodeChunk() delete [] mCompleteCode; } -void LLScriptScriptCodeChunk::build(FILE *efp, FILE *bcfp) +void LLScriptScriptCodeChunk::build(LLFILE *efp, LLFILE *bcfp) { S32 code_data_size = mRegisters->mCurrentOffset + mGlobalVariables->mCurrentOffset + diff --git a/linden/indra/lscript/lscript_compile/lscript_bytecode.h b/linden/indra/lscript/lscript_compile/lscript_bytecode.h index 6526e13..272aa60 100644 --- a/linden/indra/lscript/lscript_compile/lscript_bytecode.h +++ b/linden/indra/lscript/lscript_compile/lscript_bytecode.h @@ -77,7 +77,7 @@ public: LLScriptScriptCodeChunk(S32 total_size); ~LLScriptScriptCodeChunk(); - void build(FILE *efp, FILE *bcfp); + void build(LLFILE *efp, LLFILE *bcfp); LLScriptByteCodeChunk *mRegisters; LLScriptByteCodeChunk *mGlobalVariables; diff --git a/linden/indra/lscript/lscript_compile/lscript_error.cpp b/linden/indra/lscript/lscript_compile/lscript_error.cpp index 6e03b01..b3c1ffa 100644 --- a/linden/indra/lscript/lscript_compile/lscript_error.cpp +++ b/linden/indra/lscript/lscript_compile/lscript_error.cpp @@ -40,7 +40,7 @@ S32 gInternalLine = 0; LLScriptGenerateErrorText gErrorToText; -void LLScriptFilePosition::fdotabs(FILE *fp, S32 tabs, S32 tabsize) +void LLScriptFilePosition::fdotabs(LLFILE *fp, S32 tabs, S32 tabsize) { S32 i; for (i = 0; i < tabs * tabsize; i++) @@ -75,25 +75,25 @@ char* gErrorText[LSERROR_EOF] = /*Flawfinder: ignore*/ "Declaration requires a new scope -- use { and }" }; -void LLScriptGenerateErrorText::writeWarning(FILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning) +void LLScriptGenerateErrorText::writeWarning(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning) { fprintf(fp, "(%d, %d) : WARNING : %s\n", pos->mLineNumber, pos->mColumnNumber, gWarningText[warning]); mTotalWarnings++; } -void LLScriptGenerateErrorText::writeWarning(FILE *fp, S32 line, S32 col, LSCRIPTWarnings warning) +void LLScriptGenerateErrorText::writeWarning(LLFILE *fp, S32 line, S32 col, LSCRIPTWarnings warning) { fprintf(fp, "(%d, %d) : WARNING : %s\n", line, col, gWarningText[warning]); mTotalWarnings++; } -void LLScriptGenerateErrorText::writeError(FILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error) +void LLScriptGenerateErrorText::writeError(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error) { fprintf(fp, "(%d, %d) : ERROR : %s\n", pos->mLineNumber, pos->mColumnNumber, gErrorText[error]); mTotalErrors++; } -void LLScriptGenerateErrorText::writeError(FILE *fp, S32 line, S32 col, LSCRIPTErrors error) +void LLScriptGenerateErrorText::writeError(LLFILE *fp, S32 line, S32 col, LSCRIPTErrors error) { fprintf(fp, "(%d, %d) : ERROR : %s\n", line, col, gErrorText[error]); mTotalErrors++; diff --git a/linden/indra/lscript/lscript_compile/lscript_error.h b/linden/indra/lscript/lscript_compile/lscript_error.h index d52bdf7..b5fcadb 100644 --- a/linden/indra/lscript/lscript_compile/lscript_error.h +++ b/linden/indra/lscript/lscript_compile/lscript_error.h @@ -84,13 +84,13 @@ public: virtual ~LLScriptFilePosition() {} - virtual void recurse(FILE *fp, S32 tabs, S32 tabsize, + virtual void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) = 0; virtual S32 getSize() = 0; - void fdotabs(FILE *fp, S32 tabs, S32 tabsize); + void fdotabs(LLFILE *fp, S32 tabs, S32 tabsize); S32 mLineNumber; S32 mColumnNumber; @@ -135,10 +135,10 @@ public: void init() { mTotalErrors = 0; mTotalWarnings = 0; } - void writeWarning(FILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning); - void writeWarning(FILE *fp, S32 line, S32 col, LSCRIPTWarnings warning); - void writeError(FILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error); - void writeError(FILE *fp, S32 line, S32 col, LSCRIPTErrors error); + void writeWarning(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning); + void writeWarning(LLFILE *fp, S32 line, S32 col, LSCRIPTWarnings warning); + void writeError(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error); + void writeError(LLFILE *fp, S32 line, S32 col, LSCRIPTErrors error); BOOL getErrors() { return mTotalErrors; } BOOL getWarnings() { return mTotalWarnings; } diff --git a/linden/indra/lscript/lscript_compile/lscript_tree.cpp b/linden/indra/lscript/lscript_compile/lscript_tree.cpp index 519d726..204f738 100644 --- a/linden/indra/lscript/lscript_compile/lscript_tree.cpp +++ b/linden/indra/lscript/lscript_compile/lscript_tree.cpp @@ -43,7 +43,7 @@ //#define LSL_INCLUDE_DEBUG_INFO -void print_cil_box(FILE* fp, LSCRIPTType type) +void print_cil_box(LLFILE* fp, LSCRIPTType type) { switch(type) { @@ -68,7 +68,7 @@ void print_cil_box(FILE* fp, LSCRIPTType type) } } -void print_cil_type(FILE* fp, LSCRIPTType type) +void print_cil_type(LLFILE* fp, LSCRIPTType type) { switch(type) { @@ -99,7 +99,7 @@ void print_cil_type(FILE* fp, LSCRIPTType type) } } -void LLScriptType::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptType::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -127,7 +127,7 @@ S32 LLScriptType::getSize() return LSCRIPTDataSize[mType]; } -void LLScriptConstant::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptConstant::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -152,7 +152,7 @@ S32 LLScriptConstant::getSize() -void LLScriptConstantInteger::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptConstantInteger::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -200,7 +200,7 @@ S32 LLScriptConstantInteger::getSize() return LSCRIPTDataSize[LST_INTEGER]; } -void LLScriptConstantFloat::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptConstantFloat::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -247,7 +247,7 @@ S32 LLScriptConstantFloat::getSize() return LSCRIPTDataSize[LST_FLOATINGPOINT]; } -void print_escape_quotes(FILE* fp, const char* str) +void print_escape_quotes(LLFILE* fp, const char* str) { putc('"', fp); for(const char* c = str; *c != '\0'; ++c) @@ -261,7 +261,7 @@ void print_escape_quotes(FILE* fp, const char* str) putc('"', fp); } -void LLScriptConstantString::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptConstantString::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -317,7 +317,7 @@ S32 LLScriptConstantString::getSize() } -void LLScriptIdentifier::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptIdentifier::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -412,7 +412,7 @@ void LLScriptSimpleAssignable::addAssignable(LLScriptSimpleAssignable *assign) mNextp = assign; } -void LLScriptSimpleAssignable::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSimpleAssignable::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -428,7 +428,7 @@ S32 LLScriptSimpleAssignable::getSize() return 0; } -void LLScriptSAIdentifier::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSAIdentifier::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -512,7 +512,7 @@ S32 LLScriptSAIdentifier::getSize() return mIdentifier->getSize(); } -void LLScriptSAConstant::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSAConstant::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -553,7 +553,7 @@ S32 LLScriptSAConstant::getSize() return mConstant->getSize(); } -void print_cil_cast(FILE* fp, LSCRIPTType srcType, LSCRIPTType targetType) +void print_cil_cast(LLFILE* fp, LSCRIPTType srcType, LSCRIPTType targetType) { switch(srcType) { @@ -680,7 +680,7 @@ bool is_SA_constant_integer(LLScriptSimpleAssignable* sa) return (sa->mType == LSSAT_CONSTANT && ((LLScriptSAConstant*) sa)->mConstant->mType == LST_INTEGER); } -void LLScriptSAVector::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSAVector::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -827,7 +827,7 @@ S32 LLScriptSAVector::getSize() return mEntry1->getSize() + mEntry2->getSize() + mEntry3->getSize(); } -void LLScriptSAQuaternion::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSAQuaternion::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -999,7 +999,7 @@ S32 LLScriptSAQuaternion::getSize() return mEntry1->getSize() + mEntry2->getSize() + mEntry3->getSize() + mEntry4->getSize(); } -void LLScriptSAList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSAList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1074,7 +1074,7 @@ void LLScriptGlobalVariable::addGlobal(LLScriptGlobalVariable *global) mNextp = global; } -void LLScriptGlobalVariable::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptGlobalVariable::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { switch(pass) { @@ -1093,7 +1093,7 @@ void LLScriptGlobalVariable::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTComp } } -void LLScriptGlobalVariable::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptGlobalVariable::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1288,7 +1288,7 @@ S32 LLScriptGlobalVariable::getSize() return return_size; } -void LLScriptEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { fprintf(fp, "Event Base Class -- should never get here!\n"); } @@ -1299,7 +1299,7 @@ S32 LLScriptEvent::getSize() return 0; } -void LLScriptStateEntryEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptStateEntryEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1335,7 +1335,7 @@ S32 LLScriptStateEntryEvent::getSize() return 0; } -void LLScriptStateExitEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptStateExitEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1371,7 +1371,7 @@ S32 LLScriptStateExitEvent::getSize() return 0; } -void LLScriptTouchStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptTouchStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1429,7 +1429,7 @@ S32 LLScriptTouchStartEvent::getSize() return 4; } -void LLScriptTouchEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptTouchEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1487,7 +1487,7 @@ S32 LLScriptTouchEvent::getSize() return 4; } -void LLScriptTouchEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptTouchEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1545,7 +1545,7 @@ S32 LLScriptTouchEndEvent::getSize() return 4; } -void LLScriptCollisionStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptCollisionStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1603,7 +1603,7 @@ S32 LLScriptCollisionStartEvent::getSize() return 4; } -void LLScriptCollisionEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptCollisionEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1661,7 +1661,7 @@ S32 LLScriptCollisionEvent::getSize() return 4; } -void LLScriptCollisionEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptCollisionEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1719,7 +1719,7 @@ S32 LLScriptCollisionEndEvent::getSize() return 4; } -void LLScriptLandCollisionStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLandCollisionStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1778,7 +1778,7 @@ S32 LLScriptLandCollisionStartEvent::getSize() -void LLScriptLandCollisionEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLandCollisionEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1836,7 +1836,7 @@ S32 LLScriptLandCollisionEvent::getSize() } -void LLScriptLandCollisionEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLandCollisionEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1894,7 +1894,7 @@ S32 LLScriptLandCollisionEndEvent::getSize() } -void LLScriptInventoryEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptInventoryEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -1951,7 +1951,7 @@ S32 LLScriptInventoryEvent::getSize() return 4; } -void LLScriptAttachEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptAttachEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2008,7 +2008,7 @@ S32 LLScriptAttachEvent::getSize() return 4; } -void LLScriptDataserverEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptDataserverEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2080,7 +2080,7 @@ S32 LLScriptDataserverEvent::getSize() return 8; } -void LLScriptTimerEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptTimerEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2113,7 +2113,7 @@ S32 LLScriptTimerEvent::getSize() return 0; } -void LLScriptMovingStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptMovingStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2144,7 +2144,7 @@ S32 LLScriptMovingStartEvent::getSize() return 0; } -void LLScriptMovingEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptMovingEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2175,7 +2175,7 @@ S32 LLScriptMovingEndEvent::getSize() return 0; } -void LLScriptRTPEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptRTPEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2232,7 +2232,7 @@ S32 LLScriptRTPEvent::getSize() return 4; } -void LLScriptChatEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptChatEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2334,7 +2334,7 @@ S32 LLScriptChatEvent::getSize() return 16; } -void LLScriptSensorEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSensorEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2391,7 +2391,7 @@ S32 LLScriptSensorEvent::getSize() return 4; } -void LLScriptObjectRezEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptObjectRezEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2448,7 +2448,7 @@ S32 LLScriptObjectRezEvent::getSize() return 4; } -void LLScriptControlEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptControlEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2535,7 +2535,7 @@ S32 LLScriptControlEvent::getSize() return 12; } -void LLScriptLinkMessageEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLinkMessageEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2637,7 +2637,7 @@ S32 LLScriptLinkMessageEvent::getSize() return 16; } -void LLScriptRemoteEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptRemoteEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2769,7 +2769,7 @@ S32 LLScriptRemoteEvent::getSize() return 24; } -void LLScriptHTTPResponseEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptHTTPResponseEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2882,7 +2882,7 @@ S32 LLScriptHTTPResponseEvent::getSize() } -void LLScriptMoneyEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptMoneyEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -2954,7 +2954,7 @@ S32 LLScriptMoneyEvent::getSize() return 8; } -void LLScriptEmailEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptEmailEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3071,7 +3071,7 @@ S32 LLScriptEmailEvent::getSize() return 20; } -void LLScriptRezEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptRezEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3128,7 +3128,7 @@ S32 LLScriptRezEvent::getSize() return 4; } -void LLScriptNoSensorEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptNoSensorEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3161,7 +3161,7 @@ S32 LLScriptNoSensorEvent::getSize() return 0; } -void LLScriptAtTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptAtTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3250,7 +3250,7 @@ S32 LLScriptAtTarget::getSize() -void LLScriptNotAtTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptNotAtTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3283,7 +3283,7 @@ S32 LLScriptNotAtTarget::getSize() return 0; } -void LLScriptAtRotTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptAtRotTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3372,7 +3372,7 @@ S32 LLScriptAtRotTarget::getSize() -void LLScriptNotAtRotTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptNotAtRotTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3416,7 +3416,7 @@ void LLScriptExpression::addExpression(LLScriptExpression *expression) mNextp = expression; } -void LLScriptExpression::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptExpression::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { fprintf(fp, "Expression Base Class -- should never get here!\n"); } @@ -3427,7 +3427,7 @@ S32 LLScriptExpression::getSize() return 0; } -void LLScriptExpression::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptExpression::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3451,7 +3451,7 @@ void LLScriptExpression::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompileP } } -void LLScriptForExpressionList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptForExpressionList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3563,7 +3563,7 @@ S32 LLScriptForExpressionList::getSize() return 0; } -void LLScriptFuncExpressionList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptFuncExpressionList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3700,7 +3700,7 @@ S32 LLScriptFuncExpressionList::getSize() return 0; } -void LLScriptListExpressionList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptListExpressionList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -3800,7 +3800,7 @@ bool is_parameter(LLScriptIdentifier* identifier, LLScriptScopeEntry* function_s } // If assignment is to global variable, pushes this pointer on to stack. -void print_cil_load_address(FILE* fp, LLScriptExpression* exp, LLScriptScopeEntry* function_scope) +void print_cil_load_address(LLFILE* fp, LLScriptExpression* exp, LLScriptScopeEntry* function_scope) { LLScriptLValue *lvalue = (LLScriptLValue *) exp; LLScriptIdentifier *ident = lvalue->mIdentifier; @@ -3836,7 +3836,7 @@ void print_cil_load_address(FILE* fp, LLScriptExpression* exp, LLScriptScopeEntr } } -void print_cil_accessor(FILE* fp, LLScriptLValue *lvalue) +void print_cil_accessor(LLFILE* fp, LLScriptLValue *lvalue) { LLScriptIdentifier *ident = lvalue->mIdentifier; print_cil_type(fp, lvalue->mReturnType); @@ -3845,13 +3845,13 @@ void print_cil_accessor(FILE* fp, LLScriptLValue *lvalue) fprintf(fp, "::%s\n", lvalue->mAccessor->mName); } -void print_cil_member(FILE* fp, LLScriptIdentifier *ident) +void print_cil_member(LLFILE* fp, LLScriptIdentifier *ident) { print_cil_type(fp, ident->mScopeEntry->mType); fprintf(fp, " LSL::%s\n", ident->mScopeEntry->mIdentifier); } -void LLScriptLValue::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLValue::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4136,7 +4136,7 @@ S32 LLScriptLValue::getSize() return 0; } -void print_asignment(FILE *fp, LLScriptExpression *exp) +void print_asignment(LLFILE *fp, LLScriptExpression *exp) { LLScriptLValue *lvalue = (LLScriptLValue *)exp; LLScriptIdentifier *ident = lvalue->mIdentifier; @@ -4164,7 +4164,7 @@ void print_asignment(FILE *fp, LLScriptExpression *exp) } } -void print_cil_asignment(FILE *fp, LLScriptExpression *exp, LLScriptScopeEntry* function_scope) +void print_cil_asignment(LLFILE *fp, LLScriptExpression *exp, LLScriptScopeEntry* function_scope) { LLScriptLValue *lvalue = (LLScriptLValue *) exp; LLScriptIdentifier *ident = lvalue->mIdentifier; @@ -4215,7 +4215,7 @@ void print_cil_asignment(FILE *fp, LLScriptExpression *exp, LLScriptScopeEntry* } } -void print_cast(FILE *fp, LSCRIPTType ret_type, LSCRIPTType right_type) +void print_cast(LLFILE *fp, LSCRIPTType ret_type, LSCRIPTType right_type) { if (right_type != ret_type) { @@ -4319,7 +4319,7 @@ void store2stack(LLScriptExpression *exp, LLScriptExpression *lv, LLScriptByteCo chunk->addInteger(address); } -void print_cil_numeric_cast(FILE* fp, LSCRIPTType currentArg, LSCRIPTType otherArg) +void print_cil_numeric_cast(LLFILE* fp, LSCRIPTType currentArg, LSCRIPTType otherArg) { if((currentArg == LST_INTEGER) && (otherArg == LST_FLOATINGPOINT)) { @@ -4327,7 +4327,7 @@ void print_cil_numeric_cast(FILE* fp, LSCRIPTType currentArg, LSCRIPTType otherA } } -void LLScriptAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4387,7 +4387,7 @@ S32 LLScriptAssignment::getSize() return 0; } -void print_cil_add(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) +void print_cil_add(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) { switch(left_type) { @@ -4429,7 +4429,7 @@ void print_cil_add(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) } } -void LLScriptAddAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptAddAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4496,7 +4496,7 @@ S32 LLScriptAddAssignment::getSize() return 0; } -void print_cil_sub(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) +void print_cil_sub(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) { switch(left_type) { @@ -4528,7 +4528,7 @@ void print_cil_sub(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) } } -void LLScriptSubAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptSubAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4595,7 +4595,7 @@ S32 LLScriptSubAssignment::getSize() return 0; } -void print_cil_mul(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) +void print_cil_mul(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) { switch(left_type) { @@ -4650,7 +4650,7 @@ void print_cil_mul(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) } } -void LLScriptMulAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptMulAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4717,7 +4717,7 @@ S32 LLScriptMulAssignment::getSize() return 0; } -void print_cil_div(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) +void print_cil_div(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) { switch(left_type) { @@ -4765,7 +4765,7 @@ void print_cil_div(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) } } -void LLScriptDivAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptDivAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4832,7 +4832,7 @@ S32 LLScriptDivAssignment::getSize() return 0; } -void print_cil_mod(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) +void print_cil_mod(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) { switch(left_type) { @@ -4855,7 +4855,7 @@ void print_cil_mod(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) } } -void LLScriptModAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptModAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -4920,7 +4920,7 @@ S32 LLScriptModAssignment::getSize() return 0; } -void print_cil_eq(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) +void print_cil_eq(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) { switch(left_type) { @@ -4961,7 +4961,7 @@ void print_cil_eq(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) } } -void LLScriptEquality::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptEquality::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5021,7 +5021,7 @@ S32 LLScriptEquality::getSize() return 0; } -void LLScriptNotEquals::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptNotEquals::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5081,7 +5081,7 @@ S32 LLScriptNotEquals::getSize() return 0; } -void LLScriptLessEquals::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLessEquals::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5141,7 +5141,7 @@ S32 LLScriptLessEquals::getSize() return 0; } -void LLScriptGreaterEquals::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptGreaterEquals::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5201,7 +5201,7 @@ S32 LLScriptGreaterEquals::getSize() return 0; } -void LLScriptLessThan::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLessThan::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5259,7 +5259,7 @@ S32 LLScriptLessThan::getSize() return 0; } -void LLScriptGreaterThan::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptGreaterThan::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5317,7 +5317,7 @@ S32 LLScriptGreaterThan::getSize() return 0; } -void LLScriptPlus::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptPlus::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5377,7 +5377,7 @@ S32 LLScriptPlus::getSize() return 0; } -void LLScriptMinus::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptMinus::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5437,7 +5437,7 @@ S32 LLScriptMinus::getSize() return 0; } -void LLScriptTimes::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptTimes::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5497,7 +5497,7 @@ S32 LLScriptTimes::getSize() return 0; } -void LLScriptDivide::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptDivide::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5557,7 +5557,7 @@ S32 LLScriptDivide::getSize() return 0; } -void LLScriptMod::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptMod::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5615,7 +5615,7 @@ S32 LLScriptMod::getSize() return 0; } -void LLScriptBitAnd::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBitAnd::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5671,7 +5671,7 @@ S32 LLScriptBitAnd::getSize() return 0; } -void LLScriptBitOr::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBitOr::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5727,7 +5727,7 @@ S32 LLScriptBitOr::getSize() return 0; } -void LLScriptBitXor::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBitXor::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5783,7 +5783,7 @@ S32 LLScriptBitXor::getSize() return 0; } -void LLScriptBooleanAnd::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBooleanAnd::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5839,7 +5839,7 @@ S32 LLScriptBooleanAnd::getSize() return 0; } -void LLScriptBooleanOr::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBooleanOr::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5895,7 +5895,7 @@ S32 LLScriptBooleanOr::getSize() return 0; } -void LLScriptShiftLeft::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptShiftLeft::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -5952,7 +5952,7 @@ S32 LLScriptShiftLeft::getSize() } -void LLScriptShiftRight::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptShiftRight::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6008,7 +6008,7 @@ S32 LLScriptShiftRight::getSize() return 0; } -void LLScriptParenthesis::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptParenthesis::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6041,7 +6041,7 @@ S32 LLScriptParenthesis::getSize() return 0; } -void LLScriptUnaryMinus::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptUnaryMinus::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6088,7 +6088,7 @@ S32 LLScriptUnaryMinus::getSize() return 0; } -void LLScriptBooleanNot::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBooleanNot::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6138,7 +6138,7 @@ S32 LLScriptBooleanNot::getSize() return 0; } -void LLScriptBitNot::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptBitNot::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6187,7 +6187,7 @@ S32 LLScriptBitNot::getSize() return 0; } -void LLScriptPreIncrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptPreIncrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6295,7 +6295,7 @@ S32 LLScriptPreIncrement::getSize() return 0; } -void LLScriptPreDecrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptPreDecrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6403,7 +6403,7 @@ S32 LLScriptPreDecrement::getSize() return 0; } -void LLScriptTypeCast::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptTypeCast::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6455,7 +6455,7 @@ S32 LLScriptTypeCast::getSize() return 0; } -void LLScriptVectorInitializer::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptVectorInitializer::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6571,7 +6571,7 @@ S32 LLScriptVectorInitializer::getSize() return 0; } -void LLScriptQuaternionInitializer::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptQuaternionInitializer::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6713,7 +6713,7 @@ S32 LLScriptQuaternionInitializer::getSize() return 0; } -void LLScriptListInitializer::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptListInitializer::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6793,7 +6793,7 @@ S32 LLScriptListInitializer::getSize() return 0; } -void LLScriptPostIncrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptPostIncrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -6925,7 +6925,7 @@ S32 LLScriptPostIncrement::getSize() return 0; } -void LLScriptPostDecrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptPostDecrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7058,7 +7058,7 @@ S32 LLScriptPostDecrement::getSize() } // Generate arg list. -void print_cil_arg_list(FILE *fp, LLScriptFuncExpressionList* exp_list) +void print_cil_arg_list(LLFILE *fp, LLScriptFuncExpressionList* exp_list) { // Print first argument. print_cil_type(fp, exp_list->mFirstp->mReturnType); @@ -7071,7 +7071,7 @@ void print_cil_arg_list(FILE *fp, LLScriptFuncExpressionList* exp_list) } } -void LLScriptFunctionCall::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptFunctionCall::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7260,7 +7260,7 @@ S32 LLScriptFunctionCall::getSize() return 0; } -void LLScriptPrint::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptPrint::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7299,7 +7299,7 @@ S32 LLScriptPrint::getSize() return 0; } -void LLScriptConstantExpression::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptConstantExpression::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7338,7 +7338,7 @@ void LLScriptStatement::addStatement(LLScriptStatement *event) mNextp = event; } -void LLScriptStatement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptStatement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { fprintf(fp, "Statement Base Class -- should never get here!\n"); } @@ -7349,7 +7349,7 @@ S32 LLScriptStatement::getSize() return 0; } -void LLScriptStatement::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptStatement::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7384,7 +7384,7 @@ S32 LLScriptStatementSequence::getSize() return 0; } -void LLScriptStatementSequence::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptStatementSequence::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7431,7 +7431,7 @@ S32 LLScriptNOOP::getSize() return 0; } -void LLScriptNOOP::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptNOOP::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7527,7 +7527,7 @@ void add_exit_pops(LLScriptByteCodeChunk *chunk, LLScriptScopeEntry *entry) } } -void print_exit_pops(FILE *fp, LLScriptScopeEntry *entry) +void print_exit_pops(LLFILE *fp, LLScriptScopeEntry *entry) { // remember that we need to pop in reverse order S32 number, i; @@ -7557,7 +7557,7 @@ S32 LLScriptStateChange::getSize() return 0; } -void LLScriptStateChange::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptStateChange::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7627,7 +7627,7 @@ S32 LLScriptJump::getSize() return 0; } -void LLScriptJump::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptJump::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7690,7 +7690,7 @@ S32 LLScriptLabel::getSize() return 0; } -void LLScriptLabel::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptLabel::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7747,7 +7747,7 @@ void add_return(LLScriptByteCodeChunk *chunk, LLScriptScopeEntry *entry) chunk->addByte(LSCRIPTOpCodes[LOPC_RETURN]); } -void print_return(FILE *fp, LLScriptScopeEntry *entry) +void print_return(LLFILE *fp, LLScriptScopeEntry *entry) { print_exit_pops(fp, entry); fprintf(fp, "RETURN\n"); @@ -7759,7 +7759,7 @@ S32 LLScriptReturn::getSize() return 0; } -void LLScriptReturn::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptReturn::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7881,7 +7881,7 @@ S32 LLScriptExpressionStatement::getSize() return 0; } -void LLScriptExpressionStatement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptExpressionStatement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -7951,7 +7951,7 @@ S32 LLScriptIf::getSize() return 0; } -void LLScriptIf::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptIf::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8022,7 +8022,7 @@ S32 LLScriptIfElse::getSize() return 0; } -void LLScriptIfElse::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptIfElse::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8115,7 +8115,7 @@ S32 LLScriptFor::getSize() return 0; } -void LLScriptFor::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptFor::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8230,7 +8230,7 @@ S32 LLScriptDoWhile::getSize() return 0; } -void LLScriptDoWhile::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptDoWhile::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8303,7 +8303,7 @@ S32 LLScriptWhile::getSize() return 0; } -void LLScriptWhile::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptWhile::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8386,7 +8386,7 @@ S32 LLScriptDeclaration::getSize() return mType->getSize(); } -void LLScriptDeclaration::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptDeclaration::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8645,7 +8645,7 @@ S32 LLScriptCompoundStatement::getSize() return 0; } -void LLScriptCompoundStatement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptCompoundStatement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8721,7 +8721,7 @@ void LLScriptEventHandler::addEvent(LLScriptEventHandler *event) mNextp = event; } -void LLScriptEventHandler::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptEventHandler::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -8751,7 +8751,7 @@ S32 LLScriptEventHandler::getSize() U64 gCurrentHandler = 0; -void print_cil_local_init(FILE* fp, LLScriptScopeEntry* scopeEntry) +void print_cil_local_init(LLFILE* fp, LLScriptScopeEntry* scopeEntry) { if(scopeEntry->mLocals.getNumber() > 0) { @@ -8768,7 +8768,7 @@ void print_cil_local_init(FILE* fp, LLScriptScopeEntry* scopeEntry) } } -void LLScriptEventHandler::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptEventHandler::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9071,7 +9071,7 @@ void LLScriptFunctionDec::addFunctionParameter(LLScriptFunctionDec *dec) mNextp = dec; } -void LLScriptFunctionDec::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptFunctionDec::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9108,7 +9108,7 @@ S32 LLScriptFunctionDec::getSize() return 0; } -void LLScriptFunctionDec::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptFunctionDec::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9194,7 +9194,7 @@ void LLScriptGlobalFunctions::addGlobalFunction(LLScriptGlobalFunctions *global) mNextp = global; } -void LLScriptGlobalFunctions::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptGlobalFunctions::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9222,7 +9222,7 @@ S32 LLScriptGlobalFunctions::getSize() return 0; } -void LLScriptGlobalFunctions::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptGlobalFunctions::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9507,7 +9507,7 @@ void LLScriptState::addState(LLScriptState *state) mNextp = state; } -void LLScriptState::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptState::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9535,7 +9535,7 @@ S32 LLScriptState::getSize() return 0; } -void LLScriptState::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptState::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9755,7 +9755,7 @@ void LLScriptScript::setBytecodeDest(const char* dst_filename) mBytecodeDest[MAX_STRING-1] = '\0'; } -void print_cil_globals(FILE* fp, LLScriptGlobalVariable* global) +void print_cil_globals(LLFILE* fp, LLScriptGlobalVariable* global) { fprintf(fp, ".field private "); print_cil_type(fp, global->mType->mType); @@ -9768,7 +9768,7 @@ void print_cil_globals(FILE* fp, LLScriptGlobalVariable* global) } } -void LLScriptScript::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +void LLScriptScript::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) { @@ -9939,7 +9939,7 @@ void LLScriptScript::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass // now, put it all together and spit it out // we need - FILE* bcfp = LLFile::fopen(mBytecodeDest, "wb"); /*Flawfinder: ignore*/ + LLFILE* bcfp = LLFile::fopen(mBytecodeDest, "wb"); /*Flawfinder: ignore*/ code->build(fp, bcfp); fclose(bcfp); diff --git a/linden/indra/lscript/lscript_compile/lscript_tree.h b/linden/indra/lscript/lscript_compile/lscript_tree.h index 393b3e2..1c2ba1f 100644 --- a/linden/indra/lscript/lscript_compile/lscript_tree.h +++ b/linden/indra/lscript/lscript_compile/lscript_tree.h @@ -53,7 +53,7 @@ public: ~LLScriptType() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTType mType; @@ -70,7 +70,7 @@ public: virtual ~LLScriptConstant() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTType mType; @@ -86,7 +86,7 @@ public: ~LLScriptConstantInteger() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); S32 mValue; @@ -102,7 +102,7 @@ public: ~LLScriptConstantFloat() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); F32 mValue; @@ -122,7 +122,7 @@ public: mValue = NULL; } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); char *mValue; @@ -143,7 +143,7 @@ public: mName = NULL; } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); char *mName; @@ -177,7 +177,7 @@ public: // don't delete next pointer because we're going to store allocation lists and delete from those } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTSimpleAssignableType mType; @@ -196,7 +196,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mIdentifier; @@ -214,7 +214,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptConstant *mConstant; @@ -235,7 +235,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptSimpleAssignable *mEntry1; @@ -259,7 +259,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptSimpleAssignable *mEntry1; @@ -280,7 +280,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptSimpleAssignable *mEntryList; @@ -303,9 +303,9 @@ public: { } - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptType *mType; @@ -330,7 +330,7 @@ public: // don't delete next pointer because we're going to store allocation lists and delete from those } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTStateEventType mType; @@ -344,7 +344,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); ~LLScriptStateEntryEvent() {} @@ -360,7 +360,7 @@ public: ~LLScriptStateExitEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); }; @@ -376,7 +376,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mCount; @@ -394,7 +394,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mCount; @@ -412,7 +412,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mCount; @@ -430,7 +430,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mCount; @@ -448,7 +448,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mCount; @@ -466,7 +466,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mCount; @@ -484,7 +484,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mPosition; @@ -502,7 +502,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mPosition; @@ -520,7 +520,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mPosition; @@ -536,7 +536,7 @@ public: ~LLScriptInventoryEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mChange; @@ -552,7 +552,7 @@ public: ~LLScriptAttachEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mAttach; @@ -568,7 +568,7 @@ public: ~LLScriptDataserverEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mID; @@ -585,7 +585,7 @@ public: ~LLScriptTimerEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); }; @@ -599,7 +599,7 @@ public: ~LLScriptMovingStartEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); }; @@ -613,7 +613,7 @@ public: ~LLScriptMovingEndEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); }; @@ -627,7 +627,7 @@ public: ~LLScriptRTPEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mRTPermissions; @@ -645,7 +645,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mChannel; @@ -666,7 +666,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mID; @@ -684,7 +684,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mNumber; @@ -702,7 +702,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mName; @@ -722,7 +722,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mSender; @@ -743,7 +743,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mType; @@ -767,7 +767,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, @@ -791,7 +791,7 @@ public: } ~LLScriptRezEvent() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mStartParam; @@ -805,7 +805,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); ~LLScriptNoSensorEvent() {} @@ -819,7 +819,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); ~LLScriptAtTarget() {} @@ -837,7 +837,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); ~LLScriptNotAtTarget() {} @@ -851,7 +851,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); ~LLScriptAtRotTarget() {} @@ -869,7 +869,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); ~LLScriptNotAtRotTarget() {} @@ -887,7 +887,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mName; @@ -906,7 +906,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mTime; @@ -932,9 +932,9 @@ public: // don't delete next pointer because we're going to store allocation lists and delete from those } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTExpressionType mType; @@ -955,7 +955,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mFirstp; @@ -974,7 +974,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mFirstp; @@ -993,7 +993,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mFirstp; @@ -1012,7 +1012,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); S32 mOffset; @@ -1032,7 +1032,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLValue; @@ -1051,7 +1051,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLValue; @@ -1070,7 +1070,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLValue; @@ -1089,7 +1089,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLValue; @@ -1108,7 +1108,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLValue; @@ -1127,7 +1127,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLValue; @@ -1146,7 +1146,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1165,7 +1165,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1184,7 +1184,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1203,7 +1203,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1222,7 +1222,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1241,7 +1241,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1260,7 +1260,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1279,7 +1279,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1298,7 +1298,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1317,7 +1317,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1336,7 +1336,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1355,7 +1355,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1374,7 +1374,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1393,7 +1393,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1412,7 +1412,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1431,7 +1431,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1450,7 +1450,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1469,7 +1469,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mLeftSide; @@ -1488,7 +1488,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1506,7 +1506,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1524,7 +1524,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1542,7 +1542,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1560,7 +1560,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1578,7 +1578,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1596,7 +1596,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptType *mType; @@ -1620,7 +1620,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression1; @@ -1647,7 +1647,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression1; @@ -1668,7 +1668,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpressionList; @@ -1686,7 +1686,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1704,7 +1704,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1722,7 +1722,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mIdentifier; @@ -1741,7 +1741,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1759,7 +1759,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptConstant *mConstant; @@ -1801,9 +1801,9 @@ public: void addStatement(LLScriptStatement *event); - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTStatementType mType; @@ -1824,7 +1824,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptStatement *mFirstp; @@ -1841,7 +1841,7 @@ public: ~LLScriptNOOP() {} - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); }; @@ -1857,7 +1857,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mIdentifier; @@ -1875,7 +1875,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mIdentifier; @@ -1893,7 +1893,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptIdentifier *mIdentifier; @@ -1911,7 +1911,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1930,7 +1930,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1948,7 +1948,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTType mType; @@ -1968,7 +1968,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -1989,7 +1989,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mSequence; @@ -2011,7 +2011,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptStatement *mStatement; @@ -2031,7 +2031,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptExpression *mExpression; @@ -2052,7 +2052,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptType *mType; @@ -2072,7 +2072,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptStatement *mStatement; @@ -2094,9 +2094,9 @@ public: void addEvent(LLScriptEventHandler *event); - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptEvent *mEventp; @@ -2126,9 +2126,9 @@ public: void addFunctionParameter(LLScriptFunctionDec *dec); - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptType *mType; @@ -2154,9 +2154,9 @@ public: delete mFunctionScope; } - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LLScriptType *mType; @@ -2192,9 +2192,9 @@ public: { } - void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); LSCRIPTStateType mType; @@ -2222,7 +2222,7 @@ public: { } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { } @@ -2257,7 +2257,7 @@ public: delete mGlobalScope; } - void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); S32 getSize(); void setBytecodeDest(const char* dst_filename); diff --git a/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp b/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp index 8cfa815..8c3738d 100644 --- a/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp +++ b/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp @@ -351,10 +351,10 @@ void init_supported_expressions(void) gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_FLOATINGPOINT] = LST_FLOATINGPOINT; gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_FLOATINGPOINT] = LST_FLOATINGPOINT; gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_INTEGER] = LST_VECTOR; - gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_VECTOR] = LST_VECTOR; + //gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_VECTOR] = LST_VECTOR; gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_FLOATINGPOINT] = LST_VECTOR; - gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_VECTOR] = LST_VECTOR; - gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_VECTOR] = LST_FLOATINGPOINT; + //gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_VECTOR] = LST_VECTOR; + //gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_VECTOR] = LST_FLOATINGPOINT; gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_QUATERNION] = LST_VECTOR; gSupportedExpressionArray[LET_MUL_ASSIGN][LST_QUATERNION][LST_QUATERNION] = LST_QUATERNION; diff --git a/linden/indra/lscript/lscript_execute.h b/linden/indra/lscript/lscript_execute.h index e9353e3..997e04d 100644 --- a/linden/indra/lscript/lscript_execute.h +++ b/linden/indra/lscript/lscript_execute.h @@ -367,7 +367,7 @@ public: class LLScriptExecute { public: - LLScriptExecute(FILE *fp); + LLScriptExecute(LLFILE *fp); LLScriptExecute(U8 *buffer); ~LLScriptExecute(); diff --git a/linden/indra/lscript/lscript_execute/lscript_execute.cpp b/linden/indra/lscript/lscript_execute/lscript_execute.cpp index d1200f0..643f3f6 100644 --- a/linden/indra/lscript/lscript_execute/lscript_execute.cpp +++ b/linden/indra/lscript/lscript_execute/lscript_execute.cpp @@ -61,7 +61,7 @@ char* LSCRIPTRunTimeFaultStrings[LSRF_EOF] = /*Flawfinder: ignore*/ //static S64 LLScriptExecute::sGlobalInstructionCount = 0; -LLScriptExecute::LLScriptExecute(FILE *fp) +LLScriptExecute::LLScriptExecute(LLFILE *fp) { U8 sizearray[4]; S32 filesize; @@ -3027,46 +3027,19 @@ BOOL run_return(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id) if (b_print) printf("[0x%X]\tRETURN\n", offset); offset++; - S32 bp = lscript_pop_int(buffer); + + // SEC-53: babbage: broken instructions may allow inbalanced pushes and + // pops which can cause caller BP and return IP to be corrupted, so restore + // SP from BP before popping caller BP and IP. + S32 bp = get_register(buffer, LREG_BP); + set_sp(buffer, bp); + + bp = lscript_pop_int(buffer); set_bp(buffer, bp); offset = lscript_pop_int(buffer); return FALSE; } -S32 axtoi(char *hexStg) -{ - S32 n = 0; // position in string - S32 m = 0; // position in digit[] to shift - S32 count; // loop index - S32 intValue = 0; // integer value of hex string - S32 digit[9]; // hold values to convert - while (n < 8) - { - if (hexStg[n]=='\0') - break; - if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9 - digit[n] = hexStg[n] & 0x0f; //convert to int - else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f - digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int - else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F - digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int - else break; - n++; - } - count = n; - m = n - 1; - n = 0; - while(n < count) - { - // digit[n] is value of hex digit at position n - // (m << 2) is the number of positions to shift - // OR the bits into return value - intValue = intValue | (digit[n] << (m << 2)); - m--; // adjust the position to set - n++; // next digit to process - } - return (intValue); -} BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id) @@ -3718,7 +3691,7 @@ void lscript_run(char *filename, BOOL b_debug) BOOL b_state; LLScriptExecute *execute = NULL; - FILE* file = LLFile::fopen(filename, "r"); + LLFILE* file = LLFile::fopen(filename, "r"); if (file) { execute = new LLScriptExecute(file); @@ -3727,7 +3700,7 @@ void lscript_run(char *filename, BOOL b_debug) file = LLFile::fopen(filename, "r"); if (file) { - FILE* fp = LLFile::fopen("lscript.parse", "w"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen("lscript.parse", "w"); /*Flawfinder: ignore*/ LLScriptLSOParse *parse = new LLScriptLSOParse(file); parse->printData(fp); delete parse; diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp index 218e14a..bfd59a7 100644 --- a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp +++ b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp @@ -35,7 +35,7 @@ #include "lscript_library.h" #include "lscript_alloc.h" -LLScriptLSOParse::LLScriptLSOParse(FILE *fp) +LLScriptLSOParse::LLScriptLSOParse(LLFILE *fp) { U8 sizearray[4]; S32 filesize; @@ -68,7 +68,7 @@ LLScriptLSOParse::~LLScriptLSOParse() delete [] mRawData; } -void LLScriptLSOParse::printData(FILE *fp) +void LLScriptLSOParse::printData(LLFILE *fp) { @@ -86,14 +86,14 @@ void LLScriptLSOParse::printData(FILE *fp) printHeap(fp); } -void LLScriptLSOParse::printNameDesc(FILE *fp) +void LLScriptLSOParse::printNameDesc(LLFILE *fp) { fprintf(fp, "=============================\n\n"); } S32 gMajorVersion = 0; -void LLScriptLSOParse::printRegisters(FILE *fp) +void LLScriptLSOParse::printRegisters(LLFILE *fp) { // print out registers first S32 i; @@ -125,7 +125,7 @@ void LLScriptLSOParse::printRegisters(FILE *fp) fprintf(fp, "=============================\n\n"); } -void LLScriptLSOParse::printGlobals(FILE *fp) +void LLScriptLSOParse::printGlobals(LLFILE *fp) { // print out registers first S32 offset, varoffset; @@ -195,7 +195,7 @@ void LLScriptLSOParse::printGlobals(FILE *fp) fprintf(fp, "=============================\n\n"); } -void LLScriptLSOParse::printGlobalFunctions(FILE *fp) +void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp) { // print out registers first S32 i, offset; @@ -284,7 +284,7 @@ void LLScriptLSOParse::printGlobalFunctions(FILE *fp) fprintf(fp, "=============================\n\n"); } -void LLScriptLSOParse::printStates(FILE *fp) +void LLScriptLSOParse::printStates(LLFILE *fp) { // print out registers first S32 i, offset; @@ -637,7 +637,7 @@ void LLScriptLSOParse::printStates(FILE *fp) fprintf(fp, "=============================\n\n"); } -void LLScriptLSOParse::printHeap(FILE *fp) +void LLScriptLSOParse::printHeap(LLFILE *fp) { // print out registers first @@ -652,7 +652,7 @@ void LLScriptLSOParse::printHeap(FILE *fp) fprintf(fp, "=============================\n\n"); } -void lso_print_tabs(FILE *fp, S32 tabs) +void lso_print_tabs(LLFILE *fp, S32 tabs) { S32 i; for (i = 0; i < tabs; i++) @@ -661,13 +661,13 @@ void lso_print_tabs(FILE *fp, S32 tabs) } } -void LLScriptLSOParse::printOpCodes(FILE *fp, S32 &offset, S32 tabs) +void LLScriptLSOParse::printOpCodes(LLFILE *fp, S32 &offset, S32 tabs) { U8 opcode = *(mRawData + offset); mPrintOpCodes[opcode](fp, mRawData, offset, tabs); } -void LLScriptLSOParse::printOpCodeRange(FILE *fp, S32 start, S32 end, S32 tabs) +void LLScriptLSOParse::printOpCodeRange(LLFILE *fp, S32 start, S32 end, S32 tabs) { while (start < end) { @@ -791,43 +791,43 @@ void LLScriptLSOParse::initOpCodePrinting() mPrintOpCodes[LSCRIPTOpCodes[LOPC_CALLLIB_TWO_BYTE]] = print_calllib_two_byte; } -void print_noop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_noop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tNOOP\n", offset++); } -void print_pop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOP\n", offset++); } -void print_pops(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pops(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPS\n", offset++); } -void print_popl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPL\n", offset++); } -void print_popv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPV\n", offset++); } -void print_popq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPQ\n", offset++); } -void print_poparg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_poparg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -836,61 +836,61 @@ void print_poparg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_popip(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popip(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPIP\n", offset++); } -void print_popbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPBP\n", offset++); } -void print_popsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPSP\n", offset++); } -void print_popslr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_popslr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPOPSLR\n", offset++); } -void print_dup(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_dup(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tDUP\n", offset++); } -void print_dups(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_dups(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tDUPS\n", offset++); } -void print_dupl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_dupl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tDUPL\n", offset++); } -void print_dupv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_dupv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tDUPV\n", offset++); } -void print_dupq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_dupq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tDUPQ\n", offset++); } -void print_store(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_store(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -899,7 +899,7 @@ void print_store(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_stores(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_stores(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -908,7 +908,7 @@ void print_stores(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_storel(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storel(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -917,7 +917,7 @@ void print_storel(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_storev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -926,7 +926,7 @@ void print_storev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_storeq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storeq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -935,7 +935,7 @@ void print_storeq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_storeg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storeg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -944,7 +944,7 @@ void print_storeg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_storegs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storegs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -953,7 +953,7 @@ void print_storegs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_storegl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storegl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -962,7 +962,7 @@ void print_storegl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_storegv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storegv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -971,7 +971,7 @@ void print_storegv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_storegq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_storegq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -980,7 +980,7 @@ void print_storegq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_loadp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -989,7 +989,7 @@ void print_loadp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_loadsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -998,7 +998,7 @@ void print_loadsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_loadlp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadlp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1007,7 +1007,7 @@ void print_loadlp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_loadvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1016,7 +1016,7 @@ void print_loadvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_loadqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1025,7 +1025,7 @@ void print_loadqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_loadgp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadgp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1034,7 +1034,7 @@ void print_loadgp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_loadgsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadgsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1043,7 +1043,7 @@ void print_loadgsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_loadglp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadglp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1052,7 +1052,7 @@ void print_loadglp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_loadgvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadgvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1061,7 +1061,7 @@ void print_loadgvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_loadgqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_loadgqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1070,7 +1070,7 @@ void print_loadgqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); } -void print_push(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_push(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1079,7 +1079,7 @@ void print_push(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_pushs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1088,7 +1088,7 @@ void print_pushs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_pushl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1097,7 +1097,7 @@ void print_pushl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_pushv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1106,7 +1106,7 @@ void print_pushv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_pushq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1115,7 +1115,7 @@ void print_pushq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_pushg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1124,7 +1124,7 @@ void print_pushg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); } -void print_pushgs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushgs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1133,7 +1133,7 @@ void print_pushgs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); } -void print_pushgl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushgl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1142,7 +1142,7 @@ void print_pushgl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); } -void print_pushgv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushgv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1151,7 +1151,7 @@ void print_pushgv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); } -void print_pushgq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushgq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1160,25 +1160,25 @@ void print_pushgq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); } -void print_puship(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_puship(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPUSHIP\n", offset++); } -void print_pushbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPUSHBP\n", offset++); } -void print_pushsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPUSHSP\n", offset++); } -void print_pushargb(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushargb(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 arg; lso_print_tabs(fp, tabs); @@ -1187,7 +1187,7 @@ void print_pushargb(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", (U32)arg); } -void print_pushargi(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushargi(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1196,7 +1196,7 @@ void print_pushargi(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_pushargf(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushargf(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { F32 arg; lso_print_tabs(fp, tabs); @@ -1205,7 +1205,7 @@ void print_pushargf(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%f\n", arg); } -void print_pushargs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushargs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { char arg[1024]; /*Flawfinder: ignore*/ lso_print_tabs(fp, tabs); @@ -1214,7 +1214,7 @@ void print_pushargs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s\n", arg); } -void print_pushargv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushargv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { LLVector3 arg; lso_print_tabs(fp, tabs); @@ -1223,7 +1223,7 @@ void print_pushargv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "< %f, %f, %f >\n", arg.mV[VX], arg.mV[VY], arg.mV[VZ]); } -void print_pushargq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushargq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { LLQuaternion arg; lso_print_tabs(fp, tabs); @@ -1232,25 +1232,25 @@ void print_pushargq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "< %f, %f, %f, %f >\n", arg.mQ[VX], arg.mQ[VY], arg.mQ[VZ], arg.mQ[VS]); } -void print_pushe(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushe(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPUSHE\n", offset++); } -void print_pushev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pushev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPUSHEV\n", offset++); } -void print_pusheq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pusheq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPUSHEQ\n", offset++); } -void print_pusharge(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_pusharge(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1260,7 +1260,7 @@ void print_pusharge(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) } -void print_add(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_add(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1273,7 +1273,7 @@ void print_add(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_sub(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_sub(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1286,7 +1286,7 @@ void print_sub(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_mul(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_mul(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1299,7 +1299,7 @@ void print_mul(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_div(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_div(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1312,7 +1312,7 @@ void print_div(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_mod(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_mod(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1325,7 +1325,7 @@ void print_mod(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_eq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_eq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1338,7 +1338,7 @@ void print_eq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_neq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_neq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1351,7 +1351,7 @@ void print_neq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_leq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_leq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1364,7 +1364,7 @@ void print_leq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_geq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_geq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1377,7 +1377,7 @@ void print_geq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_less(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_less(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1390,7 +1390,7 @@ void print_less(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_greater(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_greater(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1404,50 +1404,50 @@ void print_greater(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) } -void print_bitand(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_bitand(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBITAND\n", offset++); } -void print_bitor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_bitor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBITOR\n", offset++); } -void print_bitxor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_bitxor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBITXOR\n", offset++); } -void print_booland(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_booland(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBOOLAND\n", offset++); } -void print_boolor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_boolor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBOOLOR\n", offset++); } -void print_shl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_shl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tSHL\n", offset++); } -void print_shr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_shr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tSHR\n", offset++); } -void print_neg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_neg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 type; lso_print_tabs(fp, tabs); @@ -1456,19 +1456,19 @@ void print_neg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s\n", LSCRIPTTypeNames[type]); } -void print_bitnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_bitnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBITNOT\n", offset++); } -void print_boolnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_boolnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tBOOLNOT\n", offset++); } -void print_jump(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_jump(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1477,7 +1477,7 @@ void print_jump(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_jumpif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_jumpif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; U8 type; @@ -1488,7 +1488,7 @@ void print_jumpif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %d\n", LSCRIPTTypeNames[type], arg); } -void print_jumpnif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_jumpnif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; U8 type; @@ -1499,7 +1499,7 @@ void print_jumpnif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %d\n", LSCRIPTTypeNames[type], arg); } -void print_state(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_state(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1508,7 +1508,7 @@ void print_state(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_call(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_call(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1517,13 +1517,13 @@ void print_call(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_return(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_return(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tRETURN\n", offset++); } -void print_cast(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_cast(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 types; U8 type1; @@ -1536,7 +1536,7 @@ void print_cast(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); } -void print_stacktos(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_stacktos(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1545,7 +1545,7 @@ void print_stacktos(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_stacktol(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_stacktol(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { S32 arg; lso_print_tabs(fp, tabs); @@ -1554,7 +1554,7 @@ void print_stacktol(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%d\n", arg); } -void print_print(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_print(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { lso_print_tabs(fp, tabs); fprintf(fp, "[0x%X]\tPRINT ", offset++); @@ -1562,7 +1562,7 @@ void print_print(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) fprintf(fp, "%s\n", LSCRIPTTypeNames[type]); } -void print_calllib(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_calllib(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U8 arg; lso_print_tabs(fp, tabs); @@ -1572,7 +1572,7 @@ void print_calllib(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) } -void print_calllib_two_byte(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) +void print_calllib_two_byte(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs) { U16 arg; lso_print_tabs(fp, tabs); diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.h b/linden/indra/lscript/lscript_execute/lscript_readlso.h index 17d9460..ab339e0 100644 --- a/linden/indra/lscript/lscript_execute/lscript_readlso.h +++ b/linden/indra/lscript/lscript_execute/lscript_readlso.h @@ -36,135 +36,135 @@ #include "linked_lists.h" // list of op code print functions -void print_noop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pops(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_poparg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popip(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_popslr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_dup(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_dups(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_dupl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_dupv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_dupq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_store(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_stores(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storel(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storeq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storeg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storegs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storegl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storegv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_storegq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadlp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadgp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadgsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadglp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadgvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_loadgqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_push(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushgl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushgs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushgv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushgq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_puship(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushargb(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushargi(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushargf(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushargs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushargv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushargq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushe(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pushev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pusheq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_pusharge(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_add(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_sub(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_mul(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_div(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_mod(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_eq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_neq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_leq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_geq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_less(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_greater(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_bitand(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_bitor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_bitxor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_booland(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_boolor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_shl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_shr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_neg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_bitnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_boolnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_jump(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_jumpif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_jumpnif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_state(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_call(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_return(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_cast(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_stacktos(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_stacktol(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_print(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); - -void print_calllib(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); -void print_calllib_two_byte(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_noop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pops(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_poparg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popip(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_popslr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_dup(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_dups(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_dupl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_dupv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_dupq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_store(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_stores(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storel(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storeq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storeg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storegs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storegl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storegv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_storegq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadlp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadgp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadgsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadglp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadgvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_loadgqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_push(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushgl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushgs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushgv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushgq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_puship(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushargb(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushargi(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushargf(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushargs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushargv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushargq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushe(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pushev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pusheq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_pusharge(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_add(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_sub(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_mul(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_div(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_mod(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_eq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_neq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_leq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_geq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_less(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_greater(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_bitand(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_bitor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_bitxor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_booland(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_boolor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_shl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_shr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_neg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_bitnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_boolnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_jump(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_jumpif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_jumpnif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_state(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_call(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_return(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_cast(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_stacktos(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_stacktol(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_print(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); + +void print_calllib(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); +void print_calllib_two_byte(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); class LLScriptLSOParse { public: - LLScriptLSOParse(FILE *fp); + LLScriptLSOParse(LLFILE *fp); LLScriptLSOParse(U8 *buffer); ~LLScriptLSOParse(); void initOpCodePrinting(); - void printData(FILE *fp); - void printNameDesc(FILE *fp); - void printRegisters(FILE *fp); - void printGlobals(FILE *fp); - void printGlobalFunctions(FILE *fp); - void printStates(FILE *fp); - void printHeap(FILE *fp); - void printOpCodes(FILE *fp, S32 &offset, S32 tabs); - void printOpCodeRange(FILE *fp, S32 start, S32 end, S32 tabs); + void printData(LLFILE *fp); + void printNameDesc(LLFILE *fp); + void printRegisters(LLFILE *fp); + void printGlobals(LLFILE *fp); + void printGlobalFunctions(LLFILE *fp); + void printStates(LLFILE *fp); + void printHeap(LLFILE *fp); + void printOpCodes(LLFILE *fp, S32 &offset, S32 tabs); + void printOpCodeRange(LLFILE *fp, S32 start, S32 end, S32 tabs); U8 *mRawData; - void (*mPrintOpCodes[0x100])(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); + void (*mPrintOpCodes[0x100])(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs); }; -void lso_print_tabs(FILE *fp, S32 tabs); +void lso_print_tabs(LLFILE *fp, S32 tabs); #endif diff --git a/linden/indra/lscript/lscript_library/lscript_alloc.cpp b/linden/indra/lscript/lscript_library/lscript_alloc.cpp index 2c37d22..9ad6c6b 100644 --- a/linden/indra/lscript/lscript_library/lscript_alloc.cpp +++ b/linden/indra/lscript/lscript_library/lscript_alloc.cpp @@ -851,7 +851,7 @@ void lsa_print_heap(U8 *buffer) printf("==========\n"); } -void lsa_fprint_heap(U8 *buffer, FILE *fp) +void lsa_fprint_heap(U8 *buffer, LLFILE *fp) { S32 offset = get_register(buffer, LREG_HR); S32 readoffset; diff --git a/linden/indra/mac_crash_logger/llcrashloggermac.cpp b/linden/indra/mac_crash_logger/llcrashloggermac.cpp index 3cbd6c2..36d8285 100644 --- a/linden/indra/mac_crash_logger/llcrashloggermac.cpp +++ b/linden/indra/mac_crash_logger/llcrashloggermac.cpp @@ -53,7 +53,7 @@ const S32 SETTINGS_FILE_VERSION = 101; // Windows Message Handlers BOOL gFirstDialog = TRUE; // Are we currently handling the Send/Don't Send dialog? -FILE *gDebugFile = NULL; +LLFILE *gDebugFile = NULL; WindowRef gWindow = NULL; EventHandlerRef gEventHandler = NULL; diff --git a/linden/indra/mac_updater/mac_updater.cpp b/linden/indra/mac_updater/mac_updater.cpp index b7773e2..15e28ac 100644 --- a/linden/indra/mac_updater/mac_updater.cpp +++ b/linden/indra/mac_updater/mac_updater.cpp @@ -727,7 +727,7 @@ void *updatethreadproc(void*) char temp[PATH_MAX] = ""; /* Flawfinder: ignore */ // *NOTE: This buffer length is used in a scanf() below. char deviceNode[1024] = ""; /* Flawfinder: ignore */ - FILE *downloadFile = NULL; + LLFILE *downloadFile = NULL; OSStatus err; ProcessSerialNumber psn; char target[PATH_MAX] = ""; /* Flawfinder: ignore */ @@ -942,7 +942,7 @@ void *updatethreadproc(void*) snprintf(temp, sizeof(temp), "SecondLife.dmg"); - downloadFile = fopen(temp, "wb"); /* Flawfinder: ignore */ + downloadFile = LLFile::fopen(temp, "wb"); /* Flawfinder: ignore */ if(downloadFile == NULL) { throw 0; diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index bb7ddc1..7272173 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.19.1.4"; -CFBundleGetInfoString = "Second Life version 1.19.1.4, Copyright 2004-2008 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.20.6.86975"; +CFBundleGetInfoString = "Second Life version 1.20.6.86975, Copyright 2004-2008 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index 492e589..fa50503 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ CFBundleVersion - 1.19.1.4 + 1.20.6.86975 CSResourcesFileMapped diff --git a/linden/indra/newview/app_settings/cmd_line.xml b/linden/indra/newview/app_settings/cmd_line.xml index 3e6fa21..746e56d 100644 --- a/linden/indra/newview/app_settings/cmd_line.xml +++ b/linden/indra/newview/app_settings/cmd_line.xml @@ -1,335 +1,335 @@ - - - - help - - desc - display this help message - - short - h - - - port - - count - 1 - map-to - UserConnectionPort - - - drop - - count - 1 - map-to - PacketDropPercentage - - - inbw - - count - 1 - map-to - InBandwidth - - - outbw - - count - 1 - map-to - OutBandwidth - - - grid - - desc - Specify the name of the grid, local, or an IP address to connect to. - count - 1 - map-to - GridChoice - - - loginuri - - desc - login server and CGI script to use - count - 1 - compose - true - map-to - LoginURI - - - helperuri - - desc - helper web CGI prefix to use - count - 1 - map-to - HelperURI - - - debugviews - - map-to - DebugViews - - - skin - - desc - ui/branding skin folder to use - count - 1 - map-to - SkinFolder - - - autologin - - desc - log in as last saved user - map-to - AutoLogin - - - quitafter - - count - 1 - map-to - QuitAfterSeconds - - - rotate - - map-to - RotateRight - - - noaudio - - map-to - NoAudio - - - nosound - - map-to - NoAudio - - - noprobe - - map-to - NoHardwareProbe - - - noquicktime - - map-to - NoQuickTime - - - nopreload - - map-to - NoPreload - - - purge - - desc - Delete files in the cache. - map-to - PurgeCacheOnNextStartup - - - noinvlib - - desc - Do not request the inventory library. - map-to - NoInventoryLibrary - - - logfile - - count - 1 - map-to - UserLogFile - - - setdefault - - desc - specify the value of a particular - configuration variable which can be - overridden by settings.xml - - count - 2 - - - - set - - desc - specify the value of a particular - configuration variable that - overrides all other settings - - count - 2 - - - - settings - - desc - Specify the filename of a configuration file. - count - 1 - - - - login - - desc - 3 tokens: first, last and password - count - 3 - map-to - UserLoginInfo - - - god - - desc - Log in a god if you have god access. - map-to - ConnectAsGod - - - console - - count - 1 - map-to - ShowConsoleWindow - - - safe - - desc - Reset preferences, run in safe mode. - map-to - SafeMode - - - multiple - - desc - Allow multple viewers. - map-to - AllowMultipleViewers - - - novoice - - desc - Disable voice. - map-to - CmdLineDisableVoice - - - url - - desc - Startup location - count - 1 - last_option - true - - - - slurl - - desc - Startup SLurl - count - 1 - positional - true - last_option - true - - - - ignorepixeldepth - - desc - Ignore pixel depth settings. - map-to - IgnorePixelDepth - - - cooperative - - desc - Yield some idle time to local host. - count - 1 - map-to - YieldTime - - - no-verify-ssl-cert - - map-to - NoVerifySSLCert - - - channel - - count - 1 - map-to - VersionChannelName - - - loginpage - - desc - Login authentication page to use. - count - 1 - map-to - LoginPage - - - qa - - desc - Activated debugging menu in Advanced Settings. - map-to - QAMode - - - crashonstartup - - desc - Crashes on startup. For QA use. - map-to - CrashOnStartup - - - - + + + + help + + desc + display this help message + + short + h + + + port + + count + 1 + map-to + UserConnectionPort + + + drop + + count + 1 + map-to + PacketDropPercentage + + + inbw + + count + 1 + map-to + InBandwidth + + + outbw + + count + 1 + map-to + OutBandwidth + + + grid + + desc + Specify the name of the grid, local, or an IP address to connect to. + count + 1 + map-to + CmdLineGridChoice + + + loginuri + + desc + login server and CGI script to use + count + 1 + compose + true + map-to + CmdLineLoginURI + + + helperuri + + desc + helper web CGI prefix to use + count + 1 + map-to + CmdLineHelperURI + + + debugviews + + map-to + DebugViews + + + skin + + desc + ui/branding skin folder to use + count + 1 + map-to + SkinFolder + + + autologin + + desc + log in as last saved user + map-to + AutoLogin + + + quitafter + + count + 1 + map-to + QuitAfterSeconds + + + rotate + + map-to + RotateRight + + + noaudio + + map-to + NoAudio + + + nosound + + map-to + NoAudio + + + noprobe + + map-to + NoHardwareProbe + + + noquicktime + + map-to + NoQuickTime + + + nopreload + + map-to + NoPreload + + + purge + + desc + Delete files in the cache. + map-to + PurgeCacheOnNextStartup + + + noinvlib + + desc + Do not request the inventory library. + map-to + NoInventoryLibrary + + + logfile + + count + 1 + map-to + UserLogFile + + + setdefault + + desc + specify the value of a particular + configuration variable which can be + overridden by settings.xml + + count + 2 + + + + set + + desc + specify the value of a particular + configuration variable that + overrides all other settings + + count + 2 + + + + settings + + desc + Specify the filename of a configuration file. + count + 1 + + + + login + + desc + 3 tokens: first, last and password + count + 3 + map-to + UserLoginInfo + + + god + + desc + Log in a god if you have god access. + map-to + ConnectAsGod + + + console + + count + 1 + map-to + ShowConsoleWindow + + + safe + + desc + Reset preferences, run in safe mode. + map-to + SafeMode + + + multiple + + desc + Allow multple viewers. + map-to + AllowMultipleViewers + + + novoice + + desc + Disable voice. + map-to + CmdLineDisableVoice + + + url + + desc + Startup location + count + 1 + last_option + true + + + + slurl + + desc + Startup SLurl + count + 1 + positional + true + last_option + true + + + + ignorepixeldepth + + desc + Ignore pixel depth settings. + map-to + IgnorePixelDepth + + + cooperative + + desc + Yield some idle time to local host. + count + 1 + map-to + YieldTime + + + no-verify-ssl-cert + + map-to + NoVerifySSLCert + + + channel + + count + 1 + map-to + VersionChannelName + + + loginpage + + desc + Login authentication page to use. + count + 1 + map-to + LoginPage + + + qa + + desc + Activated debugging menu in Advanced Settings. + map-to + QAMode + + + crashonstartup + + desc + Crashes on startup. For QA use. + map-to + CrashOnStartup + + + + diff --git a/linden/indra/newview/app_settings/keywords.ini b/linden/indra/newview/app_settings/keywords.ini index 9a8b1f7..b6892dc 100644 --- a/linden/indra/newview/app_settings/keywords.ini +++ b/linden/indra/newview/app_settings/keywords.ini @@ -507,6 +507,10 @@ CLICK_ACTION_OPEN_MEDIA Used with llSetClickAction to set open-media as the defa [word .1, .3, .5] NULL_KEY Indicates an empty key EOF Indicates the last line of a notecard was read +TEXTURE_BLANK UUID for the "Blank" texture +TEXTURE_DEFAULT UUID for the "Default Media" texture +TEXTURE_PLYWOOD UUID for the default "Plywood" texture +TEXTURE_TRANSPARENT UUID for the "White - Transparent" texture # float constants [word .3, .1, .5] diff --git a/linden/indra/newview/app_settings/logcontrol.xml b/linden/indra/newview/app_settings/logcontrol.xml new file mode 100644 index 0000000..d7bb64c --- /dev/null +++ b/linden/indra/newview/app_settings/logcontrol.xml @@ -0,0 +1,47 @@ + + + + default-level INFO + print-location false + settings + + + + levelINFO + functions + + + classes + + + files + + + tags + + AppInit + SystemInfo + TextureCache + AppCache + Window + RenderInit + + + + levelDEBUG + functions + + + classes + + + files + + + tags + + + + + + diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 69ae958..f5e57a5 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -1,10118 +1,10196 @@ + + + AFKTimeout + Comment + Time before automatically setting AFK (away from keyboard) mode (seconds) + Persist + 1 + Type + F32 + Value + 300.0 + AdvanceSnapshot - - Comment - Display advanced parameter settings in snaphot interface - Persist - 1 - Type - Boolean - Value - 0 - - AFKTimeout - - Comment - Time before automatically setting AFK (away from keyboard) mode (seconds) - Persist - 1 - Type - F32 - Value - 300 - + + Comment + Display advanced parameter settings in snaphot interface + Persist + 1 + Type + Boolean + Value + 0 + AgentChatColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - - IMChatColor - - Comment - Color of instant messages from other residents - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Color of chat messages from other residents + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + AllowIdleAFK - - Comment - Automatically set AFK (away from keyboard) mode when idle - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Automatically set AFK (away from keyboard) mode when idle + Persist + 1 + Type + Boolean + Value + 1 + AllowMultipleViewers - - Comment - Allow multiple viewers. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Allow multiple viewers. + Persist + 1 + Type + Boolean + Value + 0 + AllowTapTapHoldRun - - Comment - Tapping a direction key twice and holding it down makes avatar run - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Tapping a direction key twice and holding it down makes avatar run + Persist + 1 + Type + Boolean + Value + 1 + AnimateTextures - - Comment - Enable texture animation (debug) - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enable texture animation (debug) + Persist + 1 + Type + Boolean + Value + 1 + AnimationDebug - - Comment - Show active animations in a bubble above avatars head - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show active animations in a bubble above avatars head + Persist + 1 + Type + Boolean + Value + 0 + AppearanceCameraMovement - - Comment - When entering appearance editing mode, camera zooms in on currently selected portion of avatar - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + When entering appearance editing mode, camera zooms in on currently selected portion of avatar + Persist + 1 + Type + Boolean + Value + 1 + ApplyColorImmediately - - Comment - Preview selections in color picker immediately - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Preview selections in color picker immediately + Persist + 1 + Type + Boolean + Value + 1 + ApplyTextureImmediately - - Comment - Preview selections in texture picker immediately - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Preview selections in texture picker immediately + Persist + 1 + Type + Boolean + Value + 1 + ArrowKeysMoveAvatar - - Comment - While cursor is in chat entry box, arrow keys still control your avatar - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + While cursor is in chat entry box, arrow keys still control your avatar + Persist + 1 + Type + Boolean + Value + 1 + AskedAboutCrashReports - - Comment - Turns off dialog asking if you want to enable crash reporting - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Turns off dialog asking if you want to enable crash reporting + Persist + 1 + Type + Boolean + Value + 0 + AsyncKeyboard - - Comment - Improves responsiveness to keyboard input when at low framerates - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Improves responsiveness to keyboard input when at low framerates + Persist + 1 + Type + Boolean + Value + 1 + AuctionShowFence - - Comment - When auctioning land, include parcel boundary marker in snapshot - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + When auctioning land, include parcel boundary marker in snapshot + Persist + 1 + Type + Boolean + Value + 1 + AudioLevelAmbient - - Comment - Audio level of environment sounds - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Audio level of environment sounds + Persist + 1 + Type + F32 + Value + 0.5 + AudioLevelDistance - - Comment - Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast) + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelDoppler - - Comment - Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect) + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelMaster - - Comment - Master audio level, or overall volume - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Master audio level, or overall volume + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelMedia - - Comment - Audio level of Quicktime movies - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Audio level of Quicktime movies + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelMic - - Comment - Audio level of microphone input - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Audio level of microphone input + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelMusic - - Comment - Audio level of streaming music - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Audio level of streaming music + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelRolloff - - Comment - Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff) + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelSFX - - Comment - Audio level of in-world sound effects - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Audio level of in-world sound effects + Persist + 1 + Type + F32 + Value + 1.0 + AudioLevelUI - - Comment - Audio level of UI sound effects - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Audio level of UI sound effects + Persist + 1 + Type + F32 + Value + 0.5 + AudioLevelVoice - - Comment - Audio level of voice chat - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Audio level of voice chat + Persist + 1 + Type + F32 + Value + 0.5 + AudioStreamingMusic - - Comment - Enable streaming audio - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable streaming audio + Persist + 1 + Type + Boolean + Value + 0 + AudioStreamingVideo - - Comment - Enable streaming video - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable streaming video + Persist + 1 + Type + Boolean + Value + 0 + AutoAcceptNewInventory - - Comment - Automatically accept new notecards/textures/landmarks - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Automatically accept new notecards/textures/landmarks + Persist + 1 + Type + Boolean + Value + 0 + + AutoLeveling + + Comment + Keep Flycam level. + Persist + 1 + Type + Boolean + Value + 1 + AutoLoadWebProfiles - - Comment - Automatically load ALL profile webpages without asking first. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Automatically load ALL profile webpages without asking first. + Persist + 1 + Type + Boolean + Value + 0 + AutoLogin - - Comment - Login automatically using last username/password combination - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Login automatically using last username/password combination + Persist + 0 + Type + Boolean + Value + 0 + AutoMimeDiscovery - - Comment - Enable viewer mime type discovery of media URLs - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable viewer mime type discovery of media URLs + Persist + 1 + Type + Boolean + Value + 0 + AutoPilotLocksCamera - - Comment - Keep camera position locked when avatar walks to selected position - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Keep camera position locked when avatar walks to selected position + Persist + 1 + Type + Boolean + Value + 0 + AutoSnapshot - - Comment - Update snapshot when camera stops moving, or any parameter changes - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Update snapshot when camera stops moving, or any parameter changes + Persist + 1 + Type + Boolean + Value + 0 + AutomaticFly - - Comment - Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only) - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only) + Persist + 1 + Type + Boolean + Value + 1 + + AvatarAxisDeadZone0 + + Comment + Avatar axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone1 + + Comment + Avatar axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone2 + + Comment + Avatar axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone3 + + Comment + Avatar axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone4 + + Comment + Avatar axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone5 + + Comment + Avatar axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisScale0 + + Comment + Avatar axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale1 + + Comment + Avatar axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale2 + + Comment + Avatar axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale3 + + Comment + Avatar axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale4 + + Comment + Avatar axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale5 + + Comment + Avatar axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + AvatarBacklight - - Comment - Add rim lighting to avatar rendering to approximate shininess of skin - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Add rim lighting to avatar rendering to approximate shininess of skin + Persist + 1 + Type + Boolean + Value + 1 + AvatarCompositeLimit - - Comment - Maximum number of avatars to display appearance changes on the fly - Persist - 1 - Type - S32 - Value - 5 - + + Comment + Maximum number of avatars to display appearance changes on the fly + Persist + 1 + Type + S32 + Value + 5 + + AvatarFeathering + + Comment + Avatar feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + AvatarPickerSortOrder - - Comment - Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 2 - + + Comment + Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 2 + AvatarSex - - Comment - - Persist - 0 - Type - U32 - Value - 0 - + + Comment + + Persist + 0 + Type + U32 + Value + 0 + BackgroundChatColor - - Comment - Color of chat bubble background - Persist - 1 - Type - Color4 - Value - - 0 - 0 - 0 - 1 - - + + Comment + Color of chat bubble background + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.0 + 1.0 + + BackgroundYieldTime - - Comment - Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds) - Persist - 1 - Type - S32 - Value - 40 - + + Comment + Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds) + Persist + 1 + Type + S32 + Value + 40 + BackwardBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 45 - 29 - 66 - 4 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 45 + 29 + 66 + 4 + + BasicHelpRect - - Comment - Rectangle for help window - Persist - 1 - Type - Rect - Value - - 0 - 404 - 467 - 0 - - + + Comment + Rectangle for help window + Persist + 1 + Type + Rect + Value + + 0 + 404 + 467 + 0 + + BeaconAlwaysOn - - Comment - Beacons / highlighting always on - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Beacons / highlighting always on + Persist + 1 + Type + Boolean + Value + 0 + BrowserHomePage - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - http://www.secondlife.com - + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + http://www.secondlife.com + BrowserProxyAddress - - Comment - Address for the Web Proxy] - Persist - 1 - Type - String - Value - - + + Comment + Address for the Web Proxy] + Persist + 1 + Type + String + Value + + BrowserProxyEnabled - - Comment - Use Web Proxy - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Use Web Proxy + Persist + 1 + Type + Boolean + Value + 0 + BrowserProxyExclusions - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - - + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + + BrowserProxyPort - - Comment - Port for Web Proxy - Persist - 1 - Type - S32 - Value - 3128 - + + Comment + Port for Web Proxy + Persist + 1 + Type + S32 + Value + 3128 + BrowserProxySocks45 - - Comment - [NOT USED] - Persist - 1 - Type - S32 - Value - 5 - + + Comment + [NOT USED] + Persist + 1 + Type + S32 + Value + 5 + + BuildAxisDeadZone0 + + Comment + Build axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone1 + + Comment + Build axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone2 + + Comment + Build axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone3 + + Comment + Build axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone4 + + Comment + Build axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone5 + + Comment + Build axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisScale0 + + Comment + Build axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale1 + + Comment + Build axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale2 + + Comment + Build axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale3 + + Comment + Build axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale4 + + Comment + Build axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale5 + + Comment + Build axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + BuildBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + BuildFeathering + + Comment + Build feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + ButtonFlashCount - - Comment - Number of flashes after which flashing buttons stay lit up - Persist - 1 - Type - S32 - Value - 3 - + + Comment + Number of flashes after which flashing buttons stay lit up + Persist + 1 + Type + S32 + Value + 3 + ButtonFlashRate - - Comment - Frequency at which buttons flash (hz) - Persist - 1 - Type - F32 - Value - 2 - + + Comment + Frequency at which buttons flash (hz) + Persist + 1 + Type + F32 + Value + 2.0 + ButtonHPad - - Comment - Default horizontal spacing between buttons (pixels) - Persist - 1 - Type - S32 - Value - 10 - + + Comment + Default horizontal spacing between buttons (pixels) + Persist + 1 + Type + S32 + Value + 10 + ButtonHeight - - Comment - Default height for normal buttons (pixels) - Persist - 1 - Type - S32 - Value - 20 - + + Comment + Default height for normal buttons (pixels) + Persist + 1 + Type + S32 + Value + 20 + ButtonHeightSmall - - Comment - Default height for small buttons (pixels) - Persist - 1 - Type - S32 - Value - 16 - + + Comment + Default height for small buttons (pixels) + Persist + 1 + Type + S32 + Value + 16 + ButtonVPad - - Comment - Default vertical spacing between buttons (pixels) - Persist - 1 - Type - S32 - Value - 1 - + + Comment + Default vertical spacing between buttons (pixels) + Persist + 1 + Type + S32 + Value + 1 + CacheLocation - - Comment - Controls the location of the local disk cache - Persist - 1 - Type - String - Value - - + + Comment + Controls the location of the local disk cache + Persist + 1 + Type + String + Value + + CacheSize - - Comment - Controls amount of hard drive space reserved for local file caching in MB - Persist - 1 - Type - U32 - Value - 500 - + + Comment + Controls amount of hard drive space reserved for local file caching in MB + Persist + 1 + Type + U32 + Value + 500 + CacheValidateCounter - - Comment - Used to distribute cache validation - Persist - 1 - Type - U32 - Value - 0 - + + Comment + Used to distribute cache validation + Persist + 1 + Type + U32 + Value + 0 + + CameraMouseWheelZoom + + Comment + Camera zooms in and out with mousewheel + Persist + 1 + Type + Boolean + Value + 1 + CameraOffset - - Comment - Render with camera offset from view frustum (rendering debug) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Render with camera offset from view frustum (rendering debug) + Persist + 1 + Type + Boolean + Value + 0 + CameraOffsetBuild - - Comment - Default camera position relative to focus point when entering build mode - Persist - 1 - Type - Vector3 - Value - - -6 - 0 - 6 - - + + Comment + Default camera position relative to focus point when entering build mode + Persist + 1 + Type + Vector3 + Value + + -6.0 + 0.0 + 6.0 + + CameraOffsetDefault - - Comment - Default camera offset from avatar - Persist - 1 - Type - Vector3 - Value - - -3 - 0 - 0.75 - - - CameraPositionSmoothing - - Comment - Smooths camera position over time - Persist - 1 - Type - F32 - Value - 1.0 - + + Comment + Default camera offset from avatar + Persist + 1 + Type + Vector3 + Value + + -3.0 + 0.0 + 0.75 + + CameraPosOnLogout - - Comment - Camera position when last logged out (global coordinates) - Persist - 1 - Type - Vector3D - Value - - 0 - 0 - 0 - - - CameraMouseWheelZoom - - Comment - Camera zooms in and out with mousewheel - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Camera position when last logged out (global coordinates) + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + CameraPositionSmoothing + + Comment + Smooths camera position over time + Persist + 1 + Type + F32 + Value + 1.0 + ChatBarStealsFocus - - Comment - Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus + Persist + 1 + Type + Boolean + Value + 1 + ChatBubbleOpacity - - Comment - Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.5 + ChatFontSize - - Comment - Size of chat text in chat console (0 = small, 1 = big) - Persist - 1 - Type - S32 - Value - 1 - + + Comment + Size of chat text in chat console (0 = small, 1 = big) + Persist + 1 + Type + S32 + Value + 1 + ChatFullWidth - - Comment - Chat console takes up full width of SL window - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Chat console takes up full width of SL window + Persist + 1 + Type + Boolean + Value + 1 + ChatHistoryTornOff - - Comment - Show chat history window separately from Communicate window. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show chat history window separately from Communicate window. + Persist + 1 + Type + Boolean + Value + 0 + ChatOnlineNotification - - Comment - Provide notifications for when friend log on and off of SL - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Provide notifications for when friend log on and off of SL + Persist + 1 + Type + Boolean + Value + 1 + ChatPersistTime - - Comment - Time for which chat stays visible in console (seconds) - Persist - 1 - Type - F32 - Value - 15 - + + Comment + Time for which chat stays visible in console (seconds) + Persist + 1 + Type + F32 + Value + 15.0 + ChatShowTimestamps - - Comment - Show timestamps in chat - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show timestamps in chat + Persist + 1 + Type + Boolean + Value + 1 + ChatVisible - - Comment - Chat bar is visible - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Chat bar is visible + Persist + 1 + Type + Boolean + Value + 1 + ChatterboxRect - - Comment - Rectangle for chatterbox window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 350 - 0 - - + + Comment + Rectangle for chatterbox window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 350 + 0 + + CheesyBeacon - - Comment - Enable cheesy beacon effects - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable cheesy beacon effects + Persist + 1 + Type + Boolean + Value + 0 + ClientSettingsFile - - Comment - Persisted client settings file name (per install). - Persist - 0 - Type - String - Value - - + + Comment + Persisted client settings file name (per install). + Persist + 0 + Type + String + Value + + CloseChatOnReturn - - Comment - Close chat after hitting return - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Close chat after hitting return + Persist + 1 + Type + Boolean + Value + 0 + CloseSnapshotOnKeep - - Comment - Close snapshot window after saving snapshot - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Close snapshot window after saving snapshot + Persist + 1 + Type + Boolean + Value + 1 + ClothingBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + CmdLineDisableVoice - - Comment - Disable Voice. - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + Disable Voice. + Persist + 0 + Type + Boolean + Value + 0 + + CmdLineGridChoice + + Comment + The user's grid choice or ip address. + Persist + 0 + Type + String + Value + + + CmdLineHelperURI + + Comment + Command line specified helper web CGI prefix to use. + Persist + 0 + Type + String + Value + + + CmdLineLoginURI + + Comment + Command line specified login server and CGI prefix to use. + Persist + 0 + Type + LLSD + Value + + + + ColorPaletteEntry01 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.0 + 1.0 + + ColorPaletteEntry02 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 0.5 + 1.0 + + ColorPaletteEntry03 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.0 + 0.0 + 1.0 + + ColorPaletteEntry04 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 0.0 + 1.0 + + ColorPaletteEntry05 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0.5 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 0.0 + 1.0 + + ColorPaletteEntry06 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0.5 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 0.5 + 1.0 + + ColorPaletteEntry07 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.5 + 1.0 + + ColorPaletteEntry08 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.0 + 0.5 + 1.0 + + ColorPaletteEntry09 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 0.0 + 1.0 + + ColorPaletteEntry10 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0.25 - 0.25 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.25 + 0.25 + 1.0 + + ColorPaletteEntry11 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0.5 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 1.0 + 1.0 + + ColorPaletteEntry12 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0.25 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.25 + 0.5 + 1.0 + + ColorPaletteEntry13 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.0 + 1.0 + 1.0 + + ColorPaletteEntry14 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.25 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.25 + 0.0 + 1.0 + + ColorPaletteEntry15 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + ColorPaletteEntry16 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + ColorPaletteEntry17 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + ColorPaletteEntry18 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.75 - 0.75 - 0.75 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.75 + 0.75 + 0.75 + 1.0 + + ColorPaletteEntry19 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 0 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.0 + 1.0 + + ColorPaletteEntry20 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 0.0 + 1.0 + + ColorPaletteEntry21 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 1 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.0 + 1.0 + + ColorPaletteEntry22 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 1.0 + 1.0 + + ColorPaletteEntry23 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 0 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 1.0 + 1.0 + + ColorPaletteEntry24 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 0 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 1.0 + 1.0 + + ColorPaletteEntry25 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 0.5 + 1.0 + + ColorPaletteEntry26 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0 - 1 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.5 + 1.0 + + ColorPaletteEntry27 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 1.0 + 1.0 + 1.0 + + ColorPaletteEntry28 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 1.0 + 1.0 + + ColorPaletteEntry29 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 0 - 0.5 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.5 + 1.0 + + ColorPaletteEntry30 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 0.5 - 0 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.5 + 0.0 + 1.0 + + ColorPaletteEntry31 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + ColorPaletteEntry32 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + ColumnHeaderDropDownDelay - - Comment - Time in seconds of mouse click before column header shows sort options list - Persist - 1 - Type - F32 - Value - 0.300000011920928955078125 - + + Comment + Time in seconds of mouse click before column header shows sort options list + Persist + 1 + Type + F32 + Value + 0.300000011921 + CompileOutputRect - - Comment - Rectangle for script Recompile Everything output window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 300 - 0 - - + + Comment + Rectangle for script Recompile Everything output window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 300 + 0 + + CompressSnapshotsToDisk - - Comment - Compress snapshots saved to disk (Using JPEG 2000) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Compress snapshots saved to disk (Using JPEG 2000) + Persist + 1 + Type + Boolean + Value + 0 + ConnectAsGod - - Comment - Log in a god if you have god access. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Log in a god if you have god access. + Persist + 1 + Type + Boolean + Value + 0 + ConnectionPort - - Comment - Custom connection port number - Persist - 1 - Type - U32 - Value - 13000 - + + Comment + Custom connection port number + Persist + 1 + Type + U32 + Value + 13000 + ConnectionPortEnabled - - Comment - Use the custom connection port? - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Use the custom connection port? + Persist + 1 + Type + Boolean + Value + 0 + ConsoleBackgroundOpacity - - Comment - Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.4000000059604644775390625 - + + Comment + Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.40000000596 + ConsoleBufferSize - - Comment - Size of chat console history (lines of chat) - Persist - 1 - Type - S32 - Value - 40 - + + Comment + Size of chat console history (lines of chat) + Persist + 1 + Type + S32 + Value + 40 + ConsoleMaxLines - - Comment - Max number of lines of chat text visible in console. - Persist - 1 - Type - S32 - Value - 40 - + + Comment + Max number of lines of chat text visible in console. + Persist + 1 + Type + S32 + Value + 40 + ContactsTornOff - - Comment - Show contacts window separately from Communicate window. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show contacts window separately from Communicate window. + Persist + 1 + Type + Boolean + Value + 0 + CookiesEnabled - - Comment - Accept cookies from Web sites? - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Accept cookies from Web sites? + Persist + 1 + Type + Boolean + Value + 1 + CrashLogBehavior - - Comment - Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report) - Persist - 0 - Type - S32 - Value - 1 - + + Comment + Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report) + Persist + 0 + Type + S32 + Value + 1 + CreateToolCopyCenters - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + CreateToolCopyRotates - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + CreateToolCopySelection - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + CreateToolKeepSelected - - Comment - After using create tool, keep the create tool active - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + After using create tool, keep the create tool active + Persist + 1 + Type + Boolean + Value + 0 + + Cursor3D + + Comment + Tread Joystick values as absolute positions (not deltas). + Persist + 1 + Type + Boolean + Value + 1 + CustomServer - - Comment - Specifies IP address or hostname of grid to which you connect - Persist - 1 - Type - String - Value - - + + Comment + Specifies IP address or hostname of grid to which you connect + Persist + 1 + Type + String + Value + + DebugBeaconLineWidth - - Comment - Size of lines for Debug Beacons - Persist - 1 - Type - S32 - Value - 1 - + + Comment + Size of lines for Debug Beacons + Persist + 1 + Type + S32 + Value + 1 + DebugInventoryFilters - - Comment - Turn on debugging display for inventory filtering - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Turn on debugging display for inventory filtering + Persist + 1 + Type + Boolean + Value + 0 + DebugPermissions - - Comment - Log permissions for selected inventory items - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Log permissions for selected inventory items + Persist + 1 + Type + Boolean + Value + 0 + DebugShowColor - - Comment - Show color under cursor - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show color under cursor + Persist + 1 + Type + Boolean + Value + 0 + DebugShowRenderInfo - - Comment - Show depth buffer contents - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show depth buffer contents + Persist + 1 + Type + Boolean + Value + 0 + DebugShowTime - - Comment - Show depth buffer contents - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show depth buffer contents + Persist + 1 + Type + Boolean + Value + 0 + DebugViews - - Comment - Display debugging info for views. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display debugging info for views. + Persist + 1 + Type + Boolean + Value + 0 + DebugWindowProc - - Comment - Log windows messages - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Log windows messages + Persist + 1 + Type + Boolean + Value + 0 + DefaultObjectTexture - - Comment - Texture used as 'Default' in texture picker. (UUID texture reference) - Persist - 1 - Type - String - Value - 89556747-24cb-43ed-920b-47caed15465f - + + Comment + Texture used as 'Default' in texture picker. (UUID texture reference) + Persist + 1 + Type + String + Value + 89556747-24cb-43ed-920b-47caed15465f + DisableCameraConstraints - - Comment - Disable the normal bounds put on the camera by avatar position - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Disable the normal bounds put on the camera by avatar position + Persist + 1 + Type + Boolean + Value + 0 + DisableRendering - - Comment - Disable GL rendering and GUI (load testing) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Disable GL rendering and GUI (load testing) + Persist + 1 + Type + Boolean + Value + 0 + DisableVerticalSync - - Comment - Update frames as fast as possible (FALSE = update frames between display scans) - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Update frames as fast as possible (FALSE = update frames between display scans) + Persist + 1 + Type + Boolean + Value + 1 + DisplayAvatarAgentTarget - - Comment - Show avatar positioning locators (animation debug) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show avatar positioning locators (animation debug) + Persist + 1 + Type + Boolean + Value + 0 + DisplayChat - - Comment - Display Latest Chat message on LCD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display Latest Chat message on LCD + Persist + 1 + Type + Boolean + Value + 1 + DisplayDebug - - Comment - Display Network Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display Network Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + DisplayDebugConsole - - Comment - Display Console Debug Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display Console Debug Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + DisplayIM - - Comment - Display Latest IM message on LCD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display Latest IM message on LCD + Persist + 1 + Type + Boolean + Value + 1 + DisplayLinden - - Comment - Display Account Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display Account Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + DisplayRegion - - Comment - Display Location information on LCD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display Location information on LCD + Persist + 1 + Type + Boolean + Value + 1 + DisplayTimecode - - Comment - Display timecode on screen - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display timecode on screen + Persist + 1 + Type + Boolean + Value + 0 + Disregard128DefaultDrawDistance - - Comment - Whether to use the auto default to 128 draw distance - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whether to use the auto default to 128 draw distance + Persist + 1 + Type + Boolean + Value + 1.0 + Disregard96DefaultDrawDistance - - Comment - Whether to use the auto default to 96 draw distance - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whether to use the auto default to 96 draw distance + Persist + 1 + Type + Boolean + Value + 1.0 + DoubleClickAutoPilot - - Comment - Enable double-click auto pilot - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable double-click auto pilot + Persist + 1 + Type + Boolean + Value + 0 + DragAndDropToolTipDelay - - Comment - Seconds before displaying tooltip when performing drag and drop operation - Persist - 1 - Type - F32 - Value - 0.1000000014901161193847656 - + + Comment + Seconds before displaying tooltip when performing drag and drop operation + Persist + 1 + Type + F32 + Value + 0.10000000149 + DropShadowButton - - Comment - Drop shadow width for buttons (pixels) - Persist - 1 - Type - S32 - Value - 2 - + + Comment + Drop shadow width for buttons (pixels) + Persist + 1 + Type + S32 + Value + 2 + DropShadowFloater - - Comment - Drop shadow width for floaters (pixels) - Persist - 1 - Type - S32 - Value - 5 - + + Comment + Drop shadow width for floaters (pixels) + Persist + 1 + Type + S32 + Value + 5 + DropShadowSlider - - Comment - Drop shadow width for sliders (pixels) - Persist - 1 - Type - S32 - Value - 3 - + + Comment + Drop shadow width for sliders (pixels) + Persist + 1 + Type + S32 + Value + 3 + DropShadowTooltip - - Comment - Drop shadow width for tooltips (pixels) - Persist - 1 - Type - S32 - Value - 4 - + + Comment + Drop shadow width for tooltips (pixels) + Persist + 1 + Type + S32 + Value + 4 + DynamicCameraStrength - - Comment - Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity) - Persist - 1 - Type - F32 - Value - 2 - + + Comment + Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity) + Persist + 1 + Type + F32 + Value + 2.0 + EditCameraMovement - - Comment - When entering build mode, camera moves up above avatar - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + When entering build mode, camera moves up above avatar + Persist + 1 + Type + Boolean + Value + 0 + EditLinkedParts - - Comment - Select individual parts of linked objects - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + Select individual parts of linked objects + Persist + 0 + Type + Boolean + Value + 0 + EffectColor - - Comment - Particle effects color - Persist - 1 - Type - Color4 - Value - - 1 - 1 - 1 - 1 - - + + Comment + Particle effects color + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + EnablePushToTalk - - Comment - Must hold down a key or moouse button when talking into your microphone - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Must hold down a key or moouse button when talking into your microphone + Persist + 1 + Type + Boolean + Value + 1 + + EnableRippleWater + + Comment + Whether to use ripple water shader or not + Persist + 1 + Type + Boolean + Value + 1 + EnableVoiceChat - - Comment - Enable talking to other residents with a microphone - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enable talking to other residents with a microphone + Persist + 1 + Type + Boolean + Value + 1 + EnergyFromTop - - Comment - - Persist - 0 - Type - S32 - Value - 20 - + + Comment + + Persist + 0 + Type + S32 + Value + 20 + EnergyHeight - - Comment - - Persist - 0 - Type - S32 - Value - 40 - + + Comment + + Persist + 0 + Type + S32 + Value + 40 + EnergyWidth - - Comment - - Persist - 0 - Type - S32 - Value - 175 - + + Comment + + Persist + 0 + Type + S32 + Value + 175 + + FPSLogFrequency + + Comment + Seconds between display of FPS in log (0 for never) + Persist + 1 + Type + F32 + Value + 10.0 + FilterItemsPerFrame - - Comment - Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed) - Persist - 1 - Type - S32 - Value - 500 - + + Comment + Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed) + Persist + 1 + Type + S32 + Value + 500 + FindLandArea - - Comment - Enables filtering of land search results by area - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enables filtering of land search results by area + Persist + 1 + Type + Boolean + Value + 0 + FindLandPrice - - Comment - Enables filtering of land search results by price - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables filtering of land search results by price + Persist + 1 + Type + Boolean + Value + 1 + FindLandType - - Comment - Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale") - Persist - 1 - Type - String - Value - All - + + Comment + Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale") + Persist + 1 + Type + String + Value + All + FindPeopleOnline - - Comment - Limits people search to only users who are logged on - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Limits people search to only users who are logged on + Persist + 1 + Type + Boolean + Value + 1 + FindPlacesPictures - - Comment - Display only results of find places that have pictures - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display only results of find places that have pictures + Persist + 1 + Type + Boolean + Value + 1 + FirstLoginThisInstall - - Comment - Specifies that you have not successfully logged in since you installed the latest update - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Specifies that you have not successfully logged in since you installed the latest update + Persist + 1 + Type + Boolean + Value + 1 + FirstName - - Comment - Login first name - Persist - 1 - Type - String - Value - - + + Comment + Login first name + Persist + 1 + Type + String + Value + + FirstPersonAvatarVisible - - Comment - Display avatar and attachments below neck while in mouselook - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display avatar and attachments below neck while in mouselook + Persist + 1 + Type + Boolean + Value + 0 + FirstPersonBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + FirstRunThisInstall - - Comment - Specifies that you have not run the viewer since you installed the latest update - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Specifies that you have not run the viewer since you installed the latest update + Persist + 1 + Type + Boolean + Value + 1 + FixedWeather - - Comment - Weather effects do not change over time - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Weather effects do not change over time + Persist + 1 + Type + Boolean + Value + 0 + FloaterAboutRect - - Comment - Rectangle for About window - Persist - 1 - Type - Rect - Value - - 0 - 440 - 470 - 0 - - + + Comment + Rectangle for About window + Persist + 1 + Type + Rect + Value + + 0 + 440 + 470 + 0 + + FloaterActiveSpeakersRect - - Comment - Rectangle for active speakers window - Persist - 1 - Type - Rect - Value - - 0 - 300 - 250 - 0 - - - FloaterActiveSpeakersSortColumn - - Comment - Column name to sort on - Persist - 1 - Type - String - Value - speaker_name - + + Comment + Rectangle for active speakers window + Persist + 1 + Type + Rect + Value + + 0 + 300 + 250 + 0 + + FloaterActiveSpeakersSortAscending - - Comment - Whether to sort up or down - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Whether to sort up or down + Persist + 1 + Type + Boolean + Value + 0 + + FloaterActiveSpeakersSortColumn + + Comment + Column name to sort on + Persist + 1 + Type + String + Value + speaker_name + + FloaterAdvancedSkyRect + + Comment + Rectangle for Advanced Sky Editor + Persist + 1 + Type + Rect + Value + + 50 + 220 + 450 + 0 + + + FloaterAdvancedWaterRect + + Comment + Rectangle for Advanced Water Editor + Persist + 1 + Type + Rect + Value + + 50 + 220 + 450 + 0 + + FloaterAudioVolumeRect - - Comment - Rectangle for Audio Volume window - Persist - 1 - Type - Rect - Value - - 0 - 440 - 470 - 0 - - + + Comment + Rectangle for Audio Volume window + Persist + 1 + Type + Rect + Value + + 0 + 440 + 470 + 0 + + FloaterBuildOptionsRect - - Comment - Rectangle for build options window. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - + + Comment + Rectangle for build options window. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + FloaterBumpRect - - Comment - Rectangle for Bumps/Hits window - Persist - 1 - Type - Rect - Value - - 0 - 180 - 400 - 0 - - + + Comment + Rectangle for Bumps/Hits window + Persist + 1 + Type + Rect + Value + + 0 + 180 + 400 + 0 + + FloaterBuyContentsRect - - Comment - Rectangle for Buy Contents window - Persist - 1 - Type - Rect - Value - - 0 - 250 - 300 - 0 - - + + Comment + Rectangle for Buy Contents window + Persist + 1 + Type + Rect + Value + + 0 + 250 + 300 + 0 + + FloaterBuyRect - - Comment - Rectangle for buy window - Persist - 1 - Type - Rect - Value - - 0 - 250 - 300 - 0 - - + + Comment + Rectangle for buy window + Persist + 1 + Type + Rect + Value + + 0 + 250 + 300 + 0 + + FloaterCameraRect3 - - Comment - Rectangle for camera control window - Persist - 1 - Type - Rect - Value - - 0 - 64 - 176 - 0 - - + + Comment + Rectangle for camera control window + Persist + 1 + Type + Rect + Value + + 0 + 64 + 176 + 0 + + FloaterChatRect - - Comment - Rectangle for chat history - Persist - 1 - Type - Rect - Value - - 0 - 172 - 500 - 0 - - + + Comment + Rectangle for chat history + Persist + 1 + Type + Rect + Value + + 0 + 172 + 500 + 0 + + FloaterClothingRect - - Comment - Rectangle for clothing window - Persist - 1 - Type - Rect - Value - - 0 - 480 - 320 - 0 - - + + Comment + Rectangle for clothing window + Persist + 1 + Type + Rect + Value + + 0 + 480 + 320 + 0 + + FloaterContactsRect - - Comment - Rectangle for chat history - Persist - 1 - Type - Rect - Value - - 0 - 390 - 395 - 0 - - + + Comment + Rectangle for chat history + Persist + 1 + Type + Rect + Value + + 0 + 390 + 395 + 0 + + FloaterCustomizeAppearanceRect - - Comment - Rectangle for avatar customization window - Persist - 1 - Type - Rect - Value - - 0 - 540 - 494 - 0 - - + + Comment + Rectangle for avatar customization window + Persist + 1 + Type + Rect + Value + + 0 + 540 + 494 + 0 + + + FloaterDayCycleRect + + Comment + Rectangle for Day Cycle Editor + Persist + 1 + Type + Rect + Value + + 50 + 450 + 300 + 0 + + + FloaterEnvRect + + Comment + Rectangle for Environment Editor + Persist + 1 + Type + Rect + Value + + 50 + 150 + 650 + 0 + + FloaterFindRect2 - - Comment - Rectangle for Find window - Persist - 1 - Type - Rect - Value - - 0 - 570 - 780 - 0 - - + + Comment + Rectangle for Find window + Persist + 1 + Type + Rect + Value + + 0 + 570 + 780 + 0 + + FloaterFriendsRect - - Comment - Rectangle for friends window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 250 - 0 - - + + Comment + Rectangle for friends window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 250 + 0 + + FloaterGestureRect2 - - Comment - Rectangle for gestures window - Persist - 1 - Type - Rect - Value - - 0 - 465 - 350 - 0 - - - FloaterHtmlRect - - Comment - Rectangle for HTML window - Persist - 1 - Type - Rect - Value - - 100 - 460 - 370 - 100 - - + + Comment + Rectangle for gestures window + Persist + 1 + Type + Rect + Value + + 0 + 465 + 350 + 0 + + FloaterHUDRect - - Comment - Rectangle for HUD Floater window - Persist - 1 - Type - Rect - Value - - 0 - 282 - 342 - 0 - - + + Comment + Rectangle for HUD Floater window + Persist + 1 + Type + Rect + Value + + 0 + 282 + 342 + 0 + + + FloaterHtmlRect + + Comment + Rectangle for HTML window + Persist + 1 + Type + Rect + Value + + 100 + 460 + 370 + 100 + + FloaterIMRect - - Comment - Rectangle for IM window - Persist - 1 - Type - Rect - Value - - 0 - 160 - 500 - 0 - - + + Comment + Rectangle for IM window + Persist + 1 + Type + Rect + Value + + 0 + 160 + 500 + 0 + + FloaterInspectRect - - Comment - Rectangle for Object Inspect window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - + + Comment + Rectangle for Object Inspect window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + FloaterInventoryRect - - Comment - Rectangle for inventory window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 300 - 0 - - + + Comment + Rectangle for inventory window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 300 + 0 + + FloaterJoystickRect - - Comment - Rectangle for joystick controls window. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - + + Comment + Rectangle for joystick controls window. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + FloaterLagMeter - - Comment - Rectangle for lag meter - Persist - 1 - Type - Rect - Value - - 0 - 142 - 350 - 0 - - + + Comment + Rectangle for lag meter + Persist + 1 + Type + Rect + Value + + 0 + 142 + 350 + 0 + + FloaterLandRect5 - - Comment - Rectangle for About Land window - Persist - 1 - Type - Rect - Value - - 0 - 370 - 460 - 0 - - + + Comment + Rectangle for About Land window + Persist + 1 + Type + Rect + Value + + 0 + 370 + 460 + 0 + + FloaterLandmarkRect - - Comment - Rectangle for landmark picker - Persist - 1 - Type - Rect - Value - - 0 - 290 - 310 - 0 - - + + Comment + Rectangle for landmark picker + Persist + 1 + Type + Rect + Value + + 0 + 290 + 310 + 0 + + FloaterMediaRect - - Comment - Rectangle for media browser window - Persist - 1 - Type - Rect - Value - - 16 - 650 - 600 - 128 - - + + Comment + Rectangle for media browser window + Persist + 1 + Type + Rect + Value + + 16 + 650 + 600 + 128 + + FloaterMiniMapRect - - Comment - Rectangle for world map - Persist - 1 - Type - Rect - Value - - 0 - 225 - 200 - 0 - - + + Comment + Rectangle for world map + Persist + 1 + Type + Rect + Value + + 0 + 225 + 200 + 0 + + FloaterMoveRect2 - - Comment - Rectangle for avatar control window - Persist - 1 - Type - Rect - Value - - 0 - 58 - 135 - 0 - - + + Comment + Rectangle for avatar control window + Persist + 1 + Type + Rect + Value + + 0 + 58 + 135 + 0 + + FloaterMuteRect3 - - Comment - Rectangle for mute window - Persist - 1 - Type - Rect - Value - - 0 - 300 - 300 - 0 - - + + Comment + Rectangle for mute window + Persist + 1 + Type + Rect + Value + + 0 + 300 + 300 + 0 + + FloaterOpenObjectRect - - Comment - Rectangle for Open Object window - Persist - 1 - Type - Rect - Value - - 0 - 350 - 300 - 0 - - + + Comment + Rectangle for Open Object window + Persist + 1 + Type + Rect + Value + + 0 + 350 + 300 + 0 + + FloaterPayRectB - - Comment - Rectangle for pay window - Persist - 1 - Type - Rect - Value - - 0 - 150 - 400 - 0 - - + + Comment + Rectangle for pay window + Persist + 1 + Type + Rect + Value + + 0 + 150 + 400 + 0 + + FloaterRegionInfo - - Comment - Rectangle for region info window - Persist - 1 - Type - Rect - Value - - 0 - 512 - 480 - 0 - - + + Comment + Rectangle for region info window + Persist + 1 + Type + Rect + Value + + 0 + 512 + 480 + 0 + + FloaterScriptDebugRect - - Comment - Rectangle for Script Error/Debug window - Persist - 1 - Type - Rect - Value - - 0 - 130 - 450 - 0 - - + + Comment + Rectangle for Script Error/Debug window + Persist + 1 + Type + Rect + Value + + 0 + 130 + 450 + 0 + + FloaterSnapshotRect - - Comment - Rectangle for snapshot window - Persist - 1 - Type - Rect - Value - - 0 - 200 - 200 - 400 - - + + Comment + Rectangle for snapshot window + Persist + 1 + Type + Rect + Value + + 0 + 200 + 200 + 400 + + FloaterViewBottom - - Comment - [DO NOT MODIFY] Controls layout of floating windows within SL window - Persist - 1 - Type - S32 - Value - -1 - + + Comment + [DO NOT MODIFY] Controls layout of floating windows within SL window + Persist + 1 + Type + S32 + Value + -1 + FloaterWorldMapRect2 - - Comment - Rectangle for world map window - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - + + Comment + Rectangle for world map window + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + FlyBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + FlycamAbsolute - - Comment - Treat Flycam values as absolute positions (not deltas). - Persist - 1 - Type - Boolean - Value - 0 - - AutoLeveling - - Comment - Keep Flycam level. - Persist - 1 - Type - Boolean - Value - 1 - - Cursor3D - - Comment - Tread Joystick values as absolute positions (not deltas). - Persist - 1 - Type - Boolean - Value - 1 - - ZoomDirect - - Comment - Map Joystick zoom axis directly to camera zoom. - Persist - 1 - Type - Boolean - Value - 0 - - JoystickInitialized - - Comment - Whether or not a joystick has been detected and initiailized. - Persist - 0 - Type - String - Value - - - JoystickEnabled - - Comment - Enables Joystick Input. - Persist - 1 - Type - Boolean - Value - 0 - - JoystickFlycamEnabled - - Comment - Enables the Joystick to control the flycam. - Persist - 1 - Type - Boolean - Value - 1 - - JoystickAvatarEnabled - - Comment - Enables the Joystick to control Avatar movmement. - Persist - 1 - Type - Boolean - Value - 1 - - JoystickBuildEnabled - - Comment - Enables the Joystick to move edited objects. - Persist - 1 - Type - Boolean - Value - 1 - - JoystickAxis0 - - Comment - Flycam hardware axis mapping for internal axis 0 ([0, 5]). - Persist - 1 - Type - S32 - Value - 1 - - JoystickAxis1 - - Comment - Flycam hardware axis mapping for internal axis 1 ([0, 5]). - Persist - 1 - Type - S32 - Value - 0 - - JoystickAxis2 - - Comment - Flycam hardware axis mapping for internal axis 2 ([0, 5]). - Persist - 1 - Type - S32 - Value - 2 - - JoystickAxis3 - - Comment - Flycam hardware axis mapping for internal axis 3 ([0, 5]). - Persist - 1 - Type - S32 - Value - 4 - - JoystickAxis4 - - Comment - Flycam hardware axis mapping for internal axis 4 ([0, 5]). - Persist - 1 - Type - S32 - Value - 3 - - JoystickAxis5 - - Comment - Flycam hardware axis mapping for internal axis 5 ([0, 5]). - Persist - 1 - Type - S32 - Value - 5 - - JoystickAxis6 - - Comment - Flycam hardware axis mapping for internal axis 6 ([0, 5]). - Persist - 1 - Type - S32 - Value - -1 - + + Comment + Treat Flycam values as absolute positions (not deltas). + Persist + 1 + Type + Boolean + Value + 0 + FlycamAxisDeadZone0 - - Comment - Flycam axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisDeadZone1 - - Comment - Flycam axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisDeadZone2 - - Comment - Flycam axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisDeadZone3 - - Comment - Flycam axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisDeadZone4 - - Comment - Flycam axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisDeadZone5 - - Comment - Flycam axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisDeadZone6 - - Comment - Flycam axis 6 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Flycam axis 6 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + FlycamAxisScale0 - - Comment - Flycam axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamAxisScale1 - - Comment - Flycam axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamAxisScale2 - - Comment - Flycam axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamAxisScale3 - - Comment - Flycam axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamAxisScale4 - - Comment - Flycam axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamAxisScale5 - - Comment - Flycam axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamAxisScale6 - - Comment - Flycam axis 6 scaler. - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Flycam axis 6 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + FlycamFeathering - - Comment - Flycam feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16 - + + Comment + Flycam feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + FlycamZoomDirect - - Comment - Map flycam zoom axis directly to camera zoom. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Map flycam zoom axis directly to camera zoom. + Persist + 1 + Type + Boolean + Value + 0 + FlyingAtExit - - Comment - Was flying when last logged out, so fly when logging in - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Was flying when last logged out, so fly when logging in + Persist + 1 + Type + Boolean + Value + 0 + FocusOffsetDefault - - Comment - Default focus point offset relative to avatar (x-axis is forward) - Persist - 1 - Type - Vector3 - Value - - 1 - 0 - 1 - - + + Comment + Default focus point offset relative to avatar (x-axis is forward) + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.0 + 1.0 + + FocusPosOnLogout - - Comment - Camera focus point when last logged out (global coordinates) - Persist - 1 - Type - Vector3D - Value - - 0 - 0 - 0 - - + + Comment + Camera focus point when last logged out (global coordinates) + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + FolderAutoOpenDelay - - Comment - Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop - Persist - 1 - Type - F32 - Value - 0.75 - + + Comment + Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop + Persist + 1 + Type + F32 + Value + 0.75 + FolderLoadingMessageWaitTime - - Comment - Seconds to wait before showing the LOADING... text in folder views - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Seconds to wait before showing the LOADING... text in folder views + Persist + 1 + Type + F32 + Value + 0.5 + FontMonospace - - Comment - Name of monospace font (Truetype file name) - Persist - 1 - Type - String - Value - profontwindows.ttf - + + Comment + Name of monospace font (Truetype file name) + Persist + 1 + Type + String + Value + profontwindows.ttf + FontSansSerif - - Comment - Name of san-serif font (Truetype file name) - Persist - 1 - Type - String - Value - MtBkLfRg.ttf - + + Comment + Name of san-serif font (Truetype file name) + Persist + 1 + Type + String + Value + MtBkLfRg.ttf + FontSansSerifBold - - Comment - Name of bold font (Truetype file name) - Persist - 1 - Type - String - Value - MtBdLfRg.ttf - + + Comment + Name of bold font (Truetype file name) + Persist + 1 + Type + String + Value + MtBdLfRg.ttf + FontSansSerifFallback - - Comment - Name of san-serif font (Truetype file name) - Persist - 1 - Type - String - Value - - + + Comment + Name of san-serif font (Truetype file name) + Persist + 1 + Type + String + Value + + FontSansSerifFallbackScale - - Comment - Scale of fallback font relative to huge font (fraction of huge font size) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Scale of fallback font relative to huge font (fraction of huge font size) + Persist + 1 + Type + F32 + Value + 1.0 + FontScreenDPI - - Comment - Font resolution, higher is bigger (pixels per inch) - Persist - 1 - Type - F32 - Value - 96 - + + Comment + Font resolution, higher is bigger (pixels per inch) + Persist + 1 + Type + F32 + Value + 96.0 + FontSizeHuge - - Comment - Size of huge font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 16 - + + Comment + Size of huge font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 16.0 + FontSizeLarge - - Comment - Size of large font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 12 - + + Comment + Size of large font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 12.0 + FontSizeMedium - - Comment - Size of medium font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 10 - + + Comment + Size of medium font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 10.0 + FontSizeMonospace - - Comment - Size of monospaced font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 9 - + + Comment + Size of monospaced font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 9.0 + FontSizeSmall - - Comment - Size of small font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 9 - + + Comment + Size of small font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 9.0 + ForceShowGrid - - Comment - Always show grid dropdown on login screen - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Always show grid dropdown on login screen + Persist + 1 + Type + Boolean + Value + 0 + ForwardBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 45 - 54 - 66 - 29 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 45 + 54 + 66 + 29 + + FreezeTime - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + FullScreen - - Comment - Run SL in fullscreen mode - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Run SL in fullscreen mode + Persist + 1 + Type + Boolean + Value + 0 + FullScreenAspectRatio - - Comment - Aspect ratio of fullscreen display (width / height) - Persist - 1 - Type - F32 - Value - 1.33329999446868896484375 - + + Comment + Aspect ratio of fullscreen display (width / height) + Persist + 1 + Type + F32 + Value + 1.33329999447 + FullScreenAutoDetectAspectRatio - - Comment - Automatically detect proper aspect ratio for fullscreen display - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Automatically detect proper aspect ratio for fullscreen display + Persist + 1 + Type + Boolean + Value + 1 + FullScreenHeight - - Comment - Fullscreen resolution in height - Persist - 1 - Type - S32 - Value - 768 - + + Comment + Fullscreen resolution in height + Persist + 1 + Type + S32 + Value + 768 + FullScreenWidth - - Comment - Fullscreen resolution in width - Persist - 1 - Type - S32 - Value - 1024 - - GridChoice - - Comment - The user's grid choice or ip address. - Persist - 1 - Type - String - Value - - + + Comment + Fullscreen resolution in width + Persist + 1 + Type + S32 + Value + 1024 + GridCrossSections - - Comment - Highlight cross sections of prims with grid manipulation plane. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Highlight cross sections of prims with grid manipulation plane. + Persist + 1 + Type + Boolean + Value + 0 + GridDrawSize - - Comment - Visible extent of 2D snap grid (meters) - Persist - 1 - Type - F32 - Value - 12 - + + Comment + Visible extent of 2D snap grid (meters) + Persist + 1 + Type + F32 + Value + 12.0 + GridMode - - Comment - Snap grid reference frame (0 = world, 1 = local, 2 = reference object) - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Snap grid reference frame (0 = world, 1 = local, 2 = reference object) + Persist + 1 + Type + S32 + Value + 0 + GridOpacity - - Comment - Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.699999988079071044921875 - + + Comment + Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.699999988079 + GridResolution - - Comment - Size of single grid step (meters) - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Size of single grid step (meters) + Persist + 1 + Type + F32 + Value + 0.5 + GridSubUnit - - Comment - Display fractional grid steps, relative to grid size - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display fractional grid steps, relative to grid size + Persist + 1 + Type + Boolean + Value + 0 + GridSubdivision - - Comment - Maximum number of times to divide single snap grid unit when GridSubUnit is true - Persist - 1 - Type - S32 - Value - 32 - + + Comment + Maximum number of times to divide single snap grid unit when GridSubUnit is true + Persist + 1 + Type + S32 + Value + 32 + GroupNotifyBoxHeight - - Comment - Height of group notice messages - Persist - 1 - Type - S32 - Value - 260 - + + Comment + Height of group notice messages + Persist + 1 + Type + S32 + Value + 260 + GroupNotifyBoxWidth - - Comment - Width of group notice messages - Persist - 1 - Type - S32 - Value - 400 - + + Comment + Width of group notice messages + Persist + 1 + Type + S32 + Value + 400 + HTMLLinkColor - - Comment - Color of hyperlinks - Persist - 1 - Type - Color4 - Value - - 0.60000002384185791015625 - 0.60000002384185791015625 - 1 - 1 - - + + Comment + Color of hyperlinks + Persist + 1 + Type + Color4 + Value + + 0.600000023842 + 0.600000023842 + 1.0 + 1.0 + + HelpHomeURL - - Comment - URL of initial help page - Persist - 1 - Type - String - Value - help/index.html - + + Comment + URL of initial help page + Persist + 1 + Type + String + Value + help/index.html + HelpLastVisitedURL - - Comment - URL of last help page, will be shown next time help is accessed - Persist - 1 - Type - String - Value - help/index.html - - HelperURI - - Comment - helper web CGI prefix to use - Persist - 1 - Type - String - Value - - + + Comment + URL of last help page, will be shown next time help is accessed + Persist + 1 + Type + String + Value + help/index.html + HighResSnapshot - - Comment - Double resolution of snapshot from current window resolution - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Double resolution of snapshot from current window resolution + Persist + 1 + Type + Boolean + Value + 0 + HtmlFindRect - - Comment - Rectangle for HTML find window - Persist - 1 - Type - Rect - Value - - 16 - 650 - 600 - 128 - - + + Comment + Rectangle for HTML find window + Persist + 1 + Type + Rect + Value + + 16 + 650 + 600 + 128 + + HtmlHelpLastPage - - Comment - Last URL visited via help system - Persist - 1 - Type - String - Value - - + + Comment + Last URL visited via help system + Persist + 1 + Type + String + Value + + HtmlHelpRect - - Comment - Rectangle for HTML help window - Persist - 1 - Type - Rect - Value - - 16 - 650 - 600 - 128 - - + + Comment + Rectangle for HTML help window + Persist + 1 + Type + Rect + Value + + 16 + 650 + 600 + 128 + + HtmlReleaseMessage - - Comment - Rectangle for HTML Release Message Floater window - Persist - 1 - Type - Rect - Value - - 46 - 520 - 400 - 128 - - + + Comment + Rectangle for HTML Release Message Floater window + Persist + 1 + Type + Rect + Value + + 46 + 520 + 400 + 128 + + + IMChatColor + + Comment + Color of instant messages from other residents + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + IMInChatHistory - - Comment - Copy IM into chat history - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Copy IM into chat history + Persist + 1 + Type + Boolean + Value + 0 + IMShowTimestamps - - Comment - Show timestamps in IM - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show timestamps in IM + Persist + 1 + Type + Boolean + Value + 1 + IgnorePixelDepth - - Comment - Ignore pixel depth settings. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Ignore pixel depth settings. + Persist + 1 + Type + Boolean + Value + 0 + ImagePipelineUseHTTP - - Comment - If TRUE use HTTP GET to fetch textures from the server - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + If TRUE use HTTP GET to fetch textures from the server + Persist + 1 + Type + Boolean + Value + 0 + InBandwidth - - Comment - Incoming bandwidth throttle (bps) - Persist - 1 - Type - F32 - Value - 0 - + + Comment + Incoming bandwidth throttle (bps) + Persist + 1 + Type + F32 + Value + 0.0 + InventoryAutoOpenDelay - - Comment - Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop + Persist + 1 + Type + F32 + Value + 1.0 + InventorySortOrder - - Comment - Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 7 - + + Comment + Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 7 + InvertMouse - - Comment - When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up) + Persist + 1 + Type + Boolean + Value + 0 + + JoystickAvatarEnabled + + Comment + Enables the Joystick to control Avatar movmement. + Persist + 1 + Type + Boolean + Value + 1 + + JoystickAxis0 + + Comment + Flycam hardware axis mapping for internal axis 0 ([0, 5]). + Persist + 1 + Type + S32 + Value + 1 + + JoystickAxis1 + + Comment + Flycam hardware axis mapping for internal axis 1 ([0, 5]). + Persist + 1 + Type + S32 + Value + 0 + + JoystickAxis2 + + Comment + Flycam hardware axis mapping for internal axis 2 ([0, 5]). + Persist + 1 + Type + S32 + Value + 2 + + JoystickAxis3 + + Comment + Flycam hardware axis mapping for internal axis 3 ([0, 5]). + Persist + 1 + Type + S32 + Value + 4 + + JoystickAxis4 + + Comment + Flycam hardware axis mapping for internal axis 4 ([0, 5]). + Persist + 1 + Type + S32 + Value + 3 + + JoystickAxis5 + + Comment + Flycam hardware axis mapping for internal axis 5 ([0, 5]). + Persist + 1 + Type + S32 + Value + 5 + + JoystickAxis6 + + Comment + Flycam hardware axis mapping for internal axis 6 ([0, 5]). + Persist + 1 + Type + S32 + Value + -1 + + JoystickBuildEnabled + + Comment + Enables the Joystick to move edited objects. + Persist + 1 + Type + Boolean + Value + 1 + + JoystickEnabled + + Comment + Enables Joystick Input. + Persist + 1 + Type + Boolean + Value + 0 + + JoystickFlycamEnabled + + Comment + Enables the Joystick to control the flycam. + Persist + 1 + Type + Boolean + Value + 1 + + JoystickInitialized + + Comment + Whether or not a joystick has been detected and initiailized. + Persist + 1 + Type + String + Value + + KeepAspectForSnapshot - - Comment - Use full window when taking snapshot, regardless of requested image size - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Use full window when taking snapshot, regardless of requested image size + Persist + 1 + Type + Boolean + Value + 1 + LCDDestination - - Comment - Which LCD to use - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Which LCD to use + Persist + 1 + Type + S32 + Value + 0 + LSLHelpRect - - Comment - Rectangle for LSL help window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - + + Comment + Rectangle for LSL help window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + LSLHelpURL - - Comment - URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword - Persist - 1 - Type - String - Value - https://wiki.secondlife.com/wiki/[LSL_STRING] - + + Comment + URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword + Persist + 1 + Type + String + Value + https://wiki.secondlife.com/wiki/[LSL_STRING] + LagMeterShrunk - - Comment - Last large/small state for lag meter - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Last large/small state for lag meter + Persist + 1 + Type + Boolean + Value + 0 + Language - - Comment - Language specifier (for XUI) - Persist - 1 - Type - String - Value - default - + + Comment + Language specifier (for XUI) + Persist + 1 + Type + String + Value + default + LastFeatureVersion - - Comment - [DO NOT MODIFY] Version number for tracking hardware changes - Persist - 1 - Type - S32 - Value - 0 - + + Comment + [DO NOT MODIFY] Version number for tracking hardware changes + Persist + 1 + Type + S32 + Value + 0 + LastFindPanel - - Comment - Controls which find operation appears by default when clicking "Find" button - Persist - 1 - Type - String - Value - find_all_panel - + + Comment + Controls which find operation appears by default when clicking "Find" button + Persist + 1 + Type + String + Value + find_all_panel + LastName - - Comment - Login last name - Persist - 1 - Type - String - Value - - + + Comment + Login last name + Persist + 1 + Type + String + Value + + LastPrefTab - - Comment - Last selected tab in preferences window - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Last selected tab in preferences window + Persist + 1 + Type + S32 + Value + 0 + LastRunVersion - - Comment - Version number of last instance of the viewer that you ran - Persist - 1 - Type - String - Value - 0.0.0 - + + Comment + Version number of last instance of the viewer that you ran + Persist + 1 + Type + String + Value + 0.0.0 + LastSnapshotHeight - - Comment - The height of the last snapshot, in px - Persist - 1 - Type - S32 - Value - 768 - + + Comment + The height of the last snapshot, in px + Persist + 1 + Type + S32 + Value + 768 + LastSnapshotType - - Comment - Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image) - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image) + Persist + 1 + Type + S32 + Value + 0 + LastSnapshotWidth - - Comment - The width of the last snapshot, in px - Persist - 1 - Type - S32 - Value - 1024 - + + Comment + The width of the last snapshot, in px + Persist + 1 + Type + S32 + Value + 1024 + LeftClickShowMenu - - Comment - Left click opens pie menu (FALSE = left click touches or grabs object) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Left click opens pie menu (FALSE = left click touches or grabs object) + Persist + 1 + Type + Boolean + Value + 0 + LimitDragDistance - - Comment - Limit translation of object via translate tool - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Limit translation of object via translate tool + Persist + 1 + Type + Boolean + Value + 1 + LimitSelectDistance - - Comment - Disallow selection of objects beyond max select distance - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Disallow selection of objects beyond max select distance + Persist + 1 + Type + Boolean + Value + 1 + + LipSyncAah + + Comment + Aah (jaw opening) babble loop + Persist + 1 + Type + String + Value + 257998776531013446642343 + + LipSyncAahPowerTransfer + + Comment + Transfer curve for Voice Interface power to aah lip sync amplitude + Persist + 1 + Type + String + Value + 0000123456789 + + LipSyncEnabled + + Comment + 0 disable lip-sync, 1 enable babble loop + Persist + 1 + Type + Boolean + Value + 0 + + LipSyncOoh + + Comment + Ooh (mouth width) babble loop + Persist + 1 + Type + String + Value + 1247898743223344444443200000 + + LipSyncOohAahRate + + Comment + Rate to babble Ooh and Aah (/sec) + Persist + 1 + Type + F32 + Value + 24.0 + + LipSyncOohPowerTransfer + + Comment + Transfer curve for Voice Interface power to ooh lip sync amplitude + Persist + 1 + Type + String + Value + 0012345566778899 + LocalCacheVersion - - Comment - Version number of cache - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Version number of cache + Persist + 1 + Type + S32 + Value + 0 + LogMessages - - Comment - Log network traffic - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Log network traffic + Persist + 1 + Type + Boolean + Value + 0 + LoginAsGod - - Comment - Attempt to login with god powers (Linden accounts only) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Attempt to login with god powers (Linden accounts only) + Persist + 1 + Type + Boolean + Value + 0 + LoginLastLocation - - Comment - Login at same location you last logged out - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Login at same location you last logged out + Persist + 1 + Type + Boolean + Value + 1 + LoginPage - - Comment - Login authentication page. - Persist - 1 - Type - String - Value - - - LoginURI - - Comment - login server and CGI prefix to use - Persist - 1 - Type - String - Value - - + + Comment + Login authentication page. + Persist + 1 + Type + String + Value + + LosslessJ2CUpload - - Comment - Use lossless compression for small image uploads - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Use lossless compression for small image uploads + Persist + 1 + Type + Boolean + Value + 0 + + MainloopTimeoutDefault + + Comment + Timeout duration for mainloop lock detection, in seconds. + Persist + 1 + Type + F32 + Value + 10.0 + MapOverlayIndex - - Comment - Currently selected world map type - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Currently selected world map type + Persist + 1 + Type + S32 + Value + 0 + MapScale - - Comment - World map zoom level (pixels per region) - Persist - 1 - Type - F32 - Value - 128 - + + Comment + World map zoom level (pixels per region) + Persist + 1 + Type + F32 + Value + 128.0 + MapShowClassifieds - - Comment - Show locations associated with classified ads on world map - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show locations associated with classified ads on world map + Persist + 1 + Type + Boolean + Value + 1 + MapShowEvents - - Comment - Show events on world map - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show events on world map + Persist + 1 + Type + Boolean + Value + 1 + MapShowInfohubs - - Comment - Show infohubs on the world map - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show infohubs on the world map + Persist + 1 + Type + Boolean + Value + 1 + MapShowLandForSale - - Comment - Show land for sale on world map - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show land for sale on world map + Persist + 1 + Type + Boolean + Value + 0 + MapShowPeople - - Comment - Show other users on world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowPopular - - Comment - Show popular places on world map - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show other users on world map + Persist + 1 + Type + Boolean + Value + 1 + MapShowTelehubs - - Comment - Show telehubs on world map - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show telehubs on world map + Persist + 1 + Type + Boolean + Value + 1 + Marker - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - - + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + + MaxDragDistance - - Comment - Maximum allowed translation distance in a single operation of translate tool (meters from start point) - Persist - 1 - Type - F32 - Value - 48 - + + Comment + Maximum allowed translation distance in a single operation of translate tool (meters from start point) + Persist + 1 + Type + F32 + Value + 48.0 + MaxSelectDistance - - Comment - Maximum allowed selection distance (meters from avatar) - Persist - 1 - Type - F32 - Value - 64 - + + Comment + Maximum allowed selection distance (meters from avatar) + Persist + 1 + Type + F32 + Value + 64.0 + MeanCollisionBump - - Comment - You have experienced an abuse of being bumped by an object or avatar - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + You have experienced an abuse of being bumped by an object or avatar + Persist + 1 + Type + Boolean + Value + 0 + MeanCollisionPhysical - - Comment - You have experienced an abuse from a physical object - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + You have experienced an abuse from a physical object + Persist + 1 + Type + Boolean + Value + 0 + MeanCollisionPushObject - - Comment - You have experienced an abuse of being pushed by a scripted object - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + You have experienced an abuse of being pushed by a scripted object + Persist + 1 + Type + Boolean + Value + 0 + MeanCollisionScripted - - Comment - You have experienced an abuse from a scripted object - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + You have experienced an abuse from a scripted object + Persist + 1 + Type + Boolean + Value + 0 + MeanCollisionSelected - - Comment - You have experienced an abuse of being pushed via a selected object - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + You have experienced an abuse of being pushed via a selected object + Persist + 1 + Type + Boolean + Value + 0 + MenuAccessKeyTime - - Comment - Time (seconds) in which the menu key must be tapped to move focus to the menu bar - Persist - 1 - Type - F32 - Value - 0.25 - + + Comment + Time (seconds) in which the menu key must be tapped to move focus to the menu bar + Persist + 1 + Type + F32 + Value + 0.25 + MenuBarHeight - - Comment - - Persist - 0 - Type - S32 - Value - 18 - + + Comment + + Persist + 0 + Type + S32 + Value + 18 + MenuBarWidth - - Comment - - Persist - 0 - Type - S32 - Value - 410 - + + Comment + + Persist + 0 + Type + S32 + Value + 410 + MiniMapRotate - - Comment - Rotate miniature world map to avatar direction - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Rotate miniature world map to avatar direction + Persist + 1 + Type + Boolean + Value + 1 + MiniMapScale - - Comment - Miniature world map zoom levle (pixels per region) - Persist - 1 - Type - F32 - Value - 128 - + + Comment + Miniature world map zoom levle (pixels per region) + Persist + 1 + Type + F32 + Value + 128.0 + MouseSensitivity - - Comment - Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity) - Persist - 1 - Type - F32 - Value - 3 - + + Comment + Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity) + Persist + 1 + Type + F32 + Value + 3.0 + MouseSmooth - - Comment - Smooths out motion of mouse when in mouselook mode. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Smooths out motion of mouse when in mouselook mode. + Persist + 1 + Type + Boolean + Value + 0 + MouseSun - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + MouselookBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + MoveDownBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 91 - 29 - 116 - 4 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 91 + 29 + 116 + 4 + + MoveUpBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 91 - 54 - 116 - 29 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 91 + 54 + 116 + 29 + + MuteAmbient - - Comment - Ambient sound effects, such as wind noise, play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Ambient sound effects, such as wind noise, play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + MuteAudio - - Comment - All audio plays at 0 volume (streaming audio still takes up bandwidth, for example) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + All audio plays at 0 volume (streaming audio still takes up bandwidth, for example) + Persist + 1 + Type + Boolean + Value + 0 + MuteMedia - - Comment - Media plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Media plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + MuteMusic - - Comment - Music plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Music plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + MuteSounds - - Comment - Sound effects play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Sound effects play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + MuteUI - - Comment - UI sound effects play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + UI sound effects play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + MuteVoice - - Comment - Voice plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Voice plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + MuteWhenMinimized - - Comment - Mute audio when SL window is minimized - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Mute audio when SL window is minimized + Persist + 1 + Type + Boolean + Value + 1 + NewCacheLocation - - Comment - Change the location of the local disk cache to this - Persist - 1 - Type - String - Value - - + + Comment + Change the location of the local disk cache to this + Persist + 1 + Type + String + Value + + NextLoginLocation - - Comment - Location to log into by default. - Persist - 1 - Type - String - Value - - + + Comment + Location to log into by default. + Persist + 1 + Type + String + Value + + NoAudio - - Comment - Disable audio playback. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Disable audio playback. + Persist + 1 + Type + Boolean + Value + 0 + NoHardwareProbe - - Comment - Disable hardware probe. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Disable hardware probe. + Persist + 1 + Type + Boolean + Value + 0 + NoInventoryLibrary - - Comment - Do not request inventory library. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Do not request inventory library. + Persist + 1 + Type + Boolean + Value + 0 + NoPreload - - Comment - Disable sound and image preload. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Disable sound and image preload. + Persist + 1 + Type + Boolean + Value + 0 + NoQuickTime - - Comment - Disable quicktime playback. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Disable quicktime playback. + Persist + 1 + Type + Boolean + Value + 0 + NoVerifySSLCert - - Comment - Do not verify SSL peers. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Do not verify SSL peers. + Persist + 1 + Type + Boolean + Value + 0 + NotecardEditorRect - - Comment - Rectangle for notecard editor - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - + + Comment + Rectangle for notecard editor + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + NotifyBoxHeight - - Comment - Height of notification messages - Persist - 1 - Type - S32 - Value - 200 - + + Comment + Height of notification messages + Persist + 1 + Type + S32 + Value + 200 + NotifyBoxWidth - - Comment - Width of notification messages - Persist - 1 - Type - S32 - Value - 350 - + + Comment + Width of notification messages + Persist + 1 + Type + S32 + Value + 350 + NotifyMoneyChange - - Comment - Pop up notifications for all L$ transactions - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Pop up notifications for all L$ transactions + Persist + 1 + Type + Boolean + Value + 1 + NotifyTipDuration - - Comment - Length of time that notification tips stay on screen (seconds) - Persist - 1 - Type - F32 - Value - 4 - + + Comment + Length of time that notification tips stay on screen (seconds) + Persist + 1 + Type + F32 + Value + 4.0 + NumSessions - - Comment - Number of successful logins to Second Life - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Number of successful logins to Second Life + Persist + 1 + Type + S32 + Value + 0 + NumpadControl - - Comment - How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock) - Persist - 1 - Type - S32 - Value - 0 - + + Comment + How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock) + Persist + 1 + Type + S32 + Value + 0 + ObjectChatColor - - Comment - Color of chat messages from objects - Persist - 1 - Type - Color4 - Value - - 0.699999988079071044921875 - 0.89999997615814208984375 - 0.699999988079071044921875 - 1 - - + + Comment + Color of chat messages from objects + Persist + 1 + Type + Color4 + Value + + 0.699999988079 + 0.899999976158 + 0.699999988079 + 1.0 + + OpenDebugStatAdvanced - - Comment - Expand advanced performance stats display - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Expand advanced performance stats display + Persist + 1 + Type + Boolean + Value + 0 + OpenDebugStatBasic - - Comment - Expand basic performance stats display - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Expand basic performance stats display + Persist + 1 + Type + Boolean + Value + 1 + OpenDebugStatNet - - Comment - Expand network stats display - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Expand network stats display + Persist + 1 + Type + Boolean + Value + 1 + OpenDebugStatRender - - Comment - Expand render stats display - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Expand render stats display + Persist + 1 + Type + Boolean + Value + 1 + OpenDebugStatSim - - Comment - Expand simulator performance stats display - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Expand simulator performance stats display + Persist + 1 + Type + Boolean + Value + 1 + OutBandwidth - - Comment - Outgoing bandwidth throttle (bps) - Persist - 1 - Type - F32 - Value - 0 - + + Comment + Outgoing bandwidth throttle (bps) + Persist + 1 + Type + F32 + Value + 0.0 + OverdrivenColor - - Comment - Color of various indicators when resident is speaking too loud. - Persist - 1 - Type - Color4 - Value - - 1 - 0 - 0 - 1 - - + + Comment + Color of various indicators when resident is speaking too loud. + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.0 + 1.0 + + OverlayTitle - - Comment - Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces) - Persist - 1 - Type - String - Value - Set_via_OverlayTitle_in_settings.xml - + + Comment + Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces) + Persist + 1 + Type + String + Value + Set_via_OverlayTitle_in_settings.xml + PTTCurrentlyEnabled - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + PacketDropPercentage - - Comment - Percentage of packets dropped by the client. - Persist - 1 - Type - F32 - Value - 0 - + + Comment + Percentage of packets dropped by the client. + Persist + 1 + Type + F32 + Value + 0.0 + + ParcelMediaAutoPlayEnable + + Comment + Auto play parcel media when available + Persist + 1 + Type + Boolean + Value + 0 + PerAccountSettingsFile - - Comment - Persisted client settings file name (per user). - Persist - 0 - Type - String - Value - - + + Comment + Persisted client settings file name (per user). + Persist + 0 + Type + String + Value + + PermissionsCautionEnabled - - Comment - When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission - Persist - 0 - Type - Boolean - Value - 1 - + + Comment + When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission + Persist + 0 + Type + Boolean + Value + 1 + PermissionsCautionNotifyBoxHeight - - Comment - Height of caution-style notification messages - Persist - 0 - Type - S32 - Value - 344 - + + Comment + Height of caution-style notification messages + Persist + 0 + Type + S32 + Value + 344 + PermissionsManagerRect - - Comment - Rectangle for permissions manager window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - + + Comment + Rectangle for permissions manager window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + PickerContextOpacity - - Comment - Controls overall opacity of context frustrum connecting color and texture pickers with their swatches - Persist - 1 - Type - F32 - Value - 0.3499999940395355224609375 - + + Comment + Controls overall opacity of context frustrum connecting color and texture pickers with their swatches + Persist + 1 + Type + F32 + Value + 0.34999999404 + PieMenuLineWidth - - Comment - Width of lines in pie menu display (pixels) - Persist - 1 - Type - F32 - Value - 2.5 - + + Comment + Width of lines in pie menu display (pixels) + Persist + 1 + Type + F32 + Value + 2.5 + PinTalkViewOpen - - Comment - Stay in IM after hitting return - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Stay in IM after hitting return + Persist + 1 + Type + Boolean + Value + 1 + PingInterpolate - - Comment - Extrapolate object position along velocity vector based on ping delay - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Extrapolate object position along velocity vector based on ping delay + Persist + 1 + Type + Boolean + Value + 0 + PitchFromMousePosition - - Comment - Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom) - Persist - 1 - Type - F32 - Value - 90 - + + Comment + Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom) + Persist + 1 + Type + F32 + Value + 90.0 + PlayTypingAnim - - Comment - Your avatar plays the typing animation whenever you type in the chat bar - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Your avatar plays the typing animation whenever you type in the chat bar + Persist + 1 + Type + Boolean + Value + 1 + PrecachingDelay - - Comment - Delay when logging in to load world before showing it (seconds) - Persist - 1 - Type - F32 - Value - 6 - + + Comment + Delay when logging in to load world before showing it (seconds) + Persist + 1 + Type + F32 + Value + 6.0 + PreviewAnimRect - - Comment - Rectangle for animation preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - + + Comment + Rectangle for animation preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + PreviewClassifiedRect - - Comment - Rectangle for URL preview window - Persist - 1 - Type - Rect - Value - - 0 - 530 - 420 - 0 - - + + Comment + Rectangle for URL preview window + Persist + 1 + Type + Rect + Value + + 0 + 530 + 420 + 0 + + PreviewEventRect - - Comment - Rectangle for Event preview window - Persist - 1 - Type - Rect - Value - - 0 - 530 - 420 - 0 - - + + Comment + Rectangle for Event preview window + Persist + 1 + Type + Rect + Value + + 0 + 530 + 420 + 0 + + PreviewLandmarkRect - - Comment - Rectangle for landmark preview window - Persist - 1 - Type - Rect - Value - - 0 - 90 - 300 - 0 - - + + Comment + Rectangle for landmark preview window + Persist + 1 + Type + Rect + Value + + 0 + 90 + 300 + 0 + + PreviewObjectRect - - Comment - Rectangle for object preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - + + Comment + Rectangle for object preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + PreviewScriptRect - - Comment - Rectangle for script preview window - Persist - 1 - Type - Rect - Value - - 0 - 550 - 500 - 0 - - + + Comment + Rectangle for script preview window + Persist + 1 + Type + Rect + Value + + 0 + 550 + 500 + 0 + + PreviewSoundRect - - Comment - Rectangle for sound preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - + + Comment + Rectangle for sound preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + PreviewTextureRect - - Comment - Rectangle for texture preview window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - + + Comment + Rectangle for texture preview window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + PreviewURLRect - - Comment - Rectangle for URL preview window - Persist - 1 - Type - Rect - Value - - 0 - 90 - 300 - 0 - - + + Comment + Rectangle for URL preview window + Persist + 1 + Type + Rect + Value + + 0 + 90 + 300 + 0 + + PreviewWearableRect - - Comment - Rectangle for wearable preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - + + Comment + Rectangle for wearable preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + ProbeHardwareOnStartup - - Comment - Query current hardware configuration on application startup - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Query current hardware configuration on application startup + Persist + 1 + Type + Boolean + Value + 1 + PropertiesRect - - Comment - Rectangle for inventory item properties window - Persist - 1 - Type - Rect - Value - - 0 - 320 - 350 - 0 - - + + Comment + Rectangle for inventory item properties window + Persist + 1 + Type + Rect + Value + + 0 + 320 + 350 + 0 + + PurgeCacheOnNextStartup - - Comment - Clear local file cache next time viewer is run - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Clear local file cache next time viewer is run + Persist + 1 + Type + Boolean + Value + 0 + PurgeCacheOnStartup - - Comment - Clear local file cache every time viewer is run - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Clear local file cache every time viewer is run + Persist + 1 + Type + Boolean + Value + 0 + PushToTalkButton - - Comment - Which button or keyboard key is used for push-to-talk - Persist - 1 - Type - String - Value - MiddleMouse - + + Comment + Which button or keyboard key is used for push-to-talk + Persist + 1 + Type + String + Value + MiddleMouse + PushToTalkToggle - - Comment - Should the push-to-talk button behave as a toggle - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Should the push-to-talk button behave as a toggle + Persist + 1 + Type + Boolean + Value + 0 + QAMode - - Comment - Enable Testing Features. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable Testing Features. + Persist + 1 + Type + Boolean + Value + 0 + QuietSnapshotsToDisk - - Comment - Take snapshots to disk without playing animation or sound - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Take snapshots to disk without playing animation or sound + Persist + 1 + Type + Boolean + Value + 0 + QuitAfterSeconds - - Comment - The duration allowed before quitting. - Persist - 1 - Type - F32 - Value - 0 - + + Comment + The duration allowed before quitting. + Persist + 1 + Type + F32 + Value + 0.0 + RadioLandBrushAction - - Comment - Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert) - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert) + Persist + 1 + Type + S32 + Value + 0 + RadioLandBrushSize - - Comment - Size of land modification brush (0 = small, 1 = medium, 2 = large) - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Size of land modification brush (0 = small, 1 = medium, 2 = large) + Persist + 1 + Type + S32 + Value + 0 + RecentItemsSortOrder - - Comment - Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 1 - + + Comment + Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 1 + RectangleSelectInclusive - - Comment - Select objects that have at least one vertex inside selection rectangle - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Select objects that have at least one vertex inside selection rectangle + Persist + 1 + Type + Boolean + Value + 1 + RegionTextureSize - - Comment - Terrain texture dimensions (power of 2) - Persist - 1 - Type - U32 - Value - 256 - + + Comment + Terrain texture dimensions (power of 2) + Persist + 1 + Type + U32 + Value + 256 + RememberPassword - - Comment - Keep password (in encrypted form) for next login - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Keep password (in encrypted form) for next login + Persist + 1 + Type + Boolean + Value + 1 + RenderAnisotropic - - Comment - Render textures using anisotropic filtering - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Render textures using anisotropic filtering + Persist + 1 + Type + Boolean + Value + 0 + RenderAppleUseMultGL - - Comment - Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL). - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL). + Persist + 1 + Type + Boolean + Value + 0 + RenderAvatarCloth - - Comment - Controls if avatars use wavy cloth - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Controls if avatars use wavy cloth + Persist + 1 + Type + Boolean + Value + 1 + RenderAvatarLODFactor - - Comment - Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 0.5 + RenderAvatarMaxVisible - - Comment - Maximum number of avatars to display at any one time - Persist - 1 - Type - S32 - Value - 35 - + + Comment + Maximum number of avatars to display at any one time + Persist + 1 + Type + S32 + Value + 35 + RenderAvatarVP - - Comment - Use vertex programs to perform hardware skinning of avatar - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Use vertex programs to perform hardware skinning of avatar + Persist + 1 + Type + Boolean + Value + 1 + RenderBumpmapMinDistanceSquared - - Comment - Maximum distance at which to render bumpmapped primitives (distance in meters, squared) - Persist - 1 - Type - F32 - Value - 100 - + + Comment + Maximum distance at which to render bumpmapped primitives (distance in meters, squared) + Persist + 1 + Type + F32 + Value + 100.0 + RenderCubeMap - - Comment - Whether we can render the cube map or not - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whether we can render the cube map or not + Persist + 1 + Type + Boolean + Value + 1 + RenderCustomSettings - - Comment - Do you want to set the graphics settings yourself - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Do you want to set the graphics settings yourself + Persist + 1 + Type + Boolean + Value + 0 + + RenderDebugGL + + Comment + Enable strict GL debugging. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDebugPipeline + + Comment + Enable strict pipeline debugging. + Persist + 1 + Type + Boolean + Value + 0 + RenderDebugTextureBind - - Comment - Enable texture bind performance test. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable texture bind performance test. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDeferred + + Comment + Use deferred rendering pipeline. + Persist + 1 + Type + Boolean + Value + 0 + RenderDynamicLOD - - Comment - Dynamically adjust level of detail. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Dynamically adjust level of detail. + Persist + 1 + Type + Boolean + Value + 1 + RenderDynamicReflections - - Comment - Generate a dynamic cube map for reflections (objects reflect their environment, experimental). - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Generate a dynamic cube map for reflections (objects reflect their environment, experimental). + Persist + 1 + Type + Boolean + Value + 0 + + RenderFSAASamples + + Comment + Number of samples to use for FSAA (0 = no AA). + Persist + 1 + Type + U32 + Value + 0 + RenderFarClip - - Comment - Distance of far clip plane from camera (meters) - Persist - 1 - Type - F32 - Value - 256 - + + Comment + Distance of far clip plane from camera (meters) + Persist + 1 + Type + F32 + Value + 256.0 + + RenderFastAlpha + + Comment + Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces). + Persist + 1 + Type + Boolean + Value + 0 + RenderFastUI - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + RenderFlexTimeFactor - - Comment - Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects) + Persist + 1 + Type + F32 + Value + 1.0 + RenderFogRatio - - Comment - Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance) - Persist - 1 - Type - F32 - Value - 4.0 - + + Comment + Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance) + Persist + 1 + Type + F32 + Value + 4.0 + RenderGamma - - Comment - Sets gamma exponent for renderer - Persist - 1 - Type - F32 - Value - 0 - + + Comment + Sets gamma exponent for renderer + Persist + 1 + Type + F32 + Value + 0.0 + RenderGammaFull - - Comment - Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2. + Persist + 1 + Type + Boolean + Value + 1.0 + RenderGlow - - Comment - Render bloom post effect. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Render bloom post effect. + Persist + 1 + Type + Boolean + Value + 1 + RenderGlowIterations - - Comment - Number of times to iterate the glow (higher = wider and smoother but slower) - Persist - 1 - Type - S32 - Value - 2 - + + Comment + Number of times to iterate the glow (higher = wider and smoother but slower) + Persist + 1 + Type + S32 + Value + 2 + RenderGlowLumWeights - - Comment - Weights for each color channel to be used in calculating luminance (should add up to 1.0) - Persist - 1 - Type - Vector3 - Value - - 0.299 - 0.587 - 0.114 - - + + Comment + Weights for each color channel to be used in calculating luminance (should add up to 1.0) + Persist + 1 + Type + Vector3 + Value + + 0.299 + 0.587 + 0.114 + + RenderGlowMaxExtractAlpha - - Comment - Max glow alpha value for brightness extraction to auto-glow. - Persist - 1 - Type - F32 - Value - 0.065 - + + Comment + Max glow alpha value for brightness extraction to auto-glow. + Persist + 1 + Type + F32 + Value + 0.065 + RenderGlowMinLuminance - - Comment - Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range) - Persist - 1 - Type - F32 - Value - 1.0 - + + Comment + Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range) + Persist + 1 + Type + F32 + Value + 1.0 + RenderGlowResolutionPow - - Comment - Glow map resolution power of two. - Persist - 1 - Type - S32 - Value - 9 - + + Comment + Glow map resolution power of two. + Persist + 1 + Type + S32 + Value + 9 + RenderGlowStrength - - Comment - Additive strength of glow. - Persist - 1 - Type - F32 - Value - 0.35 - + + Comment + Additive strength of glow. + Persist + 1 + Type + F32 + Value + 0.35 + RenderGlowWarmthAmount - - Comment - Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth - Persist - 1 - Type - F32 - Value - 0 - + + Comment + Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth + Persist + 1 + Type + F32 + Value + 0.0 + RenderGlowWarmthWeights - - Comment - Weight of each color channel used before finding the max warmth - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.5 - 0.7 - - + + Comment + Weight of each color channel used before finding the max warmth + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.5 + 0.7 + + RenderGlowWidth - - Comment - Glow sample size (higher = wider and softer but eventually more pixelated) - Persist - 1 - Type - F32 - Value - 1.3 - + + Comment + Glow sample size (higher = wider and softer but eventually more pixelated) + Persist + 1 + Type + F32 + Value + 1.3 + RenderHUDInSnapshot - - Comment - Display HUD attachments in snapshot - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display HUD attachments in snapshot + Persist + 1 + Type + Boolean + Value + 0 + RenderHiddenSelections - - Comment - Show selection lines on objects that are behind other objects - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show selection lines on objects that are behind other objects + Persist + 1 + Type + Boolean + Value + 1 + RenderHideGroupTitle - - Comment - Don't show my group title in my name label - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Don't show my group title in my name label + Persist + 1 + Type + Boolean + Value + 0 + RenderHideGroupTitleAll - - Comment - Show group titles in name labels - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show group titles in name labels + Persist + 1 + Type + Boolean + Value + 0 + RenderInitError - - Comment - Error occured while initializing GL - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Error occured while initializing GL + Persist + 1 + Type + Boolean + Value + 0 + RenderLightRadius - - Comment - Render the radius of selected lights - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Render the radius of selected lights + Persist + 1 + Type + Boolean + Value + 0 + RenderLightingDetail - - Comment - Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights) - Persist - 1 - Type - S32 - Value - 1 - + + Comment + Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights) + Persist + 1 + Type + S32 + Value + 1 + RenderMaxPartCount - - Comment - Maximum number of particles to display on screen - Persist - 1 - Type - S32 - Value - 4096 - + + Comment + Maximum number of particles to display on screen + Persist + 1 + Type + S32 + Value + 4096 + RenderMaxVBOSize - - Comment - Maximum size of a vertex buffer (in KB). - Persist - 1 - Type - S32 - Value - 32 - + + Comment + Maximum size of a vertex buffer (in KB). + Persist + 1 + Type + S32 + Value + 32 + RenderName - - Comment - Controls display of names above avatars (0 = never, 1 = fade, 2 = always) - Persist - 1 - Type - S32 - Value - 2 - + + Comment + Controls display of names above avatars (0 = never, 1 = fade, 2 = always) + Persist + 1 + Type + S32 + Value + 2 + RenderNameFadeDuration - - Comment - Time interval over which to fade avatar names (seconds) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Time interval over which to fade avatar names (seconds) + Persist + 1 + Type + F32 + Value + 1.0 + RenderNameHideSelf - - Comment - Don't display own name above avatar - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Don't display own name above avatar + Persist + 1 + Type + Boolean + Value + 0 + RenderNameShowTime - - Comment - Fade avatar names after specified time (seconds) - Persist - 1 - Type - F32 - Value - 10 - + + Comment + Fade avatar names after specified time (seconds) + Persist + 1 + Type + F32 + Value + 10.0 + RenderObjectBump - - Comment - Show bumpmapping on primitives - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show bumpmapping on primitives + Persist + 1 + Type + Boolean + Value + 1 + RenderQualityPerformance - - Comment - Which graphics settings you've chosen - Persist - 1 - Type - U32 - Value - 1 - + + Comment + Which graphics settings you've chosen + Persist + 1 + Type + U32 + Value + 1 + RenderReflectionDetail - - Comment - Detail of reflection render pass. - Persist - 1 - Type - S32 - Value - 2 - + + Comment + Detail of reflection render pass. + Persist + 1 + Type + S32 + Value + 2 + RenderReflectionRes - - Comment - Reflection map resolution. - Persist - 1 - Type - S32 - Value - 64 - + + Comment + Reflection map resolution. + Persist + 1 + Type + S32 + Value + 64 + RenderResolutionDivisor - - Comment - Divisor for rendering 3D scene at reduced resolution. - Persist - 1 - Type - U32 - Value - 1 - + + Comment + Divisor for rendering 3D scene at reduced resolution. + Persist + 1 + Type + U32 + Value + 1 + RenderShaderLODThreshold - - Comment - Fraction of draw distance defining the switch to a different shader LOD - Persist - 1 - Type - F32 - Value - 1.0 - + + Comment + Fraction of draw distance defining the switch to a different shader LOD + Persist + 1 + Type + F32 + Value + 1.0 + + RenderShaderParticleThreshold + + Comment + Fraction of draw distance to not use shader on particles + Persist + 1 + Type + F32 + Value + 0.25 + RenderSunDynamicRange - - Comment - Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ). - Persist - 1 - Type - F32 - Value - 1.0 - + + Comment + Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ). + Persist + 1 + Type + F32 + Value + 1.0 + RenderTerrainDetail - - Comment - Detail applied to terrain texturing (0 = none, 1 or 2 = full) - Persist - 1 - Type - S32 - Value - 2 - + + Comment + Detail applied to terrain texturing (0 = none, 1 or 2 = full) + Persist + 1 + Type + S32 + Value + 2 + RenderTerrainLODFactor - - Comment - Controls level of detail of terrain (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 1.0 - + + Comment + Controls level of detail of terrain (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 1.0 + RenderTerrainScale - - Comment - Terrain detail texture scale - Persist - 1 - Type - F32 - Value - 12 - + + Comment + Terrain detail texture scale + Persist + 1 + Type + F32 + Value + 12.0 + + RenderTextureMemoryMultiple + + Comment + Multiple of texture memory value to use (should fit: 0 < value <= 1.0) + Persist + 1 + Type + F32 + Value + 1.0 + RenderTreeLODFactor - - Comment - Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 0.5 + RenderUIInSnapshot - - Comment - Display user interface in snapshot - Persist - 1 - Type - Boolean - Value - 0 - - RenderUseCleverUI - - Comment - Turns on the \"clever\" UI rendering optimization. It's a known performace gain on apple. - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseFarClip - - Comment - If false, frustum culling will ignore far clip plane. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display user interface in snapshot + Persist + 1 + Type + Boolean + Value + 0 + + RenderUnloadedAvatar + + Comment + Show avatars which haven't finished loading + Persist + 1 + Type + Boolean + Value + 0 + RenderUseFBO - - Comment - Whether we want to use GL_EXT_framebuffer_objects. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Whether we want to use GL_EXT_framebuffer_objects. + Persist + 1 + Type + Boolean + Value + 0 + + RenderUseFarClip + + Comment + If false, frustum culling will ignore far clip plane. + Persist + 1 + Type + Boolean + Value + 1 + RenderUseImpostors - - Comment - Whether we want to use impostors for far away avatars. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whether we want to use impostors for far away avatars. + Persist + 1 + Type + Boolean + Value + 1 + RenderUseShaderLOD - - Comment - Whether we want to have different shaders for LOD - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whether we want to have different shaders for LOD + Persist + 1 + Type + Boolean + Value + 1 + RenderUseShaderNearParticles - - Comment - Whether we want to use shaders on near particles - Persist - 1 - Type - Boolean - Value - 0 - - RenderShaderParticleThreshold - - Comment - Fraction of draw distance to not use shader on particles - Persist - 1 - Type - F32 - Value - 0.25 - + + Comment + Whether we want to use shaders on near particles + Persist + 1 + Type + Boolean + Value + 0 + RenderVBOEnable - - Comment - Use GL Vertex Buffer Objects - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Use GL Vertex Buffer Objects + Persist + 1 + Type + Boolean + Value + 1 + RenderVolumeLODFactor - - Comment - Controls level of detail of primitives (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Controls level of detail of primitives (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 1.0 + RenderWater - - Comment - Display water - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display water + Persist + 1 + Type + Boolean + Value + 1 + RenderWaterMipNormal - - Comment - Use mip maps for water normal map. - Persist - 1 - Type - Boolean - Value - 1 - - RenderWaterReflections - - Comment - Reflect the environment in the water. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Use mip maps for water normal map. + Persist + 1 + Type + Boolean + Value + 1 + RenderWaterRefResolution - - Comment - Water planar reflection resolution. - Persist - 1 - Type - S32 - Value - 512 - + + Comment + Water planar reflection resolution. + Persist + 1 + Type + S32 + Value + 512 + + RenderWaterReflections + + Comment + Reflect the environment in the water. + Persist + 1 + Type + Boolean + Value + 0 + RotateRight - - Comment - Make the agent rotate to its right. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Make the agent rotate to its right. + Persist + 1 + Type + Boolean + Value + 0 + RotationStep - - Comment - All rotations via rotation tool are constrained to multiples of this unit (degrees) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + All rotations via rotation tool are constrained to multiples of this unit (degrees) + Persist + 1 + Type + F32 + Value + 1.0 + RunBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + RunMultipleThreads - - Comment - If TRUE keep background threads active during render - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + If TRUE keep background threads active during render + Persist + 1 + Type + Boolean + Value + 0 + SafeMode - - Comment - Reset preferences, run in safe mode. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Reset preferences, run in safe mode. + Persist + 1 + Type + Boolean + Value + 0 + SaveMinidump - - Comment - Save minidump for developer debugging on crash - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Save minidump for developer debugging on crash + Persist + 1 + Type + Boolean + Value + 1 + ScaleShowAxes - - Comment - Show indicator of selected scale axis when scaling - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show indicator of selected scale axis when scaling + Persist + 1 + Type + Boolean + Value + 0 + ScaleStretchTextures - - Comment - Stretch textures along with object when scaling - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Stretch textures along with object when scaling + Persist + 1 + Type + Boolean + Value + 1 + ScaleUniform - - Comment - Scale selected objects evenly about center of selection - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Scale selected objects evenly about center of selection + Persist + 1 + Type + Boolean + Value + 0 + ScriptErrorColor - - Comment - Color of script error messages - Persist - 1 - Type - Color4 - Value - - 0.8235294117 - 0.2745098039 - 0.2745098039 - 1 - - + + Comment + Color of script error messages + Persist + 1 + Type + Color4 + Value + + 0.8235294117 + 0.2745098039 + 0.2745098039 + 1.0 + + ScriptErrorsAsChat - - Comment - Display script errors and warning in chat history - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display script errors and warning in chat history + Persist + 1 + Type + Boolean + Value + 0 + ScriptHelpFollowsCursor - - Comment - Scripting help window updates contents based on script editor contents under text cursor - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Scripting help window updates contents based on script editor contents under text cursor + Persist + 1 + Type + Boolean + Value + 0 + SearchURLDefault - - Comment - URL to load for empty searches - Persist - 1 - Type - String - Value - http://secondlife.com/app/search/index.php? - + + Comment + URL to load for empty searches + Persist + 1 + Type + String + Value + http://secondlife.com/app/search/index.php? + SearchURLQuery - - Comment - URL to use for searches - Persist - 1 - Type - String - Value - http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&s=[COLLECTION]& - + + Comment + URL to use for searches + Persist + 1 + Type + String + Value + http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&s=[COLLECTION]& + SearchURLSuffix2 - - Comment - Parameters added to end of search queries - Persist - 1 - Type - String - Value - lang=[LANG]&m=[MATURE]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION] - + + Comment + Parameters added to end of search queries + Persist + 1 + Type + String + Value + lang=[LANG]&m=[MATURE]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION] + SelectMovableOnly - - Comment - Select only objects you can move - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Select only objects you can move + Persist + 1 + Type + Boolean + Value + 0 + SelectOwnedOnly - - Comment - Select only objects you own - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Select only objects you own + Persist + 1 + Type + Boolean + Value + 0 + SelectionHighlightAlpha - - Comment - Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.4000000059604644775390625 - + + Comment + Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.40000000596 + SelectionHighlightAlphaTest - - Comment - Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels) - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels) + Persist + 1 + Type + F32 + Value + 0.1 + SelectionHighlightThickness - - Comment - Thickness of selection highlight line (fraction of view distance) - Persist - 1 - Type - F32 - Value - 0.009999999776482582092285156 - + + Comment + Thickness of selection highlight line (fraction of view distance) + Persist + 1 + Type + F32 + Value + 0.00999999977648 + SelectionHighlightUAnim - - Comment - Rate at which texture animates along U direction in selection highlight line (fraction of texture per second) - Persist - 1 - Type - F32 - Value - 0 - + + Comment + Rate at which texture animates along U direction in selection highlight line (fraction of texture per second) + Persist + 1 + Type + F32 + Value + 0.0 + SelectionHighlightUScale - - Comment - Scale of texture display on selection highlight line (fraction of texture size) - Persist - 1 - Type - F32 - Value - 0.1 - + + Comment + Scale of texture display on selection highlight line (fraction of texture size) + Persist + 1 + Type + F32 + Value + 0.1 + SelectionHighlightVAnim - - Comment - Rate at which texture animates along V direction in selection highlight line (fraction of texture per second) - Persist - 1 - Type - F32 - Value - 0.5 - + + Comment + Rate at which texture animates along V direction in selection highlight line (fraction of texture per second) + Persist + 1 + Type + F32 + Value + 0.5 + SelectionHighlightVScale - - Comment - Scale of texture display on selection highlight line (fraction of texture size) - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Scale of texture display on selection highlight line (fraction of texture size) + Persist + 1 + Type + F32 + Value + 1.0 + ServerChoice - - Comment - [DO NOT MODIFY] Controls which grid you connect to - Persist - 1 - Type - S32 - Value - 0 - - ShowAllObjectHoverTip - - Comment - Show descriptive tooltip when mouse hovers over non-interactive and interactive objects. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + [DO NOT MODIFY] Controls which grid you connect to + Persist + 1 + Type + S32 + Value + 0 + ShowActiveSpeakers - - Comment - Display active speakers list on login - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display active speakers list on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowAllObjectHoverTip + + Comment + Show descriptive tooltip when mouse hovers over non-interactive and interactive objects. + Persist + 1 + Type + Boolean + Value + 0 + ShowAxes - - Comment - Render coordinate frame at your position - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Render coordinate frame at your position + Persist + 1 + Type + Boolean + Value + 0 + ShowCameraControls - - Comment - Display camera controls on login - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display camera controls on login + Persist + 1 + Type + Boolean + Value + 1 + ShowChatHistory - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowCommunicate - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowConsoleWindow - - Comment - Show log in separate OS window - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show log in separate OS window + Persist + 1 + Type + Boolean + Value + 0 + ShowCrosshairs - - Comment - Display crosshairs when in mouselook mode - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display crosshairs when in mouselook mode + Persist + 1 + Type + Boolean + Value + 1 + ShowDebugConsole - - Comment - Show log in SL window - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show log in SL window + Persist + 1 + Type + Boolean + Value + 0 + ShowDebugStats - - Comment - Show performance stats display - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show performance stats display + Persist + 1 + Type + Boolean + Value + 0 + ShowDepthBuffer - - Comment - Show depth buffer contents - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show depth buffer contents + Persist + 1 + Type + Boolean + Value + 0 + ShowDirectory - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowEmptyFoldersWhenSearching - - Comment - Shows folders that do not have any visible contents when applying a filter to inventory - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Shows folders that do not have any visible contents when applying a filter to inventory + Persist + 1 + Type + Boolean + Value + 0 + ShowHoverTips - - Comment - Show descriptive tooltip when mouse hovers over items in world - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show descriptive tooltip when mouse hovers over items in world + Persist + 1 + Type + Boolean + Value + 1 + ShowInventory - - Comment - Open inventory window on login - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Open inventory window on login + Persist + 1 + Type + Boolean + Value + 0 + ShowLandHoverTip - - Comment - Show descriptive tooltip when mouse hovers over land - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show descriptive tooltip when mouse hovers over land + Persist + 1 + Type + Boolean + Value + 0 + ShowLeaders - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowMatureClassifieds - - Comment - Display results of find classifieds that are flagged as mature - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display results of find classifieds that are flagged as mature + Persist + 1 + Type + Boolean + Value + 0 + ShowMatureEvents - - Comment - Display results of find events that are flagged as mature - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display results of find events that are flagged as mature + Persist + 1 + Type + Boolean + Value + 0 + ShowMatureFindAll - - Comment - Display results of find all that are in mature sims - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display results of find all that are in mature sims + Persist + 1 + Type + Boolean + Value + 0 + ShowMatureGroups - - Comment - Display results of find groups that are in flagged as mature - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display results of find groups that are in flagged as mature + Persist + 1 + Type + Boolean + Value + 1 + ShowMatureSims - - Comment - Display results of find places or find popular that are in mature sims - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display results of find places or find popular that are in mature sims + Persist + 1 + Type + Boolean + Value + 0 + ShowMiniMap - - Comment - Display mini map on login - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display mini map on login + Persist + 1 + Type + Boolean + Value + 1 + ShowMovementControls - - Comment - Display movement controls on login - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display movement controls on login + Persist + 1 + Type + Boolean + Value + 1 + ShowNearClip - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowNewInventory - - Comment - Automatically views new notecards/textures/landmarks - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Automatically views new notecards/textures/landmarks + Persist + 1 + Type + Boolean + Value + 1 + ShowObjectUpdates - - Comment - Show when update messages are received for individual objects - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show when update messages are received for individual objects + Persist + 1 + Type + Boolean + Value + 0 + ShowOverlayTitle - - Comment - Prints watermark text message on screen - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Prints watermark text message on screen + Persist + 1 + Type + Boolean + Value + 0 + ShowParcelOwners - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowPermissions - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowPropertyLines - - Comment - Show line overlay demarking property boundaries - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show line overlay demarking property boundaries + Persist + 1 + Type + Boolean + Value + 0 + ShowSearchBar - - Comment - Show the Search Bar in the Status Overlay - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show the Search Bar in the Status Overlay + Persist + 1 + Type + Boolean + Value + 1 + ShowSelectionBeam - - Comment - Show selection particle beam when selecting or interacting with objects. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show selection particle beam when selecting or interacting with objects. + Persist + 1 + Type + Boolean + Value + 1 + ShowStartLocation - - Comment - Display starting location menu on login screen - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display starting location menu on login screen + Persist + 1 + Type + Boolean + Value + 0 + ShowTangentBasis - - Comment - Render normal and binormal (debugging bump mapping) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Render normal and binormal (debugging bump mapping) + Persist + 1 + Type + Boolean + Value + 0 + ShowToolBar - - Comment - Show toolbar at bottom of screen - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show toolbar at bottom of screen + Persist + 1 + Type + Boolean + Value + 1 + ShowTools - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + ShowVoiceChannelPopup - - Comment - Controls visibility of the current voice channel popup above the voice tab - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Controls visibility of the current voice channel popup above the voice tab + Persist + 1 + Type + Boolean + Value + 0 + ShowVolumeSettingsPopup - - Comment - Show individual volume slider for voice, sound effects, etc - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show individual volume slider for voice, sound effects, etc + Persist + 1 + Type + Boolean + Value + 0 + ShowWorldMap - - Comment - Display world map on login - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display world map on login + Persist + 1 + Type + Boolean + Value + 0 + ShowXUINames - - Comment - Display XUI Names as Tooltips - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display XUI Names as Tooltips + Persist + 1 + Type + Boolean + Value + 0 + SitBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + SkinFolder - - Comment - The skin folder to use. - Persist - 1 - Type - String - Value - - + + Comment + The skin folder to use. + Persist + 1 + Type + String + Value + + SkyAmbientScale - - Comment - Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level) - Persist - 1 - Type - F32 - Value - 0.300000011920928955078125 - + + Comment + Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level) + Persist + 1 + Type + F32 + Value + 0.300000011921 + + SkyEditPresets + + Comment + Whether to be able to edit the sky defaults or not + Persist + 1 + Type + Boolean + Value + 0 + SkyNightColorShift - - Comment - Controls moonlight color (base color applied to moon as light source) - Persist - 1 - Type - Color3 - Value - - 0.699999988079071044921875 - 0.699999988079071044921875 - 1 - - + + Comment + Controls moonlight color (base color applied to moon as light source) + Persist + 1 + Type + Color3 + Value + + 0.699999988079 + 0.699999988079 + 1.0 + + SkyOverrideSimSunPosition - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + SkySunDefaultPosition - - Comment - Default position of sun in sky (direction in world coordinates) - Persist - 1 - Type - Vector3 - Value - - 1 - 0 - 0.1 - - - SkyUseClassicClouds - - Comment - Whether to use the old Second Life particle clouds or not - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Default position of sun in sky (direction in world coordinates) + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.0 + 0.1 + + + SkyUseClassicClouds + + Comment + Whether to use the old Second Life particle clouds or not + Persist + 1 + Type + Boolean + Value + 1 + SlideLeftBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 20 - 54 - 45 - 29 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 20 + 54 + 45 + 29 + + SlideRightBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 66 - 54 - 91 - 29 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 66 + 54 + 91 + 29 + + SmallAvatarNames - - Comment - Display avatar name text in smaller font - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Display avatar name text in smaller font + Persist + 1 + Type + Boolean + Value + 1 + SnapEnabled - - Comment - Enable snapping to grid - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enable snapping to grid + Persist + 1 + Type + Boolean + Value + 1 + SnapMargin - - Comment - Controls maximum distance between windows before they auto-snap together (pixels) - Persist - 1 - Type - S32 - Value - 10 - + + Comment + Controls maximum distance between windows before they auto-snap together (pixels) + Persist + 1 + Type + S32 + Value + 10 + SnapToMouseCursor - - Comment - When snapping to grid, center object on nearest grid point to mouse cursor - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + When snapping to grid, center object on nearest grid point to mouse cursor + Persist + 1 + Type + Boolean + Value + 0 + SnapshotLocalLastResolution - - Comment - Take next local snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Take next local snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + SnapshotPostcardLastResolution - - Comment - Take next postcard snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Take next postcard snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + SnapshotQuality - - Comment - Quality setting of postcard JPEGs (0 = worst, 100 = best) - Persist - 1 - Type - S32 - Value - 75 - + + Comment + Quality setting of postcard JPEGs (0 = worst, 100 = best) + Persist + 1 + Type + S32 + Value + 75 + SnapshotTextureLastResolution - - Comment - Take next texture snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Take next texture snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + SpeakingColor - - Comment - Color of various indicators when resident is speaking on a voice channel. - Persist - 1 - Type - Color4 - Value - - 0 - 1 - 0 - 1 - - + + Comment + Color of various indicators when resident is speaking on a voice channel. + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.0 + 1.0 + + SpeedTest - - Comment - Performance testing mode, no network - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Performance testing mode, no network + Persist + 1 + Type + Boolean + Value + 0 + StatsAutoRun - - Comment - Play back autopilot - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Play back autopilot + Persist + 1 + Type + Boolean + Value + 0 + StatsFile - - Comment - Filename for stats logging output - Persist - 1 - Type - String - Value - fs.txt - + + Comment + Filename for stats logging output + Persist + 1 + Type + String + Value + fs.txt + StatsNumRuns - - Comment - Loop autopilot playback this number of times - Persist - 1 - Type - S32 - Value - -1 - + + Comment + Loop autopilot playback this number of times + Persist + 1 + Type + S32 + Value + -1 + StatsPilotFile - - Comment - Filename for stats logging autopilot path - Persist - 1 - Type - String - Value - pilot.txt - + + Comment + Filename for stats logging autopilot path + Persist + 1 + Type + String + Value + pilot.txt + StatsQuitAfterRuns - - Comment - Quit application after this number of autopilot playback runs - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Quit application after this number of autopilot playback runs + Persist + 1 + Type + Boolean + Value + 0 + StatsSessionTrackFrameStats - - Comment - Track rendering and network statistics - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Track rendering and network statistics + Persist + 1 + Type + Boolean + Value + 0 + StatsSummaryFile - - Comment - Filename for stats logging summary - Persist - 1 - Type - String - Value - fss.txt - + + Comment + Filename for stats logging summary + Persist + 1 + Type + String + Value + fss.txt + StatusBarHeight - - Comment - Height of menu/status bar at top of screen (pixels) - Persist - 1 - Type - S32 - Value - 26 - + + Comment + Height of menu/status bar at top of screen (pixels) + Persist + 1 + Type + S32 + Value + 26 + StatusBarPad - - Comment - Spacing between popup buttons at bottom of screen (Stand up, Release Controls) - Persist - 1 - Type - S32 - Value - 10 - + + Comment + Spacing between popup buttons at bottom of screen (Stand up, Release Controls) + Persist + 1 + Type + S32 + Value + 10 + SystemChatColor - - Comment - Color of chat messages from SL System - Persist - 1 - Type - Color4 - Value - - 0.800000011920928955078125 - 1 - 1 - 1 - - + + Comment + Color of chat messages from SL System + Persist + 1 + Type + Color4 + Value + + 0.800000011921 + 1.0 + 1.0 + 1.0 + + SystemLanguage - - Comment - Language indicated by system settings (for XUI) - Persist - 1 - Type - String - Value - en-us - + + Comment + Language indicated by system settings (for XUI) + Persist + 1 + Type + String + Value + en-us + TabToTextFieldsOnly - - Comment - TAB key takes you to next text entry field, instead of next widget - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + TAB key takes you to next text entry field, instead of next widget + Persist + 1 + Type + Boolean + Value + 0 + TerrainColorHeightRange - - Comment - Altitude range over which a given terrain texture has effect (meters) - Persist - 1 - Type - F32 - Value - 60 - + + Comment + Altitude range over which a given terrain texture has effect (meters) + Persist + 1 + Type + F32 + Value + 60.0 + TerrainColorStartHeight - - Comment - Starting altitude for terrain texturing (meters) - Persist - 1 - Type - F32 - Value - 20 - + + Comment + Starting altitude for terrain texturing (meters) + Persist + 1 + Type + F32 + Value + 20.0 + TextureMemory - - Comment - Amount of memory to use for textures in MB (0 = autodetect) - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Amount of memory to use for textures in MB (0 = autodetect) + Persist + 1 + Type + S32 + Value + 0 + TexturePickerRect - - Comment - Rectangle for texture picker - Persist - 1 - Type - Rect - Value - - 0 - 290 - 350 - 0 - - + + Comment + Rectangle for texture picker + Persist + 1 + Type + Rect + Value + + 0 + 290 + 350 + 0 + + TexturePickerShowFolders - - Comment - Show folders with no texures in texture picker - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Show folders with no texures in texture picker + Persist + 1 + Type + Boolean + Value + 1 + TexturePickerSortOrder - - Comment - Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 2 - + + Comment + Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 2 + ThirdPersonBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + ThrottleBandwidthKBPS - - Comment - Maximum allowable downstream bandwidth (kilo bits per second) - Persist - 1 - Type - F32 - Value - 500 - + + Comment + Maximum allowable downstream bandwidth (kilo bits per second) + Persist + 1 + Type + F32 + Value + 500.0 + ToolHelpRect - - Comment - - Persist - 0 - Type - Rect - Value - - 8 - 178 - 75 - 162 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 8 + 178 + 75 + 162 + + ToolTipDelay - - Comment - Seconds before displaying tooltip when mouse stops over UI element - Persist - 1 - Type - F32 - Value - 0.699999988079071044921875 - + + Comment + Seconds before displaying tooltip when mouse stops over UI element + Persist + 1 + Type + F32 + Value + 0.699999988079 + ToolboxAutoMove - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + ToolboxRect - - Comment - Rectangle for tools window - Persist - 1 - Type - Rect - Value - - 0 - 100 - 100 - 100 - - + + Comment + Rectangle for tools window + Persist + 1 + Type + Rect + Value + + 0 + 100 + 100 + 100 + + ToolboxShowMore - - Comment - Whether to show additional build tool controls - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Whether to show additional build tool controls + Persist + 1 + Type + Boolean + Value + 1 + TrackFocusObject - - Comment - Camera tracks last object zoomed on - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Camera tracks last object zoomed on + Persist + 1 + Type + Boolean + Value + 1 + TurnLeftBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 20 - 29 - 45 - 4 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 20 + 29 + 45 + 4 + + TurnRightBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 66 - 29 - 91 - 4 - - + + Comment + + Persist + 0 + Type + Rect + Value + + 66 + 29 + 91 + 4 + + TypeAheadTimeout - - Comment - Time delay before clearing type-ahead buffer in lists (seconds) - Persist - 1 - Type - F32 - Value - 1.5 - + + Comment + Time delay before clearing type-ahead buffer in lists (seconds) + Persist + 1 + Type + F32 + Value + 1.5 + UIAutoScale - - Comment - Keep UI scale consistent across different resolutions - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Keep UI scale consistent across different resolutions + Persist + 1 + Type + Boolean + Value + 1 + UIFloaterTestBool - - Comment - Example saved setting for the test floater - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Example saved setting for the test floater + Persist + 1 + Type + Boolean + Value + 0 + UIImgBtnCloseActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + UIImgBtnCloseInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 779e4fa3-9b13-f74a-fba9-3886fe9c86ba - + + Comment + + Persist + 0 + Type + String + Value + 779e4fa3-9b13-f74a-fba9-3886fe9c86ba + UIImgBtnClosePressedUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + UIImgBtnForwardInUUID - - Comment - - Persist - 0 - Type - String - Value - 54197a61-f5d1-4c29-95d2-c071d08849cb - + + Comment + + Persist + 0 + Type + String + Value + 54197a61-f5d1-4c29-95d2-c071d08849cb + UIImgBtnForwardOutUUID - - Comment - - Persist - 0 - Type - String - Value - a0eb4021-1b20-4a53-892d-8faa9265a6f5 - + + Comment + + Persist + 0 + Type + String + Value + a0eb4021-1b20-4a53-892d-8faa9265a6f5 + UIImgBtnJumpLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - 9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1 - + + Comment + + Persist + 0 + Type + String + Value + 9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1 + UIImgBtnJumpLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 3c18c87e-5f50-14e2-e744-f44734aa365f - + + Comment + + Persist + 0 + Type + String + Value + 3c18c87e-5f50-14e2-e744-f44734aa365f + UIImgBtnJumpRightInUUID - - Comment - - Persist - 0 - Type - String - Value - 7dabc040-ec13-2309-ddf7-4f161f6de2f4 - + + Comment + + Persist + 0 + Type + String + Value + 7dabc040-ec13-2309-ddf7-4f161f6de2f4 + UIImgBtnJumpRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - ff9a71eb-7414-4cf8-866e-a701deb7c3cf - + + Comment + + Persist + 0 + Type + String + Value + ff9a71eb-7414-4cf8-866e-a701deb7c3cf + UIImgBtnLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - 95463c78-aaa6-464d-892d-3a805b6bb7bf - + + Comment + + Persist + 0 + Type + String + Value + 95463c78-aaa6-464d-892d-3a805b6bb7bf + UIImgBtnLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 13a93910-6b44-45eb-ad3a-4d1324c59bac - + + Comment + + Persist + 0 + Type + String + Value + 13a93910-6b44-45eb-ad3a-4d1324c59bac + UIImgBtnMinimizeActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 34c9398d-bb78-4643-9633-46a2fa3e9637 - + + Comment + + Persist + 0 + Type + String + Value + 34c9398d-bb78-4643-9633-46a2fa3e9637 + UIImgBtnMinimizeInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 6e72abba-1378-437f-bf7a-f0c15f3e99a3 - + + Comment + + Persist + 0 + Type + String + Value + 6e72abba-1378-437f-bf7a-f0c15f3e99a3 + UIImgBtnMinimizePressedUUID - - Comment - - Persist - 0 - Type - String - Value - 39801651-26cb-4926-af57-7af9352c273c - + + Comment + + Persist + 0 + Type + String + Value + 39801651-26cb-4926-af57-7af9352c273c + UIImgBtnMoveDownInUUID - - Comment - - Persist - 0 - Type - String - Value - b92a70b9-c841-4c94-b4b3-cee9eb460d48 - + + Comment + + Persist + 0 + Type + String + Value + b92a70b9-c841-4c94-b4b3-cee9eb460d48 + UIImgBtnMoveDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - b5abc9fa-9e62-4e03-bc33-82c4c1b6b689 - + + Comment + + Persist + 0 + Type + String + Value + b5abc9fa-9e62-4e03-bc33-82c4c1b6b689 + UIImgBtnMoveUpInUUID - - Comment - - Persist - 0 - Type - String - Value - 49b4b357-e430-4b56-b9e0-05b8759c3c82 - + + Comment + + Persist + 0 + Type + String + Value + 49b4b357-e430-4b56-b9e0-05b8759c3c82 + UIImgBtnMoveUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - f887146d-829f-4e39-9211-cf872b78f97c - + + Comment + + Persist + 0 + Type + String + Value + f887146d-829f-4e39-9211-cf872b78f97c + UIImgBtnPanDownInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + UIImgBtnPanDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + UIImgBtnPanLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + UIImgBtnPanLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + UIImgBtnPanRightInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + UIImgBtnPanRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + UIImgBtnPanUpInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + UIImgBtnPanUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + UIImgBtnRestoreActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 111b39de-8928-4690-b7b2-e17d5c960277 - + + Comment + + Persist + 0 + Type + String + Value + 111b39de-8928-4690-b7b2-e17d5c960277 + UIImgBtnRestoreInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 0eafa471-70af-4882-b8c1-40a310929744 - + + Comment + + Persist + 0 + Type + String + Value + 0eafa471-70af-4882-b8c1-40a310929744 + UIImgBtnRestorePressedUUID - - Comment - - Persist - 0 - Type - String - Value - 90a0ed5c-2e7b-4845-9958-a64a1b30f312 - + + Comment + + Persist + 0 + Type + String + Value + 90a0ed5c-2e7b-4845-9958-a64a1b30f312 + UIImgBtnRightInUUID - - Comment - - Persist - 0 - Type - String - Value - 5e616d0d-4335-476f-9977-560bccd009da - + + Comment + + Persist + 0 + Type + String + Value + 5e616d0d-4335-476f-9977-560bccd009da + UIImgBtnRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 5a44fd04-f52b-4c30-8b00-4a31e27614bd - + + Comment + + Persist + 0 + Type + String + Value + 5a44fd04-f52b-4c30-8b00-4a31e27614bd + UIImgBtnScrollDownInUUID - - Comment - - Persist - 0 - Type - String - Value - d2421bab-2eaf-4863-b8f6-5e4c52519247 - + + Comment + + Persist + 0 + Type + String + Value + d2421bab-2eaf-4863-b8f6-5e4c52519247 + UIImgBtnScrollDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - b4ecdecf-5c8d-44e7-b882-17a77e88ed55 - + + Comment + + Persist + 0 + Type + String + Value + b4ecdecf-5c8d-44e7-b882-17a77e88ed55 + UIImgBtnScrollLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - ea137a32-6718-4d05-9c22-7d570d27b2cd - + + Comment + + Persist + 0 + Type + String + Value + ea137a32-6718-4d05-9c22-7d570d27b2cd + UIImgBtnScrollLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 43773e8d-49aa-48e0-80f3-a04715f4677a - + + Comment + + Persist + 0 + Type + String + Value + 43773e8d-49aa-48e0-80f3-a04715f4677a + UIImgBtnScrollRightInUUID - - Comment - - Persist - 0 - Type - String - Value - b749de64-e903-4c3c-ac0b-25fb6fa39cb5 - + + Comment + + Persist + 0 + Type + String + Value + b749de64-e903-4c3c-ac0b-25fb6fa39cb5 + UIImgBtnScrollRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 3d700d19-e708-465d-87f2-46c8c0ee7938 - + + Comment + + Persist + 0 + Type + String + Value + 3d700d19-e708-465d-87f2-46c8c0ee7938 + UIImgBtnScrollUpInUUID - - Comment - - Persist - 0 - Type - String - Value - a93abdf3-27b5-4e22-a8fa-c48216cd2e3a - + + Comment + + Persist + 0 + Type + String + Value + a93abdf3-27b5-4e22-a8fa-c48216cd2e3a + UIImgBtnScrollUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - dad084d7-9a46-452a-b0ff-4b9f1cefdde9 - + + Comment + + Persist + 0 + Type + String + Value + dad084d7-9a46-452a-b0ff-4b9f1cefdde9 + UIImgBtnSlideLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - 724996f5-b956-46f6-9844-4fcfce1d5e83 - + + Comment + + Persist + 0 + Type + String + Value + 724996f5-b956-46f6-9844-4fcfce1d5e83 + UIImgBtnSlideLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 82476321-0374-4c26-9567-521535ab4cd7 - + + Comment + + Persist + 0 + Type + String + Value + 82476321-0374-4c26-9567-521535ab4cd7 + UIImgBtnSlideRightInUUID - - Comment - - Persist - 0 - Type - String - Value - 7eeb57d2-3f37-454d-a729-8b217b8be443 - + + Comment + + Persist + 0 + Type + String + Value + 7eeb57d2-3f37-454d-a729-8b217b8be443 + UIImgBtnSlideRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 1fbe4e60-0607-44d1-a50a-032eff56ae75 - + + Comment + + Persist + 0 + Type + String + Value + 1fbe4e60-0607-44d1-a50a-032eff56ae75 + UIImgBtnSpinDownInUUID - - Comment - - Persist - 0 - Type - String - Value - a985ac71-052f-48e6-9c33-d931c813ac92 - + + Comment + + Persist + 0 + Type + String + Value + a985ac71-052f-48e6-9c33-d931c813ac92 + UIImgBtnSpinDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - b6d240dd-5602-426f-b606-bbb49a30726d - + + Comment + + Persist + 0 + Type + String + Value + b6d240dd-5602-426f-b606-bbb49a30726d + UIImgBtnSpinUpInUUID - - Comment - - Persist - 0 - Type - String - Value - c8450082-96a0-4319-8090-d3ff900b4954 - + + Comment + + Persist + 0 + Type + String + Value + c8450082-96a0-4319-8090-d3ff900b4954 + UIImgBtnSpinUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - 56576e6e-6710-4e66-89f9-471b59122794 - + + Comment + + Persist + 0 + Type + String + Value + 56576e6e-6710-4e66-89f9-471b59122794 + UIImgBtnTabBottomInUUID - - Comment - - Persist - 0 - Type - String - Value - c001d8fd-a869-4b6f-86a1-fdcb106df9c7 - + + Comment + + Persist + 0 + Type + String + Value + c001d8fd-a869-4b6f-86a1-fdcb106df9c7 + UIImgBtnTabBottomOutUUID - - Comment - - Persist - 0 - Type - String - Value - bf0a8779-689b-48c3-bb9a-6af546366ef4 - + + Comment + + Persist + 0 + Type + String + Value + bf0a8779-689b-48c3-bb9a-6af546366ef4 + UIImgBtnTabBottomPartialInUUID - - Comment - - Persist - 0 - Type - String - Value - eb0b0904-8c91-4f24-b500-1180b91140de - + + Comment + + Persist + 0 + Type + String + Value + eb0b0904-8c91-4f24-b500-1180b91140de + UIImgBtnTabBottomPartialOutUUID - - Comment - - Persist - 0 - Type - String - Value - 8dca716c-b29c-403a-9886-91c028357d6e - + + Comment + + Persist + 0 + Type + String + Value + 8dca716c-b29c-403a-9886-91c028357d6e + UIImgBtnTabTopInUUID - - Comment - - Persist - 0 - Type - String - Value - 16d032e8-817b-4368-8a4e-b7b947ae3889 - + + Comment + + Persist + 0 + Type + String + Value + 16d032e8-817b-4368-8a4e-b7b947ae3889 + UIImgBtnTabTopOutUUID - - Comment - - Persist - 0 - Type - String - Value - 1ed83f57-41cf-4052-a3b4-2e8bb78d8191 - + + Comment + + Persist + 0 + Type + String + Value + 1ed83f57-41cf-4052-a3b4-2e8bb78d8191 + UIImgBtnTabTopPartialInUUID - - Comment - - Persist - 0 - Type - String - Value - 7c6c6c26-0e25-4438-89bd-30d8b8e9d704 - + + Comment + + Persist + 0 + Type + String + Value + 7c6c6c26-0e25-4438-89bd-30d8b8e9d704 + UIImgBtnTabTopPartialOutUUID - - Comment - - Persist - 0 - Type - String - Value - 932ad585-0e45-4a57-aa23-4cf81beeb7b0 - + + Comment + + Persist + 0 + Type + String + Value + 932ad585-0e45-4a57-aa23-4cf81beeb7b0 + UIImgBtnTearOffActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 - + + Comment + + Persist + 0 + Type + String + Value + 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 + UIImgBtnTearOffInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 - + + Comment + + Persist + 0 + Type + String + Value + 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 + UIImgBtnTearOffPressedUUID - - Comment - - Persist - 0 - Type - String - Value - d2524c13-4ba6-af7c-e305-8ac6cc18d86a - + + Comment + + Persist + 0 + Type + String + Value + d2524c13-4ba6-af7c-e305-8ac6cc18d86a + UIImgCheckboxActiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - cf4a2ed7-1533-4686-9dde-df9a37ddca55 - + + Comment + + Persist + 0 + Type + String + Value + cf4a2ed7-1533-4686-9dde-df9a37ddca55 + UIImgCheckboxActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 05bb64ee-96fd-4243-b74e-f40a41bc53ba - + + Comment + + Persist + 0 + Type + String + Value + 05bb64ee-96fd-4243-b74e-f40a41bc53ba + UIImgCheckboxInactiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - c817c642-9abd-4236-9287-ae0513fe7d2b - + + Comment + + Persist + 0 + Type + String + Value + c817c642-9abd-4236-9287-ae0513fe7d2b + UIImgCheckboxInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 7d94cb59-32a2-49bf-a516-9e5a2045f9d9 - + + Comment + + Persist + 0 + Type + String + Value + 7d94cb59-32a2-49bf-a516-9e5a2045f9d9 + UIImgCreateSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 0098b015-3daf-4cfe-a72f-915369ea97c2 - + + Comment + + Persist + 0 + Type + String + Value + 0098b015-3daf-4cfe-a72f-915369ea97c2 + UIImgCreateUUID - - Comment - - Persist - 0 - Type - String - Value - 7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b - + + Comment + + Persist + 0 + Type + String + Value + 7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b + UIImgCrosshairsUUID - - Comment - Image to use for crosshair display (UUID texture reference) - Persist - 1 - Type - String - Value - 6e1a3980-bf2d-4274-8970-91e60d85fb52 - + + Comment + Image to use for crosshair display (UUID texture reference) + Persist + 1 + Type + String + Value + 6e1a3980-bf2d-4274-8970-91e60d85fb52 + UIImgDefaultEyesUUID - - Comment - - Persist - 0 - Type - String - Value - 6522e74d-1660-4e7f-b601-6f48c1659a77 - + + Comment + + Persist + 0 + Type + String + Value + 6522e74d-1660-4e7f-b601-6f48c1659a77 + UIImgDefaultGlovesUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultHairUUID - - Comment - - Persist - 0 - Type - String - Value - 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b - + + Comment + + Persist + 0 + Type + String + Value + 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b + UIImgDefaultJacketUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultPantsUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultShirtUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultShoesUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultSkirtUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultSocksUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDefaultUnderwearUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIImgDirectionArrowUUID - - Comment - - Persist - 0 - Type - String - Value - 586383e8-4d9b-4fba-9196-2b5938e79c2c - + + Comment + + Persist + 0 + Type + String + Value + 586383e8-4d9b-4fba-9196-2b5938e79c2c + UIImgFaceSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - b4870163-6208-42a9-9801-93133bf9a6cd - + + Comment + + Persist + 0 + Type + String + Value + b4870163-6208-42a9-9801-93133bf9a6cd + UIImgFaceUUID - - Comment - - Persist - 0 - Type - String - Value - ce15fd63-b0b6-463c-a37d-ea6393208b3e - + + Comment + + Persist + 0 + Type + String + Value + ce15fd63-b0b6-463c-a37d-ea6393208b3e + UIImgFocusSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - ab6a730e-ddfd-4982-9a32-c6de3de6d31d - + + Comment + + Persist + 0 + Type + String + Value + ab6a730e-ddfd-4982-9a32-c6de3de6d31d + UIImgFocusUUID - - Comment - - Persist - 0 - Type - String - Value - 57bc39d1-288c-4519-aea6-6d1786a5c274 - + + Comment + + Persist + 0 + Type + String + Value + 57bc39d1-288c-4519-aea6-6d1786a5c274 + UIImgGrabSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - c1e21504-f136-451d-b8e9-929037812f1d - + + Comment + + Persist + 0 + Type + String + Value + c1e21504-f136-451d-b8e9-929037812f1d + UIImgGrabUUID - - Comment - - Persist - 0 - Type - String - Value - c63f124c-6340-4fbf-b59e-0869a44adb64 - + + Comment + + Persist + 0 + Type + String + Value + c63f124c-6340-4fbf-b59e-0869a44adb64 + UIImgMoveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 46f17c7b-8381-48c3-b628-6a406e060dd6 - + + Comment + + Persist + 0 + Type + String + Value + 46f17c7b-8381-48c3-b628-6a406e060dd6 + UIImgMoveUUID - - Comment - - Persist - 0 - Type - String - Value - 2fa5dc06-bcdd-4e09-a426-f9f262d4fa65 - + + Comment + + Persist + 0 + Type + String + Value + 2fa5dc06-bcdd-4e09-a426-f9f262d4fa65 + UIImgRadioActiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 52f09e07-5816-4052-953c-94c6c10479b7 - + + Comment + + Persist + 0 + Type + String + Value + 52f09e07-5816-4052-953c-94c6c10479b7 + UIImgRadioActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f - + + Comment + + Persist + 0 + Type + String + Value + 7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f + UIImgRadioInactiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 1975db39-aa29-4251-aea0-409ac09d414d - + + Comment + + Persist + 0 + Type + String + Value + 1975db39-aa29-4251-aea0-409ac09d414d + UIImgRadioInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 90688481-67ff-4af0-be69-4aa084bcad1e - + + Comment + + Persist + 0 + Type + String + Value + 90688481-67ff-4af0-be69-4aa084bcad1e + UIImgResizeBottomRightUUID - - Comment - - Persist - 0 - Type - String - Value - e3690e25-9690-4f6c-a745-e7dcd885285a - + + Comment + + Persist + 0 + Type + String + Value + e3690e25-9690-4f6c-a745-e7dcd885285a + UIImgRotateSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - cdfb7fde-0d13-418a-9d89-2bd91019fc95 - + + Comment + + Persist + 0 + Type + String + Value + cdfb7fde-0d13-418a-9d89-2bd91019fc95 + UIImgRotateUUID - - Comment - - Persist - 0 - Type - String - Value - c34b1eaa-aae3-4351-b082-e26c0b636779 - + + Comment + + Persist + 0 + Type + String + Value + c34b1eaa-aae3-4351-b082-e26c0b636779 + UIImgScaleSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 55aa57ef-508a-47f7-8867-85d21c5a810d - + + Comment + + Persist + 0 + Type + String + Value + 55aa57ef-508a-47f7-8867-85d21c5a810d + UIImgScaleUUID - - Comment - - Persist - 0 - Type - String - Value - 88a90fef-b448-4883-9344-ecf378a60433 - + + Comment + + Persist + 0 + Type + String + Value + 88a90fef-b448-4883-9344-ecf378a60433 + UIImgWhiteUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + UIScaleFactor - - Comment - Size of UI relative to default layout on 1024x768 screen - Persist - 1 - Type - F32 - Value - 1 - + + Comment + Size of UI relative to default layout on 1024x768 screen + Persist + 1 + Type + F32 + Value + 1.0 + UISndAlert - - Comment - Sound file for alerts (uuid for sound asset) - Persist - 1 - Type - String - Value - ed124764-705d-d497-167a-182cd9fa2e6c - + + Comment + Sound file for alerts (uuid for sound asset) + Persist + 1 + Type + String + Value + ed124764-705d-d497-167a-182cd9fa2e6c + UISndBadKeystroke - - Comment - Sound file for invalid keystroke (uuid for sound asset) - Persist - 1 - Type - String - Value - 2ca849ba-2885-4bc3-90ef-d4987a5b983a - + + Comment + Sound file for invalid keystroke (uuid for sound asset) + Persist + 1 + Type + String + Value + 2ca849ba-2885-4bc3-90ef-d4987a5b983a + UISndClick - - Comment - Sound file for mouse click (uuid for sound asset) - Persist - 1 - Type - String - Value - 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 - + + Comment + Sound file for mouse click (uuid for sound asset) + Persist + 1 + Type + String + Value + 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 + UISndClickRelease - - Comment - Sound file for mouse button release (uuid for sound asset) - Persist - 1 - Type - String - Value - 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 - + + Comment + Sound file for mouse button release (uuid for sound asset) + Persist + 1 + Type + String + Value + 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 + UISndDebugSpamToggle - - Comment - Log UI sound effects as they are played - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Log UI sound effects as they are played + Persist + 1 + Type + Boolean + Value + 0 + UISndHealthReductionF - - Comment - Sound file for female pain (uuid for sound asset) - Persist - 1 - Type - String - Value - 219c5d93-6c09-31c5-fb3f-c5fe7495c115 - + + Comment + Sound file for female pain (uuid for sound asset) + Persist + 1 + Type + String + Value + 219c5d93-6c09-31c5-fb3f-c5fe7495c115 + UISndHealthReductionM - - Comment - Sound file for male pain (uuid for sound asset) - Persist - 1 - Type - String - Value - e057c244-5768-1056-c37e-1537454eeb62 - + + Comment + Sound file for male pain (uuid for sound asset) + Persist + 1 + Type + String + Value + e057c244-5768-1056-c37e-1537454eeb62 + UISndHealthReductionThreshold - - Comment - Amount of health reduction required to trigger "pain" sound - Persist - 1 - Type - F32 - Value - 10 - + + Comment + Amount of health reduction required to trigger "pain" sound + Persist + 1 + Type + F32 + Value + 10.0 + UISndInvalidOp - - Comment - Sound file for invalid operations (uuid for sound asset) - Persist - 1 - Type - String - Value - 4174f859-0d3d-c517-c424-72923dc21f65 - + + Comment + Sound file for invalid operations (uuid for sound asset) + Persist + 1 + Type + String + Value + 4174f859-0d3d-c517-c424-72923dc21f65 + UISndMoneyChangeDown - - Comment - Sound file for L$ balance increase (uuid for sound asset) - Persist - 1 - Type - String - Value - 104974e3-dfda-428b-99ee-b0d4e748d3a3 - + + Comment + Sound file for L$ balance increase (uuid for sound asset) + Persist + 1 + Type + String + Value + 104974e3-dfda-428b-99ee-b0d4e748d3a3 + UISndMoneyChangeThreshold - - Comment - Amount of change in L$ balance required to trigger "money" sound - Persist - 1 - Type - F32 - Value - 50 - + + Comment + Amount of change in L$ balance required to trigger "money" sound + Persist + 1 + Type + F32 + Value + 50.0 + UISndMoneyChangeUp - - Comment - Sound file for L$ balance decrease(uuid for sound asset) - Persist - 1 - Type - String - Value - 77a018af-098e-c037-51a6-178f05877c6f - + + Comment + Sound file for L$ balance decrease(uuid for sound asset) + Persist + 1 + Type + String + Value + 77a018af-098e-c037-51a6-178f05877c6f + UISndNewIncomingIMSession - - Comment - Sound file for new instant message session(uuid for sound asset) - Persist - 1 - Type - String - Value - 67cc2844-00f3-2b3c-b991-6418d01e1bb7 - + + Comment + Sound file for new instant message session(uuid for sound asset) + Persist + 1 + Type + String + Value + 67cc2844-00f3-2b3c-b991-6418d01e1bb7 + UISndObjectCreate - - Comment - Sound file for object creation (uuid for sound asset) - Persist - 1 - Type - String - Value - f4a0660f-5446-dea2-80b7-6482a082803c - + + Comment + Sound file for object creation (uuid for sound asset) + Persist + 1 + Type + String + Value + f4a0660f-5446-dea2-80b7-6482a082803c + UISndObjectDelete - - Comment - Sound file for object deletion (uuid for sound asset) - Persist - 1 - Type - String - Value - 0cb7b00a-4c10-6948-84de-a93c09af2ba9 - + + Comment + Sound file for object deletion (uuid for sound asset) + Persist + 1 + Type + String + Value + 0cb7b00a-4c10-6948-84de-a93c09af2ba9 + UISndObjectRezIn - - Comment - Sound file for rezzing objects (uuid for sound asset) - Persist - 1 - Type - String - Value - 3c8fc726-1fd6-862d-fa01-16c5b2568db6 - + + Comment + Sound file for rezzing objects (uuid for sound asset) + Persist + 1 + Type + String + Value + 3c8fc726-1fd6-862d-fa01-16c5b2568db6 + UISndObjectRezOut - - Comment - Sound file for derezzing objects (uuid for sound asset) - Persist - 1 - Type - String - Value - 00000000-0000-0000-0000-000000000000 - + + Comment + Sound file for derezzing objects (uuid for sound asset) + Persist + 1 + Type + String + Value + 00000000-0000-0000-0000-000000000000 + UISndPieMenuAppear - - Comment - Sound file for opening pie menu (uuid for sound asset) - Persist - 1 - Type - String - Value - 8eaed61f-92ff-6485-de83-4dcc938a478e - + + Comment + Sound file for opening pie menu (uuid for sound asset) + Persist + 1 + Type + String + Value + 8eaed61f-92ff-6485-de83-4dcc938a478e + UISndPieMenuHide - - Comment - Sound file for closing pie menu (uuid for sound asset) - Persist - 1 - Type - String - Value - 00000000-0000-0000-0000-000000000000 - + + Comment + Sound file for closing pie menu (uuid for sound asset) + Persist + 1 + Type + String + Value + 00000000-0000-0000-0000-000000000000 + UISndPieMenuSliceHighlight0 - - Comment - Sound file for selecting pie menu item 0 (uuid for sound asset) - Persist - 1 - Type - String - Value - d9f73cf8-17b4-6f7a-1565-7951226c305d - + + Comment + Sound file for selecting pie menu item 0 (uuid for sound asset) + Persist + 1 + Type + String + Value + d9f73cf8-17b4-6f7a-1565-7951226c305d + UISndPieMenuSliceHighlight1 - - Comment - Sound file for selecting pie menu item 1 (uuid for sound asset) - Persist - 1 - Type - String - Value - f6ba9816-dcaf-f755-7b67-51b31b6233e5 - + + Comment + Sound file for selecting pie menu item 1 (uuid for sound asset) + Persist + 1 + Type + String + Value + f6ba9816-dcaf-f755-7b67-51b31b6233e5 + UISndPieMenuSliceHighlight2 - - Comment - Sound file for selecting pie menu item 2 (uuid for sound asset) - Persist - 1 - Type - String - Value - 7aff2265-d05b-8b72-63c7-dbf96dc2f21f - + + Comment + Sound file for selecting pie menu item 2 (uuid for sound asset) + Persist + 1 + Type + String + Value + 7aff2265-d05b-8b72-63c7-dbf96dc2f21f + UISndPieMenuSliceHighlight3 - - Comment - Sound file for selecting pie menu item 3 (uuid for sound asset) - Persist - 1 - Type - String - Value - 09b2184e-8601-44e2-afbb-ce37434b8ba1 - + + Comment + Sound file for selecting pie menu item 3 (uuid for sound asset) + Persist + 1 + Type + String + Value + 09b2184e-8601-44e2-afbb-ce37434b8ba1 + UISndPieMenuSliceHighlight4 - - Comment - Sound file for selecting pie menu item 4 (uuid for sound asset) - Persist - 1 - Type - String - Value - bbe4c7fc-7044-b05e-7b89-36924a67593c - + + Comment + Sound file for selecting pie menu item 4 (uuid for sound asset) + Persist + 1 + Type + String + Value + bbe4c7fc-7044-b05e-7b89-36924a67593c + UISndPieMenuSliceHighlight5 - - Comment - Sound file for selecting pie menu item 5 (uuid for sound asset) - Persist - 1 - Type - String - Value - d166039b-b4f5-c2ec-4911-c85c727b016c - + + Comment + Sound file for selecting pie menu item 5 (uuid for sound asset) + Persist + 1 + Type + String + Value + d166039b-b4f5-c2ec-4911-c85c727b016c + UISndPieMenuSliceHighlight6 - - Comment - Sound file for selecting pie menu item 6 (uuid for sound asset) - Persist - 1 - Type - String - Value - 242af82b-43c2-9a3b-e108-3b0c7e384981 - + + Comment + Sound file for selecting pie menu item 6 (uuid for sound asset) + Persist + 1 + Type + String + Value + 242af82b-43c2-9a3b-e108-3b0c7e384981 + UISndPieMenuSliceHighlight7 - - Comment - Sound file for selecting pie menu item 7 (uuid for sound asset) - Persist - 1 - Type - String - Value - c1f334fb-a5be-8fe7-22b3-29631c21cf0b - + + Comment + Sound file for selecting pie menu item 7 (uuid for sound asset) + Persist + 1 + Type + String + Value + c1f334fb-a5be-8fe7-22b3-29631c21cf0b + UISndSnapshot - - Comment - Sound file for taking a snapshot (uuid for sound asset) - Persist - 1 - Type - String - Value - 3d09f582-3851-c0e0-f5ba-277ac5c73fb4 - + + Comment + Sound file for taking a snapshot (uuid for sound asset) + Persist + 1 + Type + String + Value + 3d09f582-3851-c0e0-f5ba-277ac5c73fb4 + UISndStartIM - - Comment - Sound file for starting a new IM session (uuid for sound asset) - Persist - 1 - Type - String - Value - c825dfbc-9827-7e02-6507-3713d18916c1 - + + Comment + Sound file for starting a new IM session (uuid for sound asset) + Persist + 1 + Type + String + Value + c825dfbc-9827-7e02-6507-3713d18916c1 + UISndTeleportOut - - Comment - Sound file for teleporting (uuid for sound asset) - Persist - 1 - Type - String - Value - d7a9a565-a013-2a69-797d-5332baa1a947 - + + Comment + Sound file for teleporting (uuid for sound asset) + Persist + 1 + Type + String + Value + d7a9a565-a013-2a69-797d-5332baa1a947 + UISndTyping - - Comment - Sound file for starting to type a chat message (uuid for sound asset) - Persist - 1 - Type - String - Value - 5e191c7b-8996-9ced-a177-b2ac32bfea06 - + + Comment + Sound file for starting to type a chat message (uuid for sound asset) + Persist + 1 + Type + String + Value + 5e191c7b-8996-9ced-a177-b2ac32bfea06 + UISndWindowClose - - Comment - Sound file for closing a window (uuid for sound asset) - Persist - 1 - Type - String - Value - 2c346eda-b60c-ab33-1119-b8941916a499 - + + Comment + Sound file for closing a window (uuid for sound asset) + Persist + 1 + Type + String + Value + 2c346eda-b60c-ab33-1119-b8941916a499 + UISndWindowOpen - - Comment - Sound file for opening a window (uuid for sound asset) - Persist - 1 - Type - String - Value - c80260ba-41fd-8a46-768a-6bf236360e3a - + + Comment + Sound file for opening a window (uuid for sound asset) + Persist + 1 + Type + String + Value + c80260ba-41fd-8a46-768a-6bf236360e3a + UseAltKeyForMenus - - Comment - Access menus via keyboard by tapping Alt - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Access menus via keyboard by tapping Alt + Persist + 1 + Type + Boolean + Value + 0 + UseChatBubbles - - Comment - Show chat above avatars head in chat bubbles - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Show chat above avatars head in chat bubbles + Persist + 1 + Type + Boolean + Value + 0 + UseDebugLogin - - Comment - Provides extra control over which grid to connect to - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Provides extra control over which grid to connect to + Persist + 1 + Type + Boolean + Value + 0 + UseDebugMenus - - Comment - Turns on "Debug" menu - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Turns on "Debug" menu + Persist + 1 + Type + Boolean + Value + 0 + UseDefaultColorPicker - - Comment - Use color picker supplied by operating system - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Use color picker supplied by operating system + Persist + 1 + Type + Boolean + Value + 0 + UseEnergy - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + UseExternalBrowser - - Comment - Use default browser when opening web pages instead of in-world browser. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Use default browser when opening web pages instead of in-world browser. + Persist + 1 + Type + Boolean + Value + 0 + UseFreezeFrame - - Comment - Freeze time when taking snapshots. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Freeze time when taking snapshots. + Persist + 1 + Type + Boolean + Value + 0 + UseOcclusion - - Comment - Enable object culling based on occlusion (coverage) by other objects - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enable object culling based on occlusion (coverage) by other objects + Persist + 1 + Type + Boolean + Value + 1 + + UseStartScreen + + Comment + Whether to load a start screen image or not. + Persist + 1 + Type + Boolean + Value + 1 + UseWebPagesOnPrims - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + UserConnectionPort - - Comment - Port that this client transmits on. - Persist - 1 - Type - U32 - Value - 0 - + + Comment + Port that this client transmits on. + Persist + 1 + Type + U32 + Value + 0 + UserLogFile - - Comment - User specified log file name. - Persist - 1 - Type - String - Value - - + + Comment + User specified log file name. + Persist + 1 + Type + String + Value + + UserLoginInfo - - Comment - Users loging data. - Persist - 1 - Type - LLSD - Value - - - UseStartScreen - - Comment - Whether to load a start screen image or not. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Users loging data. + Persist + 1 + Type + LLSD + Value + + + VFSOldSize - - Comment - [DO NOT MODIFY] Controls resizing of local file cache - Persist - 1 - Type - U32 - Value - 0 - + + Comment + [DO NOT MODIFY] Controls resizing of local file cache + Persist + 1 + Type + U32 + Value + 0 + VFSSalt - - Comment - [DO NOT MODIFY] Controls local file caching behavior - Persist - 1 - Type - U32 - Value - 1 - + + Comment + [DO NOT MODIFY] Controls local file caching behavior + Persist + 1 + Type + U32 + Value + 1 + VectorizeEnable - - Comment - Enable general vector operations and data alignment. - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable general vector operations and data alignment. + Persist + 1 + Type + Boolean + Value + 0 + VectorizePerfTest - - Comment - Test SSE/vectorization performance and choose fastest version. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Test SSE/vectorization performance and choose fastest version. + Persist + 1 + Type + Boolean + Value + 1 + VectorizeProcessor - - Comment - 0=Compiler Default, 1=SSE, 2=SSE2, autodetected - Persist - 0 - Type - U32 - Value - 0 - + + Comment + 0=Compiler Default, 1=SSE, 2=SSE2, autodetected + Persist + 0 + Type + U32 + Value + 0 + VectorizeSkin - - Comment - Enable vector operations for avatar skinning. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enable vector operations for avatar skinning. + Persist + 1 + Type + Boolean + Value + 1 + VelocityInterpolate - - Comment - Extrapolate object motion from last packet based on received velocity - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Extrapolate object motion from last packet based on received velocity + Persist + 1 + Type + Boolean + Value + 1 + VerboseLogs - - Comment - Display source file and line number for each log item for debugging purposes - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Display source file and line number for each log item for debugging purposes + Persist + 1 + Type + Boolean + Value + 0 + VersionChannelName - - Comment - Versioning Channel Name. - Persist - 1 - Type - String - Value - Second Life Release - + + Comment + Versioning Channel Name. + Persist + 1 + Type + String + Value + Second Life Release + VertexShaderEnable - - Comment - Enable/disable all GLSL shaders (debug) - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Enable/disable all GLSL shaders (debug) + Persist + 1 + Type + Boolean + Value + 0 + VivoxDebugLevel - - Comment - Logging level to use when launching the vivox daemon - Persist - 1 - Type - String - Value - -1 - + + Comment + Logging level to use when launching the vivox daemon + Persist + 1 + Type + String + Value + -1 + VivoxDebugServerName - - Comment - Hostname of the vivox account server to use for voice when not connected to Agni. - Persist - 1 - Type - String - Value - bhd.vivox.com - + + Comment + Hostname of the vivox account server to use for voice when not connected to Agni. + Persist + 1 + Type + String + Value + bhd.vivox.com + VoiceCallsFriendsOnly - - Comment - Only accept voice calls from residents on your friends list - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Only accept voice calls from residents on your friends list + Persist + 1 + Type + Boolean + Value + 0 + VoiceEarLocation - - Comment - Location of the virtual ear for voice - Persist - 1 - Type - S32 - Value - 0 - + + Comment + Location of the virtual ear for voice + Persist + 1 + Type + S32 + Value + 0 + VoiceHost - - Comment - Client SLVoice host to connect to - Persist - 1 - Type - String - Value - 127.0.0.1 - + + Comment + Client SLVoice host to connect to + Persist + 1 + Type + String + Value + 127.0.0.1 + VoiceImageLevel0 - - Comment - Texture UUID for voice image level 0 - Persist - 1 - Type - String - Value - 041ee5a0-cb6a-9ac5-6e49-41e9320507d5 - + + Comment + Texture UUID for voice image level 0 + Persist + 1 + Type + String + Value + 041ee5a0-cb6a-9ac5-6e49-41e9320507d5 + VoiceImageLevel1 - - Comment - Texture UUID for voice image level 1 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - + + Comment + Texture UUID for voice image level 1 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + VoiceImageLevel2 - - Comment - Texture UUID for voice image level 2 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - + + Comment + Texture UUID for voice image level 2 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + VoiceImageLevel3 - - Comment - Texture UUID for voice image level 3 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - + + Comment + Texture UUID for voice image level 3 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + VoiceImageLevel4 - - Comment - Texture UUID for voice image level 4 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - + + Comment + Texture UUID for voice image level 4 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + VoiceImageLevel5 - - Comment - Texture UUID for voice image level 5 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - + + Comment + Texture UUID for voice image level 5 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + VoiceImageLevel6 - - Comment - Texture UUID for voice image level 6 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - + + Comment + Texture UUID for voice image level 6 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + VoiceInputAudioDevice - - Comment - Audio input device to use for voice - Persist - 1 - Type - String - Value - Default - + + Comment + Audio input device to use for voice + Persist + 1 + Type + String + Value + Default + VoiceOutputAudioDevice - - Comment - Audio output device to use for voice - Persist - 1 - Type - String - Value - Default - + + Comment + Audio output device to use for voice + Persist + 1 + Type + String + Value + Default + VoicePort - - Comment - Client SLVoice port to connect to - Persist - 1 - Type - U32 - Value - 44124 - + + Comment + Client SLVoice port to connect to + Persist + 1 + Type + U32 + Value + 44124 + + WLSkyDetail + + Comment + Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies. + Persist + 1 + Type + U32 + Value + 64 + WarnAboutBadPCI - - Comment - Enables AboutBadPCI warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables AboutBadPCI warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnAboutDirectX9 - - Comment - Enables AboutDirectX9 warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables AboutDirectX9 warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnAboutOldGraphicsDriver - - Comment - Enables AboutOldGraphicsDriver warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables AboutOldGraphicsDriver warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnAboutPCIGraphics - - Comment - Enables AboutPCIGraphics warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables AboutPCIGraphics warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnBrowserLaunch - - Comment - Enables BrowserLaunch warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables BrowserLaunch warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnDeedObject - - Comment - Enables DeedObject warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables DeedObject warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstAppearance - - Comment - Enables FirstAppearance warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstMedia - - Comment - Enables FirstMedia warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstAppearance warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstAttach - - Comment - Enables FirstAttach warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstAttach warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstBalanceDecrease - - Comment - Enables FirstBalanceDecrease warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstBalanceDecrease warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstBalanceIncrease - - Comment - Enables FirstBalanceIncrease warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstBalanceIncrease warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstBuild - - Comment - Enables FirstBuild warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstBuild warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstDebugMenus - - Comment - Enables FirstDebugMenus warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstDebugMenus warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstFlexible - - Comment - Enables FirstFlexible warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstFlexible warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstGoTo - - Comment - Enables FirstGoTo warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstGoTo warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstInventory - - Comment - Enables FirstInventory warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstInventory warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstLeftClickNoHit - - Comment - Enables FirstLeftClickNoHit warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstLeftClickNoHit warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstMap - - Comment - Enables FirstMap warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstMap warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstMedia - - Comment - Enables FirstMedia warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstMedia warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstOverrideKeys - - Comment - Enables FirstOverrideKeys warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstOverrideKeys warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstSandbox - - Comment - Enables FirstSandbox warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstSandbox warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstSculptedPrim - - Comment - Enables FirstSculptedPrim warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstSculptedPrim warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstSit - - Comment - Enables FirstSit warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstSit warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstStreamingMusic - - Comment - Enables FirstStreamingMusic warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstStreamingMusic warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstStreamingVideo - - Comment - Enables FirstStreamingVideo warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstStreamingVideo warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstTeleport - - Comment - Enables FirstTeleport warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstTeleport warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnFirstVoice - - Comment - Enables FirstVoice warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables FirstVoice warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnNewClassified - - Comment - Enables NewClassified warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables NewClassified warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnQuickTimeInstalled - - Comment - Enables QuickTimeInstalled warning dialog - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables QuickTimeInstalled warning dialog + Persist + 1 + Type + Boolean + Value + 1 + WarnReturnToOwner - - Comment - Enables ReturnToOwner warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WindLightUseAtmosShaders - - Comment - Whether to enable or disable WindLight atmospheric shaders. - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Enables ReturnToOwner warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WatchdogEnabled + + Comment + Controls whether the thread watchdog timer is activated. + Persist + 1 + Type + Boolean + Value + 1 + + WaterEditPresets + + Comment + Whether to be able to edit the water defaults or not + Persist + 1 + Type + Boolean + Value + 0 + + WaterGLFogDensityScale + + Comment + Maps shader water fog density to gl fog density + Persist + 1 + Type + F32 + Value + 0.02 + + WaterGLFogDepthFloor + + Comment + Controls how dark water gl fog can get + Persist + 1 + Type + F32 + Value + 0.25 + + WaterGLFogDepthScale + + Comment + Controls how quickly gl fog gets dark under water + Persist + 1 + Type + F32 + Value + 50.0 + + WindLightUseAtmosShaders + + Comment + Whether to enable or disable WindLight atmospheric shaders. + Persist + 1 + Type + Boolean + Value + 1 + WindowHeight - - Comment - SL viewer window height - Persist - 1 - Type - S32 - Value - 700 - + + Comment + SL viewer window height + Persist + 1 + Type + S32 + Value + 700 + WindowMaximized - - Comment - SL viewer window maximized on login - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + SL viewer window maximized on login + Persist + 1 + Type + Boolean + Value + 1 + WindowWidth - - Comment - SL viewer window width - Persist - 1 - Type - S32 - Value - 1000 - + + Comment + SL viewer window width + Persist + 1 + Type + S32 + Value + 1000 + WindowX - - Comment - X coordinate of lower left corner of SL viewer window, relative to primary display (pixels) - Persist - 1 - Type - S32 - Value - 10 - + + Comment + X coordinate of lower left corner of SL viewer window, relative to primary display (pixels) + Persist + 1 + Type + S32 + Value + 10 + WindowY - - Comment - Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels) - Persist - 1 - Type - S32 - Value - 10 - - WLSkyDetail - - Comment - Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies. - Persist - 1 - Type - U32 - Value - 64 - + + Comment + Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels) + Persist + 1 + Type + S32 + Value + 10 + XferThrottle - - Comment - Maximum allowable downstream bandwidth for asset transfers (bits per second) - Persist - 1 - Type - F32 - Value - 150000 - + + Comment + Maximum allowable downstream bandwidth for asset transfers (bits per second) + Persist + 1 + Type + F32 + Value + 150000.0 + YawFromMousePosition - - Comment - Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right) - Persist - 1 - Type - F32 - Value - 90 - + + Comment + Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right) + Persist + 1 + Type + F32 + Value + 90.0 + YieldTime - - Comment - Yield some time to the local host. - Persist - 1 - Type - S32 - Value - -1 - + + Comment + Yield some time to the local host. + Persist + 1 + Type + S32 + Value + -1 + + ZoomDirect + + Comment + Map Joystick zoom axis directly to camera zoom. + Persist + 1 + Type + Boolean + Value + 0 + ZoomTime - - Comment - Time of transition between different camera modes (seconds) - Persist - 1 - Type - F32 - Value - 0.4000000059604644775390625 - + + Comment + Time of transition between different camera modes (seconds) + Persist + 1 + Type + F32 + Value + 0.40000000596 + llOwnerSayChatColor - - Comment - Color of chat messages from objects only visible to the owner - Persist - 1 - Type - Color4 - Value - - 0.9900000095367431640625 - 0.9900000095367431640625 - 0.689999997615814208984375 - 1 - - - ParcelMediaAutoPlayEnable - - Comment - Auto play parcel media when available - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Color of chat messages from objects only visible to the owner + Persist + 1 + Type + Color4 + Value + + 0.990000009537 + 0.990000009537 + 0.689999997616 + 1.0 + + particlesbeacon - - Comment - Beacon / Highlight particle generators - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Beacon / Highlight particle generators + Persist + 1 + Type + Boolean + Value + 0 + physicalbeacon - - Comment - Beacon / Highlight physical objects - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Beacon / Highlight physical objects + Persist + 1 + Type + Boolean + Value + 1 + renderbeacons - - Comment - Beacon / Highlight particle generators - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Beacon / Highlight particle generators + Persist + 1 + Type + Boolean + Value + 0 + renderhighlights - - Comment - Beacon / Highlight scripted objects with touch function - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Beacon / Highlight scripted objects with touch function + Persist + 1 + Type + Boolean + Value + 1 + scriptsbeacon - - Comment - Beacon / Highlight scripted objects - Persist - 1 - Type - Boolean - Value - 0 - + + Comment + Beacon / Highlight scripted objects + Persist + 1 + Type + Boolean + Value + 0 + scripttouchbeacon - - Comment - Beacon / Highlight scripted objects with touch function - Persist - 1 - Type - Boolean - Value - 1 - + + Comment + Beacon / Highlight scripted objects with touch function + Persist + 1 + Type + Boolean + Value + 1 + soundsbeacon - - Comment - Beacon / Highlight sound generators - Persist - 1 - Type - Boolean - Value - 0 - - SkyEditPresets - - Comment - Whether to be able to edit the sky defaults or not - Persist - 1 - Type - Boolean - Value - 0 - - WaterGLFogDepthFloor - - Comment - Controls how dark water gl fog can get - Persist - 1 - Type - F32 - Value - 0.25 - - WaterGLFogDepthScale - - Comment - Controls how quickly gl fog gets dark under water - Persist - 1 - Type - F32 - Value - 50.0 - - WaterGLFogDensityScale - - Comment - Maps shader water fog density to gl fog density - Persist - 1 - Type - F32 - Value - 0.02 - - EnableRippleWater - - Comment - Whether to use ripple water shader or not - Persist - 1 - Type - Boolean - Value - 1 - - WaterEditPresets - - Comment - Whether to be able to edit the water defaults or not - Persist - 1 - Type - Boolean - Value - 0 - - FloaterEnvRect - - Comment - Rectangle for Environment Editor - Persist - 1 - Type - Rect - Value - - 50 - 150 - 650 - 0 - - - FloaterAdvancedSkyRect - - Comment - Rectangle for Advanced Sky Editor - Persist - 1 - Type - Rect - Value - - 50 - 220 - 450 - 0 - - - FloaterDayCycleRect - - Comment - Rectangle for Day Cycle Editor - Persist - 1 - Type - Rect - Value - - 50 - 450 - 300 - 0 - - - FloaterAdvancedWaterRect - - Comment - Rectangle for Advanced Water Editor - Persist - 1 - Type - Rect - Value - - 50 - 220 - 450 - 0 - - - RenderFastAlpha - - Comment - Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces). - Persist - 1 - Type - Boolean - Value - 0 - - RenderDeferred - - Comment - Use deferred rendering pipeline. - Persist - 1 - Type - Boolean - Value - 0 - - RenderFSAASamples - - Comment - Number of samples to use for FSAA (0 = no AA). - Persist - 1 - Type - U32 - Value - 0 - - RenderTextureMemoryMultiple - - Comment - Multiple of texture memory value to use (should fit: 0 < value <= 1.0) - Persist - 1 - Type - F32 - Value - 1.0 - - Disregard128DefaultDrawDistance - - Comment - Whether to use the auto default to 128 draw distance - Persist - 1 - Type - Boolean - Value - 1 - - Disregard96DefaultDrawDistance - - Comment - Whether to use the auto default to 96 draw distance - Persist - 1 - Type - Boolean - Value - 1 - - - AvatarAxisDeadZone0 - - Comment - Avatar axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone1 - - Comment - Avatar axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone2 - - Comment - Avatar axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone3 - - Comment - Avatar axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone4 - - Comment - Avatar axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone5 - - Comment - Avatar axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisScale0 - - Comment - Avatar axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1 - - AvatarAxisScale1 - - Comment - Avatar axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1 - - AvatarAxisScale2 - - Comment - Avatar axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1 - - AvatarAxisScale3 - - Comment - Avatar axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1 - - AvatarAxisScale4 - - Comment - Avatar axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1 - - AvatarAxisScale5 - - Comment - Avatar axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1 - - AvatarFeathering - - Comment - Avatar feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16 - - - BuildAxisDeadZone0 - - Comment - Build axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone1 - - Comment - Build axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone2 - - Comment - Build axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone3 - - Comment - Build axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone4 - - Comment - Build axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone5 - - Comment - Build axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisScale0 - - Comment - Build axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1 - - BuildAxisScale1 - - Comment - Build axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1 - - BuildAxisScale2 - - Comment - Build axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1 - - BuildAxisScale3 - - Comment - Build axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1 - - BuildAxisScale4 - - Comment - Build axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1 - - BuildAxisScale5 - - Comment - Build axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1 - - BuildFeathering - - Comment - Build feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16 - - + + Comment + Beacon / Highlight sound generators + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/linden/indra/newview/app_settings/skinned_avatar.vp b/linden/indra/newview/app_settings/skinned_avatar.vp deleted file mode 100644 index a4adbd5..0000000 --- a/linden/indra/newview/app_settings/skinned_avatar.vp +++ /dev/null @@ -1,146 +0,0 @@ -!!ARBvp1.0 -# Vertex Program for lit, skinned avatars - -# Parameters -PARAM mat[45] = { program.env[0..44] }; -PARAM embossScale = program.env[63]; -PARAM proj[4] = { state.matrix.projection }; -PARAM modelAmbient = state.lightmodel.ambient; -PARAM materialDiffuse = state.material.diffuse; -PARAM lightDir0 = state.light[0].position; -PARAM diffuseCol0 = state.light[0].diffuse; -PARAM lightDir1 = state.light[1].position; -PARAM diffuseCol1 = state.light[1].diffuse; -PARAM lightPos2 = state.light[2].position; -PARAM diffuseCol2 = state.light[2].diffuse; -PARAM lightPos3 = state.light[3].position; -PARAM diffuseCol3 = state.light[3].diffuse; - -# Per vertex inputs -ATTRIB iPos = vertex.position; -ATTRIB iNormal = vertex.normal; -ATTRIB iTex0 = vertex.texcoord[0]; -ATTRIB iTex1 = vertex.texcoord[1]; -ATTRIB iWeight = vertex.attrib[1]; -ATTRIB iBinormal = vertex.attrib[6]; - -# Temporaries -TEMP blendBinorm; # result of skinned binormal -TEMP blendTangent; # result of skinned tangent -TEMP blendMat; -TEMP blendPos; # skinned vertex pos -TEMP dots; # dot product for lighting calculations -TEMP blendNorm; # skinned normal -TEMP colorAcc; # color accumulator - -ALIAS scaledWeight = colorAcc; -ALIAS divisor = blendMat; # divisor for normalization process -ALIAS lightDir = blendBinorm; - -ADDRESS address; - -# Outputs -OUTPUT oPos = result.position; #position -OUTPUT oCol0 = result.color; #primary color -OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0 -OUTPUT oTex1 = result.texcoord[1]; #texture coordinate set 1 -OUTPUT oFog = result.fogcoord; #output fog coord - -#fix input blending weight -ARL address.x, iWeight.x; -FRC scaledWeight.x, iWeight; - -#Output position and normal -MUL dots, mat[address.x + 1], {1,1,1,1}; -SUB blendMat, dots, mat[address.x + 0]; -MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 0]; -DP4 blendPos.x, blendMat, iPos; -DP3 blendNorm.x, blendMat, iNormal; -DP3 blendBinorm.x, blendMat, iBinormal; - -MUL dots, mat[address.x + 16], {1,1,1,1}; -SUB blendMat, dots, mat[address.x + 15]; -MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 15]; -DP4 blendPos.y, blendMat, iPos; -DP3 blendNorm.y, blendMat, iNormal; -DP3 blendBinorm.y, blendMat, iBinormal; - -MUL dots, mat[address.x + 31], {1,1,1,1}; -SUB blendMat, dots, mat[address.x + 30]; -MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 30]; -DP4 blendPos.z, blendMat, iPos; -DP3 blendNorm.z, blendMat, iNormal; -DP3 blendBinorm.z, blendMat, iBinormal; -MOV blendPos.w, {0, 0, 0, 1}; - -#renormalize normal -#add "normal spread" effect -ADD blendNorm, blendNorm, {0, 0, -0.4, 0}; -DP3 divisor.w, blendNorm, blendNorm; -RSQ divisor.xyz, divisor.w; -MUL blendNorm.xyz, blendNorm, divisor; - -#renormalize binormal -DP3 divisor.w, blendBinorm, blendBinorm; -RSQ divisor.xyz, divisor.w; -MUL blendBinorm.xyz, blendBinorm, divisor; - -#Projection -DP4 oPos.x, proj[0], blendPos; -DP4 oPos.y, proj[1], blendPos; -DP4 oPos.z, proj[2], blendPos; -DP4 oPos.w, proj[3], blendPos; - -#tangent = binormal X normal -XPD blendTangent, blendNorm, blendBinorm; - -#oTex1 = iTex0 + LLVector2( lightDir0 * tangent, lightDir0 * binormal ); -DP3 blendTangent.x, lightDir0, blendTangent; -DP3 blendTangent.y, lightDir0, blendBinorm; -MAD oTex1, embossScale.x, blendTangent, iTex0; - -#Light 0 -DP3 colorAcc.xyz, blendNorm, lightDir0; -MAD colorAcc.xyz, colorAcc, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX colorAcc, colorAcc, {0, 0, 0, 0}; - -# Accumulate color contributions. -MAD colorAcc.xyz, colorAcc.x, diffuseCol0, modelAmbient; -MOV colorAcc.w, {0, 0, 0, 1.0}; - -#Light 1 -DP3 dots.x, blendNorm, lightDir1; - -#Light 2 -SUB lightDir, lightPos2, blendPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir.xyz, lightDir, divisor; - -DP3 dots.y, blendNorm, lightDir; - -#Light 3 -SUB lightDir, lightPos3, blendPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir.xyz, lightDir, divisor; - -DP3 dots.z, blendNorm, lightDir; - -# Apply Lights -MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX dots, dots, {0,0,0,0}; -MAD colorAcc.xyz, dots.x, diffuseCol1, colorAcc; -MAD colorAcc.xyz, dots.y, diffuseCol2, colorAcc; -MAD colorAcc.xyz, dots.z, diffuseCol3, colorAcc; - -#Output color -MUL oCol0, materialDiffuse, colorAcc; - -#Output tex coordinate -MOV oTex0, iTex0; - -#Output fog -MOV oFog.x, blendPos.z; - -END diff --git a/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp b/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp deleted file mode 100644 index 5c45118..0000000 --- a/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp +++ /dev/null @@ -1,179 +0,0 @@ -!!ARBvp1.0 -# Vertex Program for lit, skinned avatars - -# Parameters -#PARAM gGravity = program.env[62]; - -PARAM gMat[45] = { program.env[0..44] }; -PARAM gWindDir = program.env[60]; # wind direction with strength stored in w -PARAM gSinWaveParams = program.env[61]; # frequency, frequency2, frequency, phase -PARAM gMinMaxConstants = {1.0, 0.166666, 0.0083143, .00018542}; #minimax-generated coefficients -PARAM gPiConstants = {0.159154943, 6.28318530, 3.141592653, 1.5707963}; # {1/2PI, 2PI, PI, PI/2} -PARAM gProjection[4] = { state.matrix.projection }; -PARAM gModelAmbient = state.lightmodel.ambient; -PARAM gMaterialDiffuse = state.material.diffuse; -PARAM gLightDir0 = state.light[0].position; -PARAM gDiffuseCol0 = state.light[0].diffuse; -PARAM gLightDir1 = state.light[1].position; -PARAM gDiffuseCol1 = state.light[1].diffuse; -PARAM gLightPos2 = state.light[2].position; -PARAM gDiffuseCol2 = state.light[2].diffuse; -PARAM gLightPos3 = state.light[3].position; -PARAM gDiffuseCol3 = state.light[3].diffuse; - -# Per vertex inputs -ATTRIB iPos = vertex.position; -ATTRIB iNormal = vertex.normal; -ATTRIB iTex0 = vertex.texcoord; -ATTRIB iWeight = vertex.attrib[1]; -ATTRIB iClothing = vertex.attrib[4]; - -# Temporaries -TEMP blendedPos; # weighted sum of tpos0 and tpos1 -TEMP blendNorm; # weighted sum of eyeNormal0 and eyeNormal1 -TEMP temp0; -TEMP temp1; # another general purpose temp -TEMP temp2; -TEMP windEffect; # amount of displacement from wind -TEMP blendMatX; -TEMP blendMatY; -TEMP blendMatZ; - -ALIAS colorAcc = temp0; -ALIAS sinWave = temp0; -ALIAS offsetPos = temp1; -ALIAS dots = temp1; # dot product for lighting calculations -ALIAS posDelta = windEffect; # movement of vertex according to joint angle -ALIAS pivot_pos = windEffect; -ALIAS scaledWeight = temp0; -ALIAS divisor = temp2; -ALIAS lightDir = windEffect; - -ADDRESS address; - -# Outputs -OUTPUT oPos = result.position; # position -OUTPUT oCol0 = result.color; # primary color -OUTPUT oTex0 = result.texcoord; # texture coordinate set 0 -OUTPUT oFog = result.fogcoord; # output fog coordinates - -#fix input blending weight -ARL address.x, iWeight.x; -FRC scaledWeight.x, iWeight; - -# Blend joint matrices -MUL blendMatX, gMat[address.x + 1], {1,1,1,1}; -SUB blendMatX, blendMatX, gMat[address.x + 0]; -MAD blendMatX, scaledWeight.x, blendMatX, gMat[address.x + 0]; -DP3 blendNorm.x, blendMatX, iNormal; - -MUL blendMatY, gMat[address.x + 16], {1,1,1,1}; -SUB blendMatY, blendMatY, gMat[address.x + 15]; -MAD blendMatY, scaledWeight.x, blendMatY, gMat[address.x + 15]; -DP3 blendNorm.y, blendMatY, iNormal; - -MUL blendMatZ, gMat[address.x + 31], {1,1,1,1}; -SUB blendMatZ, blendMatZ, gMat[address.x + 30]; -MAD blendMatZ, scaledWeight.x, blendMatZ, gMat[address.x + 30]; -DP3 blendNorm.z, blendMatZ, iNormal; - -#wind -DP3 windEffect, blendNorm, gWindDir; -MAD windEffect.xyz, windEffect, gSinWaveParams, gSinWaveParams.w; # use sin wave params to scale and offset input - -#reduce to period of 2 PI -MUL temp1.xyz, windEffect, gPiConstants.x; # change input as multiple of [0-2PI] to [0-1] -EXP temp0, temp1.x; # find mod(x, 1) -MUL windEffect.x, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI] - -# offset to [-PI, PI] -ADD windEffect.xyz, windEffect, {-3.141592, -3.141592, -3.141592, -3.141592}; - -#calculate sinusoid -MUL temp1, windEffect, windEffect; # x^2 -MAD sinWave, -temp1, gMinMaxConstants.w, gMinMaxConstants.z; # y = -(x^2)/7! + 1/5! -MAD sinWave, sinWave, -temp1, gMinMaxConstants.y; # y = -(x^2) * (-(x^2)/7! + 1/5!) + 1/3! -MAD sinWave, sinWave, -temp1, gMinMaxConstants.x; # y = -(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1 -MUL sinWave, sinWave, windEffect; # y = x * (-(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1) - -# sinWave.x holds sin(norm . wind_direction)+ -MUL sinWave.xyz, sinWave, gWindDir.w; # multiply by wind strength in gWindDir.w [-wind, wind] -SUB sinWave.xyz, sinWave, {0.2, 0.2, 0.2, 0.2}; -MUL sinWave.xyz, sinWave, iClothing.w; # modulate by clothing coverage - -DP3 temp2.x, iClothing, iClothing; -MAX temp2.x, temp2, {0, 0, 0, 0.2}; -MUL temp2.x, temp2.x, {3, 0, 0, 0}; -MUL sinWave.x, sinWave, temp2; - -#add pseudo-specular effect -ADD blendNorm, blendNorm, {0, 0, -0.5, 0}; - -#renormalize normal -DP3 divisor.w, blendNorm, blendNorm; -RSQ divisor.xyz, divisor.w; -MUL blendNorm.xyz, blendNorm, divisor; - -#Output position -DP4 blendedPos.x, blendMatX, iPos; -DP4 blendedPos.y, blendMatY, iPos; -DP4 blendedPos.z, blendMatZ, iPos; - -MUL offsetPos, gWindDir, sinWave.x; # multiply wind effect times clothing displacement -MAD blendedPos, {-1.0, -1.0, -1.0, 0.0}, offsetPos, blendedPos; # add to offset vertex position, and zero out effect from w - -MOV blendedPos.w, {0, 0, 0, 1}; - -#Projection -DP4 oPos.x, gProjection[0], blendedPos; # projection matrix -DP4 oPos.y, gProjection[1], blendedPos; -DP4 oPos.z, gProjection[2], blendedPos; -DP4 oPos.w, gProjection[3], blendedPos; - -#Light 0 -DP3 dots.x, blendNorm, gLightDir0; -MAD dots.x, dots.x, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX dots, dots, {0, 0, 0, 0}; - -# Accumulate color contributions. -MAD temp2, dots.x, gDiffuseCol0, gModelAmbient; -MOV colorAcc.xyz, temp2; - -#Light 1 -DP3 dots.x, blendNorm, gLightDir1; - -#Light 2 -SUB lightDir, gLightPos2, blendedPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir.xyz, lightDir, divisor; - -DP3 dots.y, blendNorm, lightDir; - -#Light 3 -SUB lightDir, gLightPos3, blendedPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir.xyz, lightDir, divisor; - -DP3 dots.z, blendNorm, lightDir; - -#Apply lights -MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX dots, dots, {0, 0, 0, 0}; -MAD colorAcc.xyz, dots.x, gDiffuseCol1, colorAcc; -MAD colorAcc.xyz, dots.y, gDiffuseCol2, colorAcc; -MAD colorAcc.xyz, dots.z, gDiffuseCol3, colorAcc; - -#Output fog -# This causes issues on ATI when fog is disabled -MOV oFog.x, blendedPos.z; - -#Output color -MOV colorAcc.w, {0, 0, 0, 1.0}; -MUL oCol0, gMaterialDiffuse, colorAcc; - -#Output tex coordinate -MOV oTex0, iTex0; - -END diff --git a/linden/indra/newview/app_settings/skinned_avatar_nobump.vp b/linden/indra/newview/app_settings/skinned_avatar_nobump.vp deleted file mode 100644 index 1874e54..0000000 --- a/linden/indra/newview/app_settings/skinned_avatar_nobump.vp +++ /dev/null @@ -1,128 +0,0 @@ -!!ARBvp1.0 -# Vertex Program for lit, skinned avatars - -# Parameters -PARAM mat[45] = { program.env[0..44] }; -PARAM proj[4] = { state.matrix.projection }; -PARAM modelAmbient = state.lightmodel.ambient; -PARAM materialDiffuse = state.material.diffuse; -PARAM lightDir0 = state.light[0].position; -PARAM diffuseCol0 = state.light[0].diffuse; -PARAM lightDir1 = state.light[1].position; -PARAM diffuseCol1 = state.light[1].diffuse; -PARAM lightPos2 = state.light[2].position; -PARAM diffuseCol2 = state.light[2].diffuse; -PARAM lightPos3 = state.light[3].position; -PARAM diffuseCol3 = state.light[3].diffuse; - -# Per vertex inputs -ATTRIB iPos = vertex.position; -ATTRIB iNormal = vertex.normal; -ATTRIB iTex0 = vertex.texcoord[0]; -ATTRIB iWeight = vertex.attrib[1]; - -# Temporaries -TEMP blendMat; -TEMP blendPos; # skinned vertex pos -TEMP dots; # dot product for lighting calculations -TEMP blendNorm; # skinned normal -TEMP colorAcc; # color accumulator -TEMP lightDir; - - -ALIAS scaledWeight = colorAcc; -ALIAS divisor = blendMat; # divisor for normalization process - -ADDRESS address; - -# Outputs -OUTPUT oPos = result.position; #position -OUTPUT oCol0 = result.color; #primary color -OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0 -OUTPUT oFog = result.fogcoord; #output fog coord - -#fix input blending weight -ARL address.x, iWeight.x; -FRC scaledWeight.x, iWeight; - -#Output position and normal -MUL dots, mat[address.x + 1], {1,1,1,1}; -SUB blendMat, dots, mat[address.x + 0]; -MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 0]; -DP4 blendPos.x, blendMat, iPos; -DP3 blendNorm.x, blendMat, iNormal; - -MUL dots, mat[address.x + 16], {1,1,1,1}; -SUB blendMat, dots, mat[address.x + 15]; -MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 15]; -DP4 blendPos.y, blendMat, iPos; -DP3 blendNorm.y, blendMat, iNormal; - - -MUL dots, mat[address.x + 31], {1,1,1,1}; -SUB blendMat, dots, mat[address.x + 30]; -MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 30]; -DP4 blendPos.z, blendMat, iPos; -DP3 blendNorm.z, blendMat, iNormal; -MOV blendPos.w, {0, 0, 0, 1}; - -#renormalize normal -#add "backlighting" effect -ADD blendNorm, blendNorm, {0, 0, -0.2, 0}; -DP3 divisor.w, blendNorm, blendNorm; -RSQ divisor.xyz, divisor.w; -MUL blendNorm.xyz, blendNorm, divisor; - - -#Projection -DP4 oPos.x, proj[0], blendPos; -DP4 oPos.y, proj[1], blendPos; -DP4 oPos.z, proj[2], blendPos; -DP4 oPos.w, proj[3], blendPos; - - -#Light 0 -DP3 colorAcc.xyz, blendNorm, lightDir0; -MAD colorAcc.xyz, colorAcc, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX colorAcc, colorAcc, {0, 0, 0, 0}; - -# Accumulate color contributions. -MAD colorAcc.xyz, colorAcc.x, diffuseCol0, modelAmbient; -MOV colorAcc.w, {0, 0, 0, 1.0}; - -#Light 1 -DP3 dots.x, blendNorm, lightDir1; - -#Light 2 -SUB lightDir, lightPos2, blendPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir.xyz, lightDir, divisor; - -DP3 dots.y, blendNorm, lightDir; - -#Light 3 -SUB lightDir, lightPos3, blendPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir.xyz, lightDir, divisor; - -DP3 dots.z, blendNorm, lightDir; - -#Apply lights -MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX dots, dots, {0, 0, 0, 0}; -MAD colorAcc.xyz, dots.x, diffuseCol1, colorAcc; -MAD colorAcc.xyz, dots.y, diffuseCol2, colorAcc; -MAD colorAcc.xyz, dots.z, diffuseCol3, colorAcc; - -#Output color -MUL oCol0, materialDiffuse, colorAcc; - -#Output tex coordinate -MOV oTex0, iTex0; - -#Output fog -MOV oFog.x, blendPos.z; - -END diff --git a/linden/indra/newview/app_settings/skinned_avatar_select.vp b/linden/indra/newview/app_settings/skinned_avatar_select.vp deleted file mode 100644 index 28506b0..0000000 --- a/linden/indra/newview/app_settings/skinned_avatar_select.vp +++ /dev/null @@ -1,60 +0,0 @@ -!!ARBvp1.0 -# Vertex Program for lit, skinned avatars - -# Parameters -PARAM mat[45] = { program.env[0..44] }; -PARAM proj[4] = { state.matrix.projection }; -PARAM materialDiffuse = state.material.diffuse; - -# Per vertex inputs -ATTRIB iPos = vertex.position; -ATTRIB iTex0 = vertex.texcoord[0]; -ATTRIB iWeight = vertex.attrib[1]; - -# Temporaries -TEMP blendMat; -TEMP blendPos; # skinned vertex pos -TEMP childPos; -TEMP parentPos; -TEMP dots; # dot product for lighting calculations -TEMP scaledWeight; - -ALIAS divisor = blendMat; # divisor for normalization process - -ADDRESS address; - -# Outputs -OUTPUT oPos = result.position; #position -OUTPUT oCol0 = result.color; #primary color -OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0 - -#fix input blending weight -ARL address.x, iWeight.x; -FRC scaledWeight.x, iWeight; - -#Output position and normal -DP4 parentPos.x, mat[address.x + 0], iPos; -DP4 parentPos.y, mat[address.x + 15], iPos; -DP4 parentPos.z, mat[address.x + 30], iPos; - -DP4 childPos.x, mat[address.x + 1], iPos; -DP4 childPos.y, mat[address.x + 16], iPos; -DP4 childPos.z, mat[address.x + 31], iPos; - -SUB blendPos, childPos, parentPos; -MAD blendPos, scaledWeight.x, blendPos, parentPos; -MOV blendPos.w, {0, 0, 0, 1}; - -#Projection -DP4 oPos.x, proj[0], blendPos; -DP4 oPos.y, proj[1], blendPos; -DP4 oPos.z, proj[2], blendPos; -DP4 oPos.w, proj[3], blendPos; - -#Output color -MOV oCol0, materialDiffuse; - -#Output tex coordinate -MOV oTex0, iTex0; - -END diff --git a/linden/indra/newview/app_settings/skinned_avatar_wind.vp b/linden/indra/newview/app_settings/skinned_avatar_wind.vp deleted file mode 100644 index 5f40086..0000000 --- a/linden/indra/newview/app_settings/skinned_avatar_wind.vp +++ /dev/null @@ -1,211 +0,0 @@ -!!ARBvp1.0 -# Vertex Program for lit, skinned avatars - -# Parameters -PARAM gMat[45] = { program.env[0..44] }; -PARAM gEmbossScale = program.env[63]; -PARAM gWindDir = program.env[60]; # wind direction with strength stored in w -PARAM gSinWaveParams = program.env[61]; # frequency, frequency2, frequency, phase -PARAM gGravity = program.env[62]; -PARAM gMinMaxConstants = {1.0, 0.166666, 0.0083143, .00018542}; #minimax-generated coefficients -PARAM gPiConstants = {0.159154943, 6.28318530, 3.141592653, 1.5707963}; # {1/2PI, 2PI, PI, PI/2} -PARAM gProj[4] = { state.matrix.projection }; -PARAM gModelAmbient = state.lightmodel.ambient; -PARAM gMaterialDiffuse = state.material.diffuse; -PARAM gLightDir0 = state.light[0].position; -PARAM gDiffuseCol0 = state.light[0].diffuse; -PARAM gLightDir1 = state.light[1].position; -PARAM gDiffuseCol1 = state.light[1].diffuse; -PARAM gLightPos2 = state.light[2].position; -PARAM gDiffuseCol2 = state.light[2].diffuse; -PARAM gLightPos3 = state.light[3].position; -PARAM gDiffuseCol3 = state.light[3].diffuse; - -# Per vertex inputs -ATTRIB iPos = vertex.position; -ATTRIB iNormal = vertex.normal; -ATTRIB iTex0 = vertex.texcoord[0]; -ATTRIB iTex1 = vertex.texcoord[1]; -ATTRIB iWeight = vertex.attrib[1]; -ATTRIB iClothing = vertex.attrib[4]; -ATTRIB iBinormal = vertex.attrib[6]; - -# Temporaries -TEMP blendMatX; -TEMP blendMatY; -TEMP blendMatZ; -TEMP blendPos; # weighted sum of tpos0 and tpos1 -TEMP blendNorm; # weighted sum of eyeNormal0 and eyeNormal1 -TEMP blendBinorm; # result of skinned binormal -TEMP temp0; -TEMP temp1; # another general purpose temp -TEMP temp2; - -ALIAS blendTangent = temp2; # result of skinned tangent - -ALIAS colorAcc = temp0; -ALIAS offsetPos = temp1; -ALIAS dots = temp1; # dot product for lighting calculations -ALIAS scaledWeight = temp0; # vertex weight as decoded from input weight -ALIAS divisor = temp2; -ALIAS sinWave = temp0; -ALIAS windEffect = temp2; -ALIAS lightDir = blendMatX; - -ADDRESS address; - -# Outputs -OUTPUT oPos = result.position; # position -OUTPUT oCol0 = result.color; # primary color -OUTPUT oTex0 = result.texcoord[0]; # texture coordinate set 0 -OUTPUT oTex1 = result.texcoord[1]; # texture coordinate set 1 -OUTPUT oFog = result.fogcoord; # output fog coordinates - -#fix input blending weight -ARL address.x, iWeight.x; -FRC scaledWeight.x, iWeight; - -# Blend joint matrices -MUL blendMatX, gMat[address.x + 1], {1,1,1,1}; -SUB blendMatX, blendMatX, gMat[address.x + 0]; -MAD blendMatX, scaledWeight.x, blendMatX, gMat[address.x + 0]; -DP3 blendNorm.x, blendMatX, iNormal; -DP3 blendBinorm.x, blendMatX, iBinormal; - -MUL blendMatY, gMat[address.x + 16], {1,1,1,1}; -SUB blendMatY, blendMatY, gMat[address.x + 15]; -MAD blendMatY, scaledWeight.x, blendMatY, gMat[address.x + 15]; -DP3 blendNorm.y, blendMatY, iNormal; -DP3 blendBinorm.y, blendMatY, iBinormal; - -MUL blendMatZ, gMat[address.x + 31], {1,1,1,1}; -SUB blendMatZ, blendMatZ, gMat[address.x + 30]; -MAD blendMatZ, scaledWeight.x, blendMatZ, gMat[address.x + 30]; -DP3 blendNorm.z, blendMatZ, iNormal; -DP3 blendBinorm.z, blendMatZ, iBinormal; - -#wind -DP3 windEffect, blendNorm, gWindDir; -DP3 blendPos.x, blendMatZ, iPos; -MAD windEffect.xyz, blendPos.x, {0.015, 0.015, 0.015, 0}, windEffect; -MAD windEffect.w, windEffect, {0, 0, 0, 2}, {0, 0, 0, 1}; # move wind offset value to [-1, 3] -MUL windEffect.w, windEffect, gWindDir; # modulate wind strength -MAD windEffect.xyz, windEffect, gSinWaveParams, gSinWaveParams.w; # use sin wave params to scale and offset input - -#reduce to period of 2 PI -MUL temp1.xyz, windEffect, gPiConstants.x; # change input as multiple of [0-2PI] to [0-1] -EXP temp0, temp1.x; # find mod(x, 1) -MUL windEffect.x, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI] -ADD temp1.z, temp1.z, -gPiConstants.w; # shift normal oscillation by PI/2 -EXP temp0, temp1.z; # find mod(x, 1) - -MUL windEffect.z, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI] - -# offset to [-PI, PI] -ADD windEffect.xyz, windEffect, {-3.141592, -3.141592, -3.141592, -3.141592}; - -#calculate sinusoid -MUL temp1, windEffect, windEffect; # x^2 -MAD sinWave, -temp1, gMinMaxConstants.w, gMinMaxConstants.z; # y = -(x^2)/7! + 1/5! -MAD sinWave, sinWave, -temp1, gMinMaxConstants.y; # y = -(x^2) * (-(x^2)/7! + 1/5!) + 1/3! -MAD sinWave, sinWave, -temp1, gMinMaxConstants.x; # y = -(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1 -MUL sinWave, sinWave, windEffect; # y = x * (-(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1) - -# sinWave.x holds sin(norm . wind_direction) with primary frequency -# sinWave.y holds sin(norm . wind_direction) with secondary frequency -# sinWave.z hold cos(norm . wind_direction) with primary frequency -MAD sinWave.xyz, sinWave, gWindDir.w, windEffect.w; # multiply by wind strength in gWindDir.w [-wind, wind] - # add normal facing bias offset [-wind,wind] -> [-wind - .25, wind + 1] -DP3 temp1, blendNorm, gGravity; # how much is this normal facing in direction of gGravity? -MIN temp1, temp1, {0.2, 0, 0, 0}; # clamp [-1, 1] to [-1, 0.2] -MUL temp1, temp1, {1.5, 0, 0, 0}; # scale from [-1,0.2] to [-1.5, 0.3] -ADD sinWave.x, sinWave, temp1; # add gGravity effect to sinwave (only primary frequency) -MUL sinWave.xyz, sinWave, iClothing.w; # modulate by clothing coverage -#MAD temp2, {1,1,1,1}, iClothing.w, {-1,-1,-1,-1}; -#ADD sinWave, sinWave, temp2; -MAX sinWave.xyz, sinWave, {-1, -1, -1, -1}; # clamp to underlying body shape -MUL offsetPos, iClothing, sinWave.x; # multiply wind effect times clothing displacement -MAD temp2, gWindDir, sinWave.z, blendNorm; # calculate normal offset due to wind oscillation -MAD offsetPos, {1.0, 1.0, 1.0, 0.0}, offsetPos, iPos; # add to offset vertex position, and zero out effect from w -MAD blendNorm, temp2, {2, 2, 2, 2}, blendNorm; # add sin wave effect on normals (exaggerated) - -#add "backlighting" effect -SUB colorAcc, {1, 1, 1, 1}, iClothing; -MAD blendNorm, colorAcc.w, {0, 0, -0.2, 0}, blendNorm; - -#renormalize normal (again) -DP3 divisor.w, blendNorm, blendNorm; -RSQ divisor.xyz, divisor.w; -MUL blendNorm.xyz, blendNorm, divisor; - -#project binormal to normal plane to ensure orthogonality -DP3 temp2, blendNorm, blendBinorm; -SUB blendBinorm, blendBinorm, temp2; - -#renormalize binormal -DP3 divisor.w, blendBinorm, blendBinorm; -RSQ divisor.xyz, divisor.w; -MUL blendBinorm.xyz, blendBinorm, divisor; - -#tangent = binormal X normal -XPD blendTangent, blendNorm, blendBinorm; - -#oTex1 = iTex0 + LLVector2( gLightDir0 * tangent, gLightDir0 * binormal ); -DP3 blendTangent.x, gLightDir0, blendTangent; -DP3 blendTangent.y, gLightDir0, blendBinorm; -MAD oTex1, gEmbossScale.x, blendTangent, iTex0; - -#Output position -DP4 blendPos.x, blendMatX, offsetPos; -DP4 blendPos.y, blendMatY, offsetPos; -DP4 blendPos.z, blendMatZ, offsetPos; -MOV blendPos.w, {0, 0, 0, 1}; - -#Projection -DP4 oPos.x, gProj[0], blendPos; -DP4 oPos.y, gProj[1], blendPos; -DP4 oPos.z, gProj[2], blendPos; -DP4 oPos.w, gProj[3], blendPos; - -#Light 0 -DP3 colorAcc.x, blendNorm, gLightDir0; -MAD colorAcc.x, colorAcc.x, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX colorAcc, colorAcc, {0, 0, 0, 0}; - -# Accumulate color contributions. -MAD colorAcc.xyz, colorAcc.x, gDiffuseCol0, gModelAmbient; - -#Light 1 -DP3 dots.x, blendNorm, gLightDir1; - -#Light 2 -SUB lightDir, gLightPos2, blendPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir, lightDir, divisor; -DP3 dots.y, blendNorm, lightDir; - -#Light 3 -SUB lightDir, gLightPos3, blendPos; -DP3 divisor.w, lightDir, lightDir; -RSQ divisor.xyz, divisor.w; -MUL lightDir, lightDir, divisor; -DP3 dots.z, blendNorm, lightDir; - -MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3}; -MAX dots, dots, {0, 0, 0, 0}; -MAD colorAcc, dots.x, gDiffuseCol1, colorAcc; -MAD colorAcc, dots.y, gDiffuseCol2, colorAcc; -MAD colorAcc, dots.z, gDiffuseCol3, colorAcc; - -#Output color -MOV colorAcc.w, {0, 0, 0, 1.0}; -MUL oCol0, gMaterialDiffuse, colorAcc; - -#Output tex coordinate -MOV oTex0, iTex0; - -#Output fog -MOV oFog.x, blendPos.z; - -END diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst index f2603d8..15062ae 100644 --- a/linden/indra/newview/files.lst +++ b/linden/indra/newview/files.lst @@ -1,6 +1,7 @@ newview/llagent.cpp newview/llagentdata.cpp newview/llagentpilot.cpp +newview/llanimstatelabels.cpp newview/llappviewer.cpp newview/llappviewerlinux.cpp newview/llassetuploadresponders.cpp @@ -251,6 +252,7 @@ newview/llstatbar.cpp newview/llstatgraph.cpp newview/llstatusbar.cpp newview/llstatview.cpp +newview/llstylemap.cpp newview/llsurface.cpp newview/llsurfacepatch.cpp newview/lltexlayer.cpp @@ -279,6 +281,7 @@ newview/lltoolselectland.cpp newview/lltoolselectrect.cpp newview/lltoolview.cpp newview/lltracker.cpp +newview/lltrans.cpp newview/lluploaddialog.cpp newview/llurl.cpp newview/llurldispatcher.cpp @@ -348,6 +351,7 @@ newview/llvotree.cpp newview/llvovolume.cpp newview/llvowater.cpp newview/llvowlsky.cpp +newview/llwatchdog.cpp newview/llwaterparammanager.cpp newview/llwaterparamset.cpp newview/llwearable.cpp diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi index 8db336f..836780d 100644 --- a/linden/indra/newview/installers/windows/installer_template.nsi +++ b/linden/indra/newview/installers/windows/installer_template.nsi @@ -87,7 +87,6 @@ SetShellVarContext all ; install for all users (if you change this, change it ; Start with some default values. StrCpy $INSTFLAGS "${INSTFLAGS}" -StrCpy $INSTFLAGS "$INSTFLAGS $LANGFLAGS" StrCpy $INSTPROG "${INSTNAME}" StrCpy $INSTEXE "${INSTEXE}" StrCpy $INSTSHORTCUT "${SHORTCUT}" @@ -933,26 +932,6 @@ Function .onInit ; save language in registry WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE - - ; generate language ID that will be used as a command line arg - StrCmp $LANGUAGE "1042" 0 +3 - StrCpy $LANGFLAGS " --set SystemLanguage ko" - Goto EndOfFunc - - StrCmp $LANGUAGE "1041" 0 +3 - StrCpy $LANGFLAGS " --set SystemLanguage ja" - Goto EndOfFunc - - StrCmp $LANGUAGE "1031" 0 +3 - StrCpy $LANGFLAGS " --set SystemLanguage de" - Goto EndOfFunc - - StrCmp $LANGUAGE "1033" 0 +3 - StrCpy $LANGFLAGS " --set SystemLanguage en-us" - Goto EndOfFunc - - EndOfFunc: - FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/linden/indra/newview/linux_tools/client-readme.txt b/linden/indra/newview/linux_tools/client-readme.txt index 87087be..179cb9e 100644 --- a/linden/indra/newview/linux_tools/client-readme.txt +++ b/linden/indra/newview/linux_tools/client-readme.txt @@ -12,7 +12,7 @@ Life itself - please see . 5. Troubleshooting 5.1. 'Error creating window.' 5.2. System hangs - 5.3. 'Shiny' and client performance + 5.3. Blank window after minimizing it 5.4. Audio 5.5. 'Alt' key for camera controls doesn't work 5.6. In-world movie playback @@ -98,16 +98,6 @@ you wish. These are the most commonly-encountered known issues which are specific to the Beta release of the Linux client. -* VISUAL EFFECTS AND PERFORMANCE - many Linux graphics drivers are not as - robust as their counterparts for other operating systems, so some advanced - Second Life graphical features have been DISABLED by default to aid - stability. See PROBLEM 3 in the TROUBLESHOOTING section if you wish to - turn these on to possibly enhance your experience. - -* MISC - The following features are not currently fully implemented on the - Linux client and are therefore known not to work properly: - * Full Unicode font rendering - * UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client is in 'windowed' mode, not 'fullscreen' mode. @@ -156,29 +146,21 @@ SOLUTION:- As a last resort, you can disable most of Second Life's advanced graphics features by editing the 'secondlife' script and removing the '#' from the line which reads '#export LL_GL_NOEXT=x' -PROBLEM 3:- Performance or graphical quality are not as high as I expect. -PROBLEM:- 'SHINY' doesn't work. -PROBLEM:- I can't turn on Anisotropic Filtering, Ripple Water, or AGP. -SOLUTION:- Some graphics performance features in Second Life are disabled - by default for the Linux version due to stability issues with some common - Linux graphic drivers. You can re-enable these features at the slight - risk of decreasing system stability. To do so: - * Edit the 'secondlife' script. Comment-out these lines by putting a '#' - in front of them: 'export LL_GL_BASICEXT=x', 'export LL_GL_NOEXT=x', - 'export LL_GL_BLACKLIST=abcdefghijklmno'. - * Now start Second Life. Some advanced performance features will now be - automatically used, and some new options in Preferences will now be - available to you; there is no guarantee, however, that they will - positively affect performance! -SOLUTION:- If you are not running an official Second Life client obtained from - secondlife.com, you should consider doing so as you may find its - performance to be superior to third-party versions. - -PROBLEM 4:- Sound effects seem to 'lag' a fraction of a second behind - actions. -SOLUTION:- You may uncomment the 'LL_BAD_ESD' line in the 'secondlife' script - to get more responsive audio. However, if you do this then you may - encounter audio issues or a hang during login, so beware. +PROBLEM 3:- After I minimize the Second Life window, it's just blank when + it comes back. +SOLUTION:- Some Linux desktop 'Visual Effects' features are incompatible + with Second Life. One reported solution is to use your desktop + configuration program to disable such effects. For example, on Ubuntu 7.10, + use the desktop toolbar menu to select System -> Preferences -> Appearance, + then change 'Visual Effects' to 'None'. + +PROBLEM 4:- Music and sound effects are silent or very stuttery. +SOLUTION:- The most common solution is to ensure that you have the 'esd' + program (part of the 'esound' package) installed and running before you + start Second Life. Users of Ubuntu (and some other) Linux systems can + simply run the following to install and configure 'esound': + sudo apt-get install esound + For others, simply running 'esd&' from a command-line should get it running. PROBLEM 5:- Using the 'Alt' key to control the camera doesn't work or just moves the Second Life window. diff --git a/linden/indra/newview/linux_tools/unicode.ttf b/linden/indra/newview/linux_tools/unicode.ttf deleted file mode 120000 index 91e6150..0000000 --- a/linden/indra/newview/linux_tools/unicode.ttf +++ /dev/null @@ -1 +0,0 @@ -/usr/share/fonts/truetype/kochi/kochi-gothic.ttf \ No newline at end of file diff --git a/linden/indra/newview/linux_tools/wrapper.sh b/linden/indra/newview/linux_tools/wrapper.sh index 1b7d6b8..eaa2f61 100755 --- a/linden/indra/newview/linux_tools/wrapper.sh +++ b/linden/indra/newview/linux_tools/wrapper.sh @@ -43,7 +43,7 @@ ## in the bin directory will be stripped: you should replace it with ## an unstripped binary before you run. #export LL_WRAPPER='gdb --args' -#export LL_WRAPPER='valgrind --smc-check=all --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' +#export LL_WRAPPER='valgrind --smc-check=all --error-limit=no --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' ## - Avoids an often-buggy X feature that doesn't really benefit us anyway. export SDL_VIDEO_X11_DGAMOUSE=0 @@ -104,7 +104,7 @@ if [ -n "$LL_RUN_ERR" ]; then if [ "$LL_RUN_ERR" = "runerr" ]; then # generic error running the binary echo '*** Unclean shutdown. ***' - if [ "`arch`" = "x86_64" ]; then + if [ "`uname -m`" = "x86_64" ]; then echo cat << EOFMARKER You are running the Second Life Viewer on a x86_64 platform. The diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index 397a11e..1d3c5d4 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp @@ -5823,6 +5823,7 @@ void LLAgent::teleportViaLure(const LLUUID& lure_id, BOOL godlike) msg->addUUIDFast(_PREHASH_AgentID, getID()); msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); msg->addUUIDFast(_PREHASH_LureID, lure_id); + // teleport_flags is a legacy field, now derived sim-side: msg->addU32("TeleportFlags", teleport_flags); sendReliableMessage(); } diff --git a/linden/indra/newview/llanimstatelabels.cpp b/linden/indra/newview/llanimstatelabels.cpp new file mode 100644 index 0000000..c51740f --- /dev/null +++ b/linden/indra/newview/llanimstatelabels.cpp @@ -0,0 +1,39 @@ +/** + * @file llanimationstatenames.cpp + * @brief Names for built-in animation states + * + * $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$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llanimstatelabels.h" +#include "lltrans.h" + +std::string LLAnimStateLabels::getStateLabel( const char *animName ) +{ + return LLTrans::getString("anim_" + LLString(animName) ); +} diff --git a/linden/indra/newview/llanimstatelabels.h b/linden/indra/newview/llanimstatelabels.h new file mode 100644 index 0000000..db1c1d8 --- /dev/null +++ b/linden/indra/newview/llanimstatelabels.h @@ -0,0 +1,42 @@ +/** + * @file llanimstatelabels.h + * @brief Declaration of LLVOAvatar class which is a derivation fo + * LLViewerObject + * + * $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_LLANIMSTATELABELS_H +#define LL_LLANIMSTATELABELS_H + +class LLAnimStateLabels +{ +public: + static std::string getStateLabel( const char *animName ); +}; + +#endif // LL_ANIMSTATELABELS_H diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 4a9a158..c6f4cdd 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -64,7 +64,7 @@ #include "llurldispatcher.h" #include "llurlhistory.h" #include "llfirstuse.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llweb.h" #include "llsecondlifeurls.h" @@ -102,6 +102,7 @@ #include "audioengine.h" #include "llviewermenu.h" #include "llselectmgr.h" +#include "lltrans.h" #include "lltracker.h" #include "llviewerparcelmgr.h" #include "llworldmapview.h" @@ -121,6 +122,7 @@ #include "llhudeffecttrail.h" #include "llvectorperfoptions.h" #include "llurlsimstring.h" +#include "llwatchdog.h" // Included so that constants/settings might be initialized // in save_settings_to_globals() @@ -160,6 +162,13 @@ #include "llcommandlineparser.h" +// annoying detail to determine whether font prefs are over-ridden +#if LL_LINUX +# define LL_DYNAMIC_FONT_DISCOVERY 1 +#else +# define LL_DYNAMIC_FONT_DISCOVERY 0 +#endif + // *FIX: These extern globals should be cleaned up. // The globals either represent state/config/resource-storage of either // this app, or another 'component' of the viewer. App globals should be @@ -183,24 +192,6 @@ // viewer.cpp - these are only used in viewer, should be easily moved. extern void disable_win_error_reporting(); -//#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac -#if LL_RELEASE_FOR_DOWNLOAD -// Default userserver for production builds is agni -#ifndef APPLE_PREVIEW -static EGridInfo GridDefaultChoice = GRID_INFO_AGNI; -#else -static EGridInfo GridDefaultChoice = GRID_INFO_ADITI; -#endif -#else -// Default userserver for development builds is none -static EGridInfo GridDefaultChoice = GRID_INFO_NONE; -#endif - -#if LL_WINDOWS -extern void create_console(); -#endif - - #if LL_DARWIN #include extern void init_apple_menu(const char* product); @@ -214,6 +205,7 @@ extern OSStatus DisplayReleaseNotes(void); extern BOOL gRandomizeFramerate; extern BOOL gPeriodicSlowFrame; +extern BOOL gDebugGL; //////////////////////////////////////////////////////////// // All from the last globals push... @@ -413,7 +405,8 @@ static void settings_modify() LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors"); LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor"); LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4] - gGL.setClever(gSavedSettings.getBOOL("RenderUseCleverUI")); + gDebugGL = gSavedSettings.getBOOL("RenderDebugGL"); + gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline"); #if LL_VECTORIZE if (gSysCPU.hasAltivec()) @@ -453,73 +446,35 @@ static void settings_modify() gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk")); } -void initGridChoice() +void LLAppViewer::initGridChoice() { - LLString gridChoice = gSavedSettings.getString("GridChoice"); - if(!gridChoice.empty()) - // Used to show first chunk of each argument passed in the - // window title. - { - // find the grid choice from the user setting. - int gridIndex = GRID_INFO_NONE; - for(;gridIndex < GRID_INFO_OTHER; ++gridIndex ) - { - if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str())) - { - gGridChoice = (EGridInfo)gridIndex; - - if(GRID_INFO_LOCAL == gGridChoice) - { - gGridName = LOOPBACK_ADDRESS_STRING; - break; - } - else - { - gGridName = gGridInfo[gGridChoice].mName; - break; - } - } - } - - if(GRID_INFO_OTHER == gridIndex) - { - // *FIX:MEP Can and should we validate that this is an IP address? - gGridChoice = (EGridInfo)gridIndex; - gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str()); - - } - } + // Load up the initial grid choice from: + // - hard coded defaults... + // - command line settings... + // - if dev build, persisted settings... + // Set the "grid choice", this is specified by command line. + std::string grid_choice = gSavedSettings.getString("CmdLineGridChoice"); + LLViewerLogin::getInstance()->setGridChoice(grid_choice); #if !LL_RELEASE_FOR_DOWNLOAD - if (gGridChoice == GRID_INFO_NONE) + // Development version: load last server choice by default + // ignored is the command line grid choice has been set + if(grid_choice.empty()) { - // Development version: load last server choice by default (overridden by cmd line args) - S32 server = gSavedSettings.getS32("ServerChoice"); - if (server != 0) - gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1); - if (server == GRID_INFO_OTHER) + S32 server = gSavedSettings.getS32("ServerChoice"); + server = llclamp(server, 0, (S32)GRID_INFO_COUNT - 1); + if(server == GRID_INFO_OTHER) { LLString custom_server = gSavedSettings.getString("CustomServer"); - if (custom_server.empty()) - { - gGridName = "none"; - } - else - { - gGridName = custom_server.c_str(); - } + LLViewerLogin::getInstance()->setGridChoice(custom_server); + } + else if(server != 0) + { + LLViewerLogin::getInstance()->setGridChoice((EGridInfo)server); } - - gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel); } #endif - - if (gGridChoice == GRID_INFO_NONE) - { - gGridChoice = GridDefaultChoice; - gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel); - } } bool send_url_to_other_instance(const std::string& url) @@ -583,23 +538,22 @@ LLAppViewer::LLAppViewer() : } sInstance = this; + + // Initialize the mainloop timeout. + mMainloopTimeout = new LLWatchdogTimeout(); } LLAppViewer::~LLAppViewer() { + // Initialize the mainloop timeout. + delete mMainloopTimeout; + // If we got to this destructor somehow, the app didn't hang. removeMarkerFile(); } bool LLAppViewer::init() { - // *NOTE:Mani - LLCurl::initClass is not thread safe. - // Called before threads are created. - LLCurl::initClass(); - - initThreads(); - - // // Start of the application // @@ -612,7 +566,6 @@ bool LLAppViewer::init() // that touches files should really go through the lldir API gDirUtilp->initAppDirs("SecondLife"); - initLogging(); // @@ -621,6 +574,12 @@ bool LLAppViewer::init() if (!initConfiguration()) return false; + // *NOTE:Mani - LLCurl::initClass is not thread safe. + // Called before threads are created. + LLCurl::initClass(); + + initThreads(); + writeSystemInfo(); // Build a string representing the current version number. @@ -640,7 +599,7 @@ bool LLAppViewer::init() // // Various introspection concerning the libs we're using. // - llinfos << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << llendl; + LL_DEBUGS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL; // Get the single value from the crash settings file, if it exists std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); @@ -683,15 +642,15 @@ bool LLAppViewer::init() // Load art UUID information, don't require these strings to be declared in code. LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml"); - llinfos << "Loading base colors from " << colors_base_filename << llendl; + LL_DEBUGS("InitInfo") << "Loading base colors from " << colors_base_filename << LL_ENDL; gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U); // Load overrides from user colors file LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml"); - llinfos << "Loading user colors from " << user_colors_filename << llendl; + LL_DEBUGS("InitInfo") << "Loading user colors from " << user_colors_filename << LL_ENDL; if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0) { - llinfos << "Cannot load user colors from " << user_colors_filename << llendl; + LL_DEBUGS("InitInfo") << "Cannot load user colors from " << user_colors_filename << LL_ENDL; } // Widget construction depends on LLUI being initialized @@ -782,7 +741,7 @@ bool LLAppViewer::init() #endif gGLManager.getGLInfo(gDebugInfo); - llinfos << gGLManager.getGLInfoString() << llendl; + gGLManager.printGLInfoString(); //load key settings bind_keyboard_functions(); @@ -790,7 +749,7 @@ bool LLAppViewer::init() // Load Default bindings if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keys.ini").c_str())) { - llerrs << "Unable to open keys.ini" << llendl; + LL_ERRS("InitInfo") << "Unable to open keys.ini" << LL_ENDL; } // Load Custom bindings (override defaults) gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str()); @@ -865,20 +824,16 @@ bool LLAppViewer::init() gSimFrames = (F32)gFrameCount; LLViewerJoystick::getInstance()->init(false); - if (LLViewerJoystick::getInstance()->isLikeSpaceNavigator()) - { - if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator") - { - LLFloaterJoystick::setSNDefaults(); - gSavedSettings.setString("JoystickInitialized", "SpaceNavigator"); - } - } - + return true; } bool LLAppViewer::mainLoop() { + mMainloopTimeout = new LLWatchdogTimeout(); + // *FIX:Mani - Make this a setting, once new settings exist in this branch. + mMainloopTimeout->setTimeout(5); + //------------------------------------------- // Run main loop until time to quit //------------------------------------------- @@ -910,7 +865,7 @@ bool LLAppViewer::mainLoop() { LLFastTimer t2(LLFastTimer::FTM_MESSAGES); #if LL_WINDOWS - if (!LLWinDebug::setupExceptionHandler()) + if (!LLWinDebug::checkExceptionHandler()) { llwarns << " Someone took over my exception handler (post messagehandling)!" << llendl; } @@ -1059,6 +1014,8 @@ bool LLAppViewer::mainLoop() } //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering. //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering. + + mMainloopTimeout->ping(); } } @@ -1083,6 +1040,8 @@ bool LLAppViewer::mainLoop() delete gServicePump; + mMainloopTimeout->stop(); + llinfos << "Exiting main_loop" << llendflush; return true; @@ -1346,7 +1305,9 @@ bool LLAppViewer::cleanup() gStaticVFS = NULL; delete gVFS; gVFS = NULL; - + + LLWatchdog::getInstance()->cleanup(); + end_messaging_system(); // *NOTE:Mani - The following call is not thread safe. @@ -1380,6 +1341,14 @@ bool LLAppViewer::initThreads() #else static const bool enable_threads = true; #endif + + const S32 NEVER_SUBMIT_REPORT = 2; + if(TRUE == gSavedSettings.getBOOL("WatchdogEnabled") + && (gCrashSettings.getS32("CrashSubmitBehavior") != NEVER_SUBMIT_REPORT)) + { + LLWatchdog::getInstance()->init(); + } + LLVFSThread::initClass(enable_threads && true); LLLFSThread::initClass(enable_threads && true); @@ -1434,7 +1403,7 @@ bool LLAppViewer::initLogging() } void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index) -{ +{ for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr) { LLString settings_name = (*itr).first; @@ -1487,7 +1456,7 @@ std::string LLAppViewer::getSettingsFileName(const std::string& file) } bool LLAppViewer::initConfiguration() -{ +{ //Set up internal pointers gSettings[sGlobalSettingsName] = &gSavedSettings; gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings; @@ -1523,30 +1492,17 @@ bool LLAppViewer::initConfiguration() gSavedSettings.setString("VersionChannelName", LL_CHANNEL); -#ifndef LL_RELEASE_FOR_DOWNLOAD +#ifndef LL_RELEASE_FOR_DOWNLOAD gSavedSettings.setBOOL("ShowConsoleWindow", TRUE); gSavedSettings.setBOOL("AllowMultipleViewers", TRUE); #endif -#if LL_WINDOWS - // Lists Japanese, Korean, and Chinese sanserif fonts available in - // Windows XP and Vista, as well as "Arial Unicode MS". +#if !LL_DYNAMIC_FONT_DISCOVERY + // static font discovery - user settings can override. gSavedSettings.setString("FontSansSerifFallback", - "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf"); -#elif LL_DARWIN - // This is a fairly complete Japanese font that ships with Mac OS X. - // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3". - // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light" - gSavedSettings.setString("FontSansSerifFallback", - "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf"); -#else - // 'unicode.ttf' doesn't exist, but hopefully an international - // user can take the hint and drop in their favourite local font. - gSavedSettings.setString("FontSansSerifFallback", - "unicode.ttf"); + LLWindow::getFontListSans()); #endif - // These are warnings that appear on the first experience of that condition. // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse // for disable/reset ability @@ -1590,7 +1546,16 @@ bool LLAppViewer::initConfiguration() // Do this *before* loading the settings file LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE); - // - read command line settings +#if LL_DYNAMIC_FONT_DISCOVERY + // Linux does *dynamic* font discovery which is preferable to + // whatever got written-out into the config file last time. This + // does remove the ability of the user to hand-define the fallbacks + // though, so from a config-management point of view this is hacky. + gSavedSettings.setString("FontSansSerifFallback", + LLWindow::getFontListSans()); +#endif + + // - read command line settings. LLControlGroupCLP clp; std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "cmd_line.xml"); @@ -1769,18 +1734,6 @@ bool LLAppViewer::initConfiguration() } } - const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI"); - if(loginuri && LLString::null != loginuri->getValue().asString()) - { - addLoginURI(loginuri->getValue().asString()); - } - - const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI"); - if(helperuri && LLString::null != helperuri->getValue().asString()) - { - setHelperURI(helperuri->getValue().asString()); - } - const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder"); if(skinfolder && LLString::null != skinfolder->getValue().asString()) { @@ -2025,7 +1978,7 @@ bool LLAppViewer::initConfiguration() bool LLAppViewer::initWindow() { - llinfos << "Initializing window..." << llendl; + LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL; // store setting in a global for easy access and modification gNoRender = gSavedSettings.getBOOL("DisableRendering"); @@ -2085,6 +2038,7 @@ bool LLAppViewer::initWindow() LLAlertDialog::parseAlerts("alerts.xml"); LLNotifyBox::parseNotify("notify.xml"); + LLTrans::parseStrings("strings.xml"); // Show watch cursor gViewerWindow->setCursor(UI_CURSOR_WAIT); @@ -2160,10 +2114,6 @@ void LLAppViewer::cleanupSavedSettings() { gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance); } - - // *REMOVE: This is now done via LLAppViewer::setCrashBehavior() - // Left vestigially in case I borked it. - // gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, gCrashBehavior); } void LLAppViewer::removeCacheFiles(const char* file_mask) @@ -2194,22 +2144,22 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple(); // Dump some debugging info - llinfos << gSecondLife + LL_INFOS("SystemInfo") << gSecondLife << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH - << llendl; + << LL_ENDL; // Dump the local time and time zone time_t now; time(&now); char tbuffer[256]; /* Flawfinder: ignore */ strftime(tbuffer, 256, "%Y-%m-%dT%H:%M:%S %Z", localtime(&now)); - llinfos << "Local time: " << tbuffer << llendl; + LL_INFOS("SystemInfo") << "Local time: " << tbuffer << LL_ENDL; // query some system information - llinfos << "CPU info:\n" << gSysCPU << llendl; - llinfos << "Memory info:\n" << gSysMemory << llendl; - llinfos << "OS: " << getOSInfo().getOSStringSimple() << llendl; - llinfos << "OS info: " << getOSInfo() << llendl; + LL_INFOS("SystemInfo") << "CPU info:\n" << gSysCPU << LL_ENDL; + LL_INFOS("SystemInfo") << "Memory info:\n" << gSysMemory << LL_ENDL; + LL_INFOS("SystemInfo") << "OS: " << getOSInfo().getOSStringSimple() << LL_ENDL; + LL_INFOS("SystemInfo") << "OS info: " << getOSInfo() << LL_ENDL; } void LLAppViewer::handleSyncViewerCrash() @@ -2221,6 +2171,8 @@ void LLAppViewer::handleSyncViewerCrash() void LLAppViewer::handleViewerCrash() { + llinfos << "Handle viewer crash entry." << llendl; + LLAppViewer* pApp = LLAppViewer::instance(); if (pApp->beingDebugged()) { @@ -2287,11 +2239,11 @@ void LLAppViewer::handleViewerCrash() apr_file_t* crash_file = ll_apr_file_open(crash_file_name, LL_APR_W); if (crash_file) { - llinfos << "Created crash marker file " << crash_file_name << llendl; + LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL; } else { - llwarns << "Cannot create error marker file " << crash_file_name << llendl; + LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_file_name << LL_ENDL; } apr_file_close(crash_file); } @@ -2303,6 +2255,7 @@ void LLAppViewer::handleViewerCrash() llofstream file(filename.c_str(), llofstream::binary); if(file.good()) { + llinfos << "Handle viewer crash generating stats log." << llendl; gMessageSystem->summarizeLogs(file); file.close(); } @@ -2318,6 +2271,7 @@ void LLAppViewer::handleViewerCrash() // Close the debug file pApp->closeDebug(); + LLError::logToFile(""); // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked @@ -2348,7 +2302,7 @@ bool LLAppViewer::anotherInstanceRunning() // If the file is currently locked, that means another process is already running. std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME); - llinfos << "Checking marker file for lock..." << llendl; + LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL; //Freeze case checks apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB); @@ -2360,19 +2314,19 @@ bool LLAppViewer::anotherInstanceRunning() if (fMarker == NULL) { // Another instance is running. Skip the rest of these operations. - llinfos << "Marker file is locked." << llendl; + LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL; return TRUE; } if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1) { apr_file_close(fMarker); - llinfos << "Marker file is locked." << llendl; + LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL; return TRUE; } // No other instances; we'll lock this file now & delete on quit. apr_file_close(fMarker); } - llinfos << "Marker file isn't locked." << llendl; + LL_DEBUGS("MarkerFile") << "Marker file isn't locked." << LL_ENDL; return FALSE; } @@ -2383,7 +2337,7 @@ void LLAppViewer::initMarkerFile() //There are marker files for two different types of crashes mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME); - llinfos << "Checking marker file for lock..." << llendl; + LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL; //We've got 4 things to test for here // - Other Process Running (SecondLife.exec_marker present, locked) @@ -2401,7 +2355,7 @@ void LLAppViewer::initMarkerFile() if(fMarker != NULL) { apr_file_close(fMarker); - llinfos << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << llendl; + LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << LL_ENDL; gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; } fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB); @@ -2416,7 +2370,7 @@ void LLAppViewer::initMarkerFile() if(fMarker != NULL) { apr_file_close(fMarker); - llinfos << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << llendl; + LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << LL_ENDL; if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; else gLastExecEvent = LAST_EXEC_OTHER_CRASH; } @@ -2436,34 +2390,33 @@ void LLAppViewer::initMarkerFile() { apr_file_close(fMarker); gLastExecEvent = LAST_EXEC_FROZE; - llinfos << "Exec marker found: program froze on previous execution" << llendl; + LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL; } // Create the marker file for this execution & lock it mMarkerFile = ll_apr_file_open(mMarkerFileName, LL_APR_W); if (mMarkerFile) { - llinfos << "Marker file created." << llendl; + LL_DEBUGS("MarkerFile") << "Marker file created." << LL_ENDL; } else { - llinfos << "Failed to create marker file." << llendl; + LL_INFOS("MarkerFile") << "Failed to create marker file." << LL_ENDL; return; } if (apr_file_lock(mMarkerFile, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) { apr_file_close(mMarkerFile); - llinfos << "Marker file cannot be locked." << llendl; + LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL; return; } - llinfos << "Marker file locked." << llendl; - llinfos << "Exiting initMarkerFile()." << llendl; + LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL; } void LLAppViewer::removeMarkerFile(bool leave_logout_marker) { - llinfos << "removeMarkerFile()" << llendl; + LL_DEBUGS("MarkerFile") << "removeMarkerFile()" << LL_ENDL; if (mMarkerFile != NULL) { ll_apr_file_remove( mMarkerFileName ); @@ -2588,7 +2541,7 @@ bool LLAppViewer::initCache() if (!gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation"))) { - llwarns << "Unable to set cache location" << llendl; + LL_WARNS("AppCache") << "Unable to set cache location" << LL_ENDL; gSavedSettings.setString("CacheLocation", ""); } @@ -2625,7 +2578,7 @@ bool LLAppViewer::initCache() { gSavedSettings.setU32("VFSOldSize", vfs_size_u32/MB); } - llinfos << "VFS CACHE SIZE: " << vfs_size/(1024*1024) << " MB" << llendl; + LL_INFOS("AppCache") << "VFS CACHE SIZE: " << vfs_size/(1024*1024) << " MB" << LL_ENDL; // This has to happen BEFORE starting the vfs //time_t ltime; @@ -2689,8 +2642,7 @@ bool LLAppViewer::initCache() { sscanf(found_file.c_str() + start_pos, "%d", &old_salt); } - llinfos << "Default vfs data file not present, found " << old_vfs_data_file << llendl; - llinfos << "Old salt: " << old_salt << llendl; + LL_DEBUGS("AppCache") << "Default vfs data file not present, found: " << old_vfs_data_file << " Old salt: " << old_salt << llendl; } } @@ -2702,8 +2654,8 @@ bool LLAppViewer::initCache() if (stat_result) { // We've got a bad/missing index file, nukem! - llwarns << "Bad or missing vfx index file " << old_vfs_index_file << llendl; - llwarns << "Removing old vfs data file " << old_vfs_data_file << llendl; + LL_WARNS("AppCache") << "Bad or missing vfx index file " << old_vfs_index_file << LL_ENDL; + LL_WARNS("AppCache") << "Removing old vfs data file " << old_vfs_data_file << LL_ENDL; LLFile::remove(old_vfs_data_file); LLFile::remove(old_vfs_index_file); @@ -2740,7 +2692,7 @@ bool LLAppViewer::initCache() if (resize_vfs) { - llinfos << "Removing old vfs and re-sizing" << llendl; + LL_DEBUGS("AppCache") << "Removing old vfs and re-sizing" << LL_ENDL; LLFile::remove(old_vfs_data_file); LLFile::remove(old_vfs_index_file); @@ -2748,8 +2700,8 @@ bool LLAppViewer::initCache() else if (old_salt != new_salt) { // move the vfs files to a new name before opening - llinfos << "Renaming " << old_vfs_data_file << " to " << new_vfs_data_file << llendl; - llinfos << "Renaming " << old_vfs_index_file << " to " << new_vfs_index_file << llendl; + LL_DEBUGS("AppCache") << "Renaming " << old_vfs_data_file << " to " << new_vfs_data_file << LL_ENDL; + LL_DEBUGS("AppCache") << "Renaming " << old_vfs_index_file << " to " << new_vfs_index_file << LL_ENDL; LLFile::rename(old_vfs_data_file, new_vfs_data_file); LLFile::rename(old_vfs_index_file, new_vfs_index_file); } @@ -2763,7 +2715,7 @@ bool LLAppViewer::initCache() { // Try again with fresh files // (The constructor deletes corrupt files when it finds them.) - llwarns << "VFS corrupt, deleted. Making new VFS." << llendl; + LL_WARNS("AppCache") << "VFS corrupt, deleted. Making new VFS." << LL_ENDL; delete gVFS; gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false); } @@ -2784,9 +2736,8 @@ bool LLAppViewer::initCache() void LLAppViewer::purgeCache() { - llinfos << "Purging Texture Cache..." << llendl; + LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << llendl; LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE); - llinfos << "Purging Cache..." << llendl; std::string mask = gDirUtilp->getDirDelimiter() + "*.*"; gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"").c_str(),mask); } @@ -2801,61 +2752,6 @@ const LLString& LLAppViewer::getWindowTitle() const return gWindowTitle; } -void LLAppViewer::resetURIs() const -{ - // Clear URIs when picking a new server - gLoginURIs.clear(); - gHelperURI.clear(); -} - -const std::vector& LLAppViewer::getLoginURIs() const -{ - if (gLoginURIs.empty()) - { - // not specified on the command line, use value from table - gLoginURIs.push_back(gGridInfo[gGridChoice].mLoginURI); - } - return gLoginURIs; -} - -const std::string& LLAppViewer::getHelperURI() const -{ - if (gHelperURI.empty()) - { - // not specified on the command line, use value from table - gHelperURI = gGridInfo[gGridChoice].mHelperURI; - } - return gHelperURI; -} - -void LLAppViewer::addLoginURI(const std::string& uri) -{ - // *NOTE:Mani - login uri trumps the --grid (gGridChoice) setting. - // Update gGridChoice to reflect the loginURI setting. - gLoginURIs.push_back(uri); - - const std::string& top_uri = getLoginURIs()[0]; - int i = 0; - for(; i < GRID_INFO_COUNT; ++i) - { - if(top_uri == gGridInfo[i].mLoginURI) - { - gGridChoice = (EGridInfo)i; - break; - } - } - - if(GRID_INFO_COUNT == i) - { - gGridChoice = GRID_INFO_OTHER; - } -} - -void LLAppViewer::setHelperURI(const std::string& uri) -{ - gHelperURI = uri; -} - // Callback from a dialog indicating user was logged out. void finish_disconnect(S32 option, void* userdata) { @@ -2916,7 +2812,7 @@ void LLAppViewer::badNetworkHandler() #if LL_WINDOWS // Generates the minidump. - LLWinDebug::handleException(NULL); + LLWinDebug::generateCrashStacks(NULL); #endif LLAppViewer::handleSyncViewerCrash(); LLAppViewer::handleViewerCrash(); @@ -2972,7 +2868,7 @@ void LLAppViewer::loadNameCache() // Try to load from the legacy format. This should go away after a // while. Phoenix 2008-01-30 - FILE* name_cache_fp = LLFile::fopen(name_cache.c_str(), "r"); // Flawfinder: ignore + LLFILE* name_cache_fp = LLFile::fopen(name_cache.c_str(), "r"); // Flawfinder: ignore if (name_cache_fp) { gCacheName->importFile(name_cache_fp); @@ -2993,15 +2889,6 @@ void LLAppViewer::saveNameCache() } } -bool LLAppViewer::isInProductionGrid() -{ - // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice, - // but it seems that loginURI trumps that. - const std::string& loginURI = getLoginURIs()[0]; - return (loginURI == gGridInfo[GRID_INFO_AGNI].mLoginURI); -} - - /*! @brief This class is an LLFrameTimer that can be created with an elapsed time that starts counting up from the given value rather than 0.0. @@ -3694,3 +3581,19 @@ void LLAppViewer::forceErrorSoftwareException() // *FIX: Any way to insure it won't be handled? throw; } + +void LLAppViewer::startMainloopTimeout(F32 secs) +{ + if(secs < 0.0f) + { + secs = gSavedSettings.getF32("MainloopTimeoutDefault"); + } + + mMainloopTimeout->setTimeout(secs); + mMainloopTimeout->start(); +} + +void LLAppViewer::stopMainloopTimeout() +{ + mMainloopTimeout->stop(); +} diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h index b3f3681..160f2c8 100644 --- a/linden/indra/newview/llappviewer.h +++ b/linden/indra/newview/llappviewer.h @@ -35,7 +35,7 @@ class LLTextureCache; class LLWorkerThread; class LLTextureFetch; - +class LLWatchdogTimeout; class LLCommandLineParser; class LLAppViewer : public LLApp @@ -96,13 +96,6 @@ public: const LLString& getSecondLifeTitle() const; // The Second Life title. const LLString& getWindowTitle() const; // The window display name. - // Helpers for URIs - void addLoginURI(const std::string& uri); - void setHelperURI(const std::string& uri); - const std::vector& getLoginURIs() const; - const std::string& getHelperURI() const; - void resetURIs() const; - void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user. void badNetworkHandler(); // Cause a crash state due to bad network packet. @@ -112,8 +105,6 @@ public: void loadNameCache(); void saveNameCache(); - bool isInProductionGrid(); - void removeMarkerFile(bool leave_logout_marker = false); // LLAppViewer testing helpers. @@ -137,6 +128,11 @@ public: std::string getSettingsFileName(const std::string& file); + // For thread debugging. + // llstartup needs to control this. + // llworld, send_agent_pause() also controls this. + void startMainloopTimeout(F32 secs = -1.0f); + void stopMainloopTimeout(); protected: virtual bool initWindow(); // Initialize the viewer's window. @@ -154,6 +150,7 @@ private: bool initThreads(); // Initialize viewer threads, return false on failure. bool initConfiguration(); // Initialize settings from the command line/config file. + void initGridChoice(); bool initCache(); // Initialize local client cache. void purgeCache(); // Clear the local cache. @@ -207,6 +204,8 @@ private: bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. S32 mYieldTime; LLSD mSettingsFileList; + + LLWatchdogTimeout* mMainloopTimeout; }; // consts from viewer.h diff --git a/linden/indra/newview/llappviewerlinux.cpp b/linden/indra/newview/llappviewerlinux.cpp index 084df9b..e41c505 100644 --- a/linden/indra/newview/llappviewerlinux.cpp +++ b/linden/indra/newview/llappviewerlinux.cpp @@ -37,7 +37,9 @@ #include "llmemtype.h" #include "llviewernetwork.h" +#include "llviewercontrol.h" #include "llmd5.h" +#include "llfindlocale.h" #include @@ -129,7 +131,7 @@ static inline BOOL do_basic_glibc_backtrace() std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); llinfos << "Opening stack trace file " << strace_filename << llendl; - FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); + LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); if (!StraceFile) { llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; @@ -160,7 +162,7 @@ static inline BOOL do_basic_glibc_backtrace() std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); llinfos << "Opening stack trace file " << strace_filename << llendl; - FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore + LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore if (!StraceFile) { llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; @@ -198,7 +200,7 @@ static inline BOOL do_elfio_glibc_backtrace() std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); llinfos << "Opening stack trace file " << strace_filename << llendl; - FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore + LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore if (!StraceFile) { llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; @@ -346,7 +348,7 @@ void LLAppViewerLinux::handleCrashReporting() {(char*)cmd.c_str(), ask_dialog, (char*)"-user", - (char*)gGridName.c_str(), + (char*)LLViewerLogin::getInstance()->getGridLabel().c_str(), (char*)"-name", (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(), NULL}; @@ -432,7 +434,27 @@ bool LLAppViewerLinux::initLogging() bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp) { - clp.parseCommandLine(gArgC, gArgV); + if (!clp.parseCommandLine(gArgC, gArgV)) + { + return false; + } + + // Find the system language. + FL_Locale *locale = NULL; + FL_Success success = FL_FindLocale(&locale, FL_MESSAGES); + if (success != 0) + { + if (success >= 2 && locale->lang) // confident! + { + LLControlVariable* c = gSavedSettings.getControl("SystemLanguage"); + if(c) + { + c->setValue(std::string(locale->lang), false); + } + } + FL_FreeLocale(&locale); + } + return true; } diff --git a/linden/indra/newview/llappviewermacosx.cpp b/linden/indra/newview/llappviewermacosx.cpp index c128634..96b6b24 100644 --- a/linden/indra/newview/llappviewermacosx.cpp +++ b/linden/indra/newview/llappviewermacosx.cpp @@ -47,7 +47,7 @@ #include "llfloaterworldmap.h" #include "llurldispatcher.h" #include - +#include "lldir.h" namespace { // The command line args stored. @@ -197,12 +197,13 @@ void LLAppViewerMacOSX::handleCrashReporting() { // Macintosh LLString command_str; - command_str = "open crashreporter.app"; + command_str += "open crashreporter.app"; + + clear_signals(); + llinfos << "Launching crash reporter using: '" << command_str << "'" << llendl; system(command_str.c_str()); /* Flawfinder: ignore */ - - // Sometimes signals don't seem to quit the viewer. - // Make sure we exit so as to not totally confuse the user. - exit(1); + llinfos << "returned from crash reporter... dying" << llendl; + _exit(1); } std::string LLAppViewerMacOSX::generateSerialNumber() diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp index a2d89a3..59883e5 100644 --- a/linden/indra/newview/llappviewerwin32.cpp +++ b/linden/indra/newview/llappviewerwin32.cpp @@ -54,9 +54,23 @@ #include "llviewernetwork.h" #include "llmd5.h" +#include "llfindlocale.h" #include "llcommandlineparser.h" +//*FIX:Mani - This hack is to fix a linker issue with libndofdev.lib +// The lib was compiled under VS2005 - in VS2003 we need to remap assert +#ifdef LL_DEBUG + #if (_MSC_VER < 1400) + extern "C" { + void _wassert(const wchar_t * _Message, const wchar_t *_File, unsigned _Line) + { + llerrs << _Message << llendl; + } + } + #endif +#endif + LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop) { // *NOTE:Mani - this code is stolen from LLApp, where its never actually used. @@ -78,7 +92,7 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti // Generate a minidump if we can. // Before we wake the error thread... // Which will start the crash reporting. - LLWinDebug::handleException(exception_infop); + LLWinDebug::generateCrashStacks(exception_infop); // Flag status to error, so thread_error starts its work LLApp::setError(); @@ -118,27 +132,11 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine); - // *FIX:Mani This method is poorly named, since the exception - // is now handled by LLApp. - bool ok = LLWinDebug::setupExceptionHandler(); + LLWinDebug::initExceptionHandler(viewer_windows_exception_handler); - // Actually here's the exception setup. - LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; - prev_filter = SetUnhandledExceptionFilter(viewer_windows_exception_handler); - if (!prev_filter) - { - llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with NULL!" << llendl; - ok = FALSE; - } - if (prev_filter != LLWinDebug::handleException) - { - llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with " << prev_filter << "!" << llendl; - ok = FALSE; - } - viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); - ok = viewer_app_ptr->init(); + bool ok = viewer_app_ptr->init(); if(!ok) { llwarns << "Application init failed." << llendl; @@ -326,14 +324,14 @@ bool LLAppViewerWin32::initHardwareTest() LLSplashScreen::update("Detecting hardware..."); - llinfos << "Attempting to poll DirectX for hardware info" << llendl; + LL_DEBUGS("AppInit") << "Attempting to poll DirectX for hardware info" << LL_ENDL; gDXHardware.setWriteDebugFunc(write_debug_dx); BOOL probe_ok = gDXHardware.getInfo(vram_only); if (!probe_ok && gSavedSettings.getWarning("AboutDirectX9")) { - llinfos << "DirectX probe failed, alerting user." << llendl; + LL_WARNS("AppInit") << "DirectX probe failed, alerting user." << LL_ENDL; // Warn them that runnin without DirectX 9 will // not allow us to tell them about driver issues @@ -354,13 +352,13 @@ bool LLAppViewerWin32::initHardwareTest() OSMB_YESNO); if (OSBTN_NO== button) { - llinfos << "User quitting after failed DirectX 9 detection" << llendl; + LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL; LLWeb::loadURLExternal(DIRECTX_9_URL); return false; } gSavedSettings.setWarning("AboutDirectX9", FALSE); } - llinfos << "Done polling DirectX for hardware info" << llendl; + LL_DEBUGS("AppInit") << "Done polling DirectX for hardware info" << LL_ENDL; // Only probe once after installation gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE); @@ -372,20 +370,41 @@ bool LLAppViewerWin32::initHardwareTest() LLSplashScreen::update(splash_msg.str().c_str()); } - if (!LLWinDebug::setupExceptionHandler()) + if (!LLWinDebug::checkExceptionHandler()) { - llwarns << " Someone took over my exception handler (post hardware probe)!" << llendl; + LL_WARNS("AppInit") << " Someone took over my exception handler (post hardware probe)!" << LL_ENDL; } gGLManager.mVRAM = gDXHardware.getVRAM(); - llinfos << "Detected VRAM: " << gGLManager.mVRAM << llendl; + LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL; return true; } bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp) { - return clp.parseCommandLineString(mCmdLine); + if (!clp.parseCommandLineString(mCmdLine)) + { + return false; + } + + // Find the system language. + FL_Locale *locale = NULL; + FL_Success success = FL_FindLocale(&locale, FL_MESSAGES); + if (success != 0) + { + if (success >= 2 && locale->lang) // confident! + { + LLControlVariable* c = gSavedSettings.getControl("SystemLanguage"); + if(c) + { + c->setValue(std::string(locale->lang), false); + } + } + FL_FreeLocale(&locale); + } + + return true; } void LLAppViewerWin32::handleSyncCrashTrace() @@ -401,7 +420,7 @@ void LLAppViewerWin32::handleCrashReporting() exe_path += "win_crash_logger.exe"; std::string arg_string = "-user "; - arg_string += gGridName; + arg_string += LLViewerLogin::getInstance()->getGridLabel(); switch(getCrashBehavior()) { diff --git a/linden/indra/newview/llbox.cpp b/linden/indra/newview/llbox.cpp index 984d15b..1e6d282 100644 --- a/linden/indra/newview/llbox.cpp +++ b/linden/indra/newview/llbox.cpp @@ -34,7 +34,7 @@ #include "llbox.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llglheaders.h" LLBox gBox; diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp index d1834a6..bbbdb93 100644 --- a/linden/indra/newview/llchatbar.cpp +++ b/linden/indra/newview/llchatbar.cpp @@ -144,6 +144,7 @@ BOOL LLChatBar::postBuild() mInputEditor->setRevertOnEsc( FALSE ); mInputEditor->setIgnoreTab(TRUE); mInputEditor->setPassDelete(TRUE); + mInputEditor->setReplaceNewlinesWithSpaces(FALSE); mInputEditor->setMaxTextLength(1023); mInputEditor->setEnableLineHistory(TRUE); diff --git a/linden/indra/newview/llcolorswatch.cpp b/linden/indra/newview/llcolorswatch.cpp index 3f18d39..64db86c 100644 --- a/linden/indra/newview/llcolorswatch.cpp +++ b/linden/indra/newview/llcolorswatch.cpp @@ -39,7 +39,7 @@ // Project includes #include "llui.h" -#include "llglimmediate.h" +#include "llrender.h" #include "lluiconstants.h" #include "llviewerwindow.h" #include "llviewercontrol.h" diff --git a/linden/indra/newview/llcommandlineparser.cpp b/linden/indra/newview/llcommandlineparser.cpp index 8123632..45f33dc 100644 --- a/linden/indra/newview/llcommandlineparser.cpp +++ b/linden/indra/newview/llcommandlineparser.cpp @@ -291,12 +291,15 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp) } catch(LLCLPLastOption&) { - // Continue without parsing. - std::string msg = "Found tokens past last option. Ignoring."; - llwarns << msg << llendl; - mErrorMsg = msg; - // boost::po will have stored a mal-formed option. + // This exception means a token was read after an option + // that must be the last option was reached (see url and slurl options) + + // boost::po will have stored a malformed option. // All such options will be removed below. + // The last option read, the last_option option, and its value + // are put into the error message. + std::string last_option; + std::string last_value; for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();) { po::variables_map::iterator tempI = i++; @@ -304,7 +307,27 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp) { gVariableMap.erase(tempI); } + else + { + last_option = tempI->first; + LLCommandLineParser::token_vector_t* tv = + boost::any_cast(&(tempI->second.value())); + if(!tv->empty()) + { + last_value = (*tv)[tv->size()-1]; + } + } } + + // Continue without parsing. + std::ostringstream msg; + msg << "Caught Error: Found options after last option: " + << last_option << " " + << last_value; + + llwarns << msg.str() << llendl; + mErrorMsg = msg.str(); + return false; } return true; } diff --git a/linden/indra/newview/llcompilequeue.cpp b/linden/indra/newview/llcompilequeue.cpp index aeaa189..45d8e1c 100644 --- a/linden/indra/newview/llcompilequeue.cpp +++ b/linden/indra/newview/llcompilequeue.cpp @@ -386,7 +386,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id, asset_id.toString(uuid_str); snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */ - FILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ + LLFILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ if (fp) { const S32 buf_size = 65536; diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp index 517e06f..08ef124 100644 --- a/linden/indra/newview/llconsole.cpp +++ b/linden/indra/newview/llconsole.cpp @@ -262,34 +262,38 @@ void LLConsole::addQueuedLines() if (!wline.empty() && mFont != NULL) { // Wrap lines that are longer than the view is wide. - S32 offset = 0; - while( offset < (S32)wline.length() ) + S32 line_start_offset = 0; + while( line_start_offset < (S32)wline.length() ) { - S32 skip_chars; // skip '\n' - // Figure out if a word-wrapped line fits here. - LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), offset); - if (line_end != LLWString::npos) - { - skip_chars = 1; // skip '\n' - } - else + // Find the next '\n', if any + LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), line_start_offset); + if (LLWString::npos == line_end) { + // no more '\n's, try to use the whole line line_end = wline.size(); - skip_chars = 0; } - U32 drawable = mFont->maxDrawableChars(wline.c_str()+offset, (F32)getRect().getWidth(), line_end-offset, TRUE); + // Find how many characters will reasonably fit in the allowed width + U32 drawable = mFont->maxDrawableChars(wline.c_str()+line_start_offset, (F32)getRect().getWidth(), line_end-line_start_offset, TRUE); if (drawable != 0) { - LLFixedBuffer::addLine(wline.substr(offset, drawable)); + LLFixedBuffer::addLine(wline.substr(line_start_offset, drawable)); mAddTimes[mAddTimes.size()-1] = line_info.add_time; + + // move the line_start_offset by the number of characters we were able to draw, up to an implicit or explicit line-break. + line_start_offset += drawable; } else { - // force a blank line + // no drawable characters - force a blank line and try the next character. LLFixedBuffer::addLine(" "); + line_start_offset++; } mColors.push_back(color); - offset += (drawable + skip_chars); + // if this was an *explicit* line-break or the end of the text, then increment the offset for the start of the next line (if any). + if (line_start_offset == line_end) + { + line_start_offset++; + } } } } diff --git a/linden/indra/newview/llcubemap.cpp b/linden/indra/newview/llcubemap.cpp index 31937ba..f79fd0f 100644 --- a/linden/indra/newview/llcubemap.cpp +++ b/linden/indra/newview/llcubemap.cpp @@ -38,6 +38,8 @@ #include "v4coloru.h" #include "v3math.h" +#include "llrender.h" + #include "llviewercamera.h" #include "llviewerimage.h" #include "llviewerimagelist.h" @@ -95,9 +97,7 @@ void LLCubeMap::initGL() mImages[i]->createGLTexture(0, mRawImages[i], texname); glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, texname); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + mImages[i]->setClampCubemap (TRUE, TRUE, TRUE); stop_glerror(); } } @@ -187,16 +187,15 @@ void LLCubeMap::bind() // We assume that if they have cube mapping, they have multitexturing. if (mTextureStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); + gGL.getTexUnit(mTextureStage)->activate(); } glEnable(GL_TEXTURE_CUBE_MAP_ARB); glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName()); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, (use_cube_mipmaps? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); + mImages[0]->setMipFilterNearest (FALSE, FALSE); if (mTextureStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } else @@ -221,14 +220,14 @@ void LLCubeMap::enableTexture(S32 stage) { if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + stage); + gGL.getTexUnit(stage)->activate(); } glEnable(GL_TEXTURE_CUBE_MAP_ARB); if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } } @@ -240,7 +239,7 @@ void LLCubeMap::enableTextureCoords(S32 stage) { if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + stage); + gGL.getTexUnit(stage)->activate(); } glEnable(GL_TEXTURE_GEN_R); @@ -253,7 +252,7 @@ void LLCubeMap::enableTextureCoords(S32 stage) if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } } @@ -272,13 +271,13 @@ void LLCubeMap::disableTexture(void) { if (mTextureStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); + gGL.getTexUnit(mTextureStage)->activate(); } glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); glDisable(GL_TEXTURE_CUBE_MAP_ARB); if (mTextureStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } } @@ -289,14 +288,14 @@ void LLCubeMap::disableTextureCoords(void) { if (mTextureCoordStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB + mTextureCoordStage); + gGL.getTexUnit(mTextureCoordStage)->activate(); } glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glDisable(GL_TEXTURE_GEN_R); if (mTextureCoordStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } } @@ -307,7 +306,7 @@ void LLCubeMap::setMatrix(S32 stage) if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB+stage); + gGL.getTexUnit(stage)->activate(); } LLVector3 x(LLVector3d(gGLModelView+0)); @@ -326,7 +325,7 @@ void LLCubeMap::setMatrix(S32 stage) if (stage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } @@ -334,7 +333,7 @@ void LLCubeMap::restoreMatrix() { if (mMatrixStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB+mMatrixStage); + gGL.getTexUnit(mMatrixStage)->activate(); } glMatrixMode(GL_TEXTURE); glPopMatrix(); @@ -342,10 +341,17 @@ void LLCubeMap::restoreMatrix() if (mMatrixStage > 0) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } } +void LLCubeMap::setReflection (void) +{ + glBindTexture (GL_TEXTURE_CUBE_MAP_ARB, getGLName()); + mImages[0]->setMipFilterNearest (FALSE, FALSE); + mImages[0]->setClampCubemap (TRUE, TRUE); +} + LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const { LLVector3 dir; diff --git a/linden/indra/newview/llcubemap.h b/linden/indra/newview/llcubemap.h index a4d9106..0b8cf29 100644 --- a/linden/indra/newview/llcubemap.h +++ b/linden/indra/newview/llcubemap.h @@ -60,6 +60,7 @@ public: void disableTextureCoords(void); void setMatrix(S32 stage); void restoreMatrix(); + void setReflection (void); void finishPaint(); diff --git a/linden/indra/newview/llcurrencyuimanager.cpp b/linden/indra/newview/llcurrencyuimanager.cpp index 8964054..74f6c71 100644 --- a/linden/indra/newview/llcurrencyuimanager.cpp +++ b/linden/indra/newview/llcurrencyuimanager.cpp @@ -44,7 +44,7 @@ #include "lllineeditor.h" #include "llviewchildren.h" #include "llxmlrpctransaction.h" -#include "llappviewer.h" +#include "llviewernetwork.h" const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0; @@ -238,7 +238,7 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type, static std::string transactionURI; if (transactionURI.empty()) { - transactionURI = LLAppViewer::instance()->getHelperURI() + "currency.php"; + transactionURI = LLViewerLogin::getInstance()->getHelperURI() + "currency.php"; } delete mTransaction; @@ -526,3 +526,4 @@ std::string LLCurrencyUIManager::errorURI() } + diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp index d2b2a99..ba7d6b9 100644 --- a/linden/indra/newview/lldrawable.cpp +++ b/linden/indra/newview/lldrawable.cpp @@ -418,7 +418,7 @@ void LLDrawable::makeStatic(BOOL warning_enabled) if (mParent.notNull() && mParent->isActive() && warning_enabled) { - llwarns << "Drawable becamse static with active parent!" << llendl; + LL_WARNS_ONCE("Drawable") << "Drawable becomes static with active parent!" << LL_ENDL; } S32 child_count = mVObjp->mChildList.size(); @@ -1170,11 +1170,13 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector* LLSpatialGroup* group = av->getSpatialGroup(); BOOL impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor(); - + BOOL loaded = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isFullyLoaded(); + if (!group || av->getSpatialGroup()->mDistance > LLVOAvatar::sRenderDistance || LLDrawable::getCurrentFrame() - av->mVisible > 1 || - impostor) + impostor || + !loaded) { return; } diff --git a/linden/indra/newview/lldrawpool.cpp b/linden/indra/newview/lldrawpool.cpp index c579c68..9d8bd0a 100644 --- a/linden/indra/newview/lldrawpool.cpp +++ b/linden/indra/newview/lldrawpool.cpp @@ -32,7 +32,7 @@ #include "llviewerprecompiledheaders.h" #include "lldrawpool.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llfasttimer.h" #include "llviewercontrol.h" diff --git a/linden/indra/newview/lldrawpoolalpha.cpp b/linden/indra/newview/lldrawpoolalpha.cpp index 95f8502..ca8f3b4 100644 --- a/linden/indra/newview/lldrawpoolalpha.cpp +++ b/linden/indra/newview/lldrawpoolalpha.cpp @@ -37,6 +37,7 @@ #include "llviewercontrol.h" #include "llcriticaldamp.h" #include "llfasttimer.h" +#include "llrender.h" #include "llcubemap.h" #include "llsky.h" @@ -93,7 +94,7 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass) { // Start out with no shaders. current_shader = target_shader = NULL; - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); } gPipeline.enableLightsDynamic(); } @@ -105,7 +106,7 @@ void LLDrawPoolAlpha::endRenderPass( S32 pass ) if(gPipeline.canUseWindLightShaders()) { - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); } } @@ -123,7 +124,7 @@ void LLDrawPoolAlpha::render(S32 pass) { if(gPipeline.canUseWindLightShaders()) { - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); } gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); glColor4f(1,0,0,1); @@ -207,18 +208,17 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask { return; } - // *TODO - Uhhh, we should always be doing some type of alpha rejection. These should probably both be 0.01f - glAlphaFunc(GL_GREATER, 0.f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } else { if (LLPipeline::sImpostorRender) { - glAlphaFunc(GL_GREATER, 0.5f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); } else { - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } } @@ -230,7 +230,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask if (texture && params.mTexture.notNull()) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); params.mTexture->bind(); params.mTexture->addTextureStats(params.mVSize); if (params.mTextureMatrix) @@ -283,7 +283,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask } else if (!use_shaders && current_shader != NULL) { - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); current_shader = NULL; } diff --git a/linden/indra/newview/lldrawpoolalpha.h b/linden/indra/newview/lldrawpoolalpha.h index 4318045..b717398 100644 --- a/linden/indra/newview/lldrawpoolalpha.h +++ b/linden/indra/newview/lldrawpoolalpha.h @@ -68,13 +68,10 @@ public: static BOOL sShowDebugAlpha; private: - S32 mDiffuse; LLGLSLShader* current_shader; LLGLSLShader* target_shader; LLGLSLShader* simple_shader; - LLGLSLShader* simple_lod_shader; LLGLSLShader* fullbright_shader; - LLGLSLShader* fullbright_lod_shader; }; class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp index 6cfd131..fe5d4cd 100644 --- a/linden/indra/newview/lldrawpoolavatar.cpp +++ b/linden/indra/newview/lldrawpoolavatar.cpp @@ -32,7 +32,7 @@ #include "llviewerprecompiledheaders.h" #include "lldrawpoolavatar.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llvoavatar.h" #include "m3math.h" @@ -299,7 +299,7 @@ void LLDrawPoolAvatar::beginSkinned() } sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } else { @@ -319,7 +319,7 @@ void LLDrawPoolAvatar::endSkinned() { sRenderingSkinned = FALSE; sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); if (sShaderLevel >= SHADER_LEVEL_BUMP) { @@ -343,7 +343,7 @@ void LLDrawPoolAvatar::endSkinned() } } - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } @@ -395,6 +395,31 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) return; } + if (!single_avatar && !avatarp->isFullyLoaded()) + { + + /* // debug code to draw a cube in place of avatar + LLGLSNoTexture gls_no_texture; + LLVector3 pos = avatarp->getPositionAgent(); + + gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f); + gGL.begin(GL_LINES); + { + gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV); + gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV); + gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV); + gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV); + gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV); + gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV); + } + gGL.end(); + */ + + + // don't render please + return; + } + BOOL impostor = avatarp->isImpostor() && !single_avatar; if (impostor && pass != 0) @@ -574,22 +599,12 @@ void LLDrawPoolAvatar::renderForSelect() BOOL impostor = avatarp->isImpostor(); if (impostor) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); avatarp->renderImpostor(color); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); return; } @@ -598,8 +613,8 @@ void LLDrawPoolAvatar::renderForSelect() { gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX]; } - glAlphaFunc(GL_GEQUAL, 0.2f); - gGL.blendFunc(GL_ONE, GL_ZERO); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f); + gGL.setSceneBlendType(LLRender::BT_REPLACE); glColor4ubv(color.mV); @@ -620,11 +635,11 @@ void LLDrawPoolAvatar::renderForSelect() disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); } - glAlphaFunc(GL_GREATER, 0.01f); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setSceneBlendType(LLRender::BT_ALPHA); // restore texture mode - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } //----------------------------------------------------------------------------- diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp index 7e8b9d6..303b8d5 100644 --- a/linden/indra/newview/lldrawpoolbump.cpp +++ b/linden/indra/newview/lldrawpoolbump.cpp @@ -41,7 +41,7 @@ #include "m4math.h" #include "v4math.h" #include "llglheaders.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llcubemap.h" @@ -100,7 +100,7 @@ void LLStandardBumpmap::restoreGL() gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Darkness"); // BE_DARKNESS std::string file_name = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "std_bump.ini" ); - FILE* file = LLFile::fopen( file_name.c_str(), "rt" ); /*Flawfinder: ignore*/ + LLFILE* file = LLFile::fopen( file_name.c_str(), "rt" ); /*Flawfinder: ignore*/ if( !file ) { llwarns << "Could not open std_bump <" << file_name << ">" << llendl; @@ -371,17 +371,8 @@ void LLDrawPoolBump::beginShiny(bool invisible) cube_map->setMatrix(0); cube_map->bind(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - - //use RGB from texture - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - // use alpha from color - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA); } } } @@ -443,15 +434,17 @@ void LLDrawPoolBump::endShiny(bool invisible) } shader->unbind(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); } - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + if (cube_channel >= 0) + { + gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT); + } } LLImageGL::unbindTexture(0, GL_TEXTURE_2D); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); diffuse_channel = -1; cube_channel = 0; @@ -540,16 +533,16 @@ void LLDrawPoolBump::endFullbrightShiny() { shader->disableTexture(LLShaderMgr::DIFFUSE_MAP); } - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); shader->unbind(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } LLImageGL::unbindTexture(0, GL_TEXTURE_2D); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); diffuse_channel = -1; cube_channel = 0; @@ -650,37 +643,18 @@ void LLDrawPoolBump::beginBump() // TEXTURE UNIT 0 // Output.rgb = texture at texture coord 0 - glActiveTextureARB(GL_TEXTURE0_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->activate(); - // Don't care about alpha output - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // TEXTURE UNIT 1 - glActiveTextureARB(GL_TEXTURE1_ARB); - + gGL.getTexUnit(1)->activate(); + glEnable(GL_TEXTURE_2D); // Texture unit 1 - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA); - - // Don't care about alpha output - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // src = tex0 + (1 - tex1) - 0.5 // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5 @@ -692,9 +666,8 @@ void LLDrawPoolBump::beginBump() // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst] // = (1 + bump0 - bump1) * dst.rgb // = dst.rgb + dst.rgb * (bump0 - bump1) - gGL.blendFunc(GL_DST_COLOR, GL_SRC_COLOR); -// gGL.blendFunc(GL_ONE, GL_ZERO); // temp - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.setSceneBlendType(LLRender::BT_MULT_X2); + gGL.getTexUnit(0)->activate(); stop_glerror(); LLViewerImage::unbindTexture(1, GL_TEXTURE_2D); @@ -728,15 +701,15 @@ void LLDrawPoolBump::endBump() } // Disable texture unit 1 - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glDisable(GL_TEXTURE_2D); // Texture unit 1 - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); // Disable texture unit 0 - glActiveTextureARB(GL_TEXTURE0_ARB); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->activate(); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); - gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } //////////////////////////////////////////////////////////////// @@ -1101,16 +1074,16 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) { if (mShiny) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glMatrixMode(GL_TEXTURE); } else { - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glMatrixMode(GL_TEXTURE); glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); gPipeline.mTextureMatrixOps++; - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); @@ -1153,13 +1126,13 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) { if (mShiny) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } else { - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glLoadIdentity(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } glLoadIdentity(); glMatrixMode(GL_MODELVIEW); @@ -1172,9 +1145,9 @@ void LLDrawPoolInvisible::render(S32 pass) U32 invisi_mask = LLVertexBuffer::MAP_VERTEX; glStencilMask(0); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gGL.setColorMask(false, false); pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); glStencilMask(0xFFFFFFFF); if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) diff --git a/linden/indra/newview/lldrawpoolsimple.cpp b/linden/indra/newview/lldrawpoolsimple.cpp index 330ac57..d580e97 100644 --- a/linden/indra/newview/lldrawpoolsimple.cpp +++ b/linden/indra/newview/lldrawpoolsimple.cpp @@ -41,7 +41,7 @@ #include "pipeline.h" #include "llspatialpartition.h" #include "llglslshader.h" -#include "llglimmediate.h" +#include "llrender.h" static LLGLSLShader* simple_shader = NULL; @@ -52,7 +52,7 @@ void LLDrawPoolGlow::render(S32 pass) LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW); LLGLEnable blend(GL_BLEND); LLGLDisable test(GL_ALPHA_TEST); - gGL.blendFunc(GL_ONE, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD); U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT); @@ -66,11 +66,11 @@ void LLDrawPoolGlow::render(S32 pass) } LLGLDepthTest depth(GL_TRUE, GL_FALSE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); + gGL.setColorMask(false, true); renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setColorMask(true, false); + gGL.setSceneBlendType(LLRender::BT_ALPHA); if (shader_level > 0 && fullbright_shader) { @@ -120,7 +120,7 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass) // don't use shaders! if (gGLManager.mHasShaderObjects) { - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); } } } @@ -140,7 +140,7 @@ void LLDrawPoolSimple::render(S32 pass) { LLGLDisable blend(GL_BLEND); LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects()); - glAlphaFunc(GL_GREATER, 0.5f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); { //render simple LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE); @@ -152,7 +152,7 @@ void LLDrawPoolSimple::render(S32 pass) LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS); LLGLEnable test(GL_ALPHA_TEST); LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); //render grass LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask()); } @@ -172,6 +172,6 @@ void LLDrawPoolSimple::render(S32 pass) renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); } - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } diff --git a/linden/indra/newview/lldrawpoolsky.cpp b/linden/indra/newview/lldrawpoolsky.cpp index e06bb6d..8c63b83 100644 --- a/linden/indra/newview/lldrawpoolsky.cpp +++ b/linden/indra/newview/lldrawpoolsky.cpp @@ -90,7 +90,7 @@ void LLDrawPoolSky::render(S32 pass) { // Ironically, we must support shader objects to be // able to use this call. - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); } mShader = NULL; } diff --git a/linden/indra/newview/lldrawpoolterrain.cpp b/linden/indra/newview/lldrawpoolterrain.cpp index fdb27f9..2cd2fdb 100644 --- a/linden/indra/newview/lldrawpoolterrain.cpp +++ b/linden/indra/newview/lldrawpoolterrain.cpp @@ -52,7 +52,7 @@ #include "llworld.h" #include "pipeline.h" #include "llglslshader.h" -#include "llglimmediate.h" +#include "llrender.h" const F32 DETAIL_SCALE = 1.f/16.f; int DebugDetailMap = 0; @@ -69,14 +69,16 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) : sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale"); sDetailMode = gSavedSettings.getS32("RenderTerrainDetail"); mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga", - TRUE, TRUE, GL_ALPHA8, GL_ALPHA, - LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); + TRUE, TRUE, GL_ALPHA8, GL_ALPHA, + LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); + mAlphaRampImagep->bind(0); mAlphaRampImagep->setClamp(TRUE, TRUE); m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c", TRUE, TRUE, GL_ALPHA8, GL_ALPHA, LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); + m2DAlphaRampImagep->bind(0); m2DAlphaRampImagep->setClamp(TRUE, TRUE); @@ -239,7 +241,7 @@ void LLDrawPoolTerrain::renderFullShader() // S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0); LLViewerImage::bindTexture(detail_texture0p,detail0); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); @@ -259,7 +261,7 @@ void LLDrawPoolTerrain::renderFullShader() LLViewerImage::bindTexture(detail_texture1p,detail1); /// ALPHA TEXTURE COORDS 0: - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); @@ -271,7 +273,7 @@ void LLDrawPoolTerrain::renderFullShader() glEnable(GL_TEXTURE_2D); /// ALPHA TEXTURE COORDS 1: - glActiveTextureARB(GL_TEXTURE2_ARB); + gGL.getTexUnit(2)->activate(); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(-2.f, 0.f, 0.f); @@ -284,7 +286,7 @@ void LLDrawPoolTerrain::renderFullShader() LLViewerImage::bindTexture(detail_texture3p,detail3); /// ALPHA TEXTURE COORDS 2: - glActiveTextureARB(GL_TEXTURE3_ARB); + gGL.getTexUnit(3)->activate(); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(-1.f, 0.f, 0.f); @@ -307,7 +309,7 @@ void LLDrawPoolTerrain::renderFullShader() sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3); LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE4_ARB); + gGL.getTexUnit(4)->activate(); glDisable(GL_TEXTURE_2D); // Texture unit 4 glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); @@ -316,7 +318,7 @@ void LLDrawPoolTerrain::renderFullShader() glMatrixMode(GL_MODELVIEW); LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE3_ARB); + gGL.getTexUnit(3)->activate(); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); @@ -325,7 +327,7 @@ void LLDrawPoolTerrain::renderFullShader() glMatrixMode(GL_MODELVIEW); LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE2_ARB); + gGL.getTexUnit(2)->activate(); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); @@ -334,7 +336,7 @@ void LLDrawPoolTerrain::renderFullShader() glMatrixMode(GL_MODELVIEW); LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); @@ -346,7 +348,7 @@ void LLDrawPoolTerrain::renderFullShader() // Restore Texture Unit 0 defaults LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); @@ -357,7 +359,7 @@ void LLDrawPoolTerrain::renderFullShader() void LLDrawPoolTerrain::renderFull4TU() { - glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); // Hack! Get the region that this draw pool is rendering from! @@ -377,7 +379,7 @@ void LLDrawPoolTerrain::renderFull4TU() tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x); tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y); - gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); + gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA); //---------------------------------------------------------------------------- // Pass 1/1 @@ -385,11 +387,10 @@ void LLDrawPoolTerrain::renderFull4TU() // // Stage 0: detail texture 0 // - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); LLViewerImage::bindTexture(detail_texture0p,0); glClientActiveTextureARB(GL_TEXTURE0_ARB); - - glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); @@ -398,36 +399,27 @@ void LLDrawPoolTerrain::renderFull4TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); // // Stage 1: Generate alpha ramp for detail0/detail1 transition // + LLViewerImage::bindTexture(m2DAlphaRampImagep,1); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 1 glClientActiveTextureARB(GL_TEXTURE1_ARB); glEnableClientState(GL_TEXTURE_COORD_ARRAY); // Care about alpha only - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // // Stage 2: Interpolate detail1 with existing based on ramp // LLViewerImage::bindTexture(detail_texture1p,2); - glActiveTextureARB(GL_TEXTURE2_ARB); + gGL.getTexUnit(2)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 2 glClientActiveTextureARB(GL_TEXTURE2_ARB); @@ -439,34 +431,22 @@ void LLDrawPoolTerrain::renderFull4TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_TEX_COLOR); // // Stage 3: Modulate with primary (vertex) color for lighting // LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture - glActiveTextureARB(GL_TEXTURE3_ARB); + gGL.getTexUnit(3)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 3 glClientActiveTextureARB(GL_TEXTURE3_ARB); // Set alpha texture and do lighting modulation - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); + gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); + gGL.getTexUnit(0)->activate(); + glClientActiveTextureARB(GL_TEXTURE0_ARB); - glActiveTextureARB(GL_TEXTURE0_ARB); // GL_BLEND disabled by default drawLoop(); @@ -475,7 +455,7 @@ void LLDrawPoolTerrain::renderFull4TU() // Stage 0: Write detail3 into base // - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); LLViewerImage::bindTexture(detail_texture3p,0); glClientActiveTextureARB(GL_TEXTURE0_ARB); @@ -487,18 +467,13 @@ void LLDrawPoolTerrain::renderFull4TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); // // Stage 1: Generate alpha ramp for detail2/detail3 transition // LLViewerImage::bindTexture(m2DAlphaRampImagep,1); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 1 glClientActiveTextureARB(GL_TEXTURE1_ARB); @@ -510,25 +485,20 @@ void LLDrawPoolTerrain::renderFull4TU() glTranslatef(-2.f, 0.f, 0.f); // Care about alpha only - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // // Stage 2: Interpolate detail2 with existing based on ramp // LLViewerImage::bindTexture(detail_texture2p,2); - glActiveTextureARB(GL_TEXTURE2_ARB); + gGL.getTexUnit(2)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 2 - glClientActiveTextureARB(GL_TEXTURE2_ARB); + glClientActiveTextureARB(GL_TEXTURE2_ARB); glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); @@ -536,26 +506,16 @@ void LLDrawPoolTerrain::renderFull4TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA); - + gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); // // Stage 3: Generate alpha ramp for detail1/detail2 transition // LLViewerImage::bindTexture(m2DAlphaRampImagep,3); - glActiveTextureARB(GL_TEXTURE3_ARB); - + gGL.getTexUnit(3)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 3 - glClientActiveTextureARB(GL_TEXTURE3_ARB); + glClientActiveTextureARB(GL_TEXTURE3_ARB); glEnableClientState(GL_TEXTURE_COORD_ARRAY); // Set the texture matrix @@ -564,38 +524,34 @@ void LLDrawPoolTerrain::renderFull4TU() glTranslatef(-1.f, 0.f, 0.f); // Set alpha texture and do lighting modulation - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(3)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); + + gGL.getTexUnit(0)->activate(); + glClientActiveTextureARB(GL_TEXTURE0_ARB); { LLGLEnable blend(GL_BLEND); drawLoop(); } + LLVertexBuffer::unbind(); // Disable multitexture LLImageGL::unbindTexture(3, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE3_ARB); + gGL.getTexUnit(3)->activate(); glClientActiveTextureARB(GL_TEXTURE3_ARB); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); // Texture unit 3 + glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); LLImageGL::unbindTexture(2, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE2_ARB); + gGL.getTexUnit(2)->activate(); glClientActiveTextureARB(GL_TEXTURE2_ARB); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); // Texture unit 2 + glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glMatrixMode(GL_TEXTURE); @@ -603,33 +559,34 @@ void LLDrawPoolTerrain::renderFull4TU() glMatrixMode(GL_MODELVIEW); LLImageGL::unbindTexture(1, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE1_ARB); - glClientActiveTextureARB(GL_TEXTURE1_ARB); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); + gGL.getTexUnit(1)->activate(); + glClientActiveTextureARB(GL_TEXTURE1_ARB); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); // Texture unit 1 + glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); // Restore blend state - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); //---------------------------------------------------------------------------- // Restore Texture Unit 0 defaults - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); LLImageGL::unbindTexture(0, GL_TEXTURE_2D); glClientActiveTextureARB(GL_TEXTURE0_ARB); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); + glDisableClientState(GL_NORMAL_ARRAY); + glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); - // Restore non Texture Unit specific defaults - glDisableClientState(GL_NORMAL_ARRAY); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } void LLDrawPoolTerrain::renderFull2TU() @@ -651,7 +608,7 @@ void LLDrawPoolTerrain::renderFull2TU() tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x); tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y); - gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); + gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA); //---------------------------------------------------------------------------- // Pass 1/4 @@ -668,13 +625,7 @@ void LLDrawPoolTerrain::renderFull2TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); drawLoop(); @@ -690,22 +641,17 @@ void LLDrawPoolTerrain::renderFull2TU() glDisable(GL_TEXTURE_GEN_T); // Care about alpha only - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // // Stage 1: Write detail1 // LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1 - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 1 + glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); @@ -713,18 +659,10 @@ void LLDrawPoolTerrain::renderFull2TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); { LLGLEnable blend(GL_BLEND); drawLoop(); @@ -736,26 +674,21 @@ void LLDrawPoolTerrain::renderFull2TU() // Stage 0: Generate alpha ramp for detail1/detail2 transition // LLViewerImage::bindTexture(m2DAlphaRampImagep,0); + // Set the texture matrix glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(-1.f, 0.f, 0.f); // Care about alpha only - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // // Stage 1: Write detail2 // - LLViewerImage::bindTexture(detail_texture2p,1); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 1 glEnable(GL_TEXTURE_GEN_S); @@ -765,16 +698,8 @@ void LLDrawPoolTerrain::renderFull2TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA); { LLGLEnable blend(GL_BLEND); @@ -787,27 +712,22 @@ void LLDrawPoolTerrain::renderFull2TU() // // Stage 0: Generate alpha ramp for detail2/detail3 transition // - LLViewerImage::bindTexture(m2DAlphaRampImagep,0); + gGL.getTexUnit(0)->activate(); + LLViewerImage::bindTexture(m2DAlphaRampImagep,0); // Set the texture matrix glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(-2.f, 0.f, 0.f); // Care about alpha only - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // Stage 1: Write detail3 - LLViewerImage::bindTexture(detail_texture3p,1); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 1 + glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); @@ -815,30 +735,24 @@ void LLDrawPoolTerrain::renderFull2TU() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); { LLGLEnable blend(GL_BLEND); drawLoop(); } // Restore blend state - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); // Disable multitexture + LLImageGL::unbindTexture(1, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glDisable(GL_TEXTURE_2D); // Texture unit 1 + glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glMatrixMode(GL_TEXTURE); @@ -848,18 +762,16 @@ void LLDrawPoolTerrain::renderFull2TU() //---------------------------------------------------------------------------- // Restore Texture Unit 0 defaults - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); LLImageGL::unbindTexture(0, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); - - // Restore non Texture Unit specific defaults - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } @@ -874,7 +786,7 @@ void LLDrawPoolTerrain::renderSimple() mTexturep->addTextureStats(1024.f*1024.f); mTexturep->bind(0); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 2 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent(); @@ -889,13 +801,7 @@ void LLDrawPoolTerrain::renderSimple() glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); drawLoop(); @@ -903,15 +809,13 @@ void LLDrawPoolTerrain::renderSimple() // Restore Texture Unit 0 defaults LLImageGL::unbindTexture(0, GL_TEXTURE_2D); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); - - // Restore non Texture Unit specific defaults - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } //============================================================================ diff --git a/linden/indra/newview/lldrawpooltree.cpp b/linden/indra/newview/lldrawpooltree.cpp index fd0a83c..285b313 100644 --- a/linden/indra/newview/lldrawpooltree.cpp +++ b/linden/indra/newview/lldrawpooltree.cpp @@ -41,7 +41,7 @@ #include "pipeline.h" #include "llviewercamera.h" #include "llglslshader.h" -#include "llglimmediate.h" +#include "llrender.h" S32 LLDrawPoolTree::sDiffTex = 0; static LLGLSLShader* shader = NULL; @@ -67,7 +67,7 @@ void LLDrawPoolTree::prerender() void LLDrawPoolTree::beginRenderPass(S32 pass) { LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); - glAlphaFunc(GL_GREATER, 0.5f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); if (LLPipeline::sUnderWaterRender) { @@ -106,7 +106,7 @@ void LLDrawPoolTree::render(S32 pass) void LLDrawPoolTree::endRenderPass(S32 pass) { LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); if (gPipeline.canUseWindLightShadersOnObjects()) { @@ -125,28 +125,18 @@ void LLDrawPoolTree::renderForSelect() LLGLSObjectSelectAlpha gls_alpha; - gGL.blendFunc(GL_ONE, GL_ZERO); - glAlphaFunc(GL_GREATER, 0.5f); + gGL.setSceneBlendType(LLRender::BT_REPLACE); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); renderTree(TRUE); - glAlphaFunc(GL_GREATER, 0.01f); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setSceneBlendType(LLRender::BT_ALPHA); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } void LLDrawPoolTree::renderTree(BOOL selecting) diff --git a/linden/indra/newview/lldrawpoolwater.cpp b/linden/indra/newview/lldrawpoolwater.cpp index 231d0e1..3a98235 100644 --- a/linden/indra/newview/lldrawpoolwater.cpp +++ b/linden/indra/newview/lldrawpoolwater.cpp @@ -37,6 +37,7 @@ #include "lldir.h" #include "llerror.h" #include "m3math.h" +#include "llrender.h" #include "llagent.h" // for gAgent for getRegion for getWaterHeight #include "llcubemap.h" @@ -166,7 +167,7 @@ void LLDrawPoolWater::render(S32 pass) // Set up second pass first mWaterImagep->addTextureStats(1024.f*1024.f); mWaterImagep->bind(1); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); // Texture unit 1 @@ -198,18 +199,10 @@ void LLDrawPoolWater::render(S32 pass) glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glClearStencil(1); glClear(GL_STENCIL_BUFFER_BIT); @@ -230,14 +223,14 @@ void LLDrawPoolWater::render(S32 pass) } // Now, disable texture coord generation on texture state 1 - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glDisable(GL_TEXTURE_2D); // Texture unit 1 glDisable(GL_TEXTURE_GEN_S); //texture unit 1 glDisable(GL_TEXTURE_GEN_T); //texture unit 1 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); // Disable texture coordinate and color arrays - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); LLImageGL::unbindTexture(0, GL_TEXTURE_2D); stop_glerror(); @@ -258,7 +251,7 @@ void LLDrawPoolWater::render(S32 pass) glMatrixMode(GL_MODELVIEW); LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f, 0.5f*up_dot); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); for (std::vector::iterator iter = mDrawFace.begin(); iter != mDrawFace.end(); iter++) @@ -276,7 +269,7 @@ void LLDrawPoolWater::render(S32 pass) } } - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); if (gSky.mVOSkyp->getCubeMap()) { @@ -298,7 +291,7 @@ void LLDrawPoolWater::render(S32 pass) renderReflection(refl_face); } - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } void LLDrawPoolWater::renderReflection(LLFace* face) @@ -331,7 +324,7 @@ void LLDrawPoolWater::renderReflection(LLFace* face) void LLDrawPoolWater::shade() { - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); LLVOSky *voskyp = gSky.mVOSkyp; @@ -396,9 +389,9 @@ void LLDrawPoolWater::shade() if (reftex > -1) { - glActiveTextureARB(GL_TEXTURE0_ARB+reftex); + gGL.getTexUnit(reftex)->activate(); gPipeline.mWaterRef.bindTexture(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } //bind normal map @@ -414,14 +407,8 @@ void LLDrawPoolWater::shade() mWaterNormp->addTextureStats(1024.f*1024.f); mWaterNormp->bind(bumpTex); - if (!gSavedSettings.getBOOL("RenderWaterMipNormal")) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - } - else - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - } + mWaterNormp->setMipFilterNearest (mWaterNormp->getMipFilterNearest(), + !gSavedSettings.getBOOL("RenderWaterMipNormal")); S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX); stop_glerror(); @@ -548,9 +535,9 @@ void LLDrawPoolWater::shade() shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH); shader->unbind(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); + gGL.setColorMask(true, false); } diff --git a/linden/indra/newview/lldrawpoolwlsky.cpp b/linden/indra/newview/lldrawpoolwlsky.cpp index e10cd0a..01e1af0 100644 --- a/linden/indra/newview/lldrawpoolwlsky.cpp +++ b/linden/indra/newview/lldrawpoolwlsky.cpp @@ -44,7 +44,7 @@ #include "llagent.h" #include "llviewerregion.h" #include "llface.h" -#include "llglimmediate.h" +#include "llrender.h" LLPointer LLDrawPoolWLSky::sCloudNoiseTexture = NULL; @@ -153,7 +153,7 @@ void LLDrawPoolWLSky::renderStars(void) const { LLGLSPipelineSkyBox gls_sky; LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); // *NOTE: have to have bound the cloud noise texture already since register // combiners blending below requires something to be bound @@ -176,16 +176,8 @@ void LLDrawPoolWLSky::renderStars(void) const // gl_FragColor.rgb = gl_Color.rgb; // gl_FragColor.a = gl_Color.a * star_alpha.a; - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_CONSTANT); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); - glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 2.0f); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_PREV_ALPHA, LLTexUnit::TBS_CONST_ALPHA); glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV); gSky.mVOWLSkyp->drawStars(); @@ -193,8 +185,7 @@ void LLDrawPoolWLSky::renderStars(void) const glPointSize(1.f); // and disable the combiner states - glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0f); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const @@ -208,7 +199,7 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const LLGLEnable blend(GL_BLEND); LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); sCloudNoiseTexture->bind(); shader->bind(); diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp index ce7f1ec..f77187d 100644 --- a/linden/indra/newview/lldynamictexture.cpp +++ b/linden/indra/newview/lldynamictexture.cpp @@ -40,7 +40,7 @@ #include "llviewerimage.h" #include "llvertexbuffer.h" #include "llviewerdisplay.h" -#include "llglimmediate.h" +#include "llrender.h" void render_ui_and_swap_if_needed(); diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp index 4a5e532..3e0c5b2 100644 --- a/linden/indra/newview/llface.cpp +++ b/linden/indra/newview/llface.cpp @@ -42,7 +42,7 @@ #include "lldrawpoolbump.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "lllightconstants.h" #include "llsky.h" #include "llviewercamera.h" @@ -468,6 +468,7 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count) if (pass == 0) { LLViewerImage::bindTexture(red_blue_imagep); + red_blue_imagep->setMipFilterNearest (TRUE, TRUE); } else // pass == 1 { @@ -476,9 +477,8 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count) glMatrixMode(GL_TEXTURE); glPushMatrix(); glScalef(256.f, 256.f, 1.f); + green_imagep->setMipFilterNearest (TRUE, TRUE); } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); if (!isState(GLOBAL)) diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h index f04d221..533851c 100644 --- a/linden/indra/newview/llface.h +++ b/linden/indra/newview/llface.h @@ -34,6 +34,7 @@ #include "llstrider.h" +#include "llrender.h" #include "v2math.h" #include "v3math.h" #include "v4math.h" diff --git a/linden/indra/newview/llfasttimerview.cpp b/linden/indra/newview/llfasttimerview.cpp index 047016f..d594dc5 100644 --- a/linden/indra/newview/llfasttimerview.cpp +++ b/linden/indra/newview/llfasttimerview.cpp @@ -37,7 +37,7 @@ #include "llrect.h" #include "llerror.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llmath.h" #include "llfontgl.h" diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp index 9f79c18..69e7bcc 100644 --- a/linden/indra/newview/llfeaturemanager.cpp +++ b/linden/indra/newview/llfeaturemanager.cpp @@ -95,7 +95,7 @@ void LLFeatureList::addFeature(const char *name, const BOOL available, const F32 { if (mFeatures.count(name)) { - llwarns << "LLFeatureList::Attempting to add preexisting feature " << name << llendl; + LL_WARNS("RenderInit") << "LLFeatureList::Attempting to add preexisting feature " << name << LL_ENDL; } LLFeatureInfo fi(name, available, level); @@ -109,7 +109,7 @@ BOOL LLFeatureList::isFeatureAvailable(const char *name) return mFeatures[name].mAvailable; } - llwarns << "Feature " << name << " not on feature list!" << llendl; + LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL; // changing this to TRUE so you have to explicitly disable // something for it to be disabled @@ -123,7 +123,7 @@ F32 LLFeatureList::getRecommendedValue(const char *name) return mFeatures[name].mRecommendedLevel; } - llwarns << "Feature " << name << " not on feature list or not available!" << llendl; + LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL; return 0; } @@ -146,46 +146,46 @@ BOOL LLFeatureList::maskList(LLFeatureList &mask) // if (!mFeatures.count(mask_fi.mName)) { - llwarns << "Feature " << mask_fi.mName << " in mask not in top level!" << llendl; + LL_WARNS("RenderInit") << "Feature " << mask_fi.mName << " in mask not in top level!" << LL_ENDL; continue; } LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName]; if (mask_fi.mAvailable && !cur_fi.mAvailable) { - llwarns << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << llendl; + LL_WARNS("RenderInit") << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << LL_ENDL; continue; } cur_fi.mAvailable = mask_fi.mAvailable; cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel); -#ifndef LL_RELEASE_FOR_DOWNLOAD - llinfos << "Feature mask " << mask.mName + LL_DEBUGS("RenderInit") << "Feature mask " << mask.mName << " Feature " << mask_fi.mName << " Mask: " << mask_fi.mRecommendedLevel - << " Now: " << cur_fi.mRecommendedLevel << llendl; -#endif + << " Now: " << cur_fi.mRecommendedLevel << LL_ENDL; } -#if 0 && !LL_RELEASE_FOR_DOWNLOAD - llinfos << "After applying mask " << mask.mName << llendl; - dump(); -#endif + LL_DEBUGS("RenderInit") << "After applying mask " << mask.mName << std::endl; + // Will conditionally call dump only if the above message will be logged, thanks + // to it being wrapped by the LL_DEBUGS and LL_ENDL macros. + dump(); + LL_CONT << LL_ENDL; + return TRUE; } void LLFeatureList::dump() { - llinfos << "Feature list: " << mName << llendl; - llinfos << "--------------" << llendl; + LL_DEBUGS("RenderInit") << "Feature list: " << mName << LL_ENDL; + LL_DEBUGS("RenderInit") << "--------------" << LL_ENDL; LLFeatureInfo fi; feature_map_t::iterator feature_it; for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it) { fi = feature_it->second; - llinfos << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << llendl; + LL_DEBUGS("RenderInit") << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << LL_ENDL; } - llinfos << llendl; + LL_DEBUGS("RenderInit") << LL_ENDL; } LLFeatureList *LLFeatureManager::findMask(const char *name) @@ -203,10 +203,10 @@ BOOL LLFeatureManager::maskFeatures(const char *name) LLFeatureList *maskp = findMask(name); if (!maskp) { -// llwarns << "Unknown feature mask " << name << llendl; + LL_DEBUGS("RenderInit") << "Unknown feature mask " << name << LL_ENDL; return FALSE; } - llinfos << "Applying Feature Mask: " << name << llendl; + LL_DEBUGS("RenderInit") << "Applying Feature Mask: " << name << LL_ENDL; return maskList(*maskp); } @@ -236,7 +236,7 @@ BOOL LLFeatureManager::loadFeatureTables() if (!file) { - llwarns << "Unable to open feature table!" << llendl; + LL_WARNS("RenderInit") << "Unable to open feature table!" << LL_ENDL; return FALSE; } @@ -245,7 +245,7 @@ BOOL LLFeatureManager::loadFeatureTables() file >> version; if (strcmp(name, "version")) { - llwarns << data_path << " does not appear to be a valid feature table!" << llendl; + LL_WARNS("RenderInit") << data_path << " does not appear to be a valid feature table!" << LL_ENDL; return FALSE; } @@ -285,7 +285,7 @@ BOOL LLFeatureManager::loadFeatureTables() file >> name; if (mMaskList.count(name)) { - llerrs << "Overriding mask " << name << ", this is invalid!" << llendl; + LL_ERRS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL; } flp = new LLFeatureList(name); @@ -295,7 +295,7 @@ BOOL LLFeatureManager::loadFeatureTables() { if (!flp) { - llerrs << "Specified parameter before keyword!" << llendl; + LL_ERRS("RenderInit") << "Specified parameter before keyword!" << LL_ENDL; } S32 available; F32 recommended; @@ -327,7 +327,7 @@ void LLFeatureManager::loadGPUClass() if (!file) { - llwarns << "Unable to open GPU table: " << data_path << "!" << llendl; + LL_WARNS("RenderInit") << "Unable to open GPU table: " << data_path << "!" << LL_ENDL; return; } @@ -398,7 +398,7 @@ void LLFeatureManager::loadGPUClass() { // if we found it, stop! file.close(); - llinfos << "GPU is " << label << llendl; + LL_INFOS("RenderInit") << "GPU is " << label << llendl; mGPUString = label; mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10); mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10); @@ -408,7 +408,7 @@ void LLFeatureManager::loadGPUClass() } file.close(); - llwarns << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << llendl; + LL_WARNS("RenderInit") << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << LL_ENDL; } void LLFeatureManager::cleanupFeatureTables() @@ -546,7 +546,7 @@ void LLFeatureManager::applyBaseMasks() LLFeatureList* maskp = findMask("all"); if(maskp == NULL) { - llwarns << "AHH! No \"all\" in feature table!" << llendl; + LL_WARNS("RenderInit") << "AHH! No \"all\" in feature table!" << LL_ENDL; return; } @@ -563,12 +563,12 @@ void LLFeatureManager::applyBaseMasks() "Class3" }; - llinfos << "Setting GPU Class to " << class_table[mGPUClass] << llendl; + LL_INFOS("RenderInit") << "Setting GPU Class to " << class_table[mGPUClass] << LL_ENDL; maskFeatures(class_table[mGPUClass]); } else { - llinfos << "Setting GPU Class to Unknown" << llendl; + LL_INFOS("RenderInit") << "Setting GPU Class to Unknown" << LL_ENDL; maskFeatures("Unknown"); } diff --git a/linden/indra/newview/llfeaturemanager.h b/linden/indra/newview/llfeaturemanager.h index b45046b..79ea958 100644 --- a/linden/indra/newview/llfeaturemanager.h +++ b/linden/indra/newview/llfeaturemanager.h @@ -76,7 +76,7 @@ public: void setFeatureAvailable(const char *name, const BOOL available); void setRecommendedLevel(const char *name, const F32 level); - BOOL loadFeatureList(FILE *fp); + BOOL loadFeatureList(LLFILE *fp); BOOL maskList(LLFeatureList &mask); diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp index 890cfd2..82729e9 100644 --- a/linden/indra/newview/llfloateranimpreview.cpp +++ b/linden/indra/newview/llfloateranimpreview.cpp @@ -46,7 +46,7 @@ #include "llcombobox.h" #include "lldrawable.h" #include "lldrawpoolavatar.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llface.h" #include "llkeyframemotion.h" #include "lllineeditor.h" @@ -1135,6 +1135,7 @@ BOOL LLPreviewAnimation::render() if (avatarp->mDrawable.notNull()) { LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool(); + avatarp->dirtyMesh(); avatarPoolp->renderAvatars(avatarp); // renders only one avatar } diff --git a/linden/indra/newview/llfloaterauction.cpp b/linden/indra/newview/llfloaterauction.cpp index 7affff6..4a40abb 100644 --- a/linden/indra/newview/llfloaterauction.cpp +++ b/linden/indra/newview/llfloaterauction.cpp @@ -53,7 +53,7 @@ #include "llviewerdisplay.h" #include "llviewercontrol.h" #include "llui.h" -#include "llglimmediate.h" +#include "llrender.h" ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs @@ -186,7 +186,10 @@ void LLFloaterAuction::onClickSnapshot(void* data) self->mTransactionID.generate(); self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID()); - gViewerWindow->playSnapshotAnimAndSound(); + if(!gSavedSettings.getBOOL("QuietSnapshotsToDisk")) + { + gViewerWindow->playSnapshotAnimAndSound(); + } llinfos << "Writing TGA..." << llendl; LLPointer tga = new LLImageTGA; diff --git a/linden/indra/newview/llfloaterbuyland.cpp b/linden/indra/newview/llfloaterbuyland.cpp index ee78eaa..b596339 100644 --- a/linden/indra/newview/llfloaterbuyland.cpp +++ b/linden/indra/newview/llfloaterbuyland.cpp @@ -62,7 +62,7 @@ #include "llwindow.h" #include "llworld.h" #include "llxmlrpctransaction.h" -#include "llappviewer.h" +#include "llviewernetwork.h" #include "roles_constants.h" // NOTE: This is duplicated in lldatamoney.cpp ... @@ -841,7 +841,7 @@ void LLFloaterBuyLandUI::startTransaction(TransactionType type, static std::string transaction_uri; if (transaction_uri.empty()) { - transaction_uri = LLAppViewer::instance()->getHelperURI() + "landtool.php"; + transaction_uri = LLViewerLogin::getInstance()->getHelperURI() + "landtool.php"; } const char* method; @@ -1363,3 +1363,4 @@ void LLFloaterBuyLandUI::onClickErrorWeb(void* data) } + diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp index 0394cd1..d05b231 100644 --- a/linden/indra/newview/llfloaterchat.cpp +++ b/linden/indra/newview/llfloaterchat.cpp @@ -72,6 +72,7 @@ #include "lltexteditor.h" #include "llfloaterhtml.h" #include "llweb.h" +#include "llstylemap.h" // Used for LCD display extern void AddNewIMToLCD(const LLString &newLine); @@ -188,14 +189,26 @@ void LLFloaterChat::updateConsoleVisibility() || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater? } -void add_timestamped_line(LLViewerTextEditor* edit, const LLString& line, const LLColor4& color) +void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LLColor4& color) { + LLString line = chat.mText; bool prepend_newline = true; if (gSavedSettings.getBOOL("ChatShowTimestamps")) { edit->appendTime(prepend_newline); prepend_newline = false; } + + // If the msg is not from an agent (not yourself though), + // extract out the sender name and replace it with the hotlinked name. + if (chat.mSourceType == CHAT_SOURCE_AGENT && + chat.mFromID != LLUUID::null && + (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0)) + { + line = line.substr(chat.mFromName.length()); + const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID); + edit->appendStyledText(chat.mFromName, false, false, &sourceStyle); + } edit->appendColoredText(line, false, prepend_newline, color); } @@ -243,14 +256,14 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file) if (!chat.mMuted) { - add_timestamped_line(history_editor, chat.mText, color); - add_timestamped_line(history_editor_with_mute, chat.mText, color); + add_timestamped_line(history_editor, chat, color); + add_timestamped_line(history_editor_with_mute, chat, color); } else { // desaturate muted chat LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f); - add_timestamped_line(history_editor_with_mute, chat.mText, color); + add_timestamped_line(history_editor_with_mute, chat, color); } // add objects as transient speakers that can be muted diff --git a/linden/indra/newview/llfloatercolorpicker.cpp b/linden/indra/newview/llfloatercolorpicker.cpp index e72cb1a..7bf9da3 100644 --- a/linden/indra/newview/llfloatercolorpicker.cpp +++ b/linden/indra/newview/llfloatercolorpicker.cpp @@ -39,7 +39,7 @@ #include "llfontgl.h" #include "llsys.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "v3dmath.h" #include "lldir.h" #include "llui.h" diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp index 42a3bae..f1ee946 100644 --- a/linden/indra/newview/llfloaterdirectory.cpp +++ b/linden/indra/newview/llfloaterdirectory.cpp @@ -79,7 +79,6 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name) mFindAllPanel = NULL; mClassifiedPanel = NULL; mEventsPanel = NULL; - mPopularPanel = NULL; mLandPanel = NULL; mPanelAvatarp = NULL; @@ -96,12 +95,11 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name) factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this); factory_map["classified_panel"] = LLCallbackMap(createClassified, this); factory_map["events_panel"] = LLCallbackMap(createEvents, this); - factory_map["popular_panel"] = LLCallbackMap(createPopular, this); + factory_map["showcase_panel"] = LLCallbackMap(createShowcase, this); factory_map["places_panel"] = LLCallbackMap(createPlaces, this); factory_map["land_sales_panel"] = LLCallbackMap(createLand, this); factory_map["people_panel"] = LLCallbackMap(createPeople, this); factory_map["groups_panel"] = LLCallbackMap(createGroups, this); - factory_map["find_all_old_panel"] = LLCallbackMap(createFindAllOld, this); factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this); factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this); @@ -120,15 +118,14 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name) mPanelAvatarp->selectTab(0); } - childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChangedFindAll, this); + childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChanged, this); childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this); childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this); - childSetTabChangeCallback("Directory Tabs", "popular_panel", onTabChanged, this); + childSetTabChangeCallback("Directory Tabs", "showcase_panel", onTabChanged, this); childSetTabChangeCallback("Directory Tabs", "places_panel", onTabChanged, this); childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this); childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this); childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this); - childSetTabChangeCallback("Directory Tabs", "find_all_old_panel", onTabChanged, this); } LLFloaterDirectory::~LLFloaterDirectory() @@ -175,11 +172,10 @@ void* LLFloaterDirectory::createEvents(void* userdata) } // static -void* LLFloaterDirectory::createPopular(void* userdata) +void* LLFloaterDirectory::createShowcase(void* userdata) { LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; - self->mPopularPanel = new LLPanelDirPopular("popular_panel", self); - return self->mPopularPanel; + return new LLPanelDirPopular("showcase_panel", self); } // static @@ -209,14 +205,7 @@ void* LLFloaterDirectory::createPeople(void* userdata) void* LLFloaterDirectory::createGroups(void* userdata) { LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; - return new LLPanelDirGroups("groups_panel", self); -} - -// static -void *LLFloaterDirectory::createFindAllOld(void* userdata) -{ - LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; - return new LLPanelDirFindAllOld("find_all_old_panel", self); + return new LLPanelDirGroups("people_groups", self); } // static @@ -339,17 +328,6 @@ void LLFloaterDirectory::showEvents(S32 event_id) } // static -void LLFloaterDirectory::showPopular(const LLUUID& parcel_id) -{ - showPanel("popular_panel"); - - if (sInstance->mPopularPanel) - { - sInstance->mPopularPanel->selectByUUID(parcel_id); - } -} - -// static void LLFloaterDirectory::showLandForSale(const LLUUID& parcel_id) { showPanel("land_sales_panel"); @@ -498,17 +476,6 @@ void LLFloaterDirectory::onTabChanged(void* data, bool from_click) } } -// static -void LLFloaterDirectory::onTabChangedFindAll(void* data, bool from_click) -{ - LLFloaterDirectory* self = (LLFloaterDirectory*)data; - if (!self) return; - - self->hideAllDetailPanels(); - LLPanelDirFindAllInterface::focus(self->mFindAllPanel); - onTabChanged(data, from_click); -} - void LLFloaterDirectory::hideAllDetailPanels() { if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE); diff --git a/linden/indra/newview/llfloaterdirectory.h b/linden/indra/newview/llfloaterdirectory.h index 7aa956a..6915aea 100644 --- a/linden/indra/newview/llfloaterdirectory.h +++ b/linden/indra/newview/llfloaterdirectory.h @@ -73,7 +73,6 @@ public: static void showFindAll(const std::string& search_text); static void showClassified(const LLUUID& classified_id); static void showEvents(S32 event_id); - static void showPopular(const LLUUID& parcel_id); static void showLandForSale(const LLUUID& parcel_id); static void showGroups(); static void refreshGroup(const LLUUID& group_id); @@ -82,7 +81,6 @@ public: static void toggleEvents(void*); static void toggleFind(void*); static void onTabChanged(void*, bool); - static void onTabChangedFindAll(void*, bool); void hideAllDetailPanels(); @@ -97,18 +95,16 @@ private: LLPanelDirFindAll* mFindAllPanel; LLPanelDirClassified* mClassifiedPanel; LLPanelDirEvents* mEventsPanel; - LLPanelDirPopular* mPopularPanel; LLPanelDirLand* mLandPanel; static void* createFindAll(void* userdata); static void* createClassified(void* userdata); static void* createEvents(void* userdata); - static void* createPopular(void* userdata); + static void* createShowcase(void* userdata); static void* createPlaces(void* userdata); static void* createLand(void* userdata); static void* createPeople(void* userdata); static void* createGroups(void* userdata); - static void* createFindAllOld(void* userdata); static void* createClassifiedDetail(void* userdata); static void* createAvatarDetail(void* userdata); diff --git a/linden/indra/newview/llfloatergroupinfo.cpp b/linden/indra/newview/llfloatergroupinfo.cpp index 1c303b9..c657988 100644 --- a/linden/indra/newview/llfloatergroupinfo.cpp +++ b/linden/indra/newview/llfloatergroupinfo.cpp @@ -37,7 +37,7 @@ #include "llagent.h" #include "llcommandhandler.h" -#include "llcommandhandler.h" +#include "llfloaterchatterbox.h" #include "llpanelgroup.h" #include "llviewermessage.h" // for inventory_offer_callback //#include "llviewerwindow.h" @@ -59,11 +59,35 @@ public: LLGroupHandler() : LLCommandHandler("group", false) { } bool handle(const LLSD& tokens, const LLSD& queryMap) { + if (tokens.size() < 1) + { + return false; + } + + if (tokens[0].asString() == "create") + { + LLFloaterGroupInfo::showCreateGroup(NULL); + return true; + } + if (tokens.size() < 2) { return false; } + if (tokens[0].asString() == "list") + { + if (tokens[1].asString() == "show") + { + // CP_TODO: get the value we pass in via the XUI name + // of the tab instead of using a literal like this + LLFloaterMyFriends::showInstance( 1 ); + + return true; + } + return false; + } + LLUUID group_id; if (!group_id.set(tokens[0], FALSE)) { diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp index 7f32b24..c9ccf1a 100644 --- a/linden/indra/newview/llfloatergroups.cpp +++ b/linden/indra/newview/llfloatergroups.cpp @@ -466,7 +466,7 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow LLSD element; element["id"] = LLUUID::null; element["columns"][0]["column"] = "name"; - element["columns"][0]["value"] = "none"; + element["columns"][0]["value"] = "none"; // *TODO: Translate element["columns"][0]["font"] = "SANSSERIF"; element["columns"][0]["font-style"] = style; diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp index a228587..ccd7737 100644 --- a/linden/indra/newview/llfloaterimagepreview.cpp +++ b/linden/indra/newview/llfloaterimagepreview.cpp @@ -43,7 +43,7 @@ #include "llcombobox.h" #include "lldrawable.h" #include "lldrawpoolavatar.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llface.h" #include "lltextbox.h" #include "lltoolmgr.h" diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp index 0d2cd5f..48232cb 100644 --- a/linden/indra/newview/llfloaterproperties.cpp +++ b/linden/indra/newview/llfloaterproperties.cpp @@ -65,11 +65,21 @@ // helper class to watch the inventory. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLPropertiesObserver : public LLInventoryObserver, public LLSingleton +// Ugh. This can't be a singleton because it needs to remove itself +// from the inventory observer list when destroyed, which could +// happen after gInventory has already been destroyed if a singleton. +// Instead, do our own ref counting and create / destroy it as needed +class LLPropertiesObserver : public LLInventoryObserver { public: - LLPropertiesObserver() {} - virtual ~LLPropertiesObserver() {} + LLPropertiesObserver() + { + gInventory.addObserver(this); + } + virtual ~LLPropertiesObserver() + { + gInventory.removeObserver(this); + } virtual void changed(U32 mask); }; @@ -88,7 +98,10 @@ void LLPropertiesObserver::changed(U32 mask) /// Class LLFloaterProperties ///---------------------------------------------------------------------------- +// static LLFloaterProperties::instance_map LLFloaterProperties::sInstances; +LLPropertiesObserver* LLFloaterProperties::sPropertiesObserver = NULL; +S32 LLFloaterProperties::sPropertiesObserverCount = 0; // static LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id, @@ -145,12 +158,12 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect& { LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml"); - // hack to make sure these floaters are observing the inventory. - if(!gInventory.containsObserver(LLPropertiesObserver::getInstance())) + if (!sPropertiesObserver) { - // Note: this is where gPropertiesObserver used to be constructed. - gInventory.addObserver(LLPropertiesObserver::getInstance()); + sPropertiesObserver = new LLPropertiesObserver; } + sPropertiesObserverCount++; + // add the object to the static structure LLUUID key = mItemID ^ mObjectID; sInstances.insert(instance_map::value_type(key, this)); @@ -193,6 +206,12 @@ LLFloaterProperties::~LLFloaterProperties() { sInstances.erase(it); } + sPropertiesObserverCount--; + if (!sPropertiesObserverCount) + { + delete sPropertiesObserver; + sPropertiesObserver = NULL; + } } void LLFloaterProperties::refresh() @@ -422,7 +441,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) perm_string = "G"; perm_string += overwrite_group ? "*: " : ": "; - perm_string += perm_string += mask_to_string(group_mask); + perm_string += mask_to_string(group_mask); childSetText("GroupMaskDebug",perm_string); childSetVisible("GroupMaskDebug",TRUE); diff --git a/linden/indra/newview/llfloaterproperties.h b/linden/indra/newview/llfloaterproperties.h index d4461fd..a459616 100644 --- a/linden/indra/newview/llfloaterproperties.h +++ b/linden/indra/newview/llfloaterproperties.h @@ -47,6 +47,8 @@ class LLLineEditor; class LLRadioGroup; class LLTextBox; +class LLPropertiesObserver; + class LLFloaterProperties : public LLFloater { public: @@ -94,6 +96,8 @@ protected: typedef std::map instance_map; static instance_map sInstances; + static LLPropertiesObserver* sPropertiesObserver; + static S32 sPropertiesObserverCount; }; class LLMultiProperties : public LLMultiFloater diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp index 12834b3..7b3b8e2 100644 --- a/linden/indra/newview/llfloaterregioninfo.cpp +++ b/linden/indra/newview/llfloaterregioninfo.cpp @@ -80,6 +80,8 @@ const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; +extern LLString gLastVersionChannel; + ///---------------------------------------------------------------------------- /// Local class declaration @@ -317,6 +319,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) // GENERAL PANEL panel = tab->getChild("General"); panel->childSetValue("region_text", LLSD(sim_name)); + panel->childSetValue("version_channel_text", gLastVersionChannel); panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE ); diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp index 0c1b9ee..9c43f35 100644 --- a/linden/indra/newview/llfloaterreporter.cpp +++ b/linden/indra/newview/llfloaterreporter.cpp @@ -81,7 +81,7 @@ #include "llselectmgr.h" #include "llviewerbuild.h" #include "lluictrlfactory.h" -#include "llappviewer.h" +#include "llviewernetwork.h" #include "llassetuploadresponders.h" @@ -656,7 +656,7 @@ LLSD LLFloaterReporter::gatherReport() mCopyrightWarningSeen = FALSE; std::ostringstream summary; - if (!LLAppViewer::instance()->isInProductionGrid()) + if (!LLViewerLogin::getInstance()->isInProductionGrid()) { summary << "Preview "; } diff --git a/linden/indra/newview/llfloaterreporter.h b/linden/indra/newview/llfloaterreporter.h index 9696b34..5e8f735 100644 --- a/linden/indra/newview/llfloaterreporter.h +++ b/linden/indra/newview/llfloaterreporter.h @@ -49,6 +49,8 @@ struct LLResourceData; // these flags are used to label info requests to the server const U32 BUG_REPORT_REQUEST = 0x01 << 0; const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1; +const U32 OBJECT_PAY_REQUEST = 0x01 << 2; + // ************************************************************ // THESE ENUMS ARE IN THE DATABASE!!! diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp index c36c54d..f3ad4a7 100644 --- a/linden/indra/newview/llfloatersnapshot.cpp +++ b/linden/indra/newview/llfloatersnapshot.cpp @@ -36,7 +36,7 @@ #include "llfontgl.h" #include "llsys.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "v3dmath.h" #include "llmath.h" #include "lldir.h" @@ -183,6 +183,7 @@ protected: LLQuaternion mCameraRot; BOOL mSnapshotActive; LLViewerWindow::ESnapshotType mSnapshotBufferType; + bool mSnapshotSoundPlayed; public: static std::set sList; @@ -208,7 +209,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) : mCameraPos(LLViewerCamera::getInstance()->getOrigin()), mCameraRot(LLViewerCamera::getInstance()->getQuaternion()), mSnapshotActive(FALSE), - mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR) + mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR), + mSnapshotSoundPlayed(false) { mSnapshotDelayTimer.setTimerExpirySec(0.0f); mSnapshotDelayTimer.start(); @@ -764,6 +766,19 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview ) { previewp->mRawImageEncoded->resize(previewp->mRawImage->getWidth(), previewp->mRawImage->getHeight(), previewp->mRawImage->getComponents()); + if (!gSavedSettings.getBOOL("QuietSnapshotsToDisk")) + { + // Always play the sound once, on window open. + // Don't keep playing if automatic + // updates are enabled. It's too invasive. JC + if (!previewp->mSnapshotSoundPlayed + || !gSavedSettings.getBOOL("AutoSnapshot") ) + { + gViewerWindow->playSnapshotAnimAndSound(); + previewp->mSnapshotSoundPlayed = true; + } + } + if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD) { // *FIX: just resize and reuse existing jpeg? @@ -923,7 +938,9 @@ BOOL LLSnapshotLivePreview::saveLocal() class LLFloaterSnapshot::Impl { public: - Impl() : mLastToolset(NULL) + Impl() + : mAvatarPauseHandles(), + mLastToolset(NULL) { } ~Impl() @@ -1054,7 +1071,13 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); } - if (floaterp->childGetValue("freeze_frame_check").asBoolean()) + bool use_freeze_frame = floaterp->childGetValue("freeze_frame_check").asBoolean(); + // For now, auto-snapshot only works in freeze frame mode. + // This can be changed in the future by taking the FreezeTime check + // out of the onIdle() camera movement detection. JC + floaterp->childSetEnabled("auto_snapshot_check", use_freeze_frame); + + if (use_freeze_frame) { // stop all mouse events at fullscreen preview layer floaterp->getParent()->setMouseOpaque(TRUE); @@ -1089,6 +1112,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) } else // turning off freeze frame mode { + // Force off auto-snapshot, see comment above about onIdle. JC + gSavedSettings.setBOOL("AutoSnapshot", FALSE); + floaterp->getParent()->setMouseOpaque(FALSE); floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height); if (previewp) @@ -1287,12 +1313,6 @@ void LLFloaterSnapshot::Impl::onClickKeep(void* data) if (gSavedSettings.getBOOL("CloseSnapshotOnKeep")) { view->close(); - // only plays sound and anim when keeping a snapshot, and closing the snapshot UI, - // and only if the save succeeded (i.e. was not canceled) - if (succeeded) - { - gViewerWindow->playSnapshotAnimAndSound(); - } } else { @@ -1674,13 +1694,13 @@ void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 LLSpinCtrl *sctrl = view->getChild("snapshot_width") ; if(sctrl) { - sctrl->setValue(width) ; + sctrl->forceSetValue(width) ; } sctrl = view->getChild("snapshot_height") ; if(sctrl) { - sctrl->setValue(height) ; + sctrl->forceSetValue(height) ; } gSavedSettings.setS32("LastSnapshotWidth", width); @@ -1707,8 +1727,30 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat if (w != curw || h != curh) { + BOOL update_ = FALSE ; + //if to upload a snapshot, process spinner input in a special way. + if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType")) + { + S32 spinner_increment = (S32)((LLSpinCtrl*)ctrl)->getIncrement() ; + S32 dw = w - curw ; + S32 dh = h - curh ; + dw = (dw == spinner_increment) ? 1 : ((dw == -spinner_increment) ? -1 : 0) ; + dh = (dh == spinner_increment) ? 1 : ((dh == -spinner_increment) ? -1 : 0) ; + + if(dw) + { + w = (dw > 0) ? curw << dw : curw >> -dw ; + update_ = TRUE ; + } + if(dh) + { + h = (dh > 0) ? curh << dh : curh >> -dh ; + update_ = TRUE ; + } + } + previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ; - if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize())) + if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize()) || update_) { resetSnapshotSizeOnUI(view, w, h) ; } diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp index 97a8db3..97150e3 100644 --- a/linden/indra/newview/llfloatertools.cpp +++ b/linden/indra/newview/llfloatertools.cpp @@ -194,12 +194,16 @@ BOOL LLFloaterTools::postBuild() mBtnLand = getChild("button land" ); childSetAction("button land",LLFloaterTools::setEditTool, (void*)LLToolSelectLand::getInstance()); mTextStatus = getChild("text status"); - mRadioZoom = getChild("radio zoom"); + childSetCommitCallback("slider zoom",commit_slider_zoom,this); + + mRadioZoom = getChild("radio zoom"); + childSetCommitCallback("radio zoom",commit_radio_zoom,this); mRadioOrbit = getChild("radio orbit"); childSetCommitCallback("radio orbit",commit_radio_orbit,this); mRadioPan = getChild("radio pan"); childSetCommitCallback("radio pan",commit_radio_pan,this); + mRadioMove = getChild("radio move"); childSetCommitCallback("radio move",click_popup_grab_drag,this); mRadioLift = getChild("radio lift"); @@ -492,6 +496,7 @@ void LLFloaterTools::dirty() // floater is closed. void LLFloaterTools::resetToolState() { + gCameraBtnZoom = TRUE; gCameraBtnOrbit = FALSE; gCameraBtnPan = FALSE; @@ -524,7 +529,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) mRadioOrbit ->setVisible( focus_visible ); mRadioPan ->setVisible( focus_visible ); childSetVisible("slider zoom", focus_visible); - + childSetEnabled("slider zoom", gCameraBtnZoom); + mRadioZoom ->set( !gCameraBtnOrbit && !gCameraBtnPan && !(mask == MASK_ORBIT) && @@ -867,18 +873,21 @@ void click_popup_grab_spin(LLUICtrl*, void*) void commit_radio_zoom(LLUICtrl *, void*) { + gCameraBtnZoom = TRUE; gCameraBtnOrbit = FALSE; gCameraBtnPan = FALSE; } void commit_radio_orbit(LLUICtrl *, void*) { + gCameraBtnZoom = FALSE; gCameraBtnOrbit = TRUE; gCameraBtnPan = FALSE; } void commit_radio_pan(LLUICtrl *, void*) { + gCameraBtnZoom = FALSE; gCameraBtnOrbit = FALSE; gCameraBtnPan = TRUE; } diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp index 49ca5e4..b543e31 100644 --- a/linden/indra/newview/llfolderview.cpp +++ b/linden/indra/newview/llfolderview.cpp @@ -40,7 +40,7 @@ #include "llfocusmgr.h" #include "llfontgl.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llinventory.h" #include "llcallbacklist.h" @@ -3144,6 +3144,10 @@ void LLFolderView::draw() { closeAutoOpenedFolders(); } + if(gViewerWindow->hasKeyboardFocus(this) && !getVisible()) + { + gViewerWindow->setKeyboardFocus( NULL ); + } // while dragging, update selection rendering to reflect single/multi drag status if (LLToolDragAndDrop::getInstance()->hasMouseCapture()) diff --git a/linden/indra/newview/llframestats.cpp b/linden/indra/newview/llframestats.cpp index f67c3b8..c7519c9 100644 --- a/linden/indra/newview/llframestats.cpp +++ b/linden/indra/newview/llframestats.cpp @@ -184,7 +184,7 @@ void LLFrameStats::dump() char filename[LL_MAX_PATH]; /* Flawfinder: ignore */ snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */ - FILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */ + LLFILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */ if (!fp) { llinfos << "Couldn't open file for dumping frame stats!" << llendl; diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp index 41b1c1e..016acd5 100644 --- a/linden/indra/newview/llgivemoney.cpp +++ b/linden/indra/newview/llgivemoney.cpp @@ -40,6 +40,8 @@ #include "llresmgr.h" #include "lltextbox.h" #include "lllineeditor.h" +#include "llmutelist.h" +#include "llfloaterreporter.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" @@ -474,6 +476,17 @@ void LLFloaterPay::give(S32 amount) if(dest_object->isAvatar()) tx_type = TRANS_GIFT; mCallback(mTargetUUID, region, amount, FALSE, tx_type, object_name); mObjectSelection = NULL; + + // request the object owner in order to check if the owner needs to be unmuted + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ObjectData); + msg->addU32Fast(_PREHASH_RequestFlags, OBJECT_PAY_REQUEST ); + msg->addUUIDFast(_PREHASH_ObjectID, mTargetUUID); + msg->sendReliable( region->getHost() ); } } } @@ -481,6 +494,9 @@ void LLFloaterPay::give(S32 amount) { // just transfer the L$ mCallback(mTargetUUID, gAgent.getRegion(), amount, mTargetIsGroup, TRANS_GIFT, LLString::null); + + // check if the payee needs to be unmuted + LLMuteList::getInstance()->autoRemove(mTargetUUID, LLMuteList::AR_MONEY); } } } diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp index 4ea38aa..30c76c9 100644 --- a/linden/indra/newview/llglsandbox.cpp +++ b/linden/indra/newview/llglsandbox.cpp @@ -39,7 +39,7 @@ #include "llviewercontrol.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llglheaders.h" #include "llparcel.h" #include "llui.h" diff --git a/linden/indra/newview/llglslshader.cpp b/linden/indra/newview/llglslshader.cpp index 5c8f156..afbafde 100644 --- a/linden/indra/newview/llglslshader.cpp +++ b/linden/indra/newview/llglslshader.cpp @@ -34,6 +34,7 @@ #include "llfeaturemanager.h" #include "llglslshader.h" +#include "llfile.h" #include "llviewerwindow.h" #include "llviewercontrol.h" #include "pipeline.h" @@ -42,16 +43,16 @@ #include "llwaterparammanager.h" #include "llsky.h" #include "llvosky.h" -#include "llglimmediate.h" +#include "llrender.h" #if LL_DARWIN #include "OpenGL/OpenGL.h" #endif #ifdef LL_RELEASE_FOR_DOWNLOAD -#define UNIFORM_ERRS llwarns +#define UNIFORM_ERRS LL_WARNS_ONCE("Shader") #else -#define UNIFORM_ERRS llerrs +#define UNIFORM_ERRS LL_ERRS("Shader") #endif // Lots of STL stuff in here, using namespace std to keep things more readable @@ -60,20 +61,6 @@ using std::pair; using std::make_pair; using std::string; -/* -//utility shader objects (not shader programs) -GLhandleARB gSumLightsVertex; -GLhandleARB gLightVertex; -GLhandleARB gLightFuncVertex; -GLhandleARB gLightFragment; -GLhandleARB gWaterFogFragment; - -//utility WindLight shader objects (not shader programs) -GLhandleARB gWindLightVertex; -GLhandleARB gWindLightFragment; -GLhandleARB gGammaFragment; -*/ - LLVector4 gShinyOrigin; //object shaders @@ -506,11 +493,11 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns) LLString log = get_object_log(ret); if (warns) { - llwarns << log << llendl; + LL_WARNS("ShaderLoading") << log << LL_ENDL; } else { - llinfos << log << llendl; + LL_DEBUGS("ShaderLoading") << log << LL_ENDL; } } @@ -520,10 +507,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l error = glGetError(); if (error != GL_NO_ERROR) { - llwarns << "GL ERROR entering loadShaderFile(): " << error << llendl; + LL_WARNS("ShaderLoading") << "GL ERROR entering loadShaderFile(): " << error << LL_ENDL; } - llinfos << "Loading shader file: " << filename << " class " << shader_level << llendl; + LL_DEBUGS("ShaderLoading") << "Loading shader file: " << filename << " class " << shader_level << LL_ENDL; if (filename.empty()) { @@ -532,7 +519,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l //read in from file - FILE* file = NULL; + LLFILE* file = NULL; S32 try_gpu_class = shader_level; S32 gpu_class; @@ -544,20 +531,18 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class"); fname << gpu_class << "/" << filename; - llinfos << "Looking in " << fname.str().c_str() << llendl; - file = fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */ + LL_DEBUGS("ShaderLoading") << "Looking in " << fname.str().c_str() << LL_ENDL; + file = LLFile::fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */ if (file) { -#if !LL_RELEASE_FOR_DOWNLOAD - llinfos << "Found shader file: " << fname.str() << llendl; -#endif + LL_INFOS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL; break; // done } } if (file == NULL) { - llinfos << "GLSL Shader file not found: " << filename << llendl; + LL_WARNS("ShaderLoading") << "GLSL Shader file not found: " << filename << LL_ENDL; return 0; } @@ -580,7 +565,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l error = glGetError(); if (error != GL_NO_ERROR) { - llwarns << "GL ERROR in glCreateShaderObjectARB: " << error << llendl; + LL_WARNS("ShaderLoading") << "GL ERROR in glCreateShaderObjectARB: " << error << LL_ENDL; } else { @@ -589,7 +574,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l error = glGetError(); if (error != GL_NO_ERROR) { - llwarns << "GL ERROR in glShaderSourceARB: " << error << llendl; + LL_WARNS("ShaderLoading") << "GL ERROR in glShaderSourceARB: " << error << LL_ENDL; } else { @@ -598,7 +583,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l error = glGetError(); if (error != GL_NO_ERROR) { - llwarns << "GL ERROR in glCompileShaderARB: " << error << llendl; + LL_WARNS("ShaderLoading") << "GL ERROR in glCompileShaderARB: " << error << LL_ENDL; } } } @@ -616,7 +601,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l if (error != GL_NO_ERROR || success == GL_FALSE) { //an error occured, print log - llwarns << "GLSL Compilation Error: (" << error << ") in " << filename << llendl; + LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL; dumpObjectLog(ret); ret = 0; } @@ -641,7 +626,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l shader_level--; return loadShaderFile(filename,shader_level,type); } - llwarns << "Failed to load " << filename << llendl; + LL_WARNS("ShaderLoading") << "Failed to load " << filename << LL_ENDL; } return ret; } @@ -655,7 +640,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors) if (!suppress_errors && success == GL_FALSE) { //an error occured, print log - llwarns << "GLSL Linker Error:" << llendl; + LL_WARNS("ShaderLoading") << "GLSL Linker Error:" << LL_ENDL; } // NOTE: Removing LL_DARWIN block as it doesn't seem to actually give the correct answer, @@ -675,7 +660,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors) CGLGetParameter (ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing); if (!fragmentGPUProcessing || !vertexGPUProcessing) { - llwarns << "GLSL Linker: Running in Software:" << llendl; + LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL; success = GL_FALSE; suppress_errors = FALSE; } @@ -685,7 +670,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors) LLString::toLower(log); if (log.find("software") != LLString::npos) { - llwarns << "GLSL Linker: Running in Software:" << llendl; + LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL; success = GL_FALSE; suppress_errors = FALSE; } @@ -706,7 +691,7 @@ BOOL LLShaderMgr::validateProgramObject(GLhandleARB obj) glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success); if (success == GL_FALSE) { - llwarns << "GLSL program not valid: " << llendl; + LL_WARNS("ShaderLoading") << "GLSL program not valid: " << LL_ENDL; dumpObjectLog(obj); } else @@ -757,7 +742,7 @@ void LLShaderMgr::setShaders() gPipeline.setLightingDetail(-1); // Shaders - llinfos << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << llendl; + LL_INFOS("ShaderLoading") << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << LL_ENDL; for (S32 i = 0; i < SHADER_COUNT; i++) { sVertexShaderLevel[i] = 0; @@ -1625,7 +1610,7 @@ BOOL LLGLSLShader::createShader(vector * attributes, for ( ; fileIter != mShaderFiles.end(); fileIter++ ) { GLhandleARB shaderhandle = LLShaderMgr::loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second); - lldebugs << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << llendl; + LL_DEBUGS("ShaderLoading") << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << LL_ENDL; if (mShaderLevel > 0) { attachObject(shaderhandle); @@ -1647,12 +1632,12 @@ BOOL LLGLSLShader::createShader(vector * attributes, } if( !success ) { - llwarns << "Failed to link shader: " << mName << llendl; + LL_WARNS("ShaderLoading") << "Failed to link shader: " << mName << LL_ENDL; // Try again using a lower shader level; if (mShaderLevel > 0) { - llwarns << "Failed to link using shader level " << mShaderLevel << ". Trying again using shader level " << (mShaderLevel - 1) << "." << llendl; + LL_WARNS("ShaderLoading") << "Failed to link using shader level " << mShaderLevel << " trying again using shader level " << (mShaderLevel - 1) << LL_ENDL; mShaderLevel--; return createShader(attributes,uniforms); } @@ -1671,7 +1656,7 @@ BOOL LLGLSLShader::attachObject(std::string object) } else { - llwarns << "Attempting to attach shader object that hasn't been compiled: " << object << llendl; + LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL; return FALSE; } } @@ -1686,7 +1671,7 @@ void LLGLSLShader::attachObject(GLhandleARB object) } else { - llwarns << "Attempting to attach non existing shader object. " << llendl; + LL_WARNS("ShaderLoading") << "Attempting to attach non existing shader object. " << LL_ENDL; } } @@ -1718,7 +1703,7 @@ BOOL LLGLSLShader::mapAttributes(const vector * attributes) if (index != -1) { mAttribute[i] = index; - // llinfos << "Attribute " << name << " assigned to channel " << index << llendl; + LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL; } } if (attributes != NULL) @@ -1730,7 +1715,7 @@ BOOL LLGLSLShader::mapAttributes(const vector * attributes) if (index != -1) { mAttribute[LLShaderMgr::sReservedAttribs.size() + i] = index; - // llinfos << "Attribute " << name << " assigned to channel " << index << llendl; + LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL; } } } @@ -1759,9 +1744,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector * uniforms) if (location != -1) { mUniformMap[name] = location; -#if 0 // !LL_RELEASE_FOR_DOWNLOAD - llinfos << "Uniform " << name << " is at location " << location << llendl; -#endif + LL_DEBUGS("ShaderLoading") << "Uniform " << name << " is at location " << location << LL_ENDL; //find the index of this uniform for (S32 i = 0; i < (S32) LLShaderMgr::sReservedUniforms.size(); i++) @@ -1798,7 +1781,7 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type) if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB) { //this here is a texture glUniform1iARB(location, mActiveTextureChannels); - llinfos << "Assigned to texture channel " << mActiveTextureChannels << llendl; + LL_DEBUGS("ShaderLoading") << "Assigned to texture channel " << mActiveTextureChannels << LL_ENDL; return mActiveTextureChannels++; } return -1; @@ -1866,17 +1849,22 @@ void LLGLSLShader::unbind() } } +void LLGLSLShader::bindNoShader(void) +{ + glUseProgramObjectARB(0); +} + S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode) { if (uniform < 0 || uniform >= (S32)mTexture.size()) { - UNIFORM_ERRS << "LLGLSLShader::enableTexture: uniform out of range: " << uniform << llendl; + UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL; return -1; } S32 index = mTexture[uniform]; if (index != -1) { - glActiveTextureARB(GL_TEXTURE0_ARB+index); + gGL.getTexUnit(index)->activate(); glEnable(mode); } return index; @@ -1886,13 +1874,13 @@ S32 LLGLSLShader::disableTexture(S32 uniform, S32 mode) { if (uniform < 0 || uniform >= (S32)mTexture.size()) { - UNIFORM_ERRS << "LLGLSLShader::disableTexture: uniform out of range: " << uniform << llendl; + UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL; return -1; } S32 index = mTexture[uniform]; if (index != -1) { - glActiveTextureARB(GL_TEXTURE0_ARB+index); + gGL.getTexUnit(index)->activate(); glDisable(mode); } return index; @@ -1904,7 +1892,7 @@ void LLGLSLShader::uniform1f(U32 index, GLfloat x) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -1926,7 +1914,7 @@ void LLGLSLShader::uniform2f(U32 index, GLfloat x, GLfloat y) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -1949,7 +1937,7 @@ void LLGLSLShader::uniform3f(U32 index, GLfloat x, GLfloat y, GLfloat z) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -1972,7 +1960,7 @@ void LLGLSLShader::uniform4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -1995,7 +1983,7 @@ void LLGLSLShader::uniform1fv(U32 index, U32 count, const GLfloat* v) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -2018,7 +2006,7 @@ void LLGLSLShader::uniform2fv(U32 index, U32 count, const GLfloat* v) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -2041,7 +2029,7 @@ void LLGLSLShader::uniform3fv(U32 index, U32 count, const GLfloat* v) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -2064,7 +2052,7 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v) { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -2087,7 +2075,7 @@ void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, c { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -2104,7 +2092,7 @@ void LLGLSLShader::uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, c { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } @@ -2121,7 +2109,7 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c { if (mUniform.size() <= index) { - UNIFORM_ERRS << "Uniform index out of bounds." << llendl; + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; return; } diff --git a/linden/indra/newview/llglslshader.h b/linden/indra/newview/llglslshader.h index f3f83da..e517b94 100644 --- a/linden/indra/newview/llglslshader.h +++ b/linden/indra/newview/llglslshader.h @@ -118,6 +118,9 @@ public: void bind(); void unbind(); + // Unbinds any previously bound shader by explicitly binding no shader. + static void bindNoShader(void); + GLhandleARB mProgramObject; std::vector mAttribute; //lookup table of attribute enum to attribute channel std::vector mUniform; //lookup table of uniform enum to uniform location diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp index 5b6c3ca..d760e8b 100644 --- a/linden/indra/newview/llgroupnotify.cpp +++ b/linden/indra/newview/llgroupnotify.cpp @@ -217,8 +217,8 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject, LLFontGL::sSansSerif, FALSE); - LLStyle headerstyle(true,LLColor4::black,"SansSerifBig"); - LLStyle datestyle(true,LLColor4::black,"serif"); + static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifBig")); + static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif")); text->appendStyledText(subject,false,false,&headerstyle); text->appendStyledText(time_buf,false,false,&datestyle); diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp index 6cc3873..082f413 100644 --- a/linden/indra/newview/llhoverview.cpp +++ b/linden/indra/newview/llhoverview.cpp @@ -38,7 +38,7 @@ #include "llfontgl.h" #include "message.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llfontgl.h" #include "llparcel.h" #include "lldbstrings.h" @@ -52,6 +52,7 @@ #include "llpermissions.h" #include "llresmgr.h" #include "llselectmgr.h" +#include "lltrans.h" #include "lltoolmgr.h" #include "lltoolpie.h" #include "lltoolselectland.h" @@ -254,7 +255,7 @@ void LLHoverView::updateText() } else { - line.append("Person"); + line.append(LLTrans::getString("TooltipPerson")); } mText.push_back(line); } @@ -275,7 +276,7 @@ void LLHoverView::updateText() line.clear(); if (nodep->mName.empty()) { - line.append("(no name)"); + line.append(LLTrans::getString("TooltipNoName")); } else { @@ -291,7 +292,7 @@ void LLHoverView::updateText() // Line: "Owner: James Linden" line.clear(); - line.append("Owner: "); + line.append(LLTrans::getString("TooltipOwner") + " "); if (nodep->mValid) { @@ -302,7 +303,7 @@ void LLHoverView::updateText() owner = nodep->mPermissions->getOwner(); if (LLUUID::null == owner) { - line.append("Public"); + line.append(LLTrans::getString("TooltipPublic")); } else if(gCacheName->getFullName(owner, name)) { @@ -310,7 +311,7 @@ void LLHoverView::updateText() } else { - line.append("Retrieving..."); + line.append(LLTrans::getString("RetrievingData")); } } else @@ -320,17 +321,17 @@ void LLHoverView::updateText() if (gCacheName->getGroupName(owner, name)) { line.append(name); - line.append("(Group)"); + line.append(LLTrans::getString("TooltipIsGroup")); } else { - line.append("Retrieving..."); + line.append(LLTrans::getString("RetrievingData")); } } } else { - line.append("Retrieving..."); + line.append(LLTrans::getString("RetrievingData")); } mText.push_back(line); @@ -350,47 +351,48 @@ void LLHoverView::updateText() line.clear(); if (object->flagScripted()) { - line.append("Script "); + + line.append(LLTrans::getString("TooltipFlagScript") + " "); } if (object->usePhysics()) { - line.append("Physics "); + line.append(LLTrans::getString("TooltipFlagPhysics") + " "); } if (object->flagHandleTouch() || (parent && parent->flagHandleTouch()) ) { - line.append("Touch "); + line.append(LLTrans::getString("TooltipFlagTouch") + " "); suppressObjectHoverDisplay = FALSE; // Show tip } if (object->flagTakesMoney() || (parent && parent->flagTakesMoney()) ) { - line.append("L$ "); + line.append(LLTrans::getString("TooltipFlagL$") + " "); suppressObjectHoverDisplay = FALSE; // Show tip } if (object->flagAllowInventoryAdd()) { - line.append("Drop Inventory "); + line.append(LLTrans::getString("TooltipFlagDropInventory") + " "); suppressObjectHoverDisplay = FALSE; // Show tip } if (object->flagPhantom()) { - line.append("Phantom "); + line.append(LLTrans::getString("TooltipFlagPhantom") + " "); } if (object->flagTemporary()) { - line.append("Temporary "); + line.append(LLTrans::getString("TooltipFlagTemporary") + " "); } if (object->usePhysics() || object->flagHandleTouch() || (parent && parent->flagHandleTouch()) ) { - line.append("(Right-click for menu) "); + line.append(LLTrans::getString("TooltipFlagRightClickMenu") + " "); } mText.push_back(line); } @@ -406,12 +408,14 @@ void LLHoverView::updateText() nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY); if (for_copy) { - line.append("Free to copy"); + line.append(LLTrans::getString("TooltipFreeToCopy")); suppressObjectHoverDisplay = FALSE; // Show tip } else if (for_sale) { - line.append(llformat("For Sale: L$%d", nodep->mSaleInfo.getSalePrice())); + LLString::format_map_t args; + args["[AMOUNT]"] = nodep->mSaleInfo.getSalePrice(); + line.append(LLTrans::getString("TooltipForSaleL$", args)); suppressObjectHoverDisplay = FALSE; // Show tip } else @@ -422,7 +426,9 @@ void LLHoverView::updateText() } else { - line.append("For Sale: Retrieving..."); + LLString::format_map_t args; + args["[MESSAGE]"] = LLTrans::getString("RetrievingData"); + line.append(LLTrans::getString("TooltipForSaleMsg", args)); } mText.push_back(line); } @@ -459,7 +465,7 @@ void LLHoverView::updateText() // Line: "Land" line.clear(); - line.append("Land: "); + line.append(LLTrans::getString("TooltipLand")); if (hover_parcel) { line.append(hover_parcel->getName()); @@ -468,25 +474,25 @@ void LLHoverView::updateText() // Line: "Owner: James Linden" line.clear(); - line.append("Owner: "); + line.append(LLTrans::getString("TooltipOwner") + " "); if ( hover_parcel ) { std::string name; if (LLUUID::null == owner) { - line.append("Public"); + line.append(LLTrans::getString("TooltipPublic")); } else if (hover_parcel->getIsGroupOwned()) { if (gCacheName->getGroupName(owner, name)) { line.append(name); - line.append("(Group)"); + line.append(LLTrans::getString("TooltipIsGroup")); } else { - line.append("Retrieving..."); + line.append(LLTrans::getString("RetrievingData")); } } else if(gCacheName->getFullName(owner, name)) @@ -495,12 +501,12 @@ void LLHoverView::updateText() } else { - line.append("Retrieving..."); + line.append(LLTrans::getString("RetrievingData")); } } else { - line.append("Retrieving..."); + line.append(LLTrans::getString("RetrievingData")); } mText.push_back(line); @@ -519,27 +525,26 @@ void LLHoverView::updateText() { if ( hover_parcel->getAllowGroupModify() ) { - line.append("Group Build"); + line.append(LLTrans::getString("TooltipFlagGroupBuild")); } else { - line.append("No Build"); + line.append(LLTrans::getString("TooltipFlagNoBuild")); } - words++; } if ( !hover_parcel->getAllowTerraform() ) { if (words) line.append(", "); - line.append("No Edit"); + line.append(LLTrans::getString("TooltipFlagNoEdit")); words++; } if ( hover_parcel->getAllowDamage() ) { if (words) line.append(", "); - line.append("Not Safe"); + line.append(LLTrans::getString("TooltipFlagNotSafe")); words++; } @@ -547,7 +552,7 @@ void LLHoverView::updateText() if ( !hover_parcel->getAllowFly() ) { if (words) line.append(", "); - line.append("No Fly"); + line.append(LLTrans::getString("TooltipFlagNoFly")); words++; } @@ -556,11 +561,11 @@ void LLHoverView::updateText() if (words) line.append(", "); if ( hover_parcel->getAllowGroupScripts() ) { - line.append("Group Scripts"); + line.append(LLTrans::getString("TooltipFlagGroupScripts")); } else { - line.append("No Scripts"); + line.append(LLTrans::getString("TooltipFlagNoScripts")); } words++; @@ -583,7 +588,9 @@ void LLHoverView::updateText() */ if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE)) { - line = llformat("For Sale: L$%d", hover_parcel->getSalePrice() ); + LLString::format_map_t args; + args["[AMOUNT]"] = hover_parcel->getSalePrice(); + line = LLTrans::getString("TooltipForSaleL$", args); mText.push_back(line); } } diff --git a/linden/indra/newview/llhudeffectlookat.cpp b/linden/indra/newview/llhudeffectlookat.cpp index 92e7fdf..88ad5d6 100644 --- a/linden/indra/newview/llhudeffectlookat.cpp +++ b/linden/indra/newview/llhudeffectlookat.cpp @@ -33,7 +33,7 @@ #include "llhudeffectlookat.h" -#include "llglimmediate.h" +#include "llrender.h" #include "message.h" #include "llagent.h" diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp index d42eeb5..8cd1023 100644 --- a/linden/indra/newview/llhudeffectpointat.cpp +++ b/linden/indra/newview/llhudeffectpointat.cpp @@ -34,7 +34,7 @@ #include "llhudeffectpointat.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "lldrawable.h" diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp index 010e85f..85cc996 100644 --- a/linden/indra/newview/llhudicon.cpp +++ b/linden/indra/newview/llhudicon.cpp @@ -34,7 +34,7 @@ #include "llhudicon.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llviewerobject.h" #include "lldrawable.h" diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp index f8eddc7..26df22a 100644 --- a/linden/indra/newview/llhudtext.cpp +++ b/linden/indra/newview/llhudtext.cpp @@ -33,7 +33,7 @@ #include "llhudtext.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llviewercontrol.h" @@ -308,7 +308,6 @@ void LLHUDText::renderText(BOOL for_select) } LLUI::popMatrix(); - LLImageGL::unbindTexture(0); LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE); @@ -375,7 +374,7 @@ void LLHUDText::renderText(BOOL for_select) // Render label { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); for(std::vector::iterator segment_iter = mLabelSegments.begin(); segment_iter != mLabelSegments.end(); ++segment_iter ) diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp index 3cb9dfb..2e3682d 100644 --- a/linden/indra/newview/llimpanel.cpp +++ b/linden/indra/newview/llimpanel.cpp @@ -48,16 +48,19 @@ #include "llchat.h" #include "llconsole.h" #include "llfloater.h" +#include "llfloatergroupinfo.h" +#include "llimview.h" #include "llinventory.h" #include "llinventorymodel.h" #include "llinventoryview.h" +#include "llfloateractivespeakers.h" #include "llfloateravatarinfo.h" #include "llfloaterchat.h" #include "llkeyboard.h" #include "lllineeditor.h" +#include "llnotify.h" #include "llresmgr.h" #include "lltabcontainer.h" -#include "llimview.h" #include "llviewertexteditor.h" #include "llviewermessage.h" #include "llviewerstats.h" @@ -68,11 +71,8 @@ #include "llfloaterhtml.h" #include "llweb.h" #include "llhttpclient.h" -#include "llfloateractivespeakers.h" // LLSpeakerMgr -#include "llfloatergroupinfo.h" -#include "llsdutil.h" -#include "llnotify.h" #include "llmutelist.h" +#include "llstylemap.h" // // Constants @@ -1454,24 +1454,20 @@ BOOL LLFloaterIMPanel::inviteToSession(const LLDynamicArray& ids) return TRUE; } -void LLFloaterIMPanel::addHistoryLine(const LLUUID& source, const std::string &utf8msg, const LLColor4& color, bool log_to_file) +void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4& color, bool log_to_file, const LLUUID& source, const char *name) { // start tab flashing when receiving im for background session from user - LLMultiFloater* hostp = getHost(); - if( !isInVisibleChain() - && hostp - && source != gAgent.getID()) + if (source != LLUUID::null) { - hostp->setFloaterFlashing(this, TRUE); + LLMultiFloater* hostp = getHost(); + if( !isInVisibleChain() + && hostp + && source != gAgent.getID()) + { + hostp->setFloaterFlashing(this, TRUE); + } } - addHistoryLine(utf8msg, color, log_to_file); - mSpeakers->speakerChatted(source); - mSpeakers->setSpeakerTyping(source, FALSE); -} - -void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4& color, bool log_to_file) -{ // Now we're adding the actual line of text, so erase the // "Foo is typing..." text segment, and the optional timestamp // if it was present. JC @@ -1485,6 +1481,22 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4 timestring = mHistoryEditor->appendTime(prepend_newline); prepend_newline = false; } + + // 'name' is a sender name that we want to hotlink so that clicking on it opens a profile. + if (name != NULL) // If name exists, then add it to the front of the message. + { + // Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text. + if (!strcmp(name,SYSTEM_FROM)) + { + mHistoryEditor->appendColoredText(name,false,false,color); + } + else + { + // Convert the name to a hotlink and add to message. + const LLStyleSP &source_style = LLStyleMap::instance().lookup(source); + mHistoryEditor->appendStyledText(name, false, false, &source_style); + } + } mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color); if (log_to_file @@ -1492,9 +1504,9 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4 { LLString histstr; if (gSavedPerAccountSettings.getBOOL("IMLogTimestamp")) - histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + utf8msg; + histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + LLString(name) + utf8msg; else - histstr = utf8msg; + histstr = LLString(name) + utf8msg; LLLogChat::saveHistory(getTitle(),histstr); } @@ -1503,6 +1515,12 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4 { mNumUnreadMessages++; } + + if (source != LLUUID::null) + { + mSpeakers->speakerChatted(source); + mSpeakers->setSpeakerTyping(source, FALSE); + } } @@ -1836,6 +1854,11 @@ void deliver_message(const std::string& utf8_text, (EInstantMessage)new_dialog, im_session_id); gAgent.sendReliableMessage(); + + if (LLMuteList::getInstance()) + { + LLMuteList::getInstance()->autoRemove(other_participant_id, LLMuteList::AR_IM); + } } void LLFloaterIMPanel::sendMsg() @@ -1888,7 +1911,7 @@ void LLFloaterIMPanel::sendMsg() BOOL other_was_typing = mOtherTyping; - addHistoryLine(gAgent.getID(), history_echo, gSavedSettings.getColor("IMChatColor")); + addHistoryLine(history_echo, gSavedSettings.getColor("IMChatColor"), true, gAgent.getID()); if (other_was_typing) { @@ -2189,4 +2212,3 @@ void LLFloaterIMPanel::onConfirmForceCloseError(S32 option, void* data) } - diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h index 16d4042..2ed866b 100644 --- a/linden/indra/newview/llimpanel.h +++ b/linden/indra/newview/llimpanel.h @@ -38,6 +38,7 @@ #include "lldarray.h" #include "llinstantmessage.h" #include "llvoiceclient.h" +#include "llstyle.h" class LLLineEditor; class LLViewerTextEditor; @@ -202,13 +203,12 @@ public: // Return TRUE if successful, otherwise FALSE. BOOL inviteToSession(const LLDynamicArray& agent_ids); - void addHistoryLine(const LLUUID& source, - const std::string &utf8msg, - const LLColor4& color = LLColor4::white, - bool log_to_file = true); void addHistoryLine(const std::string &utf8msg, const LLColor4& color = LLColor4::white, - bool log_to_file = true); + bool log_to_file = true, + const LLUUID& source = LLUUID::null, + const char *name = NULL); + void setInputFocus( BOOL b ); void selectAll(); @@ -357,6 +357,9 @@ private: LLFrameTimer mLastKeystrokeTimer; void disableWhileSessionStarting(); + + typedef std::map styleMap; + static styleMap mStyleMap; }; diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp index e451388..797c2a4 100644 --- a/linden/indra/newview/llimview.cpp +++ b/linden/indra/newview/llimview.cpp @@ -83,6 +83,7 @@ LLIMMgr* gIMMgr = NULL; // *FIXME: make these all either UIStrings or Strings static LLString sOnlyUserMessage; static LLUIString sOfflineMessage; +static LLString sMutedMessage; static LLUIString sInviteMessage; std::map LLFloaterIM::sEventStringsMap; @@ -161,6 +162,7 @@ BOOL LLFloaterIM::postBuild() sOfflineMessage = getUIString("offline_message"); sInviteMessage = getUIString("invite_message"); + sMutedMessage = childGetText("muted_message"); if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() ) { @@ -400,10 +402,10 @@ void LLIMMgr::addMessage( EInstantMessage dialog, U32 parent_estate_id, const LLUUID& region_id, - const LLVector3& position) + const LLVector3& position, + bool link_name) // If this is true, then we insert the name and link it to a profile { LLUUID other_participant_id = target_id; - bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM); // don't process muted IMs if (LLMuteList::getInstance()->isMuted( @@ -420,8 +422,6 @@ void LLIMMgr::addMessage( other_participant_id = LLUUID::null; } - - LLFloaterIMPanel* floater; LLUUID new_session_id = session_id; if (new_session_id.isNull()) @@ -482,15 +482,17 @@ void LLIMMgr::addMessage( } // now add message to floater - if ( is_from_system ) // chat came from system + bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM); + const LLColor4& color = ( is_from_system ? + gSavedSettings.getColor4("SystemChatColor") : + gSavedSettings.getColor("IMChatColor")); + if ( !link_name ) { - floater->addHistoryLine( - msg, - gSavedSettings.getColor4("SystemChatColor")); + floater->addHistoryLine(msg,color); // No name to prepend, so just add the message normally } else { - floater->addHistoryLine(other_participant_id, msg, gSavedSettings.getColor("IMChatColor")); + floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message } LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD()); @@ -615,6 +617,8 @@ LLUUID LLIMMgr::addSession( noteOfflineUsers(floater, ids); LLFloaterChatterBox::showInstance(session_id); + noteMutedUsers(floater, ids); + LLFloaterChatterBox::getInstance(LLSD())->showFloater(floater); } else { @@ -659,6 +663,7 @@ LLUUID LLIMMgr::addSession( noteOfflineUsers(floater, ids); LLFloaterChatterBox::showInstance(session_id); + noteMutedUsers(floater, ids); } else { @@ -1232,6 +1237,31 @@ void LLIMMgr::noteOfflineUsers( } } +void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater, + const LLDynamicArray& ids) +{ + S32 count = ids.count(); + if(count > 0) + { + const LLRelationship* info = NULL; + LLAvatarTracker& at = LLAvatarTracker::instance(); + for(S32 i = 0; i < count; ++i) + { + info = at.getBuddyInfo(ids.get(i)); + char first[DB_FIRST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/ + char last[DB_LAST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/ + if(info && LLMuteList::getInstance() && LLMuteList::getInstance()->isMuted(ids.get(i)) + && gCacheName->getName(ids.get(i), first, last)) + { + LLUIString muted = sMutedMessage; + muted.setArg("[FIRST]", first); + muted.setArg("[LAST]", last); + floater->addHistoryLine(muted); + } + } + } +} + void LLIMMgr::processIMTypingStart(const LLIMInfo* im_info) { processIMTypingCore(im_info, TRUE); @@ -1520,8 +1550,7 @@ public: snprintf( buffer, sizeof(buffer), - "%s%s%s%s", - name.c_str(), + "%s%s%s", separator_string, saved, (message.c_str() + message_offset)); /*Flawfinder: ignore*/ @@ -1540,7 +1569,8 @@ public: IM_SESSION_INVITE, message_params["parent_estate_id"].asInteger(), message_params["region_id"].asUUID(), - ll_vector3_from_sd(message_params["position"])); + ll_vector3_from_sd(message_params["position"]), + true); snprintf( buffer, @@ -1628,4 +1658,3 @@ LLHTTPRegistration gHTTPRegistrationMessageChatterBoxInvitation( "/message/ChatterBoxInvitation"); - diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h index 44cb992..b2621e8 100644 --- a/linden/indra/newview/llimview.h +++ b/linden/indra/newview/llimview.h @@ -65,7 +65,8 @@ public: EInstantMessage dialog = IM_NOTHING_SPECIAL, U32 parent_estate_id = 0, const LLUUID& region_id = LLUUID::null, - const LLVector3& position = LLVector3::zero); + const LLVector3& position = LLVector3::zero, + bool link_name = false); void addSystemMessage(const LLUUID& session_id, const LLString& message_name, const LLString::format_map_t& args); @@ -192,6 +193,7 @@ private: // reduce 'hello' messages to the linden employees unlucky enough // to have their calling card in the default inventory. void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray& ids); + void noteMutedUsers(LLFloaterIMPanel* panel, const LLDynamicArray& ids); void processIMTypingCore(const LLIMInfo* im_info, BOOL typing); diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp index e76c427..91bdb8d 100644 --- a/linden/indra/newview/llinventorymodel.cpp +++ b/linden/indra/newview/llinventorymodel.cpp @@ -1810,7 +1810,7 @@ bool LLInventoryModel::loadSkeleton( const S32 NO_VERSION = LLViewerInventoryCategory::VERSION_UNKNOWN; std::string gzip_filename(inventory_filename); gzip_filename.append(".gz"); - FILE* fp = LLFile::fopen(gzip_filename.c_str(), "rb"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen(gzip_filename.c_str(), "rb"); /*Flawfinder: ignore*/ bool remove_inventory_file = false; if(fp) { @@ -2344,7 +2344,7 @@ bool LLInventoryModel::loadFromFile( return false; } llinfos << "LLInventoryModel::loadFromFile(" << filename << ")" << llendl; - FILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ + LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ if(!file) { llinfos << "unable to load inventory from: " << filename << llendl; @@ -2417,7 +2417,7 @@ bool LLInventoryModel::saveToFile( return false; } llinfos << "LLInventoryModel::saveToFile(" << filename << ")" << llendl; - FILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ + LLFILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ if(!file) { llwarns << "unable to save inventory to: " << filename << llendl; @@ -3692,7 +3692,7 @@ BOOL decompress_file(const char* src_filename, const char* dst_filename) BOOL rv = FALSE; gzFile src = NULL; U8* buffer = NULL; - FILE* dst = NULL; + LLFILE* dst = NULL; S32 bytes = 0; const S32 DECOMPRESS_BUFFER_SIZE = 32000; diff --git a/linden/indra/newview/lljoystickbutton.cpp b/linden/indra/newview/lljoystickbutton.cpp index 1978b78..3957b0a 100644 --- a/linden/indra/newview/lljoystickbutton.cpp +++ b/linden/indra/newview/lljoystickbutton.cpp @@ -36,7 +36,7 @@ // Library includes #include "llcoord.h" #include "indra_constants.h" -#include "llglimmediate.h" +#include "llrender.h" // Project includes #include "llui.h" diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp index 7be9781..38c4869 100644 --- a/linden/indra/newview/lllogchat.cpp +++ b/linden/indra/newview/lllogchat.cpp @@ -76,7 +76,7 @@ void LLLogChat::saveHistory(LLString filename, LLString line) return; } - FILE* fp = LLFile::fopen(LLLogChat::makeLogFileName(filename).c_str(), "a"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen(LLLogChat::makeLogFileName(filename).c_str(), "a"); /*Flawfinder: ignore*/ if (!fp) { llinfos << "Couldn't open chat history log!" << llendl; @@ -96,7 +96,7 @@ void LLLogChat::loadHistory(LLString filename , void (*callback)(ELogLineType,LL llerrs << "Filename is Empty!" << llendl; } - FILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/ + LLFILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/ if (!fptr) { //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string"); diff --git a/linden/indra/newview/llmanip.cpp b/linden/indra/newview/llmanip.cpp index e0621a3..5c19685 100644 --- a/linden/indra/newview/llmanip.cpp +++ b/linden/indra/newview/llmanip.cpp @@ -36,7 +36,7 @@ #include "llmath.h" #include "v3math.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llprimitive.h" #include "llview.h" #include "llviewerimagelist.h" diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp index 43a22e5..b60e29a 100644 --- a/linden/indra/newview/llmaniprotate.cpp +++ b/linden/indra/newview/llmaniprotate.cpp @@ -36,7 +36,7 @@ // library includes #include "llmath.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "v4color.h" #include "llprimitive.h" #include "llview.h" diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp index bb26484..d5ab7a1 100644 --- a/linden/indra/newview/llmanipscale.cpp +++ b/linden/indra/newview/llmanipscale.cpp @@ -38,7 +38,7 @@ #include "v3math.h" #include "llquaternion.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "v4color.h" #include "llprimitive.h" diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp index ac41068..7dbb470 100644 --- a/linden/indra/newview/llmaniptranslate.cpp +++ b/linden/indra/newview/llmaniptranslate.cpp @@ -38,7 +38,7 @@ #include "llmaniptranslate.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llbbox.h" @@ -1535,10 +1535,10 @@ void LLManipTranslate::renderSnapGuides() LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER); glBindTexture(GL_TEXTURE_2D, sGridTex); gGL.flush(); - gGL.blendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); + gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE_MINUS_SOURCE_ALPHA); renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f); gGL.flush(); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } { @@ -1649,7 +1649,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal, LLGLEnable stencil(GL_STENCIL_TEST); LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS); glStencilFunc(GL_ALWAYS, 0, stencil_mask); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gGL.setColorMask(false, false); LLImageGL::unbindTexture(0); glColor4f(1,1,1,1); @@ -1700,7 +1700,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal, LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS); } - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); } gGL.color4f(1,1,1,1); diff --git a/linden/indra/newview/llmemoryview.cpp b/linden/indra/newview/llmemoryview.cpp index a19328a..ca38a9c 100644 --- a/linden/indra/newview/llmemoryview.cpp +++ b/linden/indra/newview/llmemoryview.cpp @@ -58,7 +58,7 @@ mDelay(120) #ifdef MEM_DUMP_DATA // clear out file. - FILE *dump = fopen("memusagedump.txt", "w"); + LLFILE *dump = LLFile::fopen("memusagedump.txt", "w"); fclose(dump); #endif } @@ -262,7 +262,7 @@ void LLMemoryView::dumpData() // reset timer mDumpTimer.reset(); // append dump info to text file - FILE *dump = fopen("memusagedump.txt", "a"); + LLFILE *dump = LLFile::fopen("memusagedump.txt", "a"); if (dump) { diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp index c411ffe..75c7cce 100644 --- a/linden/indra/newview/llmutelist.cpp +++ b/linden/indra/newview/llmutelist.cpp @@ -62,6 +62,12 @@ #include "llviewergenericmessage.h" // for gGenericDispatcher #include "llviewerwindow.h" #include "llworld.h" //for particle system banning +#include "llchat.h" +#include "llfloaterchat.h" +#include "llimpanel.h" +#include "llimview.h" +#include "llnotify.h" +#include "lluistring.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" @@ -437,6 +443,78 @@ void LLMuteList::updateRemove(const LLMute& mute) gAgent.sendReliableMessage(); } +void notify_automute_callback(const LLUUID& agent_id, const char* first_name, const char* last_name, BOOL is_group, void* user_data) +{ + U32 temp_data = (U32)user_data; + LLMuteList::EAutoReason reason = (LLMuteList::EAutoReason)temp_data; + LLUIString auto_message; + + switch (reason) + { + default: + case LLMuteList::AR_IM: + auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByIM"); + break; + case LLMuteList::AR_INVENTORY: + auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByInventory"); + break; + case LLMuteList::AR_MONEY: + auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByMoney"); + break; + } + + auto_message.setArg("[FIRST]", first_name); + auto_message.setArg("[LAST]", last_name); + + if (reason == LLMuteList::AR_IM) + { + LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id); + if (timp) + { + timp->addHistoryLine(auto_message.getString()); + } + } + + LLChat auto_chat(auto_message.getString()); + LLFloaterChat::addChat(auto_chat, FALSE, FALSE); +} + + +BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason, const LLString& first_name, const LLString& last_name) +{ + BOOL removed = FALSE; + + if (isMuted(agent_id)) + { + LLMute automute(agent_id, "", LLMute::AGENT); + removed = TRUE; + remove(automute); + + if (first_name.empty() && last_name.empty()) + { + char cache_first[DB_FIRST_NAME_BUF_SIZE]; /* Flawfinder: ignore */ + char cache_last[DB_LAST_NAME_BUF_SIZE]; /* Flawfinder: ignore */ + if (gCacheName->getName(agent_id, cache_first, cache_last)) + { + // name in cache, call callback directly + notify_automute_callback(agent_id, cache_first, cache_last, FALSE, (void *)reason); + } + else + { + // not in cache, lookup name from cache + gCacheName->get(agent_id, FALSE, notify_automute_callback, (void *)reason); + } + } + else + { + // call callback directly + notify_automute_callback(agent_id, first_name.c_str(), last_name.c_str(), FALSE, (void *)reason); + } + } + + return removed; +} + std::vector LLMuteList::getMutes() const { @@ -472,7 +550,7 @@ BOOL LLMuteList::loadFromFile(const LLString& filename) return FALSE; } - FILE* fp = LLFile::fopen(filename.c_str(), "rb"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen(filename.c_str(), "rb"); /*Flawfinder: ignore*/ if (!fp) { llwarns << "Couldn't open mute list " << filename << llendl; @@ -522,7 +600,7 @@ BOOL LLMuteList::saveToFile(const LLString& filename) return FALSE; } - FILE* fp = LLFile::fopen(filename.c_str(), "wb"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen(filename.c_str(), "wb"); /*Flawfinder: ignore*/ if (!fp) { llwarns << "Couldn't open mute list " << filename << llendl; diff --git a/linden/indra/newview/llmutelist.h b/linden/indra/newview/llmutelist.h index e1a87c8..0a8c6aa 100644 --- a/linden/indra/newview/llmutelist.h +++ b/linden/indra/newview/llmutelist.h @@ -82,6 +82,15 @@ public: class LLMuteList : public LLSingleton { public: + // reasons for auto-unmuting a resident + enum EAutoReason + { + AR_IM = 0, // agent IMed a muted resident + AR_MONEY = 1, // agent paid L$ to a muted resident + AR_INVENTORY = 2, // agent offered inventory to a muted resident + AR_COUNT // enum count + }; + LLMuteList(); ~LLMuteList(); @@ -98,6 +107,7 @@ public: // Remove both normal and legacy mutes, for any or all properties. BOOL remove(const LLMute& mute, U32 flags = 0); + BOOL autoRemove(const LLUUID& agent_id, const EAutoReason reason, const LLString& first_name = "", const LLString& last_name = ""); // Name is required to test against legacy text-only mutes. BOOL isMuted(const LLUUID& id, const LLString& name = LLString::null, U32 flags = 0) const; diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp index b6e22d8..9629d06 100644 --- a/linden/indra/newview/llnetmap.cpp +++ b/linden/indra/newview/llnetmap.cpp @@ -38,7 +38,7 @@ #include "llui.h" #include "llmath.h" // clampf() #include "llfocusmgr.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llcallingcard.h" @@ -299,7 +299,7 @@ void LLNetMap::draw() gGL.end(); // Draw water - glAlphaFunc(GL_GREATER, ABOVE_WATERLINE_ALPHA / 255.f ); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, ABOVE_WATERLINE_ALPHA / 255.f); { if (regionp->getLand().getWaterTexture()) { @@ -316,7 +316,7 @@ void LLNetMap::draw() gGL.end(); } } - glAlphaFunc(GL_GREATER,0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp index 19695e8..17aff78 100644 --- a/linden/indra/newview/llnotify.cpp +++ b/linden/indra/newview/llnotify.cpp @@ -35,7 +35,7 @@ #include "llchat.h" #include "llfocusmgr.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llbutton.h" #include "llfocusmgr.h" diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp index e5c1113..d430d17 100644 --- a/linden/indra/newview/lloverlaybar.cpp +++ b/linden/indra/newview/lloverlaybar.cpp @@ -37,7 +37,7 @@ #include "lloverlaybar.h" #include "audioengine.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llbutton.h" #include "llchatbar.h" diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp index 7908ccc..45ceeba 100644 --- a/linden/indra/newview/llpanelclassified.cpp +++ b/linden/indra/newview/llpanelclassified.cpp @@ -71,6 +71,9 @@ #include "llappviewer.h" // abortQuit() const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$ +const S32 MATURE_CONTENT = 1; +const S32 NON_MATURE_CONTENT = 2; +const S32 DECLINE_TO_STATE = 0; //static std::list LLPanelClassified::sAllPanels; @@ -162,7 +165,7 @@ LLPanelClassified::LLPanelClassified(bool in_finder, bool from_search) mDescEditor(NULL), mLocationEditor(NULL), mCategoryCombo(NULL), - mMatureCheck(NULL), + mMatureCombo(NULL), mAutoRenewCheck(NULL), mUpdateBtn(NULL), mTeleportBtn(NULL), @@ -276,13 +279,15 @@ BOOL LLPanelClassified::postBuild() mCategoryCombo->setCommitCallback(onCommitAny); mCategoryCombo->setCallbackUserData(this); - mMatureCheck = getChild( "classified_mature_check"); - mMatureCheck->setCommitCallback(onCommitAny); - mMatureCheck->setCallbackUserData(this); + mMatureCombo = getChild( "classified_mature_check"); + mMatureCombo->setCurrentByIndex(0); + mMatureCombo->setCommitCallback(onCommitAny); + mMatureCombo->setCallbackUserData(this); if (gAgent.isTeen()) { // Teens don't get to set mature flag. JC - mMatureCheck->setVisible(FALSE); + mMatureCombo->setVisible(FALSE); + mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT); } if (!mInFinder) @@ -532,7 +537,7 @@ void LLPanelClassified::sendClassifiedInfoUpdate() msg->addU32Fast(_PREHASH_ParentEstate, 0); msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID()); msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal); - BOOL mature = mMatureCheck->get(); + BOOL mature = mMatureCombo->getCurrentIndex() == MATURE_CONTENT; BOOL auto_renew = FALSE; if (mAutoRenewCheck) { @@ -656,7 +661,14 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void ** self->mLocationChanged = false; self->mCategoryCombo->setCurrentByIndex(category - 1); - self->mMatureCheck->set(mature); + if(mature) + { + self->mMatureCombo->setCurrentByIndex(MATURE_CONTENT); + } + else + { + self->mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT); + } if (self->mAutoRenewCheck) { self->mAutoRenewCheck->set(auto_renew); @@ -722,8 +734,8 @@ void LLPanelClassified::refresh() mCategoryCombo->setEnabled(godlike); mCategoryCombo->setVisible(godlike); - mMatureCheck->setEnabled(godlike); - mMatureCheck->setVisible(godlike); + mMatureCombo->setEnabled(godlike); + mMatureCombo->setVisible(godlike); // Jesse (who is the only one who uses this, as far as we can tell // Says that he does not want a set location button - he has used it @@ -742,7 +754,7 @@ void LLPanelClassified::refresh() //mPriceEditor->setEnabled(is_self); mCategoryCombo->setEnabled(is_self); - mMatureCheck->setEnabled(is_self); + mMatureCombo->setEnabled(is_self); if (mAutoRenewCheck) { @@ -775,15 +787,60 @@ void LLPanelClassified::onClickUpdate(void* data) return; }; + // If user has not set mature, do not allow publish + if(self->mMatureCombo->getCurrentIndex() == DECLINE_TO_STATE) + { + LLString::format_map_t args; + gViewerWindow->alertXml("SetClassifiedMature", &callbackConfirmMature, self); + return; + } + + // Mature content flag is set, proceed + self->gotMature(); +} + +// static +void LLPanelClassified::callbackConfirmMature(S32 option, void* data) +{ + LLPanelClassified* self = (LLPanelClassified*)data; + self->confirmMature(option); +} + +// invoked from callbackConfirmMature +void LLPanelClassified::confirmMature(S32 option) +{ + // 0 == Yes + // 1 == No + // 2 == Cancel + switch(option) + { + case 0: + mMatureCombo->setCurrentByIndex(MATURE_CONTENT); + break; + case 1: + mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT); + break; + default: + return; + } + + // If we got here it means they set a valid value + gotMature(); +} + +// Called after we have determined whether this classified has +// mature content or not. +void LLPanelClassified::gotMature() +{ // if already paid for, just do the update - if (self->mPaidFor) + if (mPaidFor) { - callbackConfirmPublish(0, self); + callbackConfirmPublish(0, this); } else { // Ask the user how much they want to pay - LLFloaterPriceForListing::show( callbackGotPriceForListing, self ); + LLFloaterPriceForListing::show( callbackGotPriceForListing, this ); } } @@ -830,8 +887,8 @@ void LLPanelClassified::resetDirty() mLocationChanged = false; if (mCategoryCombo) mCategoryCombo->resetDirty(); - if (mMatureCheck) - mMatureCheck->resetDirty(); + if (mMatureCombo) + mMatureCombo->resetDirty(); if (mAutoRenewCheck) mAutoRenewCheck->resetDirty(); } @@ -948,7 +1005,7 @@ BOOL LLPanelClassified::checkDirty() if ( mLocationEditor ) mDirty |= mLocationEditor->isDirty(); if ( mLocationChanged ) mDirty |= TRUE; if ( mCategoryCombo ) mDirty |= mCategoryCombo->isDirty(); - if ( mMatureCheck ) mDirty |= mMatureCheck->isDirty(); + if ( mMatureCombo ) mDirty |= mMatureCombo->isDirty(); if ( mAutoRenewCheck ) mDirty |= mAutoRenewCheck->isDirty(); return mDirty; diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h index 78f8a90..e4c8f42 100644 --- a/linden/indra/newview/llpanelclassified.h +++ b/linden/indra/newview/llpanelclassified.h @@ -96,12 +96,17 @@ public: void sendClassifiedInfoRequest(); void sendClassifiedInfoUpdate(); void resetDirty(); - void confirmPublish(S32 option); static void processClassifiedInfoReply(LLMessageSystem* msg, void**); + // Confirmation dialogs flow in this order + static void callbackConfirmMature(S32 option, void* data); + void confirmMature(S32 option); + void gotMature(); static void callbackGotPriceForListing(S32 option, LLString text, void* data); static void callbackConfirmPublish(S32 option, void* data); + void confirmPublish(S32 option); + void sendClassifiedClickMessage(const char* type); protected: @@ -154,7 +159,7 @@ protected: LLTextEditor* mDescEditor; LLLineEditor* mLocationEditor; LLComboBox* mCategoryCombo; - LLCheckBoxCtrl* mMatureCheck; + LLComboBox* mMatureCombo; LLCheckBoxCtrl* mAutoRenewCheck; LLButton* mUpdateBtn; diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp index 0d359d7..4d82023 100644 --- a/linden/indra/newview/llpaneldirbrowser.cpp +++ b/linden/indra/newview/llpaneldirbrowser.cpp @@ -600,84 +600,6 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**) } - -void LLPanelDirBrowser::processDirPopularReply(LLMessageSystem *msg, void**) -{ - LLUUID agent_id; - LLUUID query_id; - LLUUID parcel_id; - char name[MAX_STRING]; /*Flawfinder: ignore*/ - F32 dwell; - - msg->getUUID("AgentData", "AgentID", agent_id); - msg->getUUID("QueryData", "QueryID", query_id ); - - LLPanelDirBrowser* self; - self = gDirBrowserInstances.getIfThere(query_id); - if (!self) - { - // data from an old query - return; - } - - self->mHaveSearchResults = TRUE; - - LLCtrlListInterface *list = self->childGetListInterface("results"); - if (!list) return; - - if (!list->getCanSelect()) - { - list->operateOnAll(LLCtrlListInterface::OP_DELETE); - self->mResultsContents = LLSD(); - } - - S32 i; - S32 count = msg->getNumberOfBlocks("QueryReplies"); - self->mResultsReceived += count; - for (i = 0; i < count; i++) - { - msg->getUUID( "QueryReplies", "ParcelID", parcel_id, i); - msg->getString( "QueryReplies", "Name", MAX_STRING, name, i); - msg->getF32( "QueryReplies", "Dwell", dwell, i); - - if (parcel_id.isNull()) - { - continue; - } - - LLSD content; - content["type"] = POPULAR_CODE; - content["name"] = name; - - LLSD row; - row["id"] = parcel_id; - - row["columns"][0]["column"] = "icon"; - row["columns"][0]["type"] = "icon"; - row["columns"][0]["value"] = "icon_popular.tga"; - - row["columns"][1]["column"] = "name"; - row["columns"][1]["value"] = name; - row["columns"][1]["font"] = "SANSSERIF"; - - LLString buffer = llformat("%.0f", dwell); - row["columns"][2]["column"] = "dwell"; - row["columns"][2]["value"] = buffer; - row["columns"][2]["font"] = "SANSSERIFSMALL"; - - list->addElement(row); - self->mResultsContents[parcel_id.asString()] = content; - } - - list->sortByColumn(self->mCurrentSortColumn, self->mCurrentSortAscending); - self->updateResultCount(); - - // Poke the result received timer - self->mLastResultTimer.reset(); - self->mDidAutoSelect = FALSE; -} - - void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**) { LLUUID agent_id; diff --git a/linden/indra/newview/llpaneldirbrowser.h b/linden/indra/newview/llpaneldirbrowser.h index 1f0e879..46d1369 100644 --- a/linden/indra/newview/llpaneldirbrowser.h +++ b/linden/indra/newview/llpaneldirbrowser.h @@ -116,7 +116,6 @@ public: static void processDirEventsReply(LLMessageSystem* msg, void**); static void processDirGroupsReply(LLMessageSystem* msg, void**); static void processDirClassifiedReply(LLMessageSystem* msg, void**); - static void processDirPopularReply(LLMessageSystem* msg, void**); static void processDirLandReply(LLMessageSystem *msg, void**); std::string filterShortWords( const std::string source_string, int shortest_word_length, bool& was_filtered ); diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp index dcda770..9bf71d9 100644 --- a/linden/indra/newview/llpaneldirfind.cpp +++ b/linden/indra/newview/llpaneldirfind.cpp @@ -68,48 +68,31 @@ //--------------------------------------------------------------------------- class LLPanelDirFindAll -: public LLPanelDirBrowser, - public LLWebBrowserCtrlObserver +: public LLPanelDirFind { public: LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater); - /*virtual*/ ~LLPanelDirFindAll(); - /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); - - void search(const std::string& search_text); - void focus(); - void navigateToDefaultPage(); - -private: - static void onClickBack( void* data ); - static void onClickForward( void* data ); - static void onClickHome( void* data ); - static void onClickSearch( void* data ); - static void onCommitSearch(LLUICtrl*, void* data); - - static std::string getSearchURLSuffix(bool mature); - - /*virtual*/ void onNavigateBegin( const EventType& eventIn ); - /*virtual*/ void onNavigateComplete( const EventType& eventIn ); - // Used to update progress indicator - /*virtual*/ void onLocationChange( const EventType& eventIn ); - // Debugging info to console - -private: - LLWebBrowserCtrl* mWebBrowser; + /*Virtual*/ void search(const std::string& search_text); }; - LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater) -: LLPanelDirBrowser(name, floater) - ,mWebBrowser(NULL) +: LLPanelDirFind(name, floater, "find_browser") +{ +} + +//--------------------------------------------------------------------------- +// LLPanelDirFind - Base class for all browser-based search tabs +//--------------------------------------------------------------------------- + +LLPanelDirFind::LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater, const std::string& browser_name) +: LLPanelDirBrowser(name, floater), + mWebBrowser(NULL), + mBrowserName(browser_name) { - mMinSearchChars = 3; } -BOOL LLPanelDirFindAll::postBuild() +BOOL LLPanelDirFind::postBuild() { LLPanelDirBrowser::postBuild(); @@ -121,11 +104,15 @@ BOOL LLPanelDirFindAll::postBuild() if (gAgent.isTeen()) { - childSetVisible("mature_check", false); - childSetValue("mature_check", false); + // Showcase tab does not have mature checkbox + if (hasChild("mature_check")) + { + childSetVisible("mature_check", false); + childSetValue("mature_check", false); + } } - mWebBrowser = getChild("find_browser"); + mWebBrowser = getChild(mBrowserName); if (mWebBrowser) { // new pages appear in same window as the results page now @@ -147,14 +134,14 @@ BOOL LLPanelDirFindAll::postBuild() return TRUE; } -LLPanelDirFindAll::~LLPanelDirFindAll() +LLPanelDirFind::~LLPanelDirFind() { if (mWebBrowser) mWebBrowser->remObserver(this); } // virtual -void LLPanelDirFindAll::draw() +void LLPanelDirFind::draw() { // enable/disable buttons depending on state if ( mWebBrowser ) @@ -169,46 +156,25 @@ void LLPanelDirFindAll::draw() LLPanelDirBrowser::draw(); } +// When we show any browser-based view, we want to hide all +// the right-side XUI detail panels. +// virtual +void LLPanelDirFind::onVisibilityChange(BOOL new_visibility) +{ + if (new_visibility) + { + mFloaterDirectory->hideAllDetailPanels(); + } + LLPanel::onVisibilityChange(new_visibility); +} + void LLPanelDirFindAll::search(const std::string& search_text) { if (!search_text.empty()) { - // Replace spaces with "+" for use by Google search appliance - // Yes, this actually works for double-spaces - // " foo bar" becomes "+foo++bar" and works fine. JC - std::string search_text_with_plus = search_text; - std::string::iterator it = search_text_with_plus.begin(); - for ( ; it != search_text_with_plus.end(); ++it ) - { - if ( std::isspace( *it ) ) - { - *it = '+'; - } - } - - // Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt) - // Note that "+" is one of them, so we can do "+" addition first. - const char* allowed = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - "0123456789" - "-._~$+!*'()"; - std::string query = LLURI::escape(search_text_with_plus, allowed); - - std::string url = gSavedSettings.getString("SearchURLQuery"); - std::string substring = "[QUERY]"; - url.replace(url.find(substring), substring.length(), query); - - // replace the collection name with the one selected from the combo box - std::string selected_collection = childGetValue( "Category" ).asString(); - substring = "[COLLECTION]"; - url.replace(url.find(substring), substring.length(), selected_collection); - - // Add common parameters (mature, teen, location) bool mature = childGetValue( "mature_check" ).asBoolean(); - url += getSearchURLSuffix(mature); - - llinfos << "url " << url << llendl; - + std::string selected_collection = childGetValue( "Category" ).asString(); + std::string url = buildSearchURL(search_text, selected_collection, mature); if (mWebBrowser) { mWebBrowser->navigateTo(url); @@ -223,14 +189,14 @@ void LLPanelDirFindAll::search(const std::string& search_text) childSetText("search_editor", search_text); } -void LLPanelDirFindAll::focus() +void LLPanelDirFind::focus() { childSetFocus("search_editor"); } -void LLPanelDirFindAll::navigateToDefaultPage() +void LLPanelDirFind::navigateToDefaultPage() { - std::string start_url = gSavedSettings.getString("SearchURLDefault"); + std::string start_url = getString("default_search_page"); bool mature = childGetValue( "mature_check" ).asBoolean(); start_url += getSearchURLSuffix( mature ); @@ -241,9 +207,49 @@ void LLPanelDirFindAll::navigateToDefaultPage() mWebBrowser->navigateTo( start_url ); } } +// static +std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const std::string& collection, bool mature_in) +{ + std::string url = gSavedSettings.getString("SearchURLDefault"); + if (!search_text.empty()) + { + // Replace spaces with "+" for use by Google search appliance + // Yes, this actually works for double-spaces + // " foo bar" becomes "+foo++bar" and works fine. JC + std::string search_text_with_plus = search_text; + std::string::iterator it = search_text_with_plus.begin(); + for ( ; it != search_text_with_plus.end(); ++it ) + { + if ( std::isspace( *it ) ) + { + *it = '+'; + } + } + + // Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt) + // Note that "+" is one of them, so we can do "+" addition first. + const char* allowed = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789" + "-._~$+!*'()"; + std::string query = LLURI::escape(search_text_with_plus, allowed); + + url = gSavedSettings.getString("SearchURLQuery"); + std::string substring = "[QUERY]"; + url.replace(url.find(substring), substring.length(), query); + + // replace the collection name with the one selected from the combo box + // std::string selected_collection = childGetValue( "Category" ).asString(); + substring = "[COLLECTION]"; + url.replace(url.find(substring), substring.length(), collection); + llinfos << "url " << url << llendl; + } + url += getSearchURLSuffix( mature_in ); + return url; +} // static -std::string LLPanelDirFindAll::getSearchURLSuffix(bool mature_in) +std::string LLPanelDirFind::getSearchURLSuffix(bool mature_in) { bool mature = mature_in; // Teens never get mature results. Explicitly override because @@ -314,9 +320,9 @@ std::string LLPanelDirFindAll::getSearchURLSuffix(bool mature_in) // static -void LLPanelDirFindAll::onClickBack( void* data ) +void LLPanelDirFind::onClickBack( void* data ) { - LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; + LLPanelDirFind* self = ( LLPanelDirFind* )data; if ( self->mWebBrowser ) { self->mWebBrowser->navigateBack(); @@ -324,9 +330,9 @@ void LLPanelDirFindAll::onClickBack( void* data ) } // static -void LLPanelDirFindAll::onClickForward( void* data ) +void LLPanelDirFind::onClickForward( void* data ) { - LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; + LLPanelDirFind* self = ( LLPanelDirFind* )data; if ( self->mWebBrowser ) { self->mWebBrowser->navigateForward(); @@ -334,9 +340,9 @@ void LLPanelDirFindAll::onClickForward( void* data ) } // static -void LLPanelDirFindAll::onClickHome( void* data ) +void LLPanelDirFind::onClickHome( void* data ) { - LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; + LLPanelDirFind* self = ( LLPanelDirFind* )data; if ( self->mWebBrowser ) { self->mWebBrowser->navigateHome(); @@ -344,32 +350,32 @@ void LLPanelDirFindAll::onClickHome( void* data ) } // static -void LLPanelDirFindAll::onCommitSearch(LLUICtrl*, void* data) +void LLPanelDirFind::onCommitSearch(LLUICtrl*, void* data) { onClickSearch(data); } // static -void LLPanelDirFindAll::onClickSearch(void* data) +void LLPanelDirFind::onClickSearch(void* data) { - LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; + LLPanelDirFind* self = ( LLPanelDirFind* )data; LLString search_text = self->childGetText("search_editor"); self->search(search_text); LLFloaterDirectory::sNewSearchCount++; } -void LLPanelDirFindAll::onNavigateBegin( const EventType& eventIn ) +void LLPanelDirFind::onNavigateBegin( const EventType& eventIn ) { childSetText("status_text", getString("loading_text")); } -void LLPanelDirFindAll::onNavigateComplete( const EventType& eventIn ) +void LLPanelDirFind::onNavigateComplete( const EventType& eventIn ) { childSetText("status_text", getString("done_text")); } -void LLPanelDirFindAll::onLocationChange( const EventType& eventIn ) +void LLPanelDirFind::onLocationChange( const EventType& eventIn ) { llinfos << eventIn.getStringValue() << llendl; } @@ -397,121 +403,3 @@ void LLPanelDirFindAllInterface::focus(LLPanelDirFindAll* panel) panel->focus(); } -//--------------------------------------------------------------------------- -// LLPanelDirFindAllOld - deprecated if new Google search works out. JC -//--------------------------------------------------------------------------- - -LLPanelDirFindAllOld::LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater) - : LLPanelDirBrowser(name, floater) -{ - mMinSearchChars = 3; -} - -BOOL LLPanelDirFindAllOld::postBuild() -{ - LLPanelDirBrowser::postBuild(); - - childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this); - - childSetAction("Search", onClickSearch, this); - childDisable("Search"); - setDefaultBtn( "Search" ); - - return TRUE; -} - -LLPanelDirFindAllOld::~LLPanelDirFindAllOld() -{ - // Children all cleaned up by default view destructor. -} - -// virtual -void LLPanelDirFindAllOld::draw() -{ - // You only have a choice if you are mature - childSetVisible("incmature", !gAgent.isTeen()); - childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureFindAll")); - - LLPanelDirBrowser::draw(); -} - -// static -void LLPanelDirFindAllOld::onCommitScope(LLUICtrl* ctrl, void* data) -{ - LLPanelDirFindAllOld* self = (LLPanelDirFindAllOld*)data; - self->setFocus(TRUE); -} - -// static -void LLPanelDirFindAllOld::onClickSearch(void *userdata) -{ - LLPanelDirFindAllOld *self = (LLPanelDirFindAllOld *)userdata; - - if (self->childGetValue("name").asString().length() < self->mMinSearchChars) - { - return; - }; - - self->setupNewSearch(); - - // Figure out scope - U32 scope = 0x0; - scope |= DFQ_PEOPLE; // people (not just online = 0x01 | 0x02) - // places handled below - scope |= DFQ_EVENTS; // events - scope |= DFQ_GROUPS; // groups - - BOOL filter_mature = (!gSavedSettings.getBOOL("ShowMatureFindAll") || - gAgent.isTeen() || - !self->childGetValue("incmature").asBoolean() ); - - if ( filter_mature ) - { - scope |= DFQ_PG_SIMS_ONLY; - scope |= DFQ_PG_EVENTS_ONLY; - scope |= DFQ_FILTER_MATURE; - scope |= DFQ_PG_PARCELS_ONLY; - } - - // send the message - LLMessageSystem *msg = gMessageSystem; - S32 start_row = 0; - sendDirFindQuery(msg, self->mSearchID, self->childGetValue("name").asString(), scope, start_row); - - // Also look up classified ads. JC 12/2005 - BOOL filter_auto_renew = FALSE; - U32 classified_flags = pack_classified_flags(filter_mature, filter_auto_renew); - msg->newMessage("DirClassifiedQuery"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID()); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->nextBlock("QueryData"); - msg->addUUID("QueryID", self->mSearchID); - msg->addString("QueryText", self->childGetValue("name").asString()); - msg->addU32("QueryFlags", classified_flags); - msg->addU32("Category", 0); // all categories - msg->addS32("QueryStart", 0); - gAgent.sendReliableMessage(); - - // Need to use separate find places query because places are - // sent using the more compact DirPlacesReply message. - U32 query_flags = DFQ_DWELL_SORT; - if ( filter_mature ) - { - query_flags |= DFQ_PG_SIMS_ONLY; - query_flags |= DFQ_PG_PARCELS_ONLY; // FWIW, currently DFQ_PG_PARCELS_ONLY is only supported - query_flags |= DFQ_FILTER_MATURE; - } - msg->newMessage("DirPlacesQuery"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID() ); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->nextBlock("QueryData"); - msg->addUUID("QueryID", self->mSearchID ); - msg->addString("QueryText", self->childGetValue("name").asString()); - msg->addU32("QueryFlags", query_flags ); - msg->addS32("QueryStart", 0 ); // Always get the first 100 when using find ALL - msg->addS8("Category", LLParcel::C_ANY); - msg->addString("SimName", NULL); - gAgent.sendReliableMessage(); -} diff --git a/linden/indra/newview/llpaneldirfind.h b/linden/indra/newview/llpaneldirfind.h index fdf95d7..2359d62 100644 --- a/linden/indra/newview/llpaneldirfind.h +++ b/linden/indra/newview/llpaneldirfind.h @@ -33,34 +33,62 @@ #define LL_LLPANELDIRFIND_H #include "llpaneldirbrowser.h" +#include "llwebbrowserctrl.h" class LLUICtrl; class LLLineEditor; class LLPanelDirFindAll; class LLFloaterDirectory; +class LLWebBrowserCtrlObserver; -class LLPanelDirFindAllInterface +// This class in an abstract base class for all new style search widgets. It contains a pointer to a web browser control +// +class LLPanelDirFind +: public LLPanelDirBrowser, + public LLWebBrowserCtrlObserver { public: - static LLPanelDirFindAll* create(LLFloaterDirectory* floater); - static void search(LLPanelDirFindAll* panel, const std::string& search_text); - static void focus(LLPanelDirFindAll* panel); -}; + LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater, const std::string& browser_name); + /*virtual*/ ~LLPanelDirFind(); + /*virtual*/ void draw(); + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onVisibilityChange(BOOL new_visibility); -class LLPanelDirFindAllOld : public LLPanelDirBrowser -{ -public: - LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater); - /*virtual*/ ~LLPanelDirFindAllOld(); + // Pure virtual. Must be implemented + virtual void search(const std::string& search_text) = 0; - /*virtual*/ BOOL postBuild(); + virtual void navigateToDefaultPage(); + void focus(); - /*virtual*/ void draw(); + static std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool mature_in); + static std::string getSearchURLSuffix(bool mature_in); - static void onClickSearch(void *userdata); - static void onCommitScope(LLUICtrl* ctrl, void* data); - static void onKeystrokeName(LLLineEditor* line, void* data); +private: + static void onClickBack( void* data ); + static void onClickForward( void* data ); + static void onClickHome( void* data ); + static void onClickSearch( void* data ); + static void onCommitSearch(LLUICtrl*, void* data); + + /*virtual*/ void onNavigateBegin( const EventType& eventIn ); + /*virtual*/ void onNavigateComplete( const EventType& eventIn ); + + // Used to update progress indicator + /*virtual*/ void onLocationChange( const EventType& eventIn ); + // Debugging info to console + +protected: + LLWebBrowserCtrl* mWebBrowser; + std::string mBrowserName; +}; + +class LLPanelDirFindAllInterface +{ +public: + static LLPanelDirFindAll* create(LLFloaterDirectory* floater); + static void search(LLPanelDirFindAll* panel, const std::string& search_text); + static void focus(LLPanelDirFindAll* panel); }; #endif diff --git a/linden/indra/newview/llpaneldirgroups.cpp b/linden/indra/newview/llpaneldirgroups.cpp index 0a0a14d..b765e99 100644 --- a/linden/indra/newview/llpaneldirgroups.cpp +++ b/linden/indra/newview/llpaneldirgroups.cpp @@ -33,101 +33,31 @@ #include "llpaneldirgroups.h" -// linden library includes -#include "llagent.h" -//#include "llfontgl.h" -#include "message.h" -#include "llqueryflags.h" -#include "llviewercontrol.h" -#include "llviewerwindow.h" - -// viewer project includes +#include "llwebbrowserctrl.h" LLPanelDirGroups::LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater) - : LLPanelDirBrowser(name, floater) -{ - mMinSearchChars = 3; -} - - -BOOL LLPanelDirGroups::postBuild() + : LLPanelDirFind(name, floater, "groups_browser") { - LLPanelDirBrowser::postBuild(); - - childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this); - - childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this); - childDisable("Search"); - setDefaultBtn( "Search" ); - - return TRUE; } -LLPanelDirGroups::~LLPanelDirGroups() -{ - // Children all cleaned up by default view destructor. -} -// virtual -void LLPanelDirGroups::draw() +void LLPanelDirGroups::search(const std::string& search_text) { - // You only have a choice if you are mature - childSetVisible("incmature", !gAgent.isTeen()); - childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups")); - - LLPanelDirBrowser::draw(); -} - - -// virtual -void LLPanelDirGroups::performQuery() -{ - std::string group_name = childGetValue("name").asString(); - if (group_name.length() < mMinSearchChars) + if (!search_text.empty()) { - return; + bool mature = childGetValue( "mature_check" ).asBoolean(); + std::string selected_collection = "Groups"; + std::string url = buildSearchURL(search_text, selected_collection, mature); + if (mWebBrowser) + { + mWebBrowser->navigateTo(url); + } } - - // "hi " is three chars but not a long-enough search - std::string query_string = group_name; - LLString::trim( query_string ); - bool query_was_filtered = (query_string != group_name); - - // possible we threw away all the short words in the query so check length - if ( query_string.length() < mMinSearchChars ) - { - gViewerWindow->alertXml("SeachFilteredOnShortWordsEmpty"); - return; - }; - - // if we filtered something out, display a popup - if ( query_was_filtered ) + else { - LLString::format_map_t args; - args["[FINALQUERY]"] = query_string; - gViewerWindow->alertXml("SeachFilteredOnShortWords", args); - }; - - setupNewSearch(); - - // groups - U32 scope = DFQ_GROUPS; - - // Check group mature filter. - if ( !gSavedSettings.getBOOL("ShowMatureGroups") - || gAgent.isTeen() ) - { - scope |= DFQ_FILTER_MATURE; + // empty search text + navigateToDefaultPage(); } - mCurrentSortColumn = "score"; - mCurrentSortAscending = FALSE; - - // send the message - sendDirFindQuery( - gMessageSystem, - mSearchID, - query_string, - scope, - mSearchStart); + childSetText("search_editor", search_text); } diff --git a/linden/indra/newview/llpaneldirgroups.h b/linden/indra/newview/llpaneldirgroups.h index 4d44143..03608e2 100644 --- a/linden/indra/newview/llpaneldirgroups.h +++ b/linden/indra/newview/llpaneldirgroups.h @@ -32,21 +32,14 @@ #ifndef LLPANELDIRGROUPS_H #define LLPANELDIRGROUPS_H -#include "llpaneldirbrowser.h" +#include "llpaneldirfind.h" -class LLPanelDirGroups : public LLPanelDirBrowser +class LLPanelDirGroups : public LLPanelDirFind { public: LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater); - virtual ~LLPanelDirGroups(); - /*virtual*/ void draw(); - - /*virtual*/ BOOL postBuild(); - - /*virtual*/ void performQuery(); - - static void onClickSearch(void *userdata); + /*virtual*/ void search(const std::string& search_text); }; #endif diff --git a/linden/indra/newview/llpaneldirplaces.cpp b/linden/indra/newview/llpaneldirplaces.cpp index 3e79ec0..3980fb4 100644 --- a/linden/indra/newview/llpaneldirplaces.cpp +++ b/linden/indra/newview/llpaneldirplaces.cpp @@ -33,161 +33,37 @@ #include "llpaneldirplaces.h" -// linden library includes -#include "llfontgl.h" -#include "message.h" -#include "lldir.h" -#include "llparcel.h" -#include "llregionflags.h" -#include "llqueryflags.h" - -// viewer project includes -#include "llagent.h" -#include "llbutton.h" -#include "llcheckboxctrl.h" -#include "llcombobox.h" -#include "llfloaterdirectory.h" -#include "lllineeditor.h" -#include "llviewerwindow.h" -#include "llpaneldirbrowser.h" -#include "lltextbox.h" -#include "lluiconstants.h" -#include "llviewercontrol.h" -#include "llviewermessage.h" -#include "llworldmap.h" +#include "llwebbrowserctrl.h" LLPanelDirPlaces::LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater) - : LLPanelDirBrowser(name, floater) -{ - mMinSearchChars = 3; -} - -BOOL LLPanelDirPlaces::postBuild() -{ - LLPanelDirBrowser::postBuild(); - - childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this); - - childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this); - childDisable("Search"); - - mCurrentSortColumn = "dwell"; - mCurrentSortAscending = FALSE; - - // Don't prepopulate the places list, as it hurts the database as of 2006-12-04. JC - // initialQuery(); - - return TRUE; -} - -LLPanelDirPlaces::~LLPanelDirPlaces() +: LLPanelDirFind(name, floater, "places_browser") { - // Children all cleaned up by default view destructor. } -// virtual -void LLPanelDirPlaces::draw() -{ - // You only have a choice if you are mature - childSetVisible("incmature", !gAgent.isTeen()); - childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims")); - - LLPanelDirBrowser::draw(); -} - -// virtual -void LLPanelDirPlaces::performQuery() +void LLPanelDirPlaces::search(const std::string& search_text) { - LLString place_name = childGetValue("name").asString(); - if (place_name.length() < mMinSearchChars) + if (!search_text.empty()) { - return; - } - - // "hi " is three chars but not a long-enough search - std::string query_string = place_name; - LLString::trim( query_string ); - bool query_was_filtered = (query_string != place_name); - - // possible we threw away all the short words in the query so check length - if ( query_string.length() < mMinSearchChars ) - { - gViewerWindow->alertXml("SeachFilteredOnShortWordsEmpty"); - return; - }; - - // if we filtered something out, display a popup - if ( query_was_filtered ) - { - LLString::format_map_t args; - args["[FINALQUERY]"] = query_string; - gViewerWindow->alertXml("SeachFilteredOnShortWords", args); - }; - - LLString catstring = childGetValue("Category").asString(); - - // Because LLParcel::C_ANY is -1, must do special check - S32 category = 0; - if (catstring == "any") - { - category = LLParcel::C_ANY; + bool mature = childGetValue( "mature_check" ).asBoolean(); + std::string selected_collection = "Places"; + std::string url = buildSearchURL(search_text, selected_collection, mature); + if (mWebBrowser) + { + mWebBrowser->navigateTo(url); + } } else { - category = LLParcel::getCategoryFromString(catstring.c_str()); + // empty search text + navigateToDefaultPage(); } - BOOL pg_only = !gSavedSettings.getBOOL("ShowMatureSims") - || gAgent.isTeen(); - - queryCore(query_string, category, pg_only); + childSetText("search_editor", search_text); } -void LLPanelDirPlaces::initialQuery() -{ - // All Linden locations in PG/Mature sims, any name. - const BOOL pg_only = FALSE; - queryCore("", LLParcel::C_LINDEN, pg_only); -} - -void LLPanelDirPlaces::queryCore(const LLString& name, - S32 category, - BOOL pg_only) +LLPanelDirPlaces::~LLPanelDirPlaces() { - setupNewSearch(); - - // send the message - U32 flags = 0x0; - - if (pg_only) - { - flags |= DFQ_PG_PARCELS_ONLY; - } - -// JC: Sorting by dwell severely impacts the performance of the query. -// Instead of sorting on the dataserver, we sort locally once the results -// are received. -// IW: Re-enabled dwell sort based on new 3-character minimum description -// Hopefully we'll move to next-gen Find before this becomes a big problem - - flags |= DFQ_DWELL_SORT; - - LLMessageSystem* msg = gMessageSystem; - - msg->newMessage("DirPlacesQuery"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID()); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->nextBlock("QueryData"); - msg->addUUID("QueryID", getSearchID()); - msg->addString("QueryText", name); - msg->addU32("QueryFlags", flags); - msg->addS8("Category", (S8)category); - // No longer support queries by region name, too many regions - // for combobox, no easy way to do autocomplete. JC - msg->addString("SimName", ""); - msg->addS32Fast(_PREHASH_QueryStart,mSearchStart); - gAgent.sendReliableMessage(); + // Children all cleaned up by default view destructor. } diff --git a/linden/indra/newview/llpaneldirplaces.h b/linden/indra/newview/llpaneldirplaces.h index 7bc2b08..4785f94 100644 --- a/linden/indra/newview/llpaneldirplaces.h +++ b/linden/indra/newview/llpaneldirplaces.h @@ -32,31 +32,17 @@ #ifndef LL_LLPANELDIRPLACES_H #define LL_LLPANELDIRPLACES_H -#include "llpaneldirbrowser.h" +#include "llpaneldirfind.h" // UI class forward declarations -class LLLineEditor; -class LLPanelDirPlaces : public LLPanelDirBrowser +class LLPanelDirPlaces : public LLPanelDirFind { public: LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater); virtual ~LLPanelDirPlaces(); - /*virtual*/ void draw(); + /*virtual*/ void search(const std::string& search_text); - virtual BOOL postBuild(); - - static void onClickSearch(void *userdata); - static void onKeystrokeName(LLLineEditor* line, void* data); - - void performQuery(); - - // Initially fill in some data for the panel. - void initialQuery(); - -private: - void queryCore(const LLString& name, S32 category, BOOL pg_only); }; - #endif diff --git a/linden/indra/newview/llpaneldirpopular.cpp b/linden/indra/newview/llpaneldirpopular.cpp index 5a94275..7cfc5b5 100644 --- a/linden/indra/newview/llpaneldirpopular.cpp +++ b/linden/indra/newview/llpaneldirpopular.cpp @@ -33,102 +33,15 @@ #include "llpaneldirpopular.h" -// linden library includes -#include "llfontgl.h" -#include "message.h" -#include "llqueryflags.h" - -// viewer project includes -#include "llagent.h" -#include "llcheckboxctrl.h" -#include "llviewercontrol.h" -#include "lluiconstants.h" -#include "lltextbox.h" - LLPanelDirPopular::LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater) - : LLPanelDirBrowser(name, floater), - mRequested(false) -{ -} - -BOOL LLPanelDirPopular::postBuild() -{ - LLPanelDirBrowser::postBuild(); - - childSetCommitCallback("incpictures", onCommitAny, this); - childSetCommitCallback("incmature", onCommitAny, this); - - mCurrentSortColumn = "dwell"; - mCurrentSortAscending = FALSE; - - // Don't request popular until first drawn. JC - // requestPopular(); - - return TRUE; -} - -LLPanelDirPopular::~LLPanelDirPopular() +: LLPanelDirFind(name, floater, "showcase_browser") { - // Children all cleaned up by default view destructor. + // *NOTE: This is now the "Showcase" section } - // virtual -void LLPanelDirPopular::draw() -{ - // You only have a choice if you are mature] - childSetVisible("incmature", !gAgent.isTeen()); - childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims")); - - LLPanelDirBrowser::draw(); - - if (!mRequested) - { - requestPopular(); - mRequested = true; - } -} - - -void LLPanelDirPopular::requestPopular() -{ - LLMessageSystem* msg = gMessageSystem; - BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.isTeen(); - BOOL pictures_only = childGetValue("incpictures").asBoolean(); - - U32 flags = 0x0; - if (pg_only) - { - flags |= DFQ_PG_SIMS_ONLY; - } - if (pictures_only) - { - flags |= DFQ_PICTURES_ONLY; - } - - setupNewSearch(); - - msg->newMessage("DirPopularQuery"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID()); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->nextBlock("QueryData"); - msg->addUUID("QueryID", getSearchID()); - msg->addU32("QueryFlags", flags); - gAgent.sendReliableMessage(); -} - - -// static -void LLPanelDirPopular::onClickSearch(void* data) -{ - LLPanelDirPopular* self = (LLPanelDirPopular*)data; - self->requestPopular(); -} - -// static -void LLPanelDirPopular::onCommitAny(LLUICtrl* ctrl, void* data) +void LLPanelDirPopular::search(const std::string& search_text) { - LLPanelDirPopular* self = (LLPanelDirPopular*)data; - self->requestPopular(); + // no-op, initial page is loaded during construction and there + // is no search interface, just browse } diff --git a/linden/indra/newview/llpaneldirpopular.h b/linden/indra/newview/llpaneldirpopular.h index c3f5de3..5f28ba0 100644 --- a/linden/indra/newview/llpaneldirpopular.h +++ b/linden/indra/newview/llpaneldirpopular.h @@ -32,29 +32,14 @@ #ifndef LL_LLPANELDIRPOPULAR_H #define LL_LLPANELDIRPOPULAR_H -#include "llpaneldirbrowser.h" +#include "llpaneldirfind.h" -class LLUICtrl; - -class LLPanelDirPopular : public LLPanelDirBrowser +class LLPanelDirPopular : public LLPanelDirFind { public: LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater); - virtual ~LLPanelDirPopular(); - - virtual void draw(); - - virtual BOOL postBuild(); - void requestPopular(); - -protected: - static void onClickSearch(void* data); - static void onCommitAny(LLUICtrl* ctrl, void* data); - -private: - bool mRequested; + /*virtual*/ void search(const std::string& search_text); }; - #endif diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index e5072c5..cc70f79 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp @@ -82,6 +82,8 @@ // parent #include "llfloaterpreference.h" +#include + const F32 MAX_USER_FAR_CLIP = 512.f; const F32 MIN_USER_FAR_CLIP = 64.f; @@ -164,6 +166,8 @@ BOOL LLPanelDisplay::postBuild() } } + initWindowSizeControls(); + if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio")) { mAspectRatio = gViewerWindow->getDisplayAspectRatio(); @@ -319,6 +323,36 @@ BOOL LLPanelDisplay::postBuild() return TRUE; } +void LLPanelDisplay::initWindowSizeControls() +{ + // Window size + mWindowSizeLabel = getChild("WindowSizeLabel"); + mCtrlWindowSize = getChild("windowsize combo"); + + // Look to see if current window size matches existing window sizes, if so then + // just set the selection value... + const U32 height = gViewerWindow->getWindowDisplayHeight(); + const U32 width = gViewerWindow->getWindowDisplayWidth(); + for (S32 i=0; i < mCtrlWindowSize->getItemCount(); i++) + { + U32 height_test = 0; + U32 width_test = 0; + mCtrlWindowSize->setCurrentByIndex(i); + if (extractWindowSizeFromString(mCtrlWindowSize->getValue().asString().c_str(), width_test, height_test)) + { + if ((height_test == height) && (width_test == width)) + { + return; + } + } + } + // ...otherwise, add a new entry with the current window height/width. + LLUIString resolution_label = getUIString("resolution_format"); + resolution_label.setArg("[RES_X]", llformat("%d", width)); + resolution_label.setArg("[RES_Y]", llformat("%d", height)); + mCtrlWindowSize->add(resolution_label, ADD_TOP); + mCtrlWindowSize->setCurrentByIndex(0); +} LLPanelDisplay::~LLPanelDisplay() { @@ -327,6 +361,10 @@ LLPanelDisplay::~LLPanelDisplay() { mCtrlAspectRatio->setCurrentByIndex(i); } + for (S32 i = 0; i < mCtrlWindowSize->getItemCount(); i++) + { + mCtrlWindowSize->setCurrentByIndex(i); + } } void LLPanelDisplay::refresh() @@ -392,6 +430,7 @@ void LLPanelDisplay::refreshEnabledState() mAspectRatioLabel1->setVisible(isFullScreen); mCtrlAutoDetectAspect->setVisible(isFullScreen); mFullScreenInfo->setVisible(!isFullScreen); + mWindowSizeLabel->setVisible(!isFullScreen); // disable graphics settings and exit if it's not set to custom if(!gSavedSettings.getBOOL("RenderCustomSettings")) @@ -656,6 +695,12 @@ void LLPanelDisplay::cancel() void LLPanelDisplay::apply() { applyResolution(); + + // Only set window size if we're not in fullscreen mode + if (mCtrlWindowed->get()) + { + applyWindowSize(); + } } void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data) @@ -712,7 +757,7 @@ void LLPanelDisplay::applyResolution() if (mCtrlAspectRatio->getCurrentIndex() == -1) { strncpy(aspect_ratio_text, mCtrlAspectRatio->getSimple().c_str(), sizeof(aspect_ratio_text) -1); /*Flawfinder: ignore*/ - aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0'; + aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0'; char *element = strtok(aspect_ratio_text, ":/\\"); if (!element) { @@ -817,6 +862,36 @@ void LLPanelDisplay::applyResolution() refresh(); } +// Extract from strings of the form " x ", e.g. "640 x 480". +bool LLPanelDisplay::extractWindowSizeFromString(const char *sInput, U32 &width, U32 &height) +{ + using namespace boost; + cmatch what; + const regex expression("([0-9]+) x ([0-9]+)"); + if (regex_match(sInput, what, expression)) + { + width = atoi(what[1].first); + height = atoi(what[2].first); + return true; + } + + width = height = 0; + return false; +} + +void LLPanelDisplay::applyWindowSize() +{ + if (mCtrlWindowSize->getVisible() && (mCtrlWindowSize->getCurrentIndex() != -1)) + { + U32 width = 0; + U32 height = 0; + if (extractWindowSizeFromString(mCtrlWindowSize->getValue().asString().c_str(), width,height)) + { + LLViewerWindow::movieSize(width, height); + } + } +} + //static void LLPanelDisplay::onCommitWindowedMode(LLUICtrl* ctrl, void *data) { diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h index cc39f93..e100a18 100644 --- a/linden/indra/newview/llpaneldisplay.h +++ b/linden/indra/newview/llpaneldisplay.h @@ -33,7 +33,7 @@ #define LL_LLPANELDISPLAY_H #include "llpanel.h" - +#include "llwindow.h" #include "llcontrol.h" class LLSlider; @@ -72,15 +72,21 @@ public: void setHiddenGraphicsState(bool isHidden); void apply(); // Apply the changed values. void applyResolution(); + void applyWindowSize(); void cancel(); protected: + void initWindowSizeControls(); + bool extractWindowSizeFromString(const char *sInput, U32 &width, U32 &height); + // aspect ratio sliders and boxes LLComboBox *mCtrlFullScreen; // Fullscreen resolution - LLCheckBoxCtrl *mCtrlWindowed; // windowed mode LLCheckBoxCtrl *mCtrlAutoDetectAspect; // automatically detect aspect ratio LLComboBox *mCtrlAspectRatio; // user provided aspect ratio + LLCheckBoxCtrl *mCtrlWindowed; // windowed mode + LLComboBox *mCtrlWindowSize; // window size for windowed mode + /// performance radio group LLSliderCtrl *mCtrlSliderQuality; LLCheckBoxCtrl *mCtrlCustomSettings; @@ -113,7 +119,8 @@ protected: LLTextBox *mAspectRatioLabel1; LLTextBox *mDisplayResLabel; LLTextEditor *mFullScreenInfo; - + LLTextBox *mWindowSizeLabel; + LLTextBox *mShaderText; LLTextBox *mReflectionText; LLTextBox *mAvatarText; diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp index 1709ad2..a7eac37 100644 --- a/linden/indra/newview/llpanelgroupgeneral.cpp +++ b/linden/indra/newview/llpanelgroupgeneral.cpp @@ -54,6 +54,11 @@ #include "lltexturectrl.h" #include "llviewerwindow.h" +// consts +const S32 MATURE_CONTENT = 1; +const S32 NON_MATURE_CONTENT = 2; +const S32 DECLINE_TO_STATE = 0; + // static void* LLPanelGroupGeneral::createTab(void* data) { @@ -76,7 +81,7 @@ LLPanelGroupGeneral::LLPanelGroupGeneral(const std::string& name, mBtnJoinGroup(NULL), mListVisibleMembers(NULL), mCtrlShowInGroupList(NULL), - mCtrlMature(NULL), + mComboMature(NULL), mCtrlOpenEnrollment(NULL), mCtrlEnrollmentFee(NULL), mSpinEnrollmentFee(NULL), @@ -156,14 +161,19 @@ BOOL LLPanelGroupGeneral::postBuild() mCtrlShowInGroupList->setCallbackUserData(this); } - mCtrlMature = getChild("mature", recurse); - if (mCtrlMature) + mComboMature = getChild("group_mature_check", recurse); + if(mComboMature) { - mCtrlMature->setCommitCallback(onCommitAny); - mCtrlMature->setCallbackUserData(this); - mCtrlMature->setVisible( !gAgent.isTeen() ); + mComboMature->setCurrentByIndex(0); + mComboMature->setCommitCallback(onCommitAny); + mComboMature->setCallbackUserData(this); + if (gAgent.isTeen()) + { + // Teens don't get to set mature flag. JC + mComboMature->setVisible(FALSE); + mComboMature->setCurrentByIndex(NON_MATURE_CONTENT); + } } - mCtrlOpenEnrollment = getChild("open_enrollement", recurse); if (mCtrlOpenEnrollment) { @@ -231,7 +241,7 @@ BOOL LLPanelGroupGeneral::postBuild() mEditCharter->setEnabled(TRUE); mCtrlShowInGroupList->setEnabled(TRUE); - mCtrlMature->setEnabled(TRUE); + mComboMature->setEnabled(TRUE); mCtrlOpenEnrollment->setEnabled(TRUE); mCtrlEnrollmentFee->setEnabled(TRUE); mSpinEnrollmentFee->setEnabled(TRUE); @@ -429,6 +439,16 @@ bool LLPanelGroupGeneral::apply(LLString& mesg) if (has_power_in_group || mGroupID.isNull()) { llinfos << "LLPanelGroupGeneral::apply" << llendl; + + // Check to make sure mature has been set + if(mComboMature->getCurrentIndex() == DECLINE_TO_STATE) + { + LLString::format_map_t args; + gViewerWindow->alertXml("SetGroupMature", &callbackConfirmMatureApply, + new LLHandle(getHandle())); + return false; + } + if (mGroupID.isNull()) { // Validate the group name length. @@ -446,13 +466,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg) LLString::format_map_t args; args["[MESSAGE]"] = mConfirmGroupCreateStr; gViewerWindow->alertXml("GenericAlertYesCancel", args, - createGroupCallback,new LLHandle(getHandle())); + createGroupCallback, new LLHandle(getHandle()) ); return false; } LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); - if (!gdatap) { mesg = "No group data found for group "; @@ -468,11 +487,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg) { if (mEditCharter) gdatap->mCharter = mEditCharter->getText(); if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID(); - if (mCtrlMature) + if (mComboMature) { if (!gAgent.isTeen()) { - gdatap->mMaturePublish = mCtrlMature->get(); + gdatap->mMaturePublish = + mComboMature->getCurrentIndex() == MATURE_CONTENT; } else { @@ -523,6 +543,42 @@ void LLPanelGroupGeneral::cancel() notifyObservers(); } + +// static +void LLPanelGroupGeneral::callbackConfirmMatureApply(S32 option, void* data) +{ + LLHandle* handlep = (LLHandle*)data; + LLPanelGroupGeneral* self = dynamic_cast(handlep->get()); + delete handlep; + if (self) + { + self->confirmMatureApply(option); + } +} + +// invoked from callbackConfirmMature +void LLPanelGroupGeneral::confirmMatureApply(S32 option) +{ + // 0 == Yes + // 1 == No + // 2 == Cancel + switch(option) + { + case 0: + mComboMature->setCurrentByIndex(MATURE_CONTENT); + break; + case 1: + mComboMature->setCurrentByIndex(NON_MATURE_CONTENT); + break; + default: + return; + } + + // If we got here it means they set a valid value + LLString mesg = ""; + apply(mesg); +} + // static void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata) { @@ -547,7 +603,7 @@ void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata) enrollment_fee, self->mCtrlOpenEnrollment->get(), false, - self->mCtrlMature->get()); + self->mComboMature->getCurrentIndex() == MATURE_CONTENT); } break; @@ -632,11 +688,18 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) mCtrlShowInGroupList->set(gdatap->mShowInList); mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident); } - if (mCtrlMature) + if (mComboMature) { - mCtrlMature->set(gdatap->mMaturePublish); - mCtrlMature->setEnabled(mAllowEdit && can_change_ident); - mCtrlMature->setVisible( !gAgent.isTeen() ); + if(gdatap->mMaturePublish) + { + mComboMature->setCurrentByIndex(MATURE_CONTENT); + } + else + { + mComboMature->setCurrentByIndex(NON_MATURE_CONTENT); + } + mComboMature->setEnabled(mAllowEdit && can_change_ident); + mComboMature->setVisible( !gAgent.isTeen() ); } if (mCtrlOpenEnrollment) { @@ -820,7 +883,7 @@ void LLPanelGroupGeneral::updateChanged() mInsignia, mEditCharter, mCtrlShowInGroupList, - mCtrlMature, + mComboMature, mCtrlOpenEnrollment, mCtrlEnrollmentFee, mSpinEnrollmentFee, diff --git a/linden/indra/newview/llpanelgroupgeneral.h b/linden/indra/newview/llpanelgroupgeneral.h index daf7bfa..169fcff 100644 --- a/linden/indra/newview/llpanelgroupgeneral.h +++ b/linden/indra/newview/llpanelgroupgeneral.h @@ -58,6 +58,7 @@ public: virtual bool apply(LLString& mesg); virtual void cancel(); static void createGroupCallback(S32 option, void* user_data); + static void callbackConfirmMatureApply(S32 option, void* data); virtual void update(LLGroupChange gc); @@ -80,6 +81,7 @@ private: void updateMembers(); void updateChanged(); + void confirmMatureApply(S32 option); BOOL mPendingMemberUpdate; BOOL mChanged; @@ -101,7 +103,6 @@ private: // Options (include any updates in updateChanged) LLCheckBoxCtrl *mCtrlShowInGroupList; - LLCheckBoxCtrl *mCtrlMature; LLCheckBoxCtrl *mCtrlOpenEnrollment; LLCheckBoxCtrl *mCtrlEnrollmentFee; LLSpinCtrl *mSpinEnrollmentFee; @@ -109,6 +110,7 @@ private: LLCheckBoxCtrl *mCtrlListGroup; LLTextBox *mActiveTitleLabel; LLComboBox *mComboActiveTitle; + LLComboBox *mComboMature; LLGroupMgrGroupData::member_list_t::iterator mMemberProgress; }; diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp index 9fcd73d..334e9f4 100644 --- a/linden/indra/newview/llpanellogin.cpp +++ b/linden/indra/newview/llpanellogin.cpp @@ -133,83 +133,77 @@ void LLLoginHandler::parse(const LLSD& queryMap) mFirstName = queryMap["first_name"].asString(); mLastName = queryMap["last_name"].asString(); + EGridInfo grid_choice = GRID_INFO_NONE; if (queryMap["grid"].asString() == "aditi") { - gGridChoice = GRID_INFO_ADITI; + grid_choice = GRID_INFO_ADITI; } else if (queryMap["grid"].asString() == "agni") { - gGridChoice = GRID_INFO_AGNI; + grid_choice = GRID_INFO_AGNI; } else if (queryMap["grid"].asString() == "siva") { - gGridChoice = GRID_INFO_SIVA; + grid_choice = GRID_INFO_SIVA; } else if (queryMap["grid"].asString() == "durga") { - gGridChoice = GRID_INFO_DURGA; + grid_choice = GRID_INFO_DURGA; } else if (queryMap["grid"].asString() == "shakti") { - gGridChoice = GRID_INFO_SHAKTI; + grid_choice = GRID_INFO_SHAKTI; } else if (queryMap["grid"].asString() == "soma") { - gGridChoice = GRID_INFO_SOMA; + grid_choice = GRID_INFO_SOMA; } else if (queryMap["grid"].asString() == "ganga") { - gGridChoice = GRID_INFO_GANGA; + grid_choice = GRID_INFO_GANGA; } else if (queryMap["grid"].asString() == "vaak") { - gGridChoice = GRID_INFO_VAAK; + grid_choice = GRID_INFO_VAAK; } else if (queryMap["grid"].asString() == "uma") { - gGridChoice = GRID_INFO_UMA; + grid_choice = GRID_INFO_UMA; } else if (queryMap["grid"].asString() == "mohini") { - gGridChoice = GRID_INFO_MOHINI; + grid_choice = GRID_INFO_MOHINI; } else if (queryMap["grid"].asString() == "yami") { - gGridChoice = GRID_INFO_YAMI; + grid_choice = GRID_INFO_YAMI; } else if (queryMap["grid"].asString() == "nandi") { - gGridChoice = GRID_INFO_NANDI; + grid_choice = GRID_INFO_NANDI; } else if (queryMap["grid"].asString() == "mitra") { - gGridChoice = GRID_INFO_MITRA; + grid_choice = GRID_INFO_MITRA; } else if (queryMap["grid"].asString() == "radha") { - gGridChoice = GRID_INFO_RADHA; + grid_choice = GRID_INFO_RADHA; } else if (queryMap["grid"].asString() == "ravi") { - gGridChoice = GRID_INFO_RAVI; + grid_choice = GRID_INFO_RAVI; } else if (queryMap["grid"].asString() == "aruna") { - gGridChoice = GRID_INFO_ARUNA; + grid_choice = GRID_INFO_ARUNA; } -#if !LL_RELEASE_FOR_DOWNLOAD - if (gGridChoice > GRID_INFO_NONE && gGridChoice < GRID_INFO_LOCAL) + + if(grid_choice != GRID_INFO_NONE) { - gSavedSettings.setS32("ServerChoice", gGridChoice); + LLViewerLogin::getInstance()->setGridChoice(grid_choice); } -#endif - - if (LLAppViewer::instance()->getLoginURIs().size() == 0) - { - gGridName = gGridInfo[gGridChoice].mName; /* Flawfinder: ignore */ - LLAppViewer::instance()->resetURIs(); - } - + LLString startLocation = queryMap["location"].asString(); if (startLocation == "specify") @@ -794,7 +788,7 @@ BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name) if ((S32)GRID_INFO_OTHER == domain_name) { - server = gGridName; + server = LLViewerLogin::getInstance()->getGridLabel(); } } else @@ -942,20 +936,9 @@ void LLPanelLogin::loadLoginPage() LLString grid; S32 grid_index; getServer( grid, grid_index ); - if( grid_index != (S32)GRID_INFO_OTHER ) - { - grid = gGridInfo[grid_index].mLabel; - } - if(gGridChoice != (EGridInfo)grid_index) - { - LLAppViewer::instance()->resetURIs(); - gGridChoice = (EGridInfo)grid_index; - gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel); - gViewerWindow->setMenuBackgroundColor(false, - !LLAppViewer::instance()->isInProductionGrid()); - gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor()); - } + gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid()); + gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor()); char* curl_grid = curl_escape(grid.c_str(), 0); oStr << "&grid=" << curl_grid; @@ -1087,15 +1070,6 @@ void LLPanelLogin::onClickConnect(void *) if (!first.empty() && !last.empty()) { // has both first and last name typed - - // store off custom server entry, if currently selected - LLComboBox* combo = sInstance->getChild("server_combo"); - S32 selected_server = combo->getValue(); - if (selected_server == GRID_INFO_NONE) - { - LLString custom_server = combo->getValue().asString(); - gSavedSettings.setString("CustomServer", custom_server); - } sInstance->mCallback(0, sInstance->mCallbackData); } else @@ -1180,6 +1154,26 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) // static void LLPanelLogin::onSelectServer(LLUICtrl*, void*) { + // The user twiddled with the grid choice ui. + // apply the selection to the grid setting. + LLString grid; + S32 grid_index; + getServer( grid, grid_index ); + + // This new seelction will override preset uris + // from the command line. + LLViewerLogin* vl = LLViewerLogin::getInstance(); + vl->resetURIs(); + if(grid_index != GRID_INFO_OTHER) + { + vl->setGridChoice((EGridInfo)grid_index); + grid = vl->getGridLabel(); + } + else + { + vl->setGridChoice(grid); + } + // grid changed so show new splash screen (possibly) loadLoginPage(); } diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h index 1100cd6..cdf567b 100644 --- a/linden/indra/newview/llpanellogin.h +++ b/linden/indra/newview/llpanellogin.h @@ -68,6 +68,7 @@ class LLPanelLogin: public LLPanel, public LLWebBrowserCtrlObserver { + LOG_CLASS(LLPanelLogin); public: LLPanelLogin(const LLRect &rect, BOOL show_server, void (*callback)(S32 option, void* user_data), diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp index ea742ba..0d50f38 100644 --- a/linden/indra/newview/llpanelpermissions.cpp +++ b/linden/indra/newview/llpanelpermissions.cpp @@ -327,6 +327,7 @@ void LLPanelPermissions::refresh() // update group text field childSetEnabled("Group:",true); + childSetText("Group Name",LLString::null); LLUUID group_id; BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); if (groups_identical) @@ -337,6 +338,16 @@ void LLPanelPermissions::refresh() mLabelGroupName->setEnabled(TRUE); } } + else + { + if(mLabelGroupName) + { + mLabelGroupName->setNameID(LLUUID::null, TRUE); + mLabelGroupName->refresh(LLUUID::null, "", "", TRUE); + mLabelGroupName->setEnabled(FALSE); + } + } + childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID())); // figure out the contents of the name, description, & category @@ -854,7 +865,7 @@ void callback_deed_to_group(S32 option, void*) { LLUUID group_id; BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); - if(groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED))) + if(group_id.notNull() && groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED))) { LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE); // LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT); diff --git a/linden/indra/newview/llpolymesh.cpp b/linden/indra/newview/llpolymesh.cpp index d74beeb..3884b31 100644 --- a/linden/indra/newview/llpolymesh.cpp +++ b/linden/indra/newview/llpolymesh.cpp @@ -271,7 +271,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const char *fileName ) llerrs << "Filename is Empty!" << llendl; return FALSE; } - FILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/ if (!fp) { llerrs << "can't open: " << fileName << llendl; diff --git a/linden/indra/newview/llpolymorph.cpp b/linden/indra/newview/llpolymorph.cpp index a83f5ab..11ca7af 100644 --- a/linden/indra/newview/llpolymorph.cpp +++ b/linden/indra/newview/llpolymorph.cpp @@ -83,7 +83,7 @@ LLPolyMorphData::~LLPolyMorphData() //----------------------------------------------------------------------------- // loadBinary() //----------------------------------------------------------------------------- -BOOL LLPolyMorphData::loadBinary(FILE *fp, LLPolyMeshSharedData *mesh) +BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh) { S32 numVertices; S32 numRead; diff --git a/linden/indra/newview/llpolymorph.h b/linden/indra/newview/llpolymorph.h index 5f7a034..0ad5b18 100644 --- a/linden/indra/newview/llpolymorph.h +++ b/linden/indra/newview/llpolymorph.h @@ -51,7 +51,7 @@ public: LLPolyMorphData(char *morph_name); ~LLPolyMorphData(); - BOOL loadBinary(FILE* fp, LLPolyMeshSharedData *mesh); + BOOL loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh); char* loadASCII(char* text, LLPolyMeshSharedData *mesh); char* getName() { return mName; } diff --git a/linden/indra/newview/llpostprocess.cpp b/linden/indra/newview/llpostprocess.cpp index c72b8ae..7ee7100 100644 --- a/linden/indra/newview/llpostprocess.cpp +++ b/linden/indra/newview/llpostprocess.cpp @@ -35,7 +35,7 @@ #include "llpostprocess.h" #include "llglslshader.h" #include "llsdserialize.h" -#include "llglimmediate.h" +#include "llrender.h" LLPostProcess * gPostProcess = NULL; @@ -59,7 +59,7 @@ LLPostProcess::LLPostProcess(void) : screenW(1), screenH(1) { LLString pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME)); - llinfos << "Loading PostProcess Effects settings from " << pathName << llendl; + LL_DEBUGS2("AppInit", "Shaders") << "Loading PostProcess Effects settings from " << pathName << LL_ENDL; llifstream effectsXML(pathName.c_str()); @@ -215,7 +215,7 @@ void LLPostProcess::applyColorFilterShader(void) { gPostColorFilterProgram.bind(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_RECTANGLE_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); @@ -234,7 +234,7 @@ void LLPostProcess::applyColorFilterShader(void) glUniform3fARB(colorFilterUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B); LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_ONE,GL_ZERO); + gGL.setSceneBlendType(LLRender::BT_REPLACE); LLGLDepthTest depth(GL_FALSE); /// Draw a screen space quad @@ -257,14 +257,14 @@ void LLPostProcess::applyNightVisionShader(void) { gPostNightVisionProgram.bind(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_RECTANGLE_ARB); getShaderUniforms(nightVisionUniforms, gPostNightVisionProgram.mProgramObject); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); glUniform1iARB(nightVisionUniforms["RenderTexture"], 0); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, noiseTexture); @@ -280,13 +280,13 @@ void LLPostProcess::applyNightVisionShader(void) glUniform3fARB(nightVisionUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B); LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_ONE,GL_ZERO); + gGL.setSceneBlendType(LLRender::BT_REPLACE); LLGLDepthTest depth(GL_FALSE); /// Draw a screen space quad drawOrthoQuad(screenW, screenH, QUAD_NOISE); gPostNightVisionProgram.unbind(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } void LLPostProcess::createNightVisionShader(void) @@ -352,7 +352,7 @@ void LLPostProcess::doEffects(void) checkError(); applyShaders(); - glUseProgramObjectARB(0); + LLGLSLShader::bindNoShader(); checkError(); /// Change to a perspective view @@ -565,74 +565,3 @@ void LLPostProcess::checkShaderError(GLhandleARB shader) } checkError(); // Check for OpenGL errors } - -void LLPostProcess::textureBlendReplace(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); -} - -void LLPostProcess::textureBlendAdd(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); -} - -void LLPostProcess::textureBlendAddSigned(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); -} - -void LLPostProcess::textureBlendSubtract(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_SUBTRACT ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); -} - -void LLPostProcess::textureBlendAlpha(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA ); -} - -void LLPostProcess::textureBlendMultiply(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); -} - -void LLPostProcess::textureBlendMultiplyX2(void) -{ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); - glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE ); - glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); - glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, 2 ); -} diff --git a/linden/indra/newview/llpostprocess.h b/linden/indra/newview/llpostprocess.h index 2e98fb3..738d0f0 100644 --- a/linden/indra/newview/llpostprocess.h +++ b/linden/indra/newview/llpostprocess.h @@ -260,13 +260,6 @@ private: void viewOrthogonal(unsigned int width, unsigned int height); void changeOrthogonal(unsigned int width, unsigned int height); void viewPerspective(void); - void textureBlendReplace(void); - void textureBlendAdd(void); - void textureBlendSubtract(void); - void textureBlendAddSigned(void); - void textureBlendAlpha(void); - void textureBlendMultiply(void); - void textureBlendMultiplyX2(void); }; extern LLPostProcess * gPostProcess; diff --git a/linden/indra/newview/llpreviewgesture.cpp b/linden/indra/newview/llpreviewgesture.cpp index 4ca6009..c53eab7 100644 --- a/linden/indra/newview/llpreviewgesture.cpp +++ b/linden/indra/newview/llpreviewgesture.cpp @@ -67,9 +67,10 @@ #include "llviewerstats.h" #include "llviewerwindow.h" // busycount #include "llappviewer.h" // gVFS - +#include "llanimstatelabels.h" #include "llresmgr.h" + // *TODO: Translate? const char NONE_LABEL[] = "---"; const char SHIFT_LABEL[] = "Shift"; @@ -592,7 +593,7 @@ void LLPreviewGesture::addAnimations() for (i = 0; i < gUserAnimStatesCount; ++i) { // Use the user-readable name - const char* label = gUserAnimStates[i].mLabel; + std::string label = LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName ); const LLUUID& id = gUserAnimStates[i].mID; combo->add(label, id); } diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp index 6acd6bf..9ef711d 100644 --- a/linden/indra/newview/llpreviewscript.cpp +++ b/linden/indra/newview/llpreviewscript.cpp @@ -1262,7 +1262,7 @@ void LLPreviewLSL::saveIfNeeded() std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_id.asString()); std::string filename = llformat("%s.lsl", filepath.c_str()); - FILE* fp = LLFile::fopen(filename.c_str(), "wb"); + LLFILE* fp = LLFile::fopen(filename.c_str(), "wb"); if(!fp) { llwarns << "Unable to write to " << filename << llendl; @@ -1336,7 +1336,7 @@ void LLPreviewLSL::uploadAssetLegacy(const std::string& filename, //system(command); // load the error file into the error scrolllist - FILE* fp = LLFile::fopen(err_filename.c_str(), "r"); + LLFILE* fp = LLFile::fopen(err_filename.c_str(), "r"); if(fp) { char buffer[MAX_STRING]; /*Flawfinder: ignore*/ @@ -1851,7 +1851,7 @@ void LLLiveLSLEditor::loadScriptText(const char* filename) llerrs << "Filename is Empty!" << llendl; return; } - FILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ + LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ if(file) { // read in the whole file @@ -2063,7 +2063,7 @@ void LLLiveLSLEditor::saveIfNeeded() mItem->setTransactionID(tid); // write out the data, and store it in the asset database - FILE* fp = LLFile::fopen(filename.c_str(), "wb"); + LLFILE* fp = LLFile::fopen(filename.c_str(), "wb"); if(!fp) { llwarns << "Unable to write to " << filename << llendl; @@ -2136,7 +2136,7 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename, std::string dst_filename = llformat("%s.lso", filepath.c_str()); std::string err_filename = llformat("%s.out", filepath.c_str()); - FILE *fp; + LLFILE *fp; if(!lscript_compile(filename.c_str(), dst_filename.c_str(), err_filename.c_str(), diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp index b4f0704..d10cc8f 100644 --- a/linden/indra/newview/llprogressview.cpp +++ b/linden/indra/newview/llprogressview.cpp @@ -36,7 +36,7 @@ #include "indra_constants.h" #include "llmath.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llui.h" #include "llfontgl.h" #include "llimagegl.h" diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index 7d26f06..4488a46 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp @@ -39,7 +39,7 @@ #include "lldbstrings.h" #include "lleconomy.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llpermissions.h" #include "llpermissionsflags.h" #include "llundo.h" @@ -62,6 +62,7 @@ #include "llhudmanager.h" #include "llinventorymodel.h" #include "llmenugl.h" +#include "llmutelist.h" #include "llstatusbar.h" #include "llsurface.h" #include "lltool.h" @@ -1037,19 +1038,21 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 & if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) { - LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); + //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); LLBBox bbox = mSavedSelectionBBox; mGridOrigin = mSavedSelectionBBox.getCenterAgent(); mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; - if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull()) + // DEV-12570 Just taking the saved selection box rotation prevents + // wild rotations of linked sets while in local grid mode + //if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull()) { mGridRotation = mSavedSelectionBBox.getRotation(); } - else //set to the root object + /*else //set to the root object { mGridRotation = root->getRenderRotation(); - } + }*/ } else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) { @@ -2509,11 +2512,7 @@ BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id) } } } - if (first_id.isNull()) - { - return FALSE; - } - + result_id = first_id; return identical; @@ -4443,6 +4442,11 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use reporterp->setPickedObjectProperties(name, fullname, owner_id); } } + else if (request_flags & OBJECT_PAY_REQUEST) + { + // check if the owner of the paid object is muted + LLMuteList::getInstance()->autoRemove(owner_id, LLMuteList::AR_MONEY); + } // Now look through all of the hovered nodes struct f : public LLSelectedNodeFunctor @@ -4780,7 +4784,7 @@ void LLSelectMgr::updateSilhouettes() objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE); } - //glAlphaFunc(GL_GREATER, 0.01f); + //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } void LLSelectMgr::renderSilhouettes(BOOL for_hud) @@ -4792,7 +4796,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) LLViewerImage::bindTexture(mSilhouetteImagep); LLGLSPipelineSelection gls_select; - glAlphaFunc(GL_GREATER, 0.0f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); LLGLEnable blend(GL_BLEND); LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); @@ -4898,7 +4902,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) } mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D); - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point) @@ -5263,7 +5267,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible()) { gGL.flush(); - gGL.blendFunc(GL_SRC_COLOR, GL_ONE); + gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE); LLGLEnable fog(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec(); @@ -5273,7 +5277,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) glFogfv(GL_FOG_COLOR, fogCol.mV); LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.begin(LLVertexBuffer::LINES); { S32 i = 0; @@ -5294,7 +5298,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) } gGL.flush(); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); gGL.begin(LLVertexBuffer::TRIANGLES); { S32 i = 0; diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp index cb115ff..520501e 100644 --- a/linden/indra/newview/llspatialpartition.cpp +++ b/linden/indra/newview/llspatialpartition.cpp @@ -43,7 +43,7 @@ #include "llviewerregion.h" #include "llcamera.h" #include "pipeline.h" -#include "llglimmediate.h" +#include "llrender.h" #include "lloctree.h" const F32 SG_OCCLUSION_FUDGE = 1.01f; @@ -2006,7 +2006,7 @@ void renderOctree(LLSpatialGroup* group) //render solid object bounding box, color //coded by buffer usage and activity LLGLDepthTest depth(GL_TRUE, GL_FALSE); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); LLVector4 col; if (group->mBuilt > 0.f) { @@ -2094,7 +2094,7 @@ void renderOctree(LLSpatialGroup* group) drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f)); glDepthMask(GL_TRUE); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); if (group->mBuilt <= 0.f) { @@ -2122,7 +2122,7 @@ void renderOctree(LLSpatialGroup* group) void renderVisibility(LLSpatialGroup* group, LLCamera* camera) { LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); LLGLEnable cull(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); @@ -2498,7 +2498,7 @@ void LLSpatialPartition::renderDebug() LLGLDisable cullface(GL_CULL_FACE); LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); LLImageGL::unbindTexture(0); gPipeline.disableLights(); diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index 914b993..52f4d1a 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -127,6 +127,7 @@ #include "llsky.h" #include "llsrv.h" #include "llstatview.h" +#include "lltrans.h" #include "llsurface.h" #include "lltexturecache.h" #include "lltexturefetch.h" @@ -264,8 +265,8 @@ namespace const char* message, const LLSD& body, LLHTTPClient::ResponderPtr response) const { - llwarns << " attemped to send " << message << " to " << host - << " with null sender" << llendl; + LL_WARNS("AppInit") << " attemped to send " << message << " to " << host + << " with null sender" << LL_ENDL; } }; } @@ -427,17 +428,17 @@ BOOL idle_startup() if (ll_init_ares() == NULL) { - llerrs << "Could not start address resolution system" << llendl; + LL_ERRS("AppInit") << "Could not start address resolution system" << LL_ENDL; } // // Initialize messaging system // - llinfos << "Initializing messaging system..." << llendl; + LL_DEBUGS("AppInit") << "Initializing messaging system..." << LL_ENDL; std::string message_template_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"message_template.msg"); - FILE* found_template = NULL; + LLFILE* found_template = NULL; found_template = LLFile::fopen(message_template_path.c_str(), "r"); /* Flawfinder: ignore */ if (found_template) { @@ -495,7 +496,7 @@ BOOL idle_startup() if (gSavedSettings.getBOOL("LogMessages")) { - llinfos << "Message logging activated!" << llendl; + LL_DEBUGS("AppInit") << "Message logging activated!" << LL_ENDL; msg->startLogging(); } @@ -520,13 +521,13 @@ BOOL idle_startup() F32 outBandwidth = gSavedSettings.getF32("OutBandwidth"); if (inBandwidth != 0.f) { - llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl; + LL_DEBUGS("AppInit") << "Setting packetring incoming bandwidth to " << inBandwidth << LL_ENDL; msg->mPacketRing.setUseInThrottle(TRUE); msg->mPacketRing.setInBandwidth(inBandwidth); } if (outBandwidth != 0.f) { - llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl; + LL_DEBUGS("AppInit") << "Setting packetring outgoing bandwidth to " << outBandwidth << LL_ENDL; msg->mPacketRing.setUseOutThrottle(TRUE); msg->mPacketRing.setOutBandwidth(outBandwidth); } @@ -557,7 +558,7 @@ BOOL idle_startup() BOOL init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle); if(!init) { - llwarns << "Unable to initialize audio engine" << llendl; + LL_WARNS("AppInit") << "Unable to initialize audio engine" << LL_ENDL; } gAudiop->setMuted(TRUE); } @@ -565,7 +566,7 @@ BOOL idle_startup() if (LLTimer::knownBadTimer()) { - llwarns << "Unreliable timers detected (may be bad PCI chipset)!!" << llendl; + LL_WARNS("AppInit") << "Unreliable timers detected (may be bad PCI chipset)!!" << LL_ENDL; } // @@ -638,7 +639,7 @@ BOOL idle_startup() //--------------------------------------------------------------------- if (STATE_MEDIA_INIT == LLStartUp::getStartupState()) { - llinfos << "Initializing Multimedia...." << llendl; + LL_DEBUGS("AppInit") << "Initializing Multimedia...." << LL_ENDL; set_startup_status(0.03f, "Initializing Multimedia...", gAgent.mMOTD.c_str()); display_startup(); LLViewerMedia::initClass(); @@ -656,7 +657,7 @@ BOOL idle_startup() if (STATE_LOGIN_SHOW == LLStartUp::getStartupState()) { - llinfos << "Initializing Window" << llendl; + LL_DEBUGS("AppInit") << "Initializing Window" << LL_ENDL; gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); // Push our window frontmost @@ -667,11 +668,13 @@ BOOL idle_startup() if (show_connect_box) { // Load all the name information out of the login view - LLPanelLogin::getFields(firstname, lastname, password, remember_password); + // NOTE: Hits "Attempted getFields with no login view shown" warning, since we don't + // show the login view until login_show() is called below. + // LLPanelLogin::getFields(firstname, lastname, password, remember_password); if (gNoRender) { - llerrs << "Need to autologin or use command line with norender!" << llendl; + LL_ERRS("AppInit") << "Need to autologin or use command line with norender!" << LL_ENDL; } // Make sure the process dialog doesn't hide things gViewerWindow->setShowProgress(FALSE); @@ -764,7 +767,7 @@ BOOL idle_startup() } gSavedSettings.setBOOL("RememberPassword", remember_password); - llinfos << "Attempting login as: " << firstname << " " << lastname << llendl; + LL_INFOS("AppInit") << "Attempting login as: " << firstname << " " << lastname << LL_ENDL; gDebugInfo["LoginName"] = firstname + " " + lastname; } @@ -812,22 +815,28 @@ BOOL idle_startup() LLString server_label; S32 domain_name_index; BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index ); - gGridChoice = (EGridInfo) domain_name_index; - gSavedSettings.setS32("ServerChoice", gGridChoice); - if (gGridChoice == GRID_INFO_OTHER) + if((EGridInfo)domain_name_index == GRID_INFO_OTHER) { - gGridName = server_label;/* Flawfinder: ignore */ + // Since the grid chosen was an 'other', set the choice by string. + LLViewerLogin::getInstance()->setGridChoice(server_label); + } + else + { + // Set the choice according to index. + LLViewerLogin::getInstance()->setGridChoice((EGridInfo)domain_name_index); } if ( user_picked_server ) - { // User picked a grid from the popup, so clear the stored urls and they will be re-generated from gGridChoice + { // User picked a grid from the popup, so clear the + // stored uris and they will be re-generated from the GridChoice sAuthUris.clear(); - LLAppViewer::instance()->resetURIs(); + LLViewerLogin::getInstance()->resetURIs(); } LLString location; LLPanelLogin::getLocation( location ); LLURLSimString::setString( location ); + // END TODO LLPanelLogin::close(); } @@ -884,7 +893,7 @@ BOOL idle_startup() // Poke the VFS, which could potentially block for a while if // Windows XP is acting up - set_startup_status(0.07f, "Verifying cache files (can take 60-90 seconds)...", NULL); + set_startup_status(0.07f, LLTrans::getString("LoginVerifyingCache").c_str(), NULL); display_startup(); gVFS->pokeFiles(); @@ -907,10 +916,9 @@ BOOL idle_startup() if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState()) { //#define LL_MINIMIAL_REQUESTED_OPTIONS - gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel; + gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel(); // *Note: this is where gUserAuth used to be created. - requested_options.clear(); requested_options.push_back("inventory-root"); requested_options.push_back("inventory-skeleton"); @@ -942,7 +950,8 @@ BOOL idle_startup() gSavedSettings.setBOOL("UseDebugMenus", TRUE); requested_options.push_back("god-connect"); } - const std::vector& uris = LLAppViewer::instance()->getLoginURIs(); + std::vector uris; + LLViewerLogin::getInstance()->getLoginURIs(uris); std::vector::const_iterator iter, end; for (iter = uris.begin(), end = uris.end(); iter != end; ++iter) { @@ -953,15 +962,16 @@ BOOL idle_startup() } sAuthUriNum = 0; auth_method = "login_to_simulator"; - auth_desc = "Logging in. "; - auth_desc += LLAppViewer::instance()->getSecondLifeTitle(); - auth_desc += " may appear frozen. Please wait."; + + LLString::format_map_t args; + args["[APP_NAME]"] = LLAppViewer::instance()->getSecondLifeTitle(); + auth_desc = LLTrans::getString("LoginInProgress", args).c_str(); LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); } if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState()) { - lldebugs << "STATE_LOGIN_AUTHENTICATE" << llendl; + LL_DEBUGS("AppInit") << "STATE_LOGIN_AUTHENTICATE" << LL_ENDL; set_startup_status(progress, auth_desc.c_str(), auth_message.c_str()); progress += 0.02f; display_startup(); @@ -1021,7 +1031,7 @@ BOOL idle_startup() if(STATE_LOGIN_NO_DATA_YET == LLStartUp::getStartupState()) { - //lldebugs << "STATE_LOGIN_NO_DATA_YET" << llendl; + LL_DEBUGS("AppInit") << "STATE_LOGIN_NO_DATA_YET" << LL_ENDL; // If we get here we have gotten past the potential stall // in curl, so take "may appear frozen" out of progress bar. JC auth_desc = "Logging in..."; @@ -1035,7 +1045,7 @@ BOOL idle_startup() LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse(); if(LLUserAuth::E_NO_RESPONSE_YET == error) { - //llinfos << "waiting..." << llendl; + LL_DEBUGS("AppInit") << "waiting..." << LL_ENDL; return do_normal_idle; } LLStartUp::setStartupState( STATE_LOGIN_DOWNLOADING ); @@ -1046,7 +1056,7 @@ BOOL idle_startup() if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState()) { - lldebugs << "STATE_LOGIN_DOWNLOADING" << llendl; + LL_DEBUGS("AppInit") << "STATE_LOGIN_DOWNLOADING" << LL_ENDL; // Process messages to keep from dropping circuit. LLMessageSystem* msg = gMessageSystem; while (msg->checkAllMessages(gFrameCount, gServicePump)) @@ -1056,18 +1066,18 @@ BOOL idle_startup() LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse(); if(LLUserAuth::E_DOWNLOADING == error) { - //llinfos << "downloading..." << llendl; + LL_DEBUGS("AppInit") << "downloading..." << LL_ENDL; return do_normal_idle; } LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE ); progress += 0.01f; - set_startup_status(progress, "Processing Response...", auth_message.c_str()); + set_startup_status(progress, LLTrans::getString("LoginProcessingResponse").c_str(), auth_message.c_str()); return do_normal_idle; } if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState()) { - lldebugs << "STATE_LOGIN_PROCESS_RESPONSE" << llendl; + LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL; std::ostringstream emsg; BOOL quit = FALSE; const char* login_response = NULL; @@ -1089,18 +1099,18 @@ BOOL idle_startup() } else if(login_response && (0 == strcmp(login_response, "indeterminate"))) { - llinfos << "Indeterminate login..." << llendl; + LL_INFOS("AppInit") << "Indeterminate login..." << LL_ENDL; sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url")); sAuthUriNum = 0; auth_method = LLUserAuth::getInstance()->getResponse("next_method"); auth_message = LLUserAuth::getInstance()->getResponse("message"); if(auth_method.substr(0, 5) == "login") { - auth_desc.assign("Authenticating..."); + auth_desc.assign(LLTrans::getString("LoginAuthenticating").c_str()); } else { - auth_desc.assign("Performing account maintenance..."); + auth_desc.assign(LLTrans::getString("LoginMaintenance").c_str()); } // ignoring the duration & options array for now. // Go back to authenticate. @@ -1136,7 +1146,7 @@ BOOL idle_startup() { if (show_connect_box) { - llinfos << "Need tos agreement" << llendl; + LL_DEBUGS("AppInit") << "Need tos agreement" << LL_ENDL; LLStartUp::setStartupState( STATE_UPDATE_CHECK ); LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS, message_response); @@ -1153,7 +1163,7 @@ BOOL idle_startup() { if (show_connect_box) { - llinfos << "Need critical message" << llendl; + LL_DEBUGS("AppInit") << "Need critical message" << LL_ENDL; LLStartUp::setStartupState( STATE_UPDATE_CHECK ); LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_CRITICAL_MESSAGE, message_response); @@ -1188,7 +1198,7 @@ BOOL idle_startup() } if(reason_response && (0 == strcmp(reason_response, "optional"))) { - llinfos << "Login got optional update" << llendl; + LL_DEBUGS("AppInit") << "Login got optional update" << LL_ENDL; auth_message = LLUserAuth::getInstance()->getResponse("message"); if (show_connect_box) { @@ -1213,9 +1223,9 @@ BOOL idle_startup() } else { sAuthUriNum++; std::ostringstream s; - s << "Previous login attempt failed. Logging in, attempt " - << (sAuthUriNum + 1) << ". "; - auth_desc = s.str(); + LLString::format_map_t args; + args["[NUMBER]"] = sAuthUriNum + 1; + auth_desc = LLTrans::getString("LoginAttempt", args).c_str(); LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); return do_normal_idle; } @@ -1451,8 +1461,8 @@ BOOL idle_startup() { if (gNoRender) { - llinfos << "Bad login - missing return values" << llendl; - llinfos << emsg << llendl; + LL_WARNS("AppInit") << "Bad login - missing return values" << LL_ENDL; + LL_WARNS("AppInit") << emsg << LL_ENDL; exit(0); } // Bounce back to the login screen. @@ -1471,8 +1481,8 @@ BOOL idle_startup() { if (gNoRender) { - llinfos << "Failed to login!" << llendl; - llinfos << emsg << llendl; + LL_WARNS("AppInit") << "Failed to login!" << LL_ENDL; + LL_WARNS("AppInit") << emsg << LL_ENDL; exit(0); } // Bounce back to the login screen. @@ -1493,7 +1503,7 @@ BOOL idle_startup() //--------------------------------------------------------------------- if (STATE_WORLD_INIT == LLStartUp::getStartupState()) { - set_startup_status(0.40f, "Initializing World...", gAgent.mMOTD.c_str()); + set_startup_status(0.40f, LLTrans::getString("LoginInitializingWorld").c_str(), gAgent.mMOTD.c_str()); display_startup(); // We should have an agent id by this point. llassert(!(gAgentID == LLUUID::null)); @@ -1541,11 +1551,11 @@ BOOL idle_startup() LLWorld::getInstance()->addRegion(first_sim_handle, first_sim); LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle); - llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl; + LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL; LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT ); regionp->setSeedCapability(first_sim_seed_cap); - llinfos << "Waiting for seed grant ...." << llendl; + LL_DEBUGS("AppInit") << "Waiting for seed grant ...." << LL_ENDL; // Set agent's initial region to be the one we just created. gAgent.setRegion(regionp); @@ -1613,7 +1623,7 @@ BOOL idle_startup() // // Set message handlers // - llinfos << "Initializing communications..." << llendl; + LL_INFOS("AppInit") << "Initializing communications..." << LL_ENDL; // register callbacks for messages. . . do this after initial handshake to make sure that we don't catch any unwanted register_viewer_callbacks(gMessageSystem); @@ -1662,7 +1672,7 @@ BOOL idle_startup() // Sets up the parameters for the first simulator - llinfos << "Initializing camera..." << llendl; + LL_DEBUGS("AppInit") << "Initializing camera..." << LL_ENDL; gFrameTime = totalTime(); F32 last_time = gFrameTimeSeconds; gFrameTimeSeconds = (S64)(gFrameTime - gStartTime)/SEC_TO_MICROSEC; @@ -1697,19 +1707,19 @@ BOOL idle_startup() // Initialize global class data needed for surfaces (i.e. textures) if (!gNoRender) { - llinfos << "Initializing sky..." << llendl; + LL_DEBUGS("AppInit") << "Initializing sky..." << LL_ENDL; // Initialize all of the viewer object classes for the first time (doing things like texture fetches. gSky.init(initial_sun_direction); } - llinfos << "Decoding images..." << llendl; + LL_DEBUGS("AppInit") << "Decoding images..." << LL_ENDL; // For all images pre-loaded into viewer cache, decode them. // Need to do this AFTER we init the sky const S32 DECODE_TIME_SEC = 2; for (int i = 0; i < DECODE_TIME_SEC; i++) { F32 frac = (F32)i / (F32)DECODE_TIME_SEC; - set_startup_status(0.45f + frac*0.1f, "Decoding images...", gAgent.mMOTD.c_str()); + set_startup_status(0.45f + frac*0.1f, LLTrans::getString("LoginDecodingImages").c_str(), gAgent.mMOTD.c_str()); display_startup(); gImageList.decodeAllImages(1.f); } @@ -1720,14 +1730,14 @@ BOOL idle_startup() LLMessageSystem* msg = gMessageSystem; if (!msg->mOurCircuitCode) { - llwarns << "Attempting to connect to simulator with a zero circuit code!" << llendl; + LL_WARNS("AppInit") << "Attempting to connect to simulator with a zero circuit code!" << LL_ENDL; } gUseCircuitCallbackCalled = FALSE; msg->enableCircuit(first_sim, TRUE); // now, use the circuit info to tell simulator about us! - llinfos << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << llendl; + LL_INFOS("AppInit") << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << LL_ENDL; msg->newMessageFast(_PREHASH_UseCircuitCode); msg->nextBlockFast(_PREHASH_CircuitCode); msg->addU32Fast(_PREHASH_Code, msg->mOurCircuitCode); @@ -1753,8 +1763,8 @@ BOOL idle_startup() //--------------------------------------------------------------------- if(STATE_WORLD_WAIT == LLStartUp::getStartupState()) { - //llinfos << "Waiting for simulator ack...." << llendl; - set_startup_status(0.59f, "Waiting for region handshake...", gAgent.mMOTD.c_str()); + LL_DEBUGS("AppInit") << "Waiting for simulator ack...." << LL_ENDL; + set_startup_status(0.59f, LLTrans::getString("LoginWaitingForRegionHandshake").c_str(), gAgent.mMOTD.c_str()); if(gGotUseCircuitCodeAck) { LLStartUp::setStartupState( STATE_AGENT_SEND ); @@ -1772,8 +1782,8 @@ BOOL idle_startup() //--------------------------------------------------------------------- if (STATE_AGENT_SEND == LLStartUp::getStartupState()) { - llinfos << "Connecting to region..." << llendl; - set_startup_status(0.60f, "Connecting to region...", gAgent.mMOTD.c_str()); + LL_DEBUGS("AppInit") << "Connecting to region..." << LL_ENDL; + set_startup_status(0.60f, LLTrans::getString("LoginConnectingToRegion").c_str(), gAgent.mMOTD.c_str()); // register with the message system so it knows we're // expecting this message LLMessageSystem* msg = gMessageSystem; @@ -1824,8 +1834,8 @@ BOOL idle_startup() } else { - //llinfos << "Awaiting AvatarInitComplete, got " - //<< msg->getMessageName() << llendl; + LL_DEBUGS("AppInit") << "Awaiting AvatarInitComplete, got " + << msg->getMessageName() << LL_ENDL; } } msg->processAcks(); @@ -1877,7 +1887,7 @@ BOOL idle_startup() { if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner)) { - llwarns << "Problem loading inventory-skel-lib" << llendl; + LL_WARNS("AppInit") << "Problem loading inventory-skel-lib" << LL_ENDL; } } options.clear(); @@ -1885,8 +1895,7 @@ BOOL idle_startup() { if(!gInventory.loadSkeleton(options, gAgent.getID())) { - llwarns << "Problem loading inventory-skel-targets" - << llendl; + LL_WARNS("AppInit") << "Problem loading inventory-skel-targets" << LL_ENDL; } } @@ -2038,17 +2047,17 @@ BOOL idle_startup() if (rate_bps > FASTER_RATE_BPS && rate_bps > max_bandwidth) { - llinfos << "Fast network connection, increasing max bandwidth to " + LL_DEBUGS("AppInit") << "Fast network connection, increasing max bandwidth to " << FASTER_RATE_BPS/1024.f - << " kbps" << llendl; + << " kbps" << LL_ENDL; gViewerThrottle.setMaxBandwidth(FASTER_RATE_BPS / 1024.f); } else if (rate_bps > FAST_RATE_BPS && rate_bps > max_bandwidth) { - llinfos << "Fast network connection, increasing max bandwidth to " + LL_DEBUGS("AppInit") << "Fast network connection, increasing max bandwidth to " << FAST_RATE_BPS/1024.f - << " kbps" << llendl; + << " kbps" << LL_ENDL; gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f); } } @@ -2080,8 +2089,8 @@ BOOL idle_startup() LLUserAuth::options_t gesture_options; if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options)) { - llinfos << "Gesture Manager loading " << gesture_options.size() - << llendl; + LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size() + << LL_ENDL; std::vector item_ids; LLUserAuth::options_t::iterator resp_it; for (resp_it = gesture_options.begin(); @@ -2134,7 +2143,7 @@ BOOL idle_startup() msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound); msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change); - llinfos << "Initialization complete" << llendl; + LL_DEBUGS("AppInit") << "Initialization complete" << LL_ENDL; gRenderStartTime.reset(); gForegroundTime.reset(); @@ -2249,7 +2258,7 @@ BOOL idle_startup() { update_texture_fetch(); set_startup_status(0.f + 0.25f * wearables_time / MAX_WEARABLES_TIME, - "Downloading clothing...", + LLTrans::getString("LoginDownloadingClothing").c_str(), gAgent.mMOTD.c_str()); } return do_normal_idle; @@ -2271,7 +2280,7 @@ BOOL idle_startup() gViewerWindow->showCursor(); gViewerWindow->getWindow()->resetBusyCount(); gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); - //llinfos << "Done releasing bitmap" << llendl; + LL_DEBUGS("AppInit") << "Done releasing bitmap" << LL_ENDL; gViewerWindow->setShowProgress(FALSE); gViewerWindow->setProgressCancelButtonVisible(FALSE, ""); @@ -2293,7 +2302,7 @@ BOOL idle_startup() if (gSavedSettings.getBOOL("StatsAutoRun")) { LLUUID id; - llinfos << "Starting automatic playback" << llendl; + LL_DEBUGS("AppInit") << "Starting automatic playback" << LL_ENDL; gAgentPilot.startPlayback(); } @@ -2309,9 +2318,9 @@ BOOL idle_startup() // Unmute audio if desired and setup volumes. // This is a not-uncommon crash site, so surround it with // llinfos output to aid diagnosis. - llinfos << "Doing first audio_update_volume..." << llendl; + LL_INFOS("AppInit") << "Doing first audio_update_volume..." << LL_ENDL; audio_update_volume(); - llinfos << "Done first audio_update_volume." << llendl; + LL_INFOS("AppInit") << "Done first audio_update_volume." << LL_ENDL; // reset keyboard focus to sane state of pointing at world gFocusMgr.setKeyboardFocus(NULL); @@ -2320,10 +2329,12 @@ BOOL idle_startup() gDebugView->mFastTimerView->setVisible(TRUE); #endif + LLAppViewer::instance()->startMainloopTimeout(); + return do_normal_idle; } - llwarns << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << llendl; + LL_WARNS("AppInit") << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << LL_ENDL; return do_normal_idle; } @@ -2333,7 +2344,7 @@ BOOL idle_startup() void login_show() { - llinfos << "Initializing Login Screen" << llendl; + LL_INFOS("AppInit") << "Initializing Login Screen" << LL_ENDL; #ifdef LL_RELEASE_FOR_DOWNLOAD BOOL bUseDebugLogin = gSavedSettings.getBOOL("UseDebugLogin"); @@ -2347,35 +2358,15 @@ void login_show() // UI textures have been previously loaded in doPreloadImages() - llinfos << "Setting Servers" << llendl; + LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL; - if( GRID_INFO_OTHER == gGridChoice ) - { - LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER ); - } - else + LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel().c_str(), LLViewerLogin::getInstance()->getGridChoice()); + + LLViewerLogin* vl = LLViewerLogin::getInstance(); + for(int grid_index = GRID_INFO_ADITI; grid_index < GRID_INFO_OTHER; ++grid_index) { - LLPanelLogin::addServer( gGridInfo[gGridChoice].mLabel, gGridChoice ); + LLPanelLogin::addServer(vl->getKnownGridLabel((EGridInfo)grid_index).c_str(), grid_index); } - - // Arg! We hate loops! - LLPanelLogin::addServer( gGridInfo[GRID_INFO_ADITI].mLabel, GRID_INFO_ADITI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_ARUNA].mLabel, GRID_INFO_ARUNA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel, GRID_INFO_DURGA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel, GRID_INFO_GANGA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_MITRA].mLabel, GRID_INFO_MITRA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_MOHINI].mLabel, GRID_INFO_MOHINI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_NANDI].mLabel, GRID_INFO_NANDI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_RADHA].mLabel, GRID_INFO_RADHA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_RAVI].mLabel, GRID_INFO_RAVI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel, GRID_INFO_SHAKTI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel, GRID_INFO_UMA ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_YAMI].mLabel, GRID_INFO_YAMI ); - LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel, GRID_INFO_LOCAL ); } // Callback for when login screen is closed. Option 0 = connect, option 1 = quit. @@ -2416,7 +2407,7 @@ void login_callback(S32 option, void *userdata) } else { - llwarns << "Unknown login button clicked" << llendl; + LL_WARNS("AppInit") << "Unknown login button clicked" << LL_ENDL; } } @@ -2437,7 +2428,7 @@ LLString load_password_from_disk() std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "password.dat"); - FILE* fp = LLFile::fopen(filepath.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filepath.c_str(), "rb"); /* Flawfinder: ignore */ if (!fp) { return hashed_password; @@ -2484,7 +2475,7 @@ void save_password_to_disk(const char* hashed_password) } else { - FILE* fp = LLFile::fopen(filepath.c_str(), "wb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filepath.c_str(), "wb"); /* Flawfinder: ignore */ if (!fp) { return; @@ -2501,7 +2492,7 @@ void save_password_to_disk(const char* hashed_password) if (fwrite(buffer, HASHED_LENGTH, 1, fp) != 1) { - llwarns << "Short write" << llendl; + LL_WARNS("AppInit") << "Short write" << LL_ENDL; } fclose(fp); @@ -2551,7 +2542,7 @@ void first_run_dialog_callback(S32 option, void* userdata) { if (0 == option) { - llinfos << "First run dialog cancelling" << llendl; + LL_DEBUGS("AppInit") << "First run dialog cancelling" << LL_ENDL; LLWeb::loadURL( CREATE_ACCOUNT_URL ); } @@ -2584,7 +2575,7 @@ void login_alert_status(S32 option, void* user_data) LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); break; default: - llwarns << "Missing case in login_alert_status switch" << llendl; + LL_WARNS("AppInit") << "Missing case in login_alert_status switch" << LL_ENDL; } LLPanelLogin::giveFocus(); @@ -2692,7 +2683,7 @@ void update_dialog_callback(S32 option, void *userdata) #endif // *TODO change userserver to be grid on both viewer and sim, since // userserver no longer exists. - query_map["userserver"] = gGridName; + query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel(); query_map["channel"] = gSavedSettings.getString("VersionChannelName"); // *TODO constantize this guy LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); @@ -2702,7 +2693,7 @@ void update_dialog_callback(S32 option, void *userdata) if (update_exe_path.empty()) { // We're hosed, bail - llwarns << "LLDir::getTempFilename() failed" << llendl; + LL_WARNS("AppInit") << "LLDir::getTempFilename() failed" << LL_ENDL; LLAppViewer::instance()->forceQuit(); return; } @@ -2713,14 +2704,14 @@ void update_dialog_callback(S32 option, void *userdata) updater_source += gDirUtilp->getDirDelimiter(); updater_source += "updater.exe"; - llinfos << "Calling CopyFile source: " << updater_source.c_str() + LL_DEBUGS("AppInit") << "Calling CopyFile source: " << updater_source.c_str() << " dest: " << update_exe_path - << llendl; + << LL_ENDL; if (!CopyFileA(updater_source.c_str(), update_exe_path.c_str(), FALSE)) { - llinfos << "Unable to copy the updater!" << llendl; + LL_WARNS("AppInit") << "Unable to copy the updater!" << LL_ENDL; LLAppViewer::instance()->forceQuit(); return; } @@ -2758,14 +2749,14 @@ void update_dialog_callback(S32 option, void *userdata) params << " -program \"" << program_name << "\""; } - llinfos << "Calling updater: " << update_exe_path << " " << params.str() << llendl; + LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << " " << params.str() << LL_ENDL; //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird. LLAppViewer::instance()->removeMarkerFile(); // In case updater fails // Use spawn() to run asynchronously int retval = _spawnl(_P_NOWAIT, update_exe_path.c_str(), update_exe_path.c_str(), params.str().c_str(), NULL); - llinfos << "Spawn returned " << retval << llendl; + LL_DEBUGS("AppInit") << "Spawn returned " << retval << LL_ENDL; #elif LL_DARWIN // if a sim name was passed in via command line parameter (typically through a SLURL) @@ -2783,11 +2774,8 @@ void update_dialog_callback(S32 option, void *userdata) update_exe_path += LLAppViewer::instance()->getSecondLifeTitle(); update_exe_path += "\" &"; - llinfos << "Calling updater: " << update_exe_path << llendl; + LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << LL_ENDL; - // *REMOVE:Mani The following call is handled through ~LLAppViewer. - // remove_marker_file(); // In case updater fails - // Run the auto-updater. system(update_exe_path.c_str()); /* Flawfinder: ignore */ @@ -2795,10 +2783,6 @@ void update_dialog_callback(S32 option, void *userdata) OSMessageBox("Automatic updating is not yet implemented for Linux.\n" "Please download the latest version from www.secondlife.com.", NULL, OSMB_OK); - - // *REMOVE:Mani The following call is handled through ~LLAppViewer. - // remove_marker_file(); - #endif LLAppViewer::instance()->forceQuit(); } @@ -2813,7 +2797,7 @@ void use_circuit_callback(void**, S32 result) if (result) { // Make sure user knows something bad happened. JC - llinfos << "Backing up to login screen!" << llendl; + LL_WARNS("AppInit") << "Backing up to login screen!" << LL_ENDL; gViewerWindow->alertXml("LoginPacketNeverReceived", login_alert_status, NULL); reset_login(); @@ -2981,7 +2965,7 @@ void register_viewer_callbacks(LLMessageSystem* msg) //msg->setHandlerFunc("DirPicksReply", LLPanelDirBrowser::processDirPicksReply); msg->setHandlerFunc("DirClassifiedReply", LLPanelDirBrowser::processDirClassifiedReply); msg->setHandlerFunc("DirLandReply", LLPanelDirBrowser::processDirLandReply); - msg->setHandlerFunc("DirPopularReply",LLPanelDirBrowser::processDirPopularReply); + //msg->setHandlerFunc("DirPopularReply",LLPanelDirBrowser::processDirPopularReply); msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply); @@ -3660,10 +3644,10 @@ void init_start_screen(S32 location_id) if (gStartImageGL.notNull()) { gStartImageGL = NULL; - llinfos << "re-initializing start screen" << llendl; + LL_INFOS("AppInit") << "re-initializing start screen" << LL_ENDL; } - llinfos << "Loading startup bitmap..." << llendl; + LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL; LLString temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter(); @@ -3682,12 +3666,12 @@ void init_start_screen(S32 location_id) // driver bug if(!gSavedSettings.getBOOL("UseStartScreen")) { - llinfos << "Bitmap load disabled" << llendl; + LL_INFOS("AppInit") << "Bitmap load disabled" << LL_ENDL; return; } else if(!start_image_bmp->load(temp_str) ) { - llinfos << "Bitmap load failed" << llendl; + LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL; return; } @@ -3698,7 +3682,7 @@ void init_start_screen(S32 location_id) LLPointer raw = new LLImageRaw; if (!start_image_bmp->decode(raw, 0.0f)) { - llinfos << "Bitmap decode failed" << llendl; + LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL; gStartImageGL = NULL; return; } @@ -3711,7 +3695,7 @@ void init_start_screen(S32 location_id) // frees the bitmap void release_start_screen() { - //llinfos << "Releasing bitmap..." << llendl; + LL_DEBUGS("AppInit") << "Releasing bitmap..." << LL_ENDL; gStartImageGL = NULL; } @@ -3719,7 +3703,7 @@ void release_start_screen() // static void LLStartUp::setStartupState( S32 state ) { - llinfos << "Startup state changing from " << gStartupState << " to " << state << llendl; + LL_INFOS("AppInit") << "Startup state changing from " << gStartupState << " to " << state << LL_ENDL; gStartupState = state; } diff --git a/linden/indra/newview/llstatgraph.cpp b/linden/indra/newview/llstatgraph.cpp index c9969a2..9f219e2 100644 --- a/linden/indra/newview/llstatgraph.cpp +++ b/linden/indra/newview/llstatgraph.cpp @@ -32,7 +32,7 @@ #include "llviewerprecompiledheaders.h" #include "llstatgraph.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llmath.h" #include "llui.h" diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp index c11d46d..42acdcc 100644 --- a/linden/indra/newview/llstatusbar.cpp +++ b/linden/indra/newview/llstatusbar.cpp @@ -429,26 +429,18 @@ void LLStatusBar::refresh() childSetVisible("restrictpush", FALSE); } - BOOL voice_enabled = gVoiceClient->voiceEnabled(); BOOL have_voice = parcel && parcel->getVoiceEnabled(); - if (!voice_enabled) + if (have_voice) { childSetVisible("status_no_voice", FALSE); } else { - if (have_voice) - { - childSetVisible("status_no_voice", FALSE); - } - else if (!have_voice) - { - childSetVisible("status_no_voice", TRUE); - childGetRect( "status_no_voice", buttonRect ); - r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight()); - childSetRect( "status_no_voice", r ); - x += buttonRect.getWidth(); - } + childSetVisible("status_no_voice", TRUE); + childGetRect( "status_no_voice", buttonRect ); + r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight()); + childSetRect( "status_no_voice", r ); + x += buttonRect.getWidth(); } BOOL canBuyLand = parcel diff --git a/linden/indra/newview/llstylemap.cpp b/linden/indra/newview/llstylemap.cpp new file mode 100644 index 0000000..a8c8bf7 --- /dev/null +++ b/linden/indra/newview/llstylemap.cpp @@ -0,0 +1,75 @@ +/** + * @file llstylemap.cpp + * @brief LLStyleMap class implementation + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-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$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llstylemap.h" +#include "llstring.h" +#include "llui.h" +#include "llviewercontrol.h" +#include "llagent.h" + +LLStyleMap::LLStyleMap() +{ +} + +LLStyleMap::~LLStyleMap() +{ +} + +LLStyleMap &LLStyleMap::instance() +{ + static LLStyleMap mStyleMap; + return mStyleMap; +} + +// This is similar to the [] accessor except that if the entry doesn't already exist, +// then this will create the entry. +const LLStyleSP &LLStyleMap::lookup(const LLUUID &source) +{ + // Find this style in the map or add it if not. This map holds links to residents' profiles. + if (find(source) == end()) + { + LLStyleSP style(new LLStyle); + style->setVisible(true); + style->setFontName(LLString::null); + if (source != gAgent.getID() && source != LLUUID::null) + { + style->setColor(gSavedSettings.getColor4("HTMLLinkColor")); + LLString link = llformat("secondlife:///app/agent/%s/about",source.asString().c_str()); + style->setLinkHREF(link); + } + else + style->setColor(LLColor4::white); + (*this)[source] = style; + } + return (*this)[source]; +} diff --git a/linden/indra/newview/llstylemap.h b/linden/indra/newview/llstylemap.h new file mode 100644 index 0000000..2e9339c --- /dev/null +++ b/linden/indra/newview/llstylemap.h @@ -0,0 +1,54 @@ +/** + * @file LLStyleMap.h + * @brief LLStyleMap class definition + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-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_LLSTYLE_MAP_H +#define LL_LLSTYLE_MAP_H + +#include "llstyle.h" +#include "lluuid.h" + +// Lightweight class for holding and managing mappings between UUIDs and links. +// Used (for example) to create clickable name links off of IM chat. + +typedef std::map style_map_t; + +class LLStyleMap : public style_map_t +{ +public: + LLStyleMap(); + ~LLStyleMap(); + // Just like the [] accessor but it will add the entry in if it doesn't exist. + const LLStyleSP &lookup(const LLUUID &source); + static LLStyleMap &instance(); +}; + +#endif // LL_LLSTYLE_MAP_H diff --git a/linden/indra/newview/llsurfacepatch.cpp b/linden/indra/newview/llsurfacepatch.cpp index 5b03c98..42aea9e 100644 --- a/linden/indra/newview/llsurfacepatch.cpp +++ b/linden/indra/newview/llsurfacepatch.cpp @@ -206,10 +206,11 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal, LLVector2 *tex0, LLVector2 *tex1) { - if (!mSurfacep || !mSurfacep->getRegion()) + if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge()) { return; // failsafe } + llassert_always(vertex && normal && tex0 && tex1); U32 surface_stride = mSurfacep->getGridsPerEdge(); U32 point_offset = x + y*surface_stride; diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp index 66d9a33..0e4c9c2 100644 --- a/linden/indra/newview/lltexlayer.cpp +++ b/linden/indra/newview/lltexlayer.cpp @@ -52,7 +52,7 @@ #include "llxmltree.h" #include "pipeline.h" #include "v4coloru.h" -#include "llglimmediate.h" +#include "llrender.h" //#include "../tools/imdebug/imdebug.h" @@ -239,6 +239,9 @@ BOOL LLTexLayerSetBuffer::render() { U8* baked_bump_data = NULL; + // Default color mask for tex layer render + gGL.setColorMask(true, true); + // do we need to upload, and do we have sufficient data to create an uploadable composite? // When do we upload the texture if gAgent.mNumPendingQueries is non-zero? BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal()); @@ -292,8 +295,8 @@ BOOL LLTexLayerSetBuffer::render() } // reset GL state - glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); - gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + gGL.setColorMask(true, true); + gGL.setSceneBlendType(LLRender::BT_ALPHA); // we have valid texture data now mInitialized = TRUE; @@ -756,6 +759,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) LLGLSUIDefault gls_ui; LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE); + gGL.setColorMask(true, true); // composite color layers for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) @@ -774,8 +778,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) { LLGLSNoAlphaTest gls_no_alpha_test; gGL.flush(); - glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); - gGL.blendFunc( GL_ONE, GL_ZERO ); + gGL.setColorMask(false, true); + gGL.setSceneBlendType(LLRender::BT_REPLACE); { LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE ); @@ -793,8 +797,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) LLImageGL::unbindTexture(0, GL_TEXTURE_2D); gGL.flush(); - glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); - gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + gGL.setColorMask(true, true); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } else if( getInfo()->mClearAlpha ) @@ -803,12 +807,12 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) LLGLSNoTextureNoAlphaTest gls_no_alpha; gGL.color4f( 0.f, 0.f, 0.f, 1.f ); gGL.flush(); - glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); + gGL.setColorMask(false, true); gl_rect_2d_simple( width, height ); gGL.flush(); - glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); + gGL.setColorMask(true, true); } stop_glerror(); @@ -836,11 +840,11 @@ BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height ) // Set the alpha channel to one (clean up after previous blending) LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha; gGL.color4f( 0.f, 0.f, 0.f, 1.f ); - glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); + gGL.setColorMask(false, true); gl_rect_2d_simple( width, height ); - glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); + gGL.setColorMask(true, true); stop_glerror(); return success; @@ -1330,7 +1334,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) renderAlphaMasks( x, y, width, height, &net_color ); alpha_mask_specified = TRUE; gGL.flush(); - gGL.blendFunc( GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA ); + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA); } gGL.color4fv( net_color.mV); @@ -1338,7 +1342,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) if( getInfo()->mWriteAllChannels ) { gGL.flush(); - gGL.blendFunc( GL_ONE, GL_ZERO ); + gGL.setSceneBlendType(LLRender::BT_REPLACE); } if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly ) @@ -1401,7 +1405,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) { // Restore standard blend func value gGL.flush(); - gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + gGL.setSceneBlendType(LLRender::BT_ALPHA); stop_glerror(); } @@ -1506,7 +1510,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4 llassert( !mParamAlphaList.empty() ); - glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); + gGL.setColorMask(false, true); alpha_list_t::iterator iter = mParamAlphaList.begin(); LLTexLayerParamAlpha* first_param = *iter; @@ -1518,7 +1522,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4 // Clear the alpha gGL.flush(); - gGL.blendFunc( GL_ONE, GL_ZERO ); + gGL.setSceneBlendType(LLRender::BT_REPLACE); gGL.color4f( 0.f, 0.f, 0.f, 0.f ); gl_rect_2d_simple( width, height ); @@ -1536,7 +1540,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4 // Approximates a min() function gGL.flush(); - gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); // Accumulate the alpha component of the texture if( getInfo()->mLocalTexture != -1 ) @@ -1601,7 +1605,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4 LLGLSUIDefault gls_ui; - glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); + gGL.setColorMask(true, true); if (!mMorphMasksValid && !mMaskedMorphs.empty()) { @@ -1963,11 +1967,11 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height ) gGL.flush(); if( getInfo()->mMultiplyBlend ) { - gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); // Multiplication: approximates a min() function + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); // Multiplication: approximates a min() function } else { - gGL.blendFunc( GL_ONE, GL_ONE ); // Addition: approximates a max() function + gGL.setSceneBlendType(LLRender::BT_ADD); // Addition: approximates a max() function } if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid) diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp index c31fbba..ab85b32 100644 --- a/linden/indra/newview/lltexturecache.cpp +++ b/linden/indra/newview/lltexturecache.cpp @@ -1023,8 +1023,8 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only) sCacheMaxTexturesSize = max_size; max_size -= sCacheMaxTexturesSize; - llinfos << "TEXTURE CACHE: Headers: " << sCacheMaxEntries - << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << llendl; + LL_INFOS("TextureCache") << "Headers: " << sCacheMaxEntries + << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << LL_ENDL; setDirNames(location); @@ -1161,7 +1161,7 @@ void LLTextureCache::purgeTextures(bool validate) S32 num_entries = filesize / sizeof(Entry); if (num_entries * (S32)sizeof(Entry) != filesize) { - llwarns << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << llendl; + LL_WARNS("TextureCache") << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL; purgeAllTextures(false); return; } @@ -1175,19 +1175,19 @@ void LLTextureCache::purgeTextures(bool validate) (U8*)entries, 0, num_entries*sizeof(Entry)); if (bytes_read != filesize) { - llwarns << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << llendl; + LL_WARNS("TextureCache") << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL; purgeAllTextures(false); return; } - llinfos << "TEXTURE CACHE: Reading Entries..." << llendl; + LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL; std::map entry_idx_map; S64 total_size = 0; for (S32 idx=0; idx::iterator iter = entry_idx_map.find(id); if (iter != entry_idx_map.end()) { @@ -1206,7 +1206,7 @@ void LLTextureCache::purgeTextures(bool validate) validate_idx = gSavedSettings.getU32("CacheValidateCounter"); U32 next_idx = (++validate_idx) % 256; gSavedSettings.setU32("CacheValidateCounter", next_idx); - llinfos << "TEXTURE CACHE: Validating: " << validate_idx << llendl; + LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL; } S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10; @@ -1230,12 +1230,12 @@ void LLTextureCache::purgeTextures(bool validate) S32 uuididx = entries[idx].mID.mData[0]; if (uuididx == validate_idx) { -// llinfos << "Validating: " << filename << "Size: " << entries[idx].mSize << llendl; + LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mSize << LL_ENDL; S32 bodysize = ll_apr_file_size(filename, NULL); if (bodysize != entries[idx].mSize) { - llwarns << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize - << filename << llendl; + LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize + << filename << LL_ENDL; purge_entry = true; } } @@ -1243,7 +1243,7 @@ void LLTextureCache::purgeTextures(bool validate) if (purge_entry) { purge_count++; -// llinfos << "PURGING: " << filename << llendl; + LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL; ll_apr_file_remove(filename, NULL); total_size -= entries[idx].mSize; entries[idx].mSize = 0; @@ -1259,7 +1259,7 @@ void LLTextureCache::purgeTextures(bool validate) } num_entries = next_idx; - llinfos << "TEXTURE CACHE: Writing Entries: " << num_entries << llendl; + LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Writing Entries: " << num_entries << LL_ENDL; ll_apr_file_remove(mTexturesDirEntriesFileName, NULL); ll_apr_file_write_ex(mTexturesDirEntriesFileName, NULL, @@ -1276,7 +1276,7 @@ void LLTextureCache::purgeTextures(bool validate) delete[] entries; - llinfos << "TEXTURE CACHE:" + LL_INFOS("TextureCache") << "TEXTURE CACHE:" << " PURGED: " << purge_count << " ENTRIES: " << num_entries << " CACHE SIZE: " << total_size / 1024*1024 << " MB" diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp index 2be75c7..9a02c5a 100644 --- a/linden/indra/newview/lltexturectrl.cpp +++ b/linden/indra/newview/lltexturectrl.cpp @@ -34,7 +34,7 @@ #include "lltexturectrl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llviewerimagelist.h" #include "llcheckboxctrl.h" diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index 9399ed3..2e4283b 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp @@ -1341,13 +1341,13 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c } S32 desired_size; - if ((desired_discard == 0) && worker && worker->mFileSize) + if (desired_discard == 0) { // if we want the entire image, and we know its size, then get it all // (calcDataSizeJ2C() below makes assumptions about how the image // was compressed - this code ensures that when we request the entire image, // we really do get it.) - desired_size = worker->mFileSize; + desired_size = MAX_IMAGE_DATA_SIZE; } else if (w*h*c > 0) { @@ -1358,17 +1358,11 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c } else { - if (desired_discard == 0) - { - // If we want all of the image, request the maximum possible data - desired_size = MAX_IMAGE_DATA_SIZE; - } - else - { - desired_size = FIRST_PACKET_SIZE; - desired_discard = MAX_DISCARD_LEVEL; - } + desired_size = FIRST_PACKET_SIZE; + desired_discard = MAX_DISCARD_LEVEL; } + + if (worker) { if (worker->wasAborted()) diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp index db2853e..a2b3d47 100644 --- a/linden/indra/newview/lltextureview.cpp +++ b/linden/indra/newview/lltextureview.cpp @@ -40,7 +40,7 @@ #include "lllfsthread.h" #include "llui.h" #include "llimageworker.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llhoverview.h" #include "llselectmgr.h" diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp index 8d103ce..6612538 100644 --- a/linden/indra/newview/lltoolbar.cpp +++ b/linden/indra/newview/lltoolbar.cpp @@ -288,10 +288,15 @@ void LLToolBar::refresh() // Clothing button updated inside LLFloaterClothing - childSetEnabled("fly_btn", gAgent.canFly() || gAgent.getFlying() ); + BOOL sitting = FALSE; + if (gAgent.getAvatarObject()) + { + sitting = gAgent.getAvatarObject()->mIsSitting; + } - childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() ); + childSetEnabled("fly_btn", (gAgent.canFly() || gAgent.getFlying()) && !sitting ); + childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() ); // Check to see if we're in build mode BOOL build_mode = LLToolMgr::getInstance()->inEdit(); diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp index 319a5fd..9958d50 100644 --- a/linden/indra/newview/lltoolbrush.cpp +++ b/linden/indra/newview/lltoolbrush.cpp @@ -35,7 +35,7 @@ #include "lltoolselectland.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "message.h" diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp index 67a2153..c492c7b 100644 --- a/linden/indra/newview/lltooldraganddrop.cpp +++ b/linden/indra/newview/lltooldraganddrop.cpp @@ -47,6 +47,7 @@ #include "llhudmanager.h" #include "llinventorymodel.h" #include "llinventoryview.h" +#include "llmutelist.h" #include "llnotify.h" #include "llpreviewnotecard.h" #include "llselectmgr.h" @@ -1693,6 +1694,8 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent, effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); gFloaterTools->dirty(); + + LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY); } void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent, @@ -1895,6 +1898,8 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent, effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); gFloaterTools->dirty(); + + LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY); } } diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp index c526e6e..e5a3ed5 100644 --- a/linden/indra/newview/lltoolfocus.cpp +++ b/linden/indra/newview/lltoolfocus.cpp @@ -57,6 +57,7 @@ #include "llmorphview.h" // Globals +BOOL gCameraBtnZoom = TRUE; BOOL gCameraBtnOrbit = FALSE; BOOL gCameraBtnPan = FALSE; @@ -403,7 +404,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) } lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPan" << llendl; } - else + else if (gCameraBtnZoom) { // Zoom tool if (hasMouseCapture()) diff --git a/linden/indra/newview/lltoolfocus.h b/linden/indra/newview/lltoolfocus.h index 3f5b04c..e50ea5e 100644 --- a/linden/indra/newview/lltoolfocus.h +++ b/linden/indra/newview/lltoolfocus.h @@ -77,5 +77,6 @@ protected: extern BOOL gCameraBtnOrbit; extern BOOL gCameraBtnPan; +extern BOOL gCameraBtnZoom; #endif diff --git a/linden/indra/newview/lltoolmorph.cpp b/linden/indra/newview/lltoolmorph.cpp index a18321a..2fbf4ae 100644 --- a/linden/indra/newview/lltoolmorph.cpp +++ b/linden/indra/newview/lltoolmorph.cpp @@ -33,7 +33,7 @@ // File includes #include "lltoolmorph.h" -#include "llglimmediate.h" +#include "llrender.h" // Library includes #include "audioengine.h" diff --git a/linden/indra/newview/lltoolselectrect.cpp b/linden/indra/newview/lltoolselectrect.cpp index 11cdf4b..ceb0659 100644 --- a/linden/indra/newview/lltoolselectrect.cpp +++ b/linden/indra/newview/lltoolselectrect.cpp @@ -36,7 +36,7 @@ // Library includes #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "lldarray.h" // Viewer includes diff --git a/linden/indra/newview/lltracker.cpp b/linden/indra/newview/lltracker.cpp index 9e4bb09..b5854c8 100644 --- a/linden/indra/newview/lltracker.cpp +++ b/linden/indra/newview/lltracker.cpp @@ -36,7 +36,7 @@ #include "lldarray.h" #include "llfontgl.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llinventory.h" #include "llmemory.h" #include "llstring.h" diff --git a/linden/indra/newview/lltrans.cpp b/linden/indra/newview/lltrans.cpp new file mode 100644 index 0000000..a848250 --- /dev/null +++ b/linden/indra/newview/lltrans.cpp @@ -0,0 +1,103 @@ +/** + * @file lltrans.cpp + * @brief LLTrans implementation + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-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$ + */ + + +#include "llviewerprecompiledheaders.h" +#include "lltrans.h" +#include "llxmlnode.h" +#include "lluictrlfactory.h" +#include "llalertdialog.h" + +#include + +LLTrans::template_map_t LLTrans::sStringTemplates; + +//static +bool LLTrans::parseStrings(const LLString& xml_filename) +{ + LLXMLNodePtr root; + BOOL success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root); + + if (!success || root.isNull() || !root->hasName( "strings" )) + { + llerrs << "Problem reading strings: " << xml_filename << llendl; + return false; + } + + for (LLXMLNode* string = root->getFirstChild(); + string != NULL; string = string->getNextSibling()) + { + if (!string->hasName("string")) + { + continue; + } + + LLString string_name; + + if (! string->getAttributeString("name", string_name)) + { + llwarns << "Unable to parse string with no name" << llendl; + continue; + } + + LLTransTemplate xml_template(string_name, string->getTextContents()); + sStringTemplates[xml_template.mName] = xml_template; + } + + return true; +} + +//static +LLString LLTrans::getString(const LLString &xml_desc, const LLString::format_map_t& args) +{ + template_map_t::iterator iter = sStringTemplates.find(xml_desc); + + if (iter != sStringTemplates.end()) + { + LLString text = iter->second.mText; + LLString::format(text, args); + + return text; + } + else + { + LLString::format_map_t args; + args["[STRING_NAME]"] = xml_desc; + llwarns << "Missing String: [" << xml_desc << "]" << llendl; + LLAlertDialog* dialogp = LLAlertDialog::showXml("MissingString", args); + if (dialogp == NULL) + { + llerrs << "Bad or missing alerts.xml!" << llendl; + } + return ""; + } +} + diff --git a/linden/indra/newview/lltrans.h b/linden/indra/newview/lltrans.h new file mode 100644 index 0000000..eb159f2 --- /dev/null +++ b/linden/indra/newview/lltrans.h @@ -0,0 +1,92 @@ +/** + * @file lltrans.h + * @brief LLTrans definition + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-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_TRANS_H +#define LL_TRANS_H + +#include + +/** + * @brief String template loaded from strings.xml + */ +class LLTransTemplate +{ +public: + LLTransTemplate(const LLString& name = "", const LLString& text = "") : mName(name), mText(text) {} + + LLString mName; + LLString mText; +}; + +/** + * @brief Localized strings class + * This class is used to retrieve translations of strings used to build larger ones, as well as + * strings with a general usage that don't belong to any specific floater. For example, + * "Owner:", "Retrieving..." used in the place of a not yet known name, etc. + */ +class LLTrans +{ +public: + LLTrans(); + + /** + * @brief Parses the xml file that holds the strings. Used once on startup + * @param xml_filename Filename to parse + * @returns true if the file was parsed successfully, true if something went wrong + */ + static bool parseStrings(const LLString& xml_filename); + + /** + * @brief Returns a translated string + * @param xml_desc String's description + * @param args A list of substrings to replace in the string + * @returns Translated string + */ + static LLString getString(const LLString &xml_desc, const LLString::format_map_t& args); + + /** + * @brief Returns a translated string + * @param xml_desc String's description + * @returns Translated string + */ + static LLString getString(const LLString &xml_desc) + { + LLString::format_map_t empty; + return getString(xml_desc, empty); + } + + +private: + typedef std::map template_map_t; + static template_map_t sStringTemplates; +}; + +#endif diff --git a/linden/indra/newview/lluserauth.cpp b/linden/indra/newview/lluserauth.cpp index 9e040d2..6c8801a 100644 --- a/linden/indra/newview/lluserauth.cpp +++ b/linden/indra/newview/lluserauth.cpp @@ -103,14 +103,15 @@ void LLUserAuth::authenticate( const std::string& hashed_mac, const std::string& hashed_volume_serial) { - llinfos << "Authenticating: " << firstname << " " << lastname << ", " - << /*dpasswd.c_str() <<*/ llendl; + LL_INFOS2("AppInit", "Authentication") << "Authenticating: " << firstname << " " << lastname << ", " + << /*dpasswd.c_str() <<*/ LL_ENDL; std::ostringstream option_str; option_str << "Options: "; std::ostream_iterator appender(option_str, ", "); std::copy(requested_options.begin(), requested_options.end(), appender); option_str << "END"; - llinfos << option_str.str().c_str() << llendl; + + LL_INFOS2("AppInit", "Authentication") << option_str.str().c_str() << LL_ENDL; mAuthResponse = E_NO_RESPONSE_YET; //mDownloadTimer.reset(); @@ -163,7 +164,7 @@ void LLUserAuth::authenticate( XMLRPC_RequestFree(request, 1); - llinfos << "LLUserAuth::authenticate: uri=" << auth_uri << llendl; + LL_INFOS2("AppInit", "Authentication") << "LLUserAuth::authenticate: uri=" << auth_uri << LL_ENDL; } @@ -188,14 +189,15 @@ void LLUserAuth::authenticate( { std::string dpasswd("$1$"); dpasswd.append(passwd); - llinfos << "Authenticating: " << firstname << " " << lastname << ", " - << /*dpasswd.c_str() <<*/ llendl; + LL_INFOS2("AppInit", "Authentication") << "Authenticating: " << firstname << " " << lastname << ", " + << /*dpasswd.c_str() <<*/ LL_ENDL; std::ostringstream option_str; option_str << "Options: "; std::ostream_iterator appender(option_str, ", "); std::copy(requested_options.begin(), requested_options.end(), appender); option_str << "END"; - llinfos << option_str.str().c_str() << llendl; + + LL_INFOS2("AppInit", "Authentication") << option_str.str().c_str() << LL_ENDL; mAuthResponse = E_NO_RESPONSE_YET; //mDownloadTimer.reset(); @@ -248,7 +250,7 @@ void LLUserAuth::authenticate( XMLRPC_RequestFree(request, 1); - llinfos << "LLUserAuth::authenticate: uri=" << auth_uri << llendl; + LL_INFOS2("AppInit", "Authentication") << "LLUserAuth::authenticate: uri=" << auth_uri << LL_ENDL; } @@ -300,7 +302,7 @@ LLUserAuth::UserAuthcode LLUserAuth::authResponse() break; } - llinfos << "Processed response: " << result << llendl; + LL_INFOS2("AppInit", "Authentication") << "Processed response: " << result << LL_ENDL; delete mTransaction; mTransaction = NULL; diff --git a/linden/indra/newview/llviewerassetstorage.cpp b/linden/indra/newview/llviewerassetstorage.cpp index d9d497a..ac4003b 100644 --- a/linden/indra/newview/llviewerassetstorage.cpp +++ b/linden/indra/newview/llviewerassetstorage.cpp @@ -202,7 +202,7 @@ if(!filename) llinfos << "ASSET_ID: " << asset_id << llendl; S32 size = 0; - FILE* fp = LLFile::fopen(filename, "rb"); + LLFILE* fp = LLFile::fopen(filename, "rb"); if (fp) { fseek(fp, 0, SEEK_END); diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp index 203f9c7..146d738 100644 --- a/linden/indra/newview/llviewercontrol.cpp +++ b/linden/indra/newview/llviewercontrol.cpp @@ -69,7 +69,7 @@ #include "llappviewer.h" #include "llvosurfacepatch.h" #include "llvowlsky.h" -#include "llglimmediate.h" +#include "llrender.h" #ifdef TOGGLE_HACKED_GODLIKE_VIEWER BOOL gHackGodmode = FALSE; @@ -86,6 +86,7 @@ LLString gLastRunVersion; LLString gCurrentVersion; extern BOOL gResizeScreenTexture; +extern BOOL gDebugGL; //////////////////////////////////////////////////////////////////////////// // Listeners @@ -357,9 +358,15 @@ static bool handleRenderUseImpostorsChanged(const LLSD& newvalue) return true; } -static bool handleRenderUseCleverUIChanged(const LLSD& newvalue) +static bool handleRenderDebugGLChanged(const LLSD& newvalue) { - gGL.setClever(newvalue.asBoolean()); + gDebugGL = newvalue.asBoolean(); + return true; +} + +static bool handleRenderDebugPipelineChanged(const LLSD& newvalue) +{ + gDebugPipeline = newvalue.asBoolean(); return true; } @@ -426,6 +433,7 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue) gVoiceClient->setCaptureDevice(inputDevice); std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); gVoiceClient->setRenderDevice(outputDevice); + gVoiceClient->setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled")); } return true; } @@ -463,7 +471,8 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1)); gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1)); - gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1)); + gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _1)); + gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _1)); gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1)); gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1)); @@ -555,5 +564,6 @@ void settings_setup_listeners() gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); + gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); } diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp index cdffe33..47c9c32 100644 --- a/linden/indra/newview/llviewerdisplay.cpp +++ b/linden/indra/newview/llviewerdisplay.cpp @@ -34,7 +34,7 @@ #include "llviewerdisplay.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llglheaders.h" #include "llagent.h" #include "llviewercontrol.h" @@ -99,6 +99,9 @@ BOOL gDisplaySwapBuffers = FALSE; BOOL gResizeScreenTexture = FALSE; BOOL gSnapshot = FALSE; +U32 gRecentFrameCount = 0; // number of 'recent' frames +LLFrameTimer gRecentTime; + // Rendering stuff void pre_show_depth_buffer(); void post_show_depth_buffer(); @@ -125,27 +128,24 @@ void display_startup() // Required for HTML update in login screen static S32 frame_count = 0; -#ifndef LL_RELEASE_FOR_DOWNLOAD + LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif if (frame_count++ > 1) // make sure we have rendered a frame first { LLDynamicTexture::updateAllInstances(); } -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); LLGLSUIDefault gls_ui; gPipeline.disableLights(); gViewerWindow->setup2DRender(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); gGL.color4f(1,1,1,1); gViewerWindow->draw(); @@ -153,10 +153,8 @@ void display_startup() LLVertexBuffer::unbind(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif gViewerWindow->mWindow->swapBuffers(); glClear(GL_DEPTH_BUFFER_BIT); @@ -186,6 +184,18 @@ void display_update_camera() LLWorld::getInstance()->setLandFarClip(final_far); } +// Write some stats to llinfos +void display_stats() +{ + F32 log_freq = gSavedSettings.getF32("FPSLogFrequency"); + if (log_freq > 0.f && gRecentTime.getElapsedTimeF32() >= log_freq) + { + F32 fps = gRecentFrameCount / log_freq; + llinfos << llformat("FPS: %.02f", fps) << llendl; + gRecentFrameCount = 0; + gRecentTime.reset(); + } +} // Paint the display! void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) @@ -204,10 +214,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLVertexBuffer::unbind(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif gPipeline.disableLights(); @@ -232,10 +240,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gViewerWindow->performPick(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif ////////////////////////////////////////////////////////// // @@ -286,6 +292,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gPipeline.mBackfaceCull = TRUE; gFrameCount++; + gRecentFrameCount++; if (gFocusMgr.getAppHasFocus()) { gForegroundFrameCount++; @@ -474,7 +481,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES); if (LLDynamicTexture::updateAllInstances()) { - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } } @@ -559,7 +566,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gPipeline.resizeScreenTexture(); } - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); glClearColor(0,0,0,0); if (!for_snapshot) @@ -690,20 +697,20 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) if (to_texture) { - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); gPipeline.mScreen.bindTarget(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); } if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot()) && !gRestoreGL) { - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE; gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE); LLPipeline::sUnderWaterRender = FALSE; - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); //store this frame's modelview matrix for use //when rendering next frame's occlusion queries @@ -741,6 +748,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) send_agent_resume(); LLPipeline::sRenderFrameTest = FALSE; } + + display_stats(); } void render_hud_attachments() @@ -880,9 +889,7 @@ BOOL setup_hud_matrices(BOOL for_select) void render_ui_and_swap() { -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); -#endif glPushMatrix(); glLoadMatrixd(gGLLastModelView); @@ -918,15 +925,11 @@ void render_ui_and_swap() if (!gDisconnected) { render_ui_3d(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); -#endif } render_ui_2d(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); -#endif } gGL.flush(); @@ -1088,7 +1091,7 @@ void render_ui_2d() } stop_glerror(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); // render outline for HUD if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f) @@ -1115,7 +1118,6 @@ void render_ui_2d() LLFontGL::sCurOrigin.set(0, 0); } - void render_disconnected_background() { gGL.color4f(1,1,1,1); diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp index 88759af..a824b29 100644 --- a/linden/indra/newview/llviewerimagelist.cpp +++ b/linden/indra/newview/llviewerimagelist.cpp @@ -114,7 +114,7 @@ void LLViewerImageList::init() void LLViewerImageList::doPreloadImages() { - llinfos << "Preloading images..." << llendl; + LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL; // Set the "missing asset" image LLViewerImage::sMissingAssetImagep = getImageFromFile("missing_asset.tga"); @@ -772,10 +772,10 @@ void LLViewerImageList::decodeAllImages(F32 max_time) max_time = llmax(max_time, .001f); F32 create_time = updateImagesCreateTextures(max_time); - llinfos << "decodeAllImages() took " << timer.getElapsedTimeF32() << " seconds. " + LL_DEBUGS("ViewerImages") << "decodeAllImages() took " << timer.getElapsedTimeF32() << " seconds. " << " fetch_pending " << fetch_pending << " create_time " << create_time - << llendl; + << LL_ENDL; } diff --git a/linden/indra/newview/llviewerinventory.cpp b/linden/indra/newview/llviewerinventory.cpp index db005c7..d7c1778 100644 --- a/linden/indra/newview/llviewerinventory.cpp +++ b/linden/indra/newview/llviewerinventory.cpp @@ -254,7 +254,7 @@ void LLViewerInventoryItem::packMessage(LLMessageSystem* msg) const msg->addU32Fast(_PREHASH_CRC, crc); } // virtual -BOOL LLViewerInventoryItem::importFile(FILE* fp) +BOOL LLViewerInventoryItem::importFile(LLFILE* fp) { BOOL rv = LLInventoryItem::importFile(fp); mIsComplete = TRUE; @@ -269,7 +269,7 @@ BOOL LLViewerInventoryItem::importLegacyStream(std::istream& input_stream) return rv; } -bool LLViewerInventoryItem::importFileLocal(FILE* fp) +bool LLViewerInventoryItem::importFileLocal(LLFILE* fp) { // TODO: convert all functions that return BOOL to return bool bool rv = (LLInventoryItem::importFile(fp) ? true : false); @@ -277,7 +277,7 @@ bool LLViewerInventoryItem::importFileLocal(FILE* fp) return rv; } -bool LLViewerInventoryItem::exportFileLocal(FILE* fp) const +bool LLViewerInventoryItem::exportFileLocal(LLFILE* fp) const { char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ fprintf(fp, "\tinv_item\t0\n\t{\n"); @@ -469,7 +469,7 @@ bool LLViewerInventoryCategory::fetchDescendents() return false; } -bool LLViewerInventoryCategory::importFileLocal(FILE* fp) +bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp) { // *NOTE: This buffer size is hard coded into scanf() below. char buffer[MAX_STRING]; /* Flawfinder: ignore */ @@ -538,7 +538,7 @@ bool LLViewerInventoryCategory::importFileLocal(FILE* fp) return true; } -bool LLViewerInventoryCategory::exportFileLocal(FILE* fp) const +bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const { char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ fprintf(fp, "\tinv_category\t0\n\t{\n"); diff --git a/linden/indra/newview/llviewerinventory.h b/linden/indra/newview/llviewerinventory.h index 05dc19a..e80a042 100644 --- a/linden/indra/newview/llviewerinventory.h +++ b/linden/indra/newview/llviewerinventory.h @@ -100,13 +100,13 @@ public: //virtual void packMessage(LLMessageSystem* msg) const; virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); virtual BOOL unpackMessage(LLSD item); - virtual BOOL importFile(FILE* fp); + virtual BOOL importFile(LLFILE* fp); virtual BOOL importLegacyStream(std::istream& input_stream); // file handling on the viewer. These are not meant for anything // other than cacheing. - bool exportFileLocal(FILE* fp) const; - bool importFileLocal(FILE* fp); + bool exportFileLocal(LLFILE* fp) const; + bool importFileLocal(LLFILE* fp); // new methods BOOL isComplete() const { return mIsComplete; } @@ -182,8 +182,8 @@ public: // file handling on the viewer. These are not meant for anything // other than cacheing. - bool exportFileLocal(FILE* fp) const; - bool importFileLocal(FILE* fp); + bool exportFileLocal(LLFILE* fp) const; + bool importFileLocal(LLFILE* fp); protected: LLUUID mOwnerID; diff --git a/linden/indra/newview/llviewerjoint.cpp b/linden/indra/newview/llviewerjoint.cpp index 71f9211..1be6e66 100644 --- a/linden/indra/newview/llviewerjoint.cpp +++ b/linden/indra/newview/llviewerjoint.cpp @@ -37,7 +37,7 @@ #include "llviewerjoint.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llmath.h" #include "llglheaders.h" #include "llrendersphere.h" @@ -272,12 +272,12 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass ) triangle_count += drawShape( pixelArea, first_pass); } // second pass writes to z buffer only - glColorMask(FALSE, FALSE, FALSE, FALSE); + gGL.setColorMask(false, false); { triangle_count += drawShape( pixelArea, FALSE ); } // third past respects z buffer and writes color - glColorMask(TRUE, TRUE, TRUE, FALSE); + gGL.setColorMask(true, false); { LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); triangle_count += drawShape( pixelArea, FALSE ); diff --git a/linden/indra/newview/llviewerjointattachment.cpp b/linden/indra/newview/llviewerjointattachment.cpp index bbab71b..f5a5d8a 100644 --- a/linden/indra/newview/llviewerjointattachment.cpp +++ b/linden/indra/newview/llviewerjointattachment.cpp @@ -38,7 +38,7 @@ #include "llviewercontrol.h" #include "lldrawable.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llvoavatar.h" #include "llvolume.h" #include "pipeline.h" diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp index 4a0f0b8..0dcf4ab 100644 --- a/linden/indra/newview/llviewerjointmesh.cpp +++ b/linden/indra/newview/llviewerjointmesh.cpp @@ -36,6 +36,7 @@ #include "imageids.h" #include "llfasttimer.h" +#include "llrender.h" #include "llagent.h" #include "llapr.h" @@ -545,17 +546,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) else { glColor4f(0.7f, 0.6f, 0.3f, 1.f); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); } } else if( mLayerSet ) @@ -573,12 +564,10 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) else if ( mTexture.notNull() ) { - mTexture->bind(); - if (!mTexture->getClampS()) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - } - if (!mTexture->getClampT()) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + if (!mTexture->getClampS() || !mTexture->getClampT()) + { + mTexture->bind(); + mTexture->overrideClamp (TRUE, TRUE); } } else @@ -590,15 +579,8 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) { if (isTransparent()) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); // GL_TEXTURE_ENV_COLOR is set in renderPass1 - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA); } else { @@ -639,16 +621,13 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) if (mTestImageName) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } - if (mTexture.notNull()) { - if (!mTexture->getClampS()) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - } - if (!mTexture->getClampT()) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - } + if (mTexture.notNull()) + { + mTexture->bind(); + mTexture->restoreClamp(); } return triangle_count; @@ -870,9 +849,9 @@ void LLViewerJointMesh::updateVectorize() case 1: vp = "SSE"; break; default: vp = "COMPILER DEFAULT"; break; } - llinfos << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ; - llinfos << "Vector Processor : " << vp << llendl ; - llinfos << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ; + LL_INFOS("AppInit") << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << LL_ENDL ; + LL_INFOS("AppInit") << "Vector Processor : " << vp << LL_ENDL ; + LL_INFOS("AppInit") << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << LL_ENDL ; if(vectorizeEnable && vectorizeSkin) { switch(sVectorizeProcessor) diff --git a/linden/indra/newview/llviewerjoystick.cpp b/linden/indra/newview/llviewerjoystick.cpp index e9690f8..cf9d8a1 100644 --- a/linden/indra/newview/llviewerjoystick.cpp +++ b/linden/indra/newview/llviewerjoystick.cpp @@ -228,8 +228,38 @@ void LLViewerJoystick::init(bool autoenable) mDriverState = JDS_UNINITIALIZED; } } + + // Autoenable the joystick for recognized devices if nothing was connected previously + if (!autoenable) + { + autoenable = gSavedSettings.getString("JoystickInitialized").empty() ? true : false; + } updateEnabled(autoenable); + if (mDriverState == JDS_INITIALIZED) + { + // A Joystick device is plugged in + if (isLikeSpaceNavigator()) + { + // It's a space navigator, we have defaults for it. + if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator") + { + // Only set the defaults if we haven't already (in case they were overridden) + setSNDefaults(); + gSavedSettings.setString("JoystickInitialized", "SpaceNavigator"); + } + } + else + { + // It's not a Space Navigator + gSavedSettings.setString("JoystickInitialized", "UnknownDevice"); + } + } + else + { + // No device connected, don't change any settings + } + llinfos << "ndof: mDriverState=" << mDriverState << "; mNdofDev=" << mNdofDev << "; libinit=" << libinit << llendl; #endif diff --git a/linden/indra/newview/llviewerkeyboard.cpp b/linden/indra/newview/llviewerkeyboard.cpp index 0d927ae..c732ae5 100644 --- a/linden/indra/newview/llviewerkeyboard.cpp +++ b/linden/indra/newview/llviewerkeyboard.cpp @@ -738,7 +738,7 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c S32 LLViewerKeyboard::loadBindings(const char *filename) { - FILE *fp; + LLFILE *fp; const S32 BUFFER_SIZE = 2048; char buffer[BUFFER_SIZE]; /* Flawfinder: ignore */ // *NOTE: This buffer size is hard coded into scanf() below. diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 2459133..00226dd 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -401,8 +401,8 @@ void handle_duplicate_in_place(void*); void handle_repeat_duplicate(void*); void handle_export(void*); -void handle_deed_object_to_group(void*); -BOOL enable_deed_object_to_group(void*); +// void handle_deed_object_to_group(void*); +// BOOL enable_deed_object_to_group(void*); void handle_object_owner_self(void*); void handle_object_owner_permissive(void*); void handle_object_lock(void*); @@ -515,7 +515,7 @@ public: virtual void changed(U32 mask) { - // JAMESDEBUG disabled for now - slows down client or causes crashes + // JC - Disabled for now - slows down client or causes crashes // in inventory code. // // Also, this may not be faster than just rebuilding the menu each time. @@ -700,7 +700,7 @@ void init_menus() gPopupMenuView->setBackgroundColor( color ); // If we are not in production, use a different color to make it apparent. - if (LLAppViewer::instance()->isInProductionGrid()) + if (LLViewerLogin::getInstance()->isInProductionGrid()) { color = gColors.getColor( "MenuBarBgColor" ); } @@ -722,7 +722,7 @@ void init_menus() gViewerWindow->getRootView()->addChild(gMenuHolder); gViewerWindow->setMenuBackgroundColor(false, - LLAppViewer::instance()->isInProductionGrid()); + LLViewerLogin::getInstance()->isInProductionGrid()); // *TODO:Get the cost info from the server const LLString upload_cost("10"); @@ -739,7 +739,7 @@ void init_menus() // TomY TODO convert these two LLMenuGL*menu; - // JAMESDEBUG - Maybe we don't want a global landmark menu + // JC - Maybe we don't want a global landmark menu /* menu = new LLMenuGL(LANDMARK_MENU_NAME); // Defer init_landmark_menu() until inventory observer reports that we actually @@ -969,7 +969,7 @@ void init_client_menu(LLMenuGL* menu) #ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid()) + if (!LLViewerLogin::getInstance()->isInProductionGrid()) { menu->append(new LLMenuItemCheckGL("Hacked Godmode", &handle_toggle_hacked_godmode, @@ -1064,7 +1064,7 @@ void init_client_menu(LLMenuGL* menu) menu->appendSeparator(); - menu->append(new LLMenuItemCallGL("Compress Image...", + menu->append(new LLMenuItemCallGL("Compress Images...", &handle_compress_image, NULL, NULL)); menu->append(new LLMenuItemCheckGL("Limit Select Distance", @@ -1096,7 +1096,9 @@ void init_client_menu(LLMenuGL* menu) { LLMenuGL* sub = NULL; sub = new LLMenuGL("Debugging"); +#if LL_WINDOWS sub->append(new LLMenuItemCallGL("Force Breakpoint", &force_error_breakpoint, NULL, NULL, 'B', MASK_CONTROL | MASK_ALT)); +#endif sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror)); sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access)); sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop)); @@ -1189,7 +1191,7 @@ void init_debug_ui_menu(LLMenuGL* menu) menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL)); menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); - menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); + menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", menu_toggle_control, NULL, menu_check_control, (void*)"DoubleClickAutoPilot")); @@ -1429,6 +1431,12 @@ void init_debug_rendering_menu(LLMenuGL* menu) item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT); item->setEnabled(gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")); menu->append(item); + + item = new LLMenuItemCheckGL("Debug GL", menu_toggle_control, NULL, menu_check_control, (void*)"RenderDebugGL"); + menu->append(item); + + item = new LLMenuItemCheckGL("Debug Pipeline", menu_toggle_control, NULL, menu_check_control, (void*)"RenderDebugPipeline"); + menu->append(item); item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha"); menu->append(item); @@ -1490,6 +1498,7 @@ void init_debug_avatar_menu(LLMenuGL* menu) menu->appendMenu(sub_menu); + menu->append(new LLMenuItemCheckGL("Enable Lip Sync (Beta)", menu_toggle_control, NULL, menu_check_control, (void*)"LipSyncEnabled")); menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun)); menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL)); menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL)); @@ -1501,7 +1510,8 @@ void init_debug_avatar_menu(LLMenuGL* menu) menu->append(new LLMenuItemToggleGL("Disable LOD", &LLViewerJoint::sDisableLOD)); menu->append(new LLMenuItemToggleGL("Debug Character Vis", &LLVOAvatar::sDebugInvisible)); //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); - menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); + //diabling collision plane due to DEV-14477 -brad + //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes)); menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget)); menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation)); @@ -2753,7 +2763,7 @@ void set_god_level(U8 god_level) if(gViewerWindow) { gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT, - LLAppViewer::instance()->isInProductionGrid()); + LLViewerLogin::getInstance()->isInProductionGrid()); } LLString::format_map_t args; @@ -3163,6 +3173,21 @@ class LLWorldFly : public view_listener_t } }; +class LLWorldEnableFly : public view_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + BOOL sitting = FALSE; + if (gAgent.getAvatarObject()) + { + sitting = gAgent.getAvatarObject()->mIsSitting; + } + gMenuHolder->findControl(userdata["control"].asString())->setValue(!sitting); + return true; + } +}; + + void handle_agent_stop_moving(void*) { // stop agent @@ -3476,6 +3501,7 @@ void handle_repeat_duplicate(void*) LLSelectMgr::getInstance()->repeatDuplicate(); } +/* dead code 30-apr-2008 void handle_deed_object_to_group(void*) { LLUUID group_id; @@ -3501,6 +3527,8 @@ BOOL enable_deed_object_to_group(void*) return FALSE; } +*/ + /* * No longer able to support viewer side manipulations in this way @@ -4072,7 +4100,7 @@ BOOL enable_take() return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && gAgent.isGodlike()) { return TRUE; @@ -4629,7 +4657,7 @@ class LLObjectEnableDelete : public view_listener_t TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - (!LLAppViewer::instance()->isInProductionGrid() + (!LLViewerLogin::getInstance()->isInProductionGrid() && gAgent.isGodlike()) || # endif LLSelectMgr::getInstance()->canDoDelete(); @@ -6487,7 +6515,7 @@ class LLToolsEnableTakeCopy : public view_listener_t all_valid = true; #ifndef HACKED_GODLIKE_VIEWER # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (LLAppViewer::instance()->isInProductionGrid() + if (LLViewerLogin::getInstance()->isInProductionGrid() || !gAgent.isGodlike()) # endif { @@ -6591,7 +6619,7 @@ BOOL enable_save_into_inventory(void*) return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && gAgent.isGodlike()) { return TRUE; @@ -7766,6 +7794,7 @@ void initialize_menus() addMenu(new LLWorldChat(), "World.Chat"); addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); addMenu(new LLWorldFly(), "World.Fly"); + addMenu(new LLWorldEnableFly(), "World.EnableFly"); addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation"); addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp index ab77b53..b8a4f65 100644 --- a/linden/indra/newview/llviewermenufile.cpp +++ b/linden/indra/newview/llviewermenufile.cpp @@ -414,18 +414,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t } }; -class LLFileSetWindowSize : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - LLString size = userdata.asString(); - S32 width, height; - sscanf(size.c_str(), "%d,%d", &width, &height); - LLViewerWindow::movieSize(width, height); - return true; - } -}; - class LLFileQuit : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -448,25 +436,31 @@ void handle_upload(void* data) void handle_compress_image(void*) { LLFilePicker& picker = LLFilePicker::instance(); - if (picker.getOpenFile(LLFilePicker::FFLOAD_IMAGE)) + if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE)) { - std::string infile(picker.getFirstFile()); - std::string outfile = infile + ".j2c"; + const char* input_file = picker.getFirstFile(); + while (input_file) + { + std::string infile(input_file); + std::string outfile = infile + ".j2c"; - llinfos << "Input: " << infile << llendl; - llinfos << "Output: " << outfile << llendl; + llinfos << "Input: " << infile << llendl; + llinfos << "Output: " << outfile << llendl; - BOOL success; + BOOL success; - success = LLViewerImageList::createUploadFile(infile, outfile, IMG_CODEC_TGA); + success = LLViewerImageList::createUploadFile(infile, outfile, IMG_CODEC_TGA); - if (success) - { - llinfos << "Compression complete" << llendl; - } - else - { - llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl; + if (success) + { + llinfos << "Compression complete" << llendl; + } + else + { + llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl; + } + + input_file = picker.getNextFile(); } } } @@ -603,7 +597,7 @@ void upload_new_resource(const LLString& src_filename, std::string name, { // This is a generic .lin resource file asset_type = LLAssetType::AT_OBJECT; - FILE* in = LLFile::fopen(src_filename.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* in = LLFile::fopen(src_filename.c_str(), "rb"); /* Flawfinder: ignore */ if (in) { // read in the file header @@ -688,7 +682,7 @@ void upload_new_resource(const LLString& src_filename, std::string name, } // copy the file's data segment into another file for uploading - FILE* out = LLFile::fopen(filename.c_str(), "wb"); /* Flawfinder: ignore */ + LLFILE* out = LLFile::fopen(filename.c_str(), "wb"); /* Flawfinder: ignore */ if (out) { while((read = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */ @@ -1024,7 +1018,6 @@ void init_menu_file() (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); - (new LLFileSetWindowSize())->registerListener(gMenuHolder, "File.SetWindowSize"); (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index a9adbcd..7cc833a 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -202,7 +202,7 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_ { if(0 == amount) return; amount = abs(amount); - llinfos << "give_money(" << uuid << "," << amount << ")"<< llendl; + LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL; if(can_afford_transaction(amount)) { // gStatusBar->debitBalance(amount); @@ -242,7 +242,7 @@ void send_complete_agent_movement(const LLHost& sim_host) void process_logout_reply(LLMessageSystem* msg, void**) { // The server has told us it's ok to quit. - llinfos << "process_logout_reply" << llendl; + LL_DEBUGS("Messaging") << "process_logout_reply" << LL_ENDL; LLUUID agent_id; msg->getUUID("AgentData", "AgentID", agent_id); @@ -250,7 +250,7 @@ void process_logout_reply(LLMessageSystem* msg, void**) msg->getUUID("AgentData", "SessionID", session_id); if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID())) { - llwarns << "Bogus Logout Reply" << llendl; + LL_WARNS("Messaging") << "Bogus Logout Reply" << LL_ENDL; } LLInventoryModel::update_map_t parents; @@ -268,7 +268,7 @@ void process_logout_reply(LLMessageSystem* msg, void**) // We do not need to track the asset ids, just account for an // updated inventory version. - llinfos << "process_logout_reply itemID=" << item_id << llendl; + LL_INFOS("Messaging") << "process_logout_reply itemID=" << item_id << LL_ENDL; LLInventoryItem* item = gInventory.getItem( item_id ); if( item ) { @@ -277,7 +277,7 @@ void process_logout_reply(LLMessageSystem* msg, void**) } else { - llinfos << "process_logout_reply item not found: " << item_id << llendl; + LL_INFOS("Messaging") << "process_logout_reply item not found: " << item_id << LL_ENDL; } } LLAppViewer::instance()->forceQuit(); @@ -300,15 +300,15 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data) size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data); if (0 == size) { - llwarns << "Layer data has zero size." << llendl; + LL_WARNS("Messaging") << "Layer data has zero size." << LL_ENDL; return; } if (size < 0) { // getSizeFast() is probably trying to tell us about an error - llwarns << "getSizeFast() returned negative result: " + LL_WARNS("Messaging") << "getSizeFast() returned negative result: " << size - << llendl; + << LL_ENDL; return; } U8 *datap = new U8[size]; @@ -345,7 +345,7 @@ void export_complete() gExporterRequestID.setNull(); gExportDirectory = ""; - FILE* fXML = LLFile::fopen(gExportedFile.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* fXML = LLFile::fopen(gExportedFile.c_str(), "rb"); /* Flawfinder: ignore */ fseek(fXML, 0, SEEK_END); long length = ftell(fXML); fseek(fXML, 0, SEEK_SET); @@ -353,7 +353,7 @@ void export_complete() size_t nread = fread(buffer, 1, length, fXML); if (nread < (size_t) length) { - llwarns << "Short read" << llendl; + LL_WARNS("Messaging") << "Short read" << LL_ENDL; } buffer[nread] = '\0'; fclose(fXML); @@ -375,12 +375,12 @@ void export_complete() LLUUID image_uuid(image_uuid_str); - llinfos << "Found UUID: " << image_uuid << llendl; + LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL; std::map::iterator itor = gImageChecksums.find(image_uuid); if (itor != gImageChecksums.end()) { - llinfos << "Replacing with checksum: " << itor->second << llendl; + LL_INFOS("Messaging") << "Replacing with checksum: " << itor->second << LL_ENDL; if (itor->second.c_str() != NULL) { memcpy(&pos_check[10], itor->second.c_str(), 32); /* Flawfinder: ignore */ @@ -390,10 +390,10 @@ void export_complete() } } - FILE* fXMLOut = LLFile::fopen(gExportedFile.c_str(), "wb"); /* Flawfinder: ignore */ + LLFILE* fXMLOut = LLFile::fopen(gExportedFile.c_str(), "wb"); /* Flawfinder: ignore */ if (fwrite(buffer, 1, length, fXMLOut) != length) { - llwarns << "Short write" << llendl; + LL_WARNS("Messaging") << "Short write" << LL_ENDL; } fclose(fXMLOut); @@ -407,14 +407,14 @@ void exported_item_complete(const LLTSCode status, void *user_data) if (status < LLTS_OK) { - llinfos << "Export failed!" << llendl; + LL_WARNS("Messaging") << "Export failed!" << LL_ENDL; } else { ++current_object_count; if (current_image_count == exported_image_count && current_object_count == exported_object_count) { - llinfos << "*** Export complete ***" << llendl; + LL_INFOS("Messaging") << "*** Export complete ***" << LL_ENDL; export_complete(); } @@ -442,11 +442,11 @@ void exported_j2c_complete(const LLTSCode status, void *user_data) if (status < LLTS_OK) { - llinfos << "Image download failed!" << llendl; + LL_WARNS("Messaging") << "Image download failed!" << LL_ENDL; } else { - FILE* fIn = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ + LLFILE* fIn = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ if (fIn) { LLPointer ImageUtility = new LLImageJ2C; @@ -458,7 +458,7 @@ void exported_j2c_complete(const LLTSCode status, void *user_data) U8 *buffer = ImageUtility->allocateData(length); if (fread(buffer, 1, length, fIn) != length) { - llwarns << "Short read" << llendl; + LL_WARNS("Messaging") << "Short read" << LL_ENDL; } fclose(fIn); LLFile::remove(filename.c_str()); @@ -481,14 +481,14 @@ void exported_j2c_complete(const LLTSCode status, void *user_data) delete [] file_path; //S32 name_len = output_file.length(); //strcpy(&output_file[name_len-3], "tga"); - FILE* fOut = LLFile::fopen(output_file.c_str(), "wb"); /* Flawfinder: ignore */ + LLFILE* fOut = LLFile::fopen(output_file.c_str(), "wb"); /* Flawfinder: ignore */ char md5_hash_string[33]; /* Flawfinder: ignore */ strcpy(md5_hash_string, "00000000000000000000000000000000"); /* Flawfinder: ignore */ if (fOut) { if (fwrite(data, 1, data_size, fOut) != data_size) { - llwarns << "Short write" << llendl; + LL_WARNS("Messaging") << "Short write" << LL_ENDL; } fseek(fOut, 0, SEEK_SET); fclose(fOut); @@ -504,7 +504,7 @@ void exported_j2c_complete(const LLTSCode status, void *user_data) ++current_image_count; if (current_image_count == exported_image_count && current_object_count == exported_object_count) { - llinfos << "*** Export textures complete ***" << llendl; + LL_INFOS("Messaging") << "*** Export textures complete ***" << LL_ENDL; export_complete(); } else @@ -533,7 +533,7 @@ void process_places_reply(LLMessageSystem* msg, void** data) } else { - llwarns << "Got invalid PlacesReply message" << llendl; + LL_WARNS("Messaging") << "Got invalid PlacesReply message" << LL_ENDL; } } @@ -705,7 +705,7 @@ public: virtual ~LLDiscardAgentOffer() {} virtual void done() { - lldebugs << "LLDiscardAgentOffer::done()" << llendl; + LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL; LLUUID trash_id; trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); bool notify = false; @@ -729,9 +729,9 @@ public: } else { - llwarns << "DiscardAgentOffer unable to find: " + LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: " << (trash_id.isNull() ? "trash " : "") - << (mObjectID.isNull() ? "object" : "") << llendl; + << (mObjectID.isNull() ? "object" : "") << LL_ENDL; } gInventory.removeObserver(this); if(notify) @@ -766,14 +766,14 @@ bool check_offer_throttle(const std::string& from_name, bool check_only) if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME)) { - //llinfos << "Throttle Expired" << llendl; + LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL; throttle_count=1; throttle_logged=false; return true; } else //has not expired { - //llinfos << "Throttle Not Expired, Count: " << throttle_count << llendl; + LL_DEBUGS("Messaging") << "Throttle Not Expired, Count: " << throttle_count << LL_ENDL; // When downloading the initial inventory we get a lot of new items // coming in and can't tell that from spam. JC if (LLStartUp::getStartupState() >= STATE_STARTED @@ -821,7 +821,7 @@ void open_offer(const std::vector& items, const std::string& from_name) item = gInventory.getItem(*it); if(!item) { - llwarns << "Unable to show inventory item: " << *it << llendl; + LL_WARNS("Messaging") << "Unable to show inventory item: " << *it << LL_ENDL; continue; } if(gInventory.isObjectDescendentOf(*it, trash_id)) @@ -880,7 +880,7 @@ void open_offer(const std::vector& items, const std::string& from_name) //don't dick with highlight while the user is working //if(inventory_has_focus && !user_is_away) // break; - //llinfos << "Highlighting" << item->getUUID() << llendl; + LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID() << LL_ENDL; //highlight item LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus(); @@ -1041,8 +1041,8 @@ void inventory_offer_callback(S32 button, void* user_data) } // we will want to open this item when it comes back. - lldebugs << "Initializing an opener for tid: " << info->mTransactionID - << llendl; + LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << info->mTransactionID + << LL_ENDL; switch (info->mIM) { case IM_INVENTORY_OFFERED: @@ -1075,7 +1075,7 @@ void inventory_offer_callback(S32 button, void* user_data) } break; default: - llwarns << "inventory_offer_callback: unknown offer type" << llendl; + LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL; break; } // end switch (info->mIM) break; @@ -1187,11 +1187,11 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task) } else { - llwarns << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << llendl; + LL_WARNS("Messaging") << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << LL_ENDL; args["[OBJECTTYPE]"] = ""; // This seems safest, rather than propagating bogosity - llwarns << "Forcing an inventory-decline for probably-bad asset type." << llendl; + LL_WARNS("Messaging") << "Forcing an inventory-decline for probably-bad asset type." << LL_ENDL; inventory_offer_callback(IOR_DECLINE, info); return; } @@ -1278,10 +1278,6 @@ void lure_callback(S32 option, void* user_data) case 0: { // accept - send_simple_im(info->mFromID, - "", - IM_LURE_ACCEPTED, - info->mLureID); gAgent.teleportViaLure(info->mLureID, info->mGodlike); } break; @@ -1426,9 +1422,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // now store incoming IM in chat history - snprintf(buffer, sizeof(buffer), "%s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */ + snprintf(buffer, sizeof(buffer), "%s%s", separator_string, (message+message_offset)); /* Flawfinder: ignore */ - llinfos << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << llendl; + LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; // add to IM panel, but do not bother the user gIMMgr->addMessage( @@ -1440,7 +1436,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) dialog, parent_estate_id, region_id, - position); + position, + true); // pretend this is chat generated by self, so it does not show up on screen snprintf(buffer, sizeof(buffer), "IM: %s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */ @@ -1481,9 +1478,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) snprintf(saved, MAX_STRING, "(Saved %s) ", /* Flawfinder: ignore */ formatted_time(timestamp, time_buf)); } - snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved,(message+message_offset)); /* Flawfinder: ignore */ + snprintf(buffer, sizeof(buffer), "%s%s%s", separator_string, saved,(message+message_offset)); /* Flawfinder: ignore */ - llinfos << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << llendl; + LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; if (!is_muted || is_linden) { @@ -1496,7 +1493,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) dialog, parent_estate_id, region_id, - position); + position, + true); snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ chat.mText = buffer; @@ -1540,7 +1538,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) case IM_GROUP_NOTICE: case IM_GROUP_NOTICE_REQUESTED: { - llinfos << "Received IM_GROUP_NOTICE message." << llendl; + LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL; // Read the binary bucket for more information. struct notice_bucket_header_t { @@ -1559,7 +1557,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8)))) || (binary_bucket[binary_bucket_size - 1] != '\0') ) { - llwarns << "Malformed group notice binary bucket" << llendl; + LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL; break; } @@ -1625,7 +1623,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } else { - llinfos << "Received IM_GROUP_INVITATION message." << llendl; + LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL; // Read the binary bucket for more information. struct invite_bucket_t { @@ -1636,7 +1634,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // Make sure the binary bucket is the correct size. if (binary_bucket_size != sizeof(invite_bucket_t)) { - llwarns << "Malformed group invite binary bucket" << llendl; + LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL; break; } @@ -1675,7 +1673,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) if (sizeof(offer_agent_bucket_t) != binary_bucket_size) { - llwarns << "Malformed inventory offer from agent" << llendl; + LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL; break; } bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; @@ -1686,7 +1684,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) { if (sizeof(S8) != binary_bucket_size) { - llwarns << "Malformed inventory offer from object" << llendl; + LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL; break; } info->mType = (LLAssetType::EType) binary_bucket[0]; @@ -1747,7 +1745,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) case IM_GROUP_ELECTION_DEPRECATED: { - llwarns << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << llendl; + LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL; } break; @@ -1776,7 +1774,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) "(Saved %s) ", formatted_time(timestamp, time_buf)); } - snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ + snprintf(buffer, sizeof(buffer), "%s%s%s", separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ BOOL is_this_agent = FALSE; if(from_id == gAgentID) { @@ -1791,7 +1789,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) IM_SESSION_INVITE, parent_estate_id, region_id, - position); + position, + true); snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ chat.mText = buffer; @@ -1826,7 +1825,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) case IM_BUSY_AUTO_RESPONSE: if (is_muted) { - lldebugs << "Ignoring busy response from " << from_id << llendl; + LL_DEBUGS("Messaging") << "Ignoring busy response from " << from_id << LL_ENDL; return; } else @@ -1874,16 +1873,16 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // URLs sent by scripts (i.e. llLoadURL) if (binary_bucket_size <= 0) { - llwarns << "bad binary_bucket_size: " + LL_WARNS("Messaging") << "bad binary_bucket_size: " << binary_bucket_size - << " - aborting function." << llendl; + << " - aborting function." << LL_ENDL; return; } char* url = new char[binary_bucket_size]; if (url == NULL) { - llerrs << "Memory Allocation failed" << llendl; + LL_ERRS("Messaging") << "Memory Allocation failed" << LL_ENDL; return; } @@ -1944,8 +1943,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) break; default: - llwarns << "Instant message calling for unknown dialog " - << (S32)dialog << llendl; + LL_WARNS("Messaging") << "Instant message calling for unknown dialog " + << (S32)dialog << LL_ENDL; break; } @@ -1960,6 +1959,8 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id) { if (gAgent.getBusy()) { + std::string my_name; + gAgent.buildFullname(my_name); LLString response = gSavedPerAccountSettings.getText("BusyModeResponse"); pack_instant_message( gMessageSystem, @@ -1967,10 +1968,10 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id) FALSE, gAgent.getSessionID(), from_id, - SYSTEM_FROM, + my_name.c_str(), response.c_str(), IM_ONLINE, - IM_CONSOLE_AND_CHAT_HISTORY); + IM_BUSY_AUTO_RESPONSE); gAgent.sendReliableMessage(); } } @@ -2071,7 +2072,7 @@ void callingcard_offer_callback(S32 option, void* user_data) void process_offer_callingcard(LLMessageSystem* msg, void**) { // someone has offered to form a friendship - lldebugs << "callingcard offer" << llendl; + LL_DEBUGS("Messaging") << "callingcard offer" << LL_ENDL; LLUUID source_id; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id); @@ -2116,7 +2117,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**) } else { - llwarns << "Calling card offer from an unknown source." << llendl; + LL_WARNS("Messaging") << "Calling card offer from an unknown source." << LL_ENDL; } delete offerdata; // !=NULL if we didn't give ownership away @@ -2309,10 +2310,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) break; case CHAT_TYPE_START: case CHAT_TYPE_STOP: - llwarns << "Got chat type start/stop in main chat processing." << llendl; + LL_WARNS("Messaging") << "Got chat type start/stop in main chat processing." << LL_ENDL; break; default: - llwarns << "Unknown type " << chat.mChatType << " in chat!" << llendl; + LL_WARNS("Messaging") << "Unknown type " << chat.mChatType << " in chat!" << LL_ENDL; verb = " say, "; break; } @@ -2405,7 +2406,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**) if((gAgent.getID() != agent_id) || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE)) { - llwarns << "Unexpected teleport progress message." << llendl; + LL_WARNS("Messaging") << "Unexpected teleport progress message." << LL_ENDL; return; } U32 teleport_flags = 0x0; @@ -2420,7 +2421,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**) } char buffer[MAX_STRING]; /* Flawfinder: ignore */ msg->getString("Info", "Message", MAX_STRING, buffer); - lldebugs << "teleport progress: " << buffer << llendl; + LL_DEBUGS("Messaging") << "teleport progress: " << buffer << LL_ENDL; //Sorta hacky...default to using simulator raw messages //if we don't find the coresponding mapping in our progress mappings @@ -2544,12 +2545,12 @@ BOOL LLPostTeleportNotifiers::tick() // We're going to pretend to be a new agent void process_teleport_finish(LLMessageSystem* msg, void**) { - //llinfos << "Got teleport location message" << llendl; + LL_DEBUGS("Messaging") << "Got teleport location message" << LL_ENDL; LLUUID agent_id; msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id); if (agent_id != gAgent.getID()) { - llwarns << "Got teleport notification for wrong agent!" << llendl; + LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL; return; } @@ -2617,8 +2618,8 @@ void process_teleport_finish(LLMessageSystem* msg, void**) */ // now, use the circuit info to tell simulator about us! - llinfos << "process_teleport_finish() Enabling " - << sim_host << " with code " << msg->mOurCircuitCode << llendl; + LL_INFOS("Messaging") << "process_teleport_finish() Enabling " + << sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL; msg->newMessageFast(_PREHASH_UseCircuitCode); msg->nextBlockFast(_PREHASH_CircuitCode); msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode()); @@ -2679,12 +2680,12 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id); if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id)) { - llwarns << "Incorrect id in process_agent_movement_complete()" - << llendl; + LL_WARNS("Messaging") << "Incorrect id in process_agent_movement_complete()" + << LL_ENDL; return; } - llinfos << "process_agent_movement_complete()" << llendl; + LL_DEBUGS("Messaging") << "process_agent_movement_complete()" << LL_ENDL; // *TODO: check timestamp to make sure the movement compleation // makes sense. @@ -2703,7 +2704,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) { // Could happen if you were immediately god-teleported away on login, // maybe other cases. Continue, but warn. JC - llwarns << "agent_movement_complete() with NULL avatarp." << llendl; + LL_WARNS("Messaging") << "agent_movement_complete() with NULL avatarp." << LL_ENDL; } F32 x, y; @@ -2713,19 +2714,19 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) { if (gAgent.getRegion()) { - llwarns << "current region " << gAgent.getRegion()->getOriginGlobal() << llendl; + LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL; } - llwarns << "Agent being sent to invalid home region: " + LL_WARNS("Messaging") << "Agent being sent to invalid home region: " << x << ":" << y << " current pos " << gAgent.getPositionGlobal() - << llendl; + << LL_ENDL; LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region."); return; } - llinfos << "Changing home region to " << x << ":" << y << llendl; + LL_INFOS("Messaging") << "Changing home region to " << x << ":" << y << LL_ENDL; // set our upstream host the new simulator and shuffle things as // appropriate. @@ -2845,11 +2846,11 @@ void process_crossed_region(LLMessageSystem* msg, void**) msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id); if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id)) { - llwarns << "Incorrect id in process_crossed_region()" - << llendl; + LL_WARNS("Messaging") << "Incorrect id in process_crossed_region()" + << LL_ENDL; return; } - llinfos << "process_crossed_region()" << llendl; + LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL; U32 sim_ip; msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip); @@ -2977,24 +2978,24 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) /* if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) { - //llinfos << "head rot " << head_rotation << llendl; - llinfos << "head_rot_chg = " << head_rot_chg << llendl; + //LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL; + LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL; } if (cam_rot_chg.magVec() > ROTATION_THRESHOLD) { - llinfos << "cam rot " << cam_rot_chg.magVec() << llendl; + LL_INFOS("Messaging") << "cam rot " << cam_rot_chg.magVec() << LL_ENDL; } if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD) { - llinfos << "cam center " << cam_center_chg.magVec() << llendl; + LL_INFOS("Messaging") << "cam center " << cam_center_chg.magVec() << LL_ENDL; } // if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD) // { -// llinfos << "drag delta " << drag_delta_chg.magVec() << llendl; +// LL_INFOS("Messaging") << "drag delta " << drag_delta_chg.magVec() << LL_ENDL; // } if (control_flag_change) { - llinfos << "dcf = " << control_flag_change << llendl; + LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL; } */ @@ -3043,7 +3044,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) // if (camera_pos_agent.mV[VY] > 255.f) // { -// llinfos << "Sending camera center " << camera_pos_agent << llendl; +// LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL; // } msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent); @@ -3058,12 +3059,12 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) { if (control_flags & AGENT_CONTROL_LBUTTON_DOWN) { - llinfos << "AgentUpdate left button down" << llendl; + LL_INFOS("Messaging") << "AgentUpdate left button down" << LL_ENDL; } if (control_flags & AGENT_CONTROL_LBUTTON_UP) { - llinfos << "AgentUpdate left button up" << llendl; + LL_INFOS("Messaging") << "AgentUpdate left button up" << LL_ENDL; } } @@ -3078,7 +3079,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) gAgent.sendReliableMessage(); } - //llinfos << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << llendl; +// LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL; // Copy the old data last_head_rot = head_rotation; @@ -3191,13 +3192,13 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) gMessageSystem->getSenderPort()); if (id == LLUUID::null) { - //llinfos << "Unknown kill for local " << local_id << llendl; + LL_DEBUGS("Messaging") << "Unknown kill for local " << local_id << LL_ENDL; gObjectList.mNumUnknownKills++; continue; } else { - //llinfos << "Kill message for local " << local_id << llendl; + LL_DEBUGS("Messaging") << "Kill message for local " << local_id << LL_ENDL; } LLSelectMgr::getInstance()->removeObjectFromSelections(id); @@ -3227,7 +3228,7 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) } else { - llwarns << "Object in UUID lookup, but not on object list in kill!" << llendl; + LL_WARNS("Messaging") << "Object in UUID lookup, but not on object list in kill!" << LL_ENDL; gObjectList.mNumUnknownKills++; } } @@ -3256,8 +3257,8 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data) LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec); - //lldebugs << "time_synch() - " << sun_direction << ", " << sun_ang_velocity - // << ", " << phase << llendl; + //LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity + // << ", " << phase << LL_ENDL; gSky.setSunPhase(phase); gSky.setSunTargetDirection(sun_direction, sun_ang_velocity); @@ -3509,7 +3510,8 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data) LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value); break; default: -// llwarns << "Unknown stat id" << stat_id << llendl; + // Used to be a commented out warning. + LL_DEBUGS("Messaging") << "Unknown stat id" << stat_id << LL_ENDL; break; } } @@ -3576,7 +3578,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data) if (!avatarp) { // no agent by this ID...error? - llwarns << "Received animation state for unknown avatar" << uuid << llendl; + LL_WARNS("Messaging") << "Received animation state for unknown avatar" << uuid << LL_ENDL; return; } @@ -3594,7 +3596,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data) mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i); mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i); - //llinfos << "Anim sequence ID: " << anim_sequence_id << llendl; + LL_DEBUGS("Messaging") << "Anim sequence ID: " << anim_sequence_id << LL_ENDL; avatarp->mSignaledAnimations[animation_id] = anim_sequence_id; @@ -3654,7 +3656,7 @@ void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data) } else { - llwarns << "avatar_appearance sent for unknown avatar " << uuid << llendl; + LL_WARNS("Messaging") << "avatar_appearance sent for unknown avatar " << uuid << LL_ENDL; } } @@ -3720,7 +3722,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data) } else { - llwarns << "Received sit approval for unknown object " << sitObjectID << llendl; + LL_WARNS("Messaging") << "Received sit approval for unknown object " << sitObjectID << LL_ENDL; } } @@ -3870,13 +3872,13 @@ void process_name_value(LLMessageSystem *mesgsys, void **user_data) for (i = 0; i < num_blocks; i++) { mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i); - llinfos << "Added to object Name Value: " << temp_str << llendl; + LL_INFOS("Messaging") << "Added to object Name Value: " << temp_str << LL_ENDL; object->addNVPair(temp_str); } } else { - llinfos << "Can't find object " << id << " to add name value pair" << llendl; + LL_INFOS("Messaging") << "Can't find object " << id << " to add name value pair" << LL_ENDL; } } @@ -3896,13 +3898,13 @@ void process_remove_name_value(LLMessageSystem *mesgsys, void **user_data) for (i = 0; i < num_blocks; i++) { mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i); - llinfos << "Removed from object Name Value: " << temp_str << llendl; + LL_INFOS("Messaging") << "Removed from object Name Value: " << temp_str << LL_ENDL; object->removeNVPair(temp_str); } } else { - llinfos << "Can't find object " << id << " to remove name value pair" << llendl; + LL_INFOS("Messaging") << "Can't find object " << id << " to remove name value pair" << LL_ENDL; } } @@ -3982,8 +3984,8 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) msg->getS32("MoneyData", "SquareMetersCredit", credit); msg->getS32("MoneyData", "SquareMetersCommitted", committed); msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, STD_STRING_BUF_SIZE, desc); - llinfos << "L$, credit, committed: " << balance << " " << credit << " " - << committed << llendl; + LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " " + << committed << LL_ENDL; if (gStatusBar) { @@ -4027,10 +4029,10 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) const S32 POP_FRONT_SIZE = 12; if(recent.size() > MAX_LOOKBACK) { - lldebugs << "Removing oldest transaction records" << llendl; + LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL; recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE); } - //lldebugs << "Pushing back transaction " << tid << llendl; + //LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL; recent.push_back(tid); } } @@ -4475,9 +4477,9 @@ void process_script_question(LLMessageSystem *msg, void **user_data) switch (question_throttle.noteAction(throttle_owner_name)) { case LLStringThrottle::THROTTLE_NEWLY_BLOCKED: - llinfos << "process_script_question throttled" + LL_INFOS("Messaging") << "process_script_question throttled" << " owner_name:" << owner_name - << llendl; + << LL_ENDL; // Fall through case LLStringThrottle::THROTTLE_BLOCKED: @@ -4539,7 +4541,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data) void process_derez_container(LLMessageSystem *msg, void**) { - llwarns << "call to deprecated process_derez_container" << llendl; + LL_WARNS("Messaging") << "call to deprecated process_derez_container" << LL_ENDL; } void container_inventory_arrived(LLViewerObject* object, @@ -4547,7 +4549,7 @@ void container_inventory_arrived(LLViewerObject* object, S32 serial_num, void* data) { - llinfos << "container_inventory_arrived()" << llendl; + LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL; if( gAgent.cameraMouselook() ) { gAgent.changeCameraToDefault(); @@ -4693,7 +4695,7 @@ void process_teleport_local(LLMessageSystem *msg,void**) msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id); if (agent_id != gAgent.getID()) { - llwarns << "Got teleport notification for wrong agent!" << llendl; + LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL; return; } @@ -4923,8 +4925,8 @@ void process_user_info_reply(LLMessageSystem* msg, void**) msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); if(agent_id != gAgent.getID()) { - llwarns << "process_user_info_reply - " - << "wrong agent id." << llendl; + LL_WARNS("Messaging") << "process_user_info_reply - " + << "wrong agent id." << LL_ENDL; } BOOL im_via_email; @@ -5132,7 +5134,7 @@ void process_load_url(LLMessageSystem* msg, void**) if (LLMuteList::getInstance()->isMuted(infop->mObjectID, infop->mObjectName) || LLMuteList::getInstance()->isMuted(infop->mOwnerID)) { - llinfos<<"Ignoring load_url from muted object/owner."<getUUID("AgentData", "AgentID", agent_id); if (agent_id != gAgent.getID()) { - llwarns << "Initiate download for wrong agent" << llendl; + LL_WARNS("Messaging") << "Initiate download for wrong agent" << LL_ENDL; return; } @@ -5192,10 +5194,12 @@ void process_script_teleport_request(LLMessageSystem* msg, void**) msg->getVector3("Data", "SimPosition", pos); msg->getVector3("Data", "LookAt", look_at); - // gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]); - // LLFloaterWorldMap::show(NULL, TRUE); + gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]); + LLFloaterWorldMap::show(NULL, TRUE); - LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE); + // remove above two lines and replace with below line + // to re-enable parcel browser for llMapDestination() + // LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE); } @@ -5287,7 +5291,7 @@ void onCovenantLoadComplete(LLVFS *vfs, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status) { - llinfos << "onCovenantLoadComplete()" << llendl; + LL_DEBUGS("Messaging") << "onCovenantLoadComplete()" << LL_ENDL; std::string covenant_text; if(0 == status) { @@ -5298,7 +5302,7 @@ void onCovenantLoadComplete(LLVFS *vfs, char* buffer = new char[file_length+1]; if (buffer == NULL) { - llerrs << "Memory Allocation failed" << llendl; + LL_ERRS("Messaging") << "Memory Allocation failed" << LL_ENDL; return; } @@ -5315,7 +5319,7 @@ void onCovenantLoadComplete(LLVFS *vfs, file_length+1); if( !editor->importBuffer( buffer ) ) { - llwarns << "Problem importing estate covenant." << llendl; + LL_WARNS("Messaging") << "Problem importing estate covenant." << LL_ENDL; covenant_text = "Problem importing estate covenant."; } else @@ -5328,7 +5332,7 @@ void onCovenantLoadComplete(LLVFS *vfs, } else { - llwarns << "Problem importing estate covenant: Covenant file format error." << llendl; + LL_WARNS("Messaging") << "Problem importing estate covenant: Covenant file format error." << LL_ENDL; covenant_text = "Problem importing estate covenant: Covenant file format error."; } } @@ -5350,7 +5354,7 @@ void onCovenantLoadComplete(LLVFS *vfs, covenant_text = "Unable to load estate covenant at this time."; } - llwarns << "Problem loading notecard: " << status << llendl; + LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL; } LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid); LLPanelLandCovenant::updateCovenantText(covenant_text); @@ -5368,7 +5372,7 @@ void process_feature_disabled_message(LLMessageSystem* msg, void**) msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID); msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID); - llwarns << "Blacklisted Feature Response:" << &messageText[0] << llendl; + LL_WARNS("Messaging") << "Blacklisted Feature Response:" << &messageText[0] << LL_ENDL; } // ------------------------------------------------------------ diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp index d6e92c2..3224c00 100644 --- a/linden/indra/newview/llviewernetwork.cpp +++ b/linden/indra/newview/llviewernetwork.cpp @@ -33,8 +33,17 @@ #include "llviewerprecompiledheaders.h" #include "llviewernetwork.h" +#include "llviewercontrol.h" -LLGridData gGridInfo[GRID_INFO_COUNT] = +struct LLGridData +{ + const char* mLabel; + const char* mName; + const char* mLoginURI; + const char* mHelperURI; +}; + +static LLGridData gGridInfo[GRID_INFO_COUNT] = { { "None", "", "", ""}, { "Aditi", @@ -111,8 +120,177 @@ LLGridData gGridInfo[GRID_INFO_COUNT] = "" } }; -// Use this to figure out which domain name and login URI to use. +#if LL_RELEASE_FOR_DOWNLOAD + // Default userserver for production builds is agni + const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_AGNI; +#else + // Default userserver for development builds is none + const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_NONE; +#endif -EGridInfo gGridChoice = GRID_INFO_NONE; -LLString gGridName; /* Flawfinder: ignore */ unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ + +LLViewerLogin::LLViewerLogin() : + mGridChoice(DEFAULT_GRID_CHOICE) +{ +} + +void LLViewerLogin::setGridChoice(EGridInfo grid) +{ + if(grid < 0 || grid >= GRID_INFO_COUNT) + { + llerrs << "Invalid grid index specified." << llendl; + } + + if(mGridChoice != grid) + { + mGridChoice = grid; + if(GRID_INFO_LOCAL == mGridChoice) + { + mGridName = LOOPBACK_ADDRESS_STRING; + } + else if(GRID_INFO_OTHER == mGridChoice) + { + // *FIX:Mani - could this possibly be valid? + mGridName = "other"; + } + else + { + mGridName = gGridInfo[mGridChoice].mLabel; + } + + gSavedSettings.setS32("ServerChoice", mGridChoice); + gSavedSettings.setString("CustomServer", ""); + } +} + +void LLViewerLogin::setGridChoice(const std::string& grid_name) +{ + // Set the grid choice based on a string. + // The string can be: + // - a grid label from the gGridInfo table + // - an ip address + if(!grid_name.empty()) + { + // find the grid choice from the user setting. + int grid_index = GRID_INFO_NONE; + for(;grid_index < GRID_INFO_OTHER; ++grid_index) + { + if(0 == LLString::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name.c_str())) + { + // Founding a matching label in the list... + setGridChoice((EGridInfo)grid_index); + break; + } + } + + if(GRID_INFO_OTHER == grid_index) + { + // *FIX:MEP Can and should we validate that this is an IP address? + mGridChoice = GRID_INFO_OTHER; + mGridName = grid_name; + gSavedSettings.setS32("ServerChoice", mGridChoice); + gSavedSettings.setString("CustomServer", mGridName); + } + } +} + +void LLViewerLogin::resetURIs() +{ + // Clear URIs when picking a new server + gSavedSettings.setValue("CmdLineLoginURI", LLSD::emptyArray()); + gSavedSettings.setString("CmdLineHelperURI", ""); +} + +EGridInfo LLViewerLogin::getGridChoice() const +{ + return mGridChoice; +} + +std::string LLViewerLogin::getGridLabel() const +{ + if(mGridChoice == GRID_INFO_NONE) + { + return "None"; + } + else if(mGridChoice < GRID_INFO_OTHER) + { + return gGridInfo[mGridChoice].mLabel; + } + + return mGridName; +} + +std::string LLViewerLogin::getKnownGridLabel(EGridInfo grid_index) const +{ + if(grid_index > GRID_INFO_NONE && grid_index < GRID_INFO_OTHER) + { + return gGridInfo[grid_index].mLabel; + } + return gGridInfo[GRID_INFO_NONE].mLabel; +} + +void LLViewerLogin::getLoginURIs(std::vector& uris) const +{ + // return the login uri set on the command line. + LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI"); + if(c) + { + LLSD v = c->getValue(); + if(v.isArray()) + { + for(LLSD::array_const_iterator itr = v.beginArray(); + itr != v.endArray(); ++itr) + { + std::string uri = itr->asString(); + if(!uri.empty()) + { + uris.push_back(uri); + } + } + } + else + { + std::string uri = v.asString(); + if(!uri.empty()) + { + uris.push_back(uri); + } + } + } + + // If there was no command line uri... + if(uris.empty()) + { + // If its a known grid choice, get the uri from the table, + // else try the grid name. + if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER) + { + uris.push_back(gGridInfo[mGridChoice].mLoginURI); + } + else + { + uris.push_back(mGridName); + } + } +} + +std::string LLViewerLogin::getHelperURI() const +{ + return gSavedSettings.getString("CmdLineHelperURI"); +} + +bool LLViewerLogin::isInProductionGrid() +{ + // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice, + // but it seems that loginURI trumps that. + std::vector uris; + getLoginURIs(uris); + LLString::toLower(uris[0]); + if((uris[0].find("agni") != std::string::npos)) + { + return true; + } + + return false; +} diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h index 176ce43..966034f 100644 --- a/linden/indra/newview/llviewernetwork.h +++ b/linden/indra/newview/llviewernetwork.h @@ -59,18 +59,44 @@ enum EGridInfo GRID_INFO_COUNT }; - -struct LLGridData +/** + * @brief A class to manage the viewer's login state. + * + **/ +class LLViewerLogin : public LLSingleton { - const char* mLabel; - const char* mName; - const char* mLoginURI; - const char* mHelperURI; -}; +public: + LLViewerLogin(); + + void setGridChoice(EGridInfo grid); + void setGridChoice(const std::string& grid_name); + void resetURIs(); + + /** + * @brief Get the enumeration of the grid choice. + * Should only return values > 0 && < GRID_INFO_COUNT + **/ + EGridInfo getGridChoice() const; -extern EGridInfo gGridChoice; -extern LLGridData gGridInfo[]; -extern LLString gGridName; /* Flawfinder: ignore */ + /** + * @brief Get a readable label for the grid choice. + * Returns the readable name for the grid choice. + * If the grid is 'other', returns something + * the string used to specifiy the grid. + **/ + std::string getGridLabel() const; + + std::string getKnownGridLabel(EGridInfo grid_index) const; + + void getLoginURIs(std::vector& uris) const; + std::string getHelperURI() const; + + bool isInProductionGrid(); + +private: + EGridInfo mGridChoice; + std::string mGridName; +}; const S32 MAC_ADDRESS_BYTES = 6; extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp index b0bd5ce..54114e4 100644 --- a/linden/indra/newview/llviewerobject.cpp +++ b/linden/indra/newview/llviewerobject.cpp @@ -94,7 +94,7 @@ #include "llworld.h" #include "llui.h" #include "pipeline.h" -#include "llappviewer.h" +#include "llviewernetwork.h" #include "llvowlsky.h" //#define DEBUG_UPDATE_TYPE @@ -4073,6 +4073,37 @@ BOOL LLViewerObject::isParticleSource() const return !mPartSourcep.isNull() && !mPartSourcep->isDead(); } +void LLViewerObject::setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id) +{ + if (mPartSourcep) + { + deleteParticleSource(); + } + + LLPointer pss = LLViewerPartSourceScript::createPSS(this, particle_parameters); + mPartSourcep = pss; + + if (mPartSourcep) + { + mPartSourcep->setOwnerUUID(owner_id); + + if (mPartSourcep->getImage()->getID() != mPartSourcep->mPartSysData.mPartImageID) + { + LLViewerImage* image; + if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null) + { + image = gImageList.getImageFromFile("pixiesmall.tga"); + } + else + { + image = gImageList.getImage(mPartSourcep->mPartSysData.mPartImageID); + } + mPartSourcep->setImage(image); + } + } + LLViewerPartSim::getInstance()->addPartSource(pss); +} + void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& owner_id) { if (!mPartSourcep.isNull() && mPartSourcep->isDead()) @@ -4539,7 +4570,7 @@ BOOL LLViewerObject::permYouOwner() const return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) { return TRUE; @@ -4576,7 +4607,7 @@ BOOL LLViewerObject::permOwnerModify() const return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) { return TRUE; @@ -4600,7 +4631,7 @@ BOOL LLViewerObject::permModify() const return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) { return TRUE; @@ -4624,7 +4655,7 @@ BOOL LLViewerObject::permCopy() const return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) { return TRUE; @@ -4648,7 +4679,7 @@ BOOL LLViewerObject::permMove() const return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) { return TRUE; @@ -4672,7 +4703,7 @@ BOOL LLViewerObject::permTransfer() const return TRUE; #else # ifdef TOGGLE_HACKED_GODLIKE_VIEWER - if (!LLAppViewer::instance()->isInProductionGrid() + if (!LLViewerLogin::getInstance()->isInProductionGrid() && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) { return TRUE; diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h index 316e8db..88e2a15 100644 --- a/linden/indra/newview/llviewerobject.h +++ b/linden/indra/newview/llviewerobject.h @@ -558,6 +558,7 @@ protected: void unpackParticleSource(const S32 block_num, const LLUUID& owner_id); void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id); void deleteParticleSource(); + void setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id); private: void setNameValueList(const std::string& list); // clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp index 03567b0..bd8ed97 100644 --- a/linden/indra/newview/llviewerobjectlist.cpp +++ b/linden/indra/newview/llviewerobjectlist.cpp @@ -36,7 +36,7 @@ #include "message.h" #include "timing.h" #include "llfasttimer.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llviewercontrol.h" #include "llface.h" @@ -1212,6 +1212,7 @@ U32 LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, BOOL pick_parce // render pickable ui elements, like names, etc. LLHUDObject::renderAllForSelect(); gGL.flush(); + LLVertexBuffer::unbind(); gRenderForSelect = FALSE; diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp index 187a553..c29f277 100644 --- a/linden/indra/newview/llviewerparcelmedia.cpp +++ b/linden/indra/newview/llviewerparcelmedia.cpp @@ -100,9 +100,17 @@ void LLViewerParcelMedia::update(LLParcel* parcel) // we have a player if (parcel) { + if(!gAgent.getRegion()) + { + sMediaRegionID = LLUUID() ; + stop() ; + return ; + } + // we're in a parcel bool new_parcel = false; - S32 parcelid = parcel->getLocalID(); + S32 parcelid = parcel->getLocalID(); + LLUUID regionid = gAgent.getRegion()->getRegionID(); if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID) { diff --git a/linden/indra/newview/llviewerparceloverlay.cpp b/linden/indra/newview/llviewerparceloverlay.cpp index 7d0b2b4..b50ddb6 100644 --- a/linden/indra/newview/llviewerparceloverlay.cpp +++ b/linden/indra/newview/llviewerparceloverlay.cpp @@ -36,7 +36,7 @@ // indra includes #include "llparcel.h" #include "llgl.h" -#include "llglimmediate.h" +#include "llrender.h" #include "v4color.h" #include "v2math.h" @@ -48,6 +48,8 @@ #include "llagent.h" #include "llviewercamera.h" #include "llviewerimagelist.h" +#include "llselectmgr.h" +#include "llfloatertools.h" #include "llglheaders.h" const U8 OVERLAY_IMG_COMPONENTS = 4; @@ -69,7 +71,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_ mTexture = new LLImageGL(FALSE); mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS); mTexture->createGLTexture(0, mImageRaw); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); mTexture->bind(0); mTexture->setClamp(TRUE, TRUE); mTexture->setMipFilterNearest(TRUE); @@ -839,31 +841,34 @@ S32 LLViewerParcelOverlay::renderPropertyLines () gGL.end(); - LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER); - - colorp = mColorArray + BYTES_PER_COLOR * i; - vertexp = mVertexArray + FLOATS_PER_VERTEX * i; + if (LLSelectMgr::sRenderHiddenSelections && gFloaterTools && gFloaterTools->getVisible()) + { + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER); + + colorp = mColorArray + BYTES_PER_COLOR * i; + vertexp = mVertexArray + FLOATS_PER_VERTEX * i; - gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); + gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); - for (j = 0; j < vertex_per_edge; j++) - { - U8 color[4]; - color[0] = colorp[0]; - color[1] = colorp[1]; - color[2] = colorp[2]; - color[3] = colorp[3]/4; + for (j = 0; j < vertex_per_edge; j++) + { + U8 color[4]; + color[0] = colorp[0]; + color[1] = colorp[1]; + color[2] = colorp[2]; + color[3] = colorp[3]/4; - gGL.color4ubv(color); - gGL.vertex3fv(vertexp); + gGL.color4ubv(color); + gGL.vertex3fv(vertexp); - colorp += BYTES_PER_COLOR; - vertexp += FLOATS_PER_VERTEX; - } + colorp += BYTES_PER_COLOR; + vertexp += FLOATS_PER_VERTEX; + } - drawn += vertex_per_edge; + drawn += vertex_per_edge; - gGL.end(); + gGL.end(); + } } diff --git a/linden/indra/newview/llviewerpartsource.cpp b/linden/indra/newview/llviewerpartsource.cpp index 040d108..6c0596a 100644 --- a/linden/indra/newview/llviewerpartsource.cpp +++ b/linden/indra/newview/llviewerpartsource.cpp @@ -466,6 +466,25 @@ LLPointer LLViewerPartSourceScript::unpackPSS(LLViewer } } + +/* static */ +LLPointer LLViewerPartSourceScript::createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters) +{ + LLMemType mt(LLMemType::MTYPE_PARTICLES); + + LLPointer new_pssp = new LLViewerPartSourceScript(source_objp); + + new_pssp->mPartSysData = particle_parameters; + + if (new_pssp->mPartSysData.mTargetUUID.notNull()) + { + LLViewerObject *target_objp = gObjectList.findObject(new_pssp->mPartSysData.mTargetUUID); + new_pssp->setTargetObject(target_objp); + } + return new_pssp; +} + + void LLViewerPartSourceScript::setImage(LLViewerImage *imagep) { LLMemType mt(LLMemType::MTYPE_PARTICLES); diff --git a/linden/indra/newview/llviewerpartsource.h b/linden/indra/newview/llviewerpartsource.h index cda81a0..8b6fb2c 100644 --- a/linden/indra/newview/llviewerpartsource.h +++ b/linden/indra/newview/llviewerpartsource.h @@ -119,6 +119,7 @@ public: // Returns a new particle source to attach to an object... static LLPointer unpackPSS(LLViewerObject *source_objp, LLPointer pssp, const S32 block_num); static LLPointer unpackPSS(LLViewerObject *source_objp, LLPointer pssp, LLDataPacker &dp); + static LLPointer createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters); LLViewerImage *getImage() const { return mImagep; } void setImage(LLViewerImage *imagep); diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp index e8ed85f..e1590cc 100644 --- a/linden/indra/newview/llviewerregion.cpp +++ b/linden/indra/newview/llviewerregion.cpp @@ -214,7 +214,7 @@ void LLViewerRegion::loadCache() U32(mHandle>>32)/REGION_WIDTH_UNITS, U32(mHandle)/REGION_WIDTH_UNITS ); - FILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ if (!fp) { // might not have a file, which is normal @@ -303,7 +303,7 @@ void LLViewerRegion::saveCache() U32(mHandle>>32)/REGION_WIDTH_UNITS, U32(mHandle)/REGION_WIDTH_UNITS ); - FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ if (!fp) { llwarns << "Unable to write cache file " << filename << llendl; @@ -1307,6 +1307,7 @@ void LLViewerRegion::unpackRegionHandshake() class BaseCapabilitiesComplete : public LLHTTPClient::Responder { + LOG_CLASS(BaseCapabilitiesComplete); public: BaseCapabilitiesComplete(LLViewerRegion* region) : mRegion(region) @@ -1314,8 +1315,7 @@ public: void error(U32 statusNum, const std::string& reason) { - llinfos << "BaseCapabilitiesComplete::error " - << statusNum << ": " << reason << llendl; + LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL; if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) { @@ -1329,8 +1329,8 @@ public: for(iter = content.beginMap(); iter != content.endMap(); ++iter) { mRegion->setCapability(iter->first, iter->second); - llinfos << "BaseCapabilitiesComplete::result got capability for " - << iter->first << llendl; + LL_DEBUGS2("AppInit", "Capabilities") << "got capability for " + << iter->first << LL_ENDL; /* HACK we're waiting for the ServerReleaseNotes */ if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage)) diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp index 9f10bbf..52b6748 100644 --- a/linden/indra/newview/llviewerstats.cpp +++ b/linden/indra/newview/llviewerstats.cpp @@ -53,6 +53,7 @@ #include "llfasttimerview.h" #include "llviewerregion.h" #include "llfloaterhtml.h" +#include "llviewerwindow.h" // *TODO: remove, only used for width/height #include "llworld.h" #include "llfeaturemanager.h" #if LL_WINDOWS && LL_LCD_COMPILE @@ -748,7 +749,12 @@ void send_stats() // If the current revision is recent, ping the previous author before overriding LLSD &misc = body["stats"]["misc"]; - // misc["string_1"] = + // Screen size so the UI team can figure out how big the widgets + // appear and use a "typical" size for end user tests. + + S32 window_width = gViewerWindow->getWindowDisplayWidth(); + S32 window_height = gViewerWindow->getWindowDisplayHeight(); + misc["string_1"] = llformat("%.dx%d", window_width, window_height); // misc["string_2"] = misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6 diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp index 60ec187..e1c56a6 100644 --- a/linden/indra/newview/llviewertexteditor.cpp +++ b/linden/indra/newview/llviewertexteditor.cpp @@ -631,7 +631,7 @@ BOOL LLViewerTextEditor::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* stic if( cur_segment ) { BOOL has_tool_tip = FALSE; - if( cur_segment->getStyle().getIsEmbeddedItem() ) + if( cur_segment->getStyle()->getIsEmbeddedItem() ) { LLWString wtip; has_tool_tip = getEmbeddedItemToolTipAtPos(cur_segment->getStart(), wtip); @@ -851,14 +851,14 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask) const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); if( cur_segment ) { - if(cur_segment->getStyle().isLink()) + if(cur_segment->getStyle()->isLink()) { lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl; getWindow()->setCursor(UI_CURSOR_HAND); handled = TRUE; } else - if(cur_segment->getStyle().getIsEmbeddedItem()) + if(cur_segment->getStyle()->getIsEmbeddedItem()) { lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl; getWindow()->setCursor(UI_CURSOR_HAND); @@ -970,10 +970,10 @@ BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask) // const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); // if( cur_segment ) // { -// if(cur_segment->getStyle().isLink()) +// if(cur_segment->getStyle()->isLink()) // { // handled = TRUE; -// mHTML = cur_segment->getStyle().getLinkHREF(); +// mHTML = cur_segment->getStyle()->getLinkHREF(); // } // } // } @@ -1008,7 +1008,7 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) if( allowsEmbeddedItems() ) { const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); - if( cur_segment && cur_segment->getStyle().getIsEmbeddedItem() ) + if( cur_segment && cur_segment->getStyle()->getIsEmbeddedItem() ) { if( openEmbeddedItemAtPos( cur_segment->getStart() ) ) { @@ -1598,7 +1598,7 @@ LLView* LLViewerTextEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlF text_editor->initFromXML(node, parent); // add text after all parameters have been set - text_editor->appendStyledText(text, FALSE, FALSE, NULL); + text_editor->appendStyledText(text, FALSE, FALSE); return text_editor; } diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp index ceff856..54188cd 100644 --- a/linden/indra/newview/llviewerthrottle.cpp +++ b/linden/indra/newview/llviewerthrottle.cpp @@ -182,9 +182,9 @@ void LLViewerThrottleGroup::dump() S32 i; for (i = 0; i < TC_EOF; i++) { - llinfos << LLViewerThrottle::sNames[i] << ": " << mThrottles[i] << llendl; + LL_DEBUGS("Throttle") << LLViewerThrottle::sNames[i] << ": " << mThrottles[i] << LL_ENDL; } - llinfos << "Total: " << mThrottleTotal << llendl; + LL_DEBUGS("Throttle") << "Total: " << mThrottleTotal << LL_ENDL; } class LLBPSListener : public LLSimpleListener diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index 4c76b8b..9f091dc 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp @@ -43,7 +43,7 @@ #include "llviewquery.h" #include "llxmltree.h" //#include "llviewercamera.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llvoiceclient.h" // for push-to-talk button handling @@ -182,6 +182,7 @@ #include "llviewerdisplay.h" #include "llspatialpartition.h" #include "llviewerjoystick.h" +#include "llviewernetwork.h" #if LL_WINDOWS #include "llwindebug.h" @@ -1529,9 +1530,9 @@ LLViewerWindow::LLViewerWindow( ignore_pixel_depth, gSavedSettings.getU32("RenderFSAASamples")); #if LL_WINDOWS - if (!LLWinDebug::setupExceptionHandler()) + if (!LLWinDebug::checkExceptionHandler()) { - llwarns << " Someone took over my exception handler (post createWindow)!" << llendl; + LL_WARNS("Window") << " Someone took over my exception handler (post createWindow)!" << LL_ENDL; } #endif @@ -1542,8 +1543,8 @@ LLViewerWindow::LLViewerWindow( llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information." << llendl; #else - llwarns << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings" - << llendl; + LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings" + << LL_ENDL; #endif LLAppViewer::instance()->forceExit(1); } @@ -1569,7 +1570,7 @@ LLViewerWindow::LLViewerWindow( // We want to set this stuff up BEFORE we initialize the pipeline, so we can turn off // stuff like AGP if we think that it'll crash the viewer. // - llinfos << "Loading feature tables." << llendl; + LL_DEBUGS("Window") << "Loading feature tables." << LL_ENDL; LLFeatureManager::getInstance()->init(); @@ -1638,7 +1639,7 @@ LLViewerWindow::LLViewerWindow( void LLViewerWindow::initGLDefaults() { - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); F32 ambient[4] = {0.f,0.f,0.f,0.f }; @@ -1656,7 +1657,7 @@ void LLViewerWindow::initGLDefaults() glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); glCullFace(GL_BACK); @@ -2198,7 +2199,7 @@ void LLViewerWindow::setNormalControlsVisible( BOOL visible ) // ...and set the menu color appropriately. setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT, - LLAppViewer::instance()->isInProductionGrid()); + LLViewerLogin::getInstance()->isInProductionGrid()); } if ( gStatusBar ) @@ -2213,15 +2214,15 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid) LLString::format_map_t args; LLColor4 new_bg_color; - if(god_mode && LLAppViewer::instance()->isInProductionGrid()) + if(god_mode && LLViewerLogin::getInstance()->isInProductionGrid()) { new_bg_color = gColors.getColor( "MenuBarGodBgColor" ); } - else if(god_mode && !LLAppViewer::instance()->isInProductionGrid()) + else if(god_mode && !LLViewerLogin::getInstance()->isInProductionGrid()) { new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" ); } - else if(!god_mode && !LLAppViewer::instance()->isInProductionGrid()) + else if(!god_mode && !LLViewerLogin::getInstance()->isInProductionGrid()) { new_bg_color = gColors.getColor( "MenuNonProductionBgColor" ); } @@ -3538,7 +3539,7 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (* const LLVector2& display_scale = getDisplayScale(); glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); // make viewport big enough to handle antialiased frame buffers glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4); @@ -4185,8 +4186,9 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height) if ( (size.mX != new_width + BORDERWIDTH) ||(size.mY != new_height + BORDERHEIGHT)) { - S32 x = gViewerWindow->getWindowWidth(); - S32 y = gViewerWindow->getWindowHeight(); + // use actual display dimensions, not virtual UI dimensions + S32 x = gViewerWindow->getWindowDisplayWidth(); + S32 y = gViewerWindow->getWindowDisplayHeight(); BORDERWIDTH = size.mX - x; BORDERHEIGHT = size.mY- y; LLCoordScreen new_size(new_width + BORDERWIDTH, @@ -4938,7 +4940,7 @@ void LLViewerWindow::restoreGL(const LLString& progress_message) } llinfos << "...Restoring GL done" << llendl; #if LL_WINDOWS - if (SetUnhandledExceptionFilter(LLWinDebug::handleException) != LLWinDebug::handleException) + if(!LLWinDebug::checkExceptionHandler()) { llwarns << " Someone took over my exception handler (post restoreGL)!" << llendl; } @@ -4951,21 +4953,21 @@ void LLViewerWindow::initFonts(F32 zoom_factor) { LLFontGL::destroyGL(); LLFontGL::initDefaultFonts( gSavedSettings.getF32("FontScreenDPI"), - mDisplayScale.mV[VX] * zoom_factor, - mDisplayScale.mV[VY] * zoom_factor, - gSavedSettings.getString("FontMonospace"), - gSavedSettings.getF32("FontSizeMonospace"), - gSavedSettings.getString("FontSansSerif"), - gSavedSettings.getString("FontSansSerifFallback"), - gSavedSettings.getF32("FontSansSerifFallbackScale"), - gSavedSettings.getF32("FontSizeSmall"), - gSavedSettings.getF32("FontSizeMedium"), - gSavedSettings.getF32("FontSizeLarge"), - gSavedSettings.getF32("FontSizeHuge"), - gSavedSettings.getString("FontSansSerifBold"), - gSavedSettings.getF32("FontSizeMedium"), - gDirUtilp->getAppRODataDir() - ); + mDisplayScale.mV[VX] * zoom_factor, + mDisplayScale.mV[VY] * zoom_factor, + gSavedSettings.getString("FontMonospace"), + gSavedSettings.getF32("FontSizeMonospace"), + gSavedSettings.getString("FontSansSerif"), + gSavedSettings.getString("FontSansSerifFallback"), + gSavedSettings.getF32("FontSansSerifFallbackScale"), + gSavedSettings.getF32("FontSizeSmall"), + gSavedSettings.getF32("FontSizeMedium"), + gSavedSettings.getF32("FontSizeLarge"), + gSavedSettings.getF32("FontSizeHuge"), + gSavedSettings.getString("FontSansSerifBold"), + gSavedSettings.getF32("FontSizeMedium"), + gDirUtilp->getAppRODataDir() + ); } void LLViewerWindow::toggleFullscreen(BOOL show_progress) { @@ -5018,20 +5020,16 @@ BOOL LLViewerWindow::checkSettings() return FALSE; } -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif changeDisplaySettings(TRUE, LLCoordScreen(gSavedSettings.getS32("FullScreenWidth"), gSavedSettings.getS32("FullScreenHeight")), gSavedSettings.getBOOL("DisableVerticalSync"), mShowFullscreenProgress); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif return TRUE; } return FALSE; diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h index a9f941c..da5fa4e 100644 --- a/linden/indra/newview/llviewerwindow.h +++ b/linden/indra/newview/llviewerwindow.h @@ -114,12 +114,18 @@ public: // ACCESSORS // LLView* getRootView() const { return mRootView; } + + // Window in raw pixels as seen on screen. const LLRect& getWindowRect() const { return mWindowRect; }; + S32 getWindowDisplayHeight() const; + S32 getWindowDisplayWidth() const; + + // Window in scaled pixels (via UI scale), use this for + // UI elements checking size. const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; }; S32 getWindowHeight() const; S32 getWindowWidth() const; - S32 getWindowDisplayHeight() const; - S32 getWindowDisplayWidth() const; + LLWindow* getWindow() const { return mWindow; } void* getPlatformWindow() const { return mWindow->getPlatformWindow(); } void focusClient() const { return mWindow->focusClient(); }; diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp index 7de2f9c..6b5f066 100644 --- a/linden/indra/newview/llvoavatar.cpp +++ b/linden/indra/newview/llvoavatar.cpp @@ -37,7 +37,7 @@ #include "llvoavatar.h" -#include "llglimmediate.h" +#include "llrender.h" #include "audioengine.h" #include "imageids.h" #include "indra_constants.h" @@ -95,7 +95,6 @@ #include "llstatusbar.h" #include "lltargetingmotion.h" #include "lltexlayer.h" -#include "lltoolbar.h" #include "lltoolgrab.h" // for needsRenderBeam #include "lltoolmgr.h" // for needsRenderBeam #include "lltoolmorph.h" @@ -117,20 +116,14 @@ #include "llspatialpartition.h" #include "llglslshader.h" #include "llappviewer.h" -#include "lscript_byteformat.h" +#include "llsky.h" +#include "llanimstatelabels.h" //#include "vtune/vtuneapi.h" -//Ventrella -#include "llgesturemgr.h" //needed to trigger the voice gestculations +#include "llgesturemgr.h" //needed to trigger the voice gesticulations #include "llvoicevisualizer.h" #include "llvoiceclient.h" -//end Ventrella - -// Direct imports, evil -extern LLSky gSky; -extern void set_avatar_character(void* charNameArg); -extern BOOL gRenderForSelect; LLXmlTree LLVOAvatar::sXMLTree; LLXmlTree LLVOAvatar::sSkeletonXMLTree; @@ -686,7 +679,8 @@ LLVOAvatar::LLVOAvatar( mTexHairColor( NULL ), mTexEyeColor( NULL ), mNeedsSkin(FALSE), - mUpdatePeriod(1) + mUpdatePeriod(1), + mFullyLoadedInitialized(FALSE) { LLMemType mt(LLMemType::MTYPE_AVATAR); @@ -766,6 +760,10 @@ LLVOAvatar::LLVOAvatar( mStepOnLand = TRUE; mStepMaterial = 0; + mLipSyncActive = false; + mOohMorph = NULL; + mAahMorph = NULL; + //------------------------------------------------------------------------- // initialize joint, mesh and shape members //------------------------------------------------------------------------- @@ -950,10 +948,8 @@ LLVOAvatar::LLVOAvatar( //VTPause(); // VTune - //Ventrella mVoiceVisualizer->setVoiceEnabled( gVoiceClient->getVoiceEnabled( mID ) ); mCurrentGesticulationLevel = 0; - //END Ventrella } //------------------------------------------------------------------------ @@ -1887,6 +1883,26 @@ void LLVOAvatar::buildCharacter() updateHeadOffset(); //------------------------------------------------------------------------- + // initialize lip sync morph pointers + //------------------------------------------------------------------------- + mOohMorph = getVisualParam( "Lipsync_Ooh" ); + mAahMorph = getVisualParam( "Lipsync_Aah" ); + + // If we don't have the Ooh morph, use the Kiss morph + if (!mOohMorph) + { + llwarns << "Missing 'Ooh' morph for lipsync, using fallback." << llendl; + mOohMorph = getVisualParam( "Express_Kiss" ); + } + + // If we don't have the Aah morph, use the Open Mouth morph + if (!mAahMorph) + { + llwarns << "Missing 'Aah' morph for lipsync, using fallback." << llendl; + mAahMorph = getVisualParam( "Express_Open_Mouth" ); + } + + //------------------------------------------------------------------------- // start default motions //------------------------------------------------------------------------- startMotion( ANIM_AGENT_HEAD_ROT ); @@ -2449,88 +2465,93 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) // animate the character // store off last frame's root position to be consistent with camera position LLVector3 root_pos_last = mRoot.getWorldPosition(); - BOOL detailed_update = updateCharacter(agent); + bool voiceEnabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel(); - { - //Ventrella - bool voiceEnabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel(); - // disable voice visualizer when in mouselook - mVoiceVisualizer->setVoiceEnabled( voiceEnabled && !(mIsSelf && gAgent.cameraMouselook()) ); - if ( voiceEnabled ) - { - //---------------------------------------------------------------- - // Only do gesture triggering for your own avatar, and only when you're in a proximal channel. - //---------------------------------------------------------------- - if( mIsSelf ) + // disable voice visualizer when in mouselook + mVoiceVisualizer->setVoiceEnabled( voiceEnabled && !(mIsSelf && gAgent.cameraMouselook()) ); + if ( voiceEnabled ) + { + //---------------------------------------------------------------- + // Only do gesture triggering for your own avatar, and only when you're in a proximal channel. + //---------------------------------------------------------------- + if( mIsSelf ) + { + //---------------------------------------------------------------------------------------- + // The following takes the voice signal and uses that to trigger gesticulations. + //---------------------------------------------------------------------------------------- + int lastGesticulationLevel = mCurrentGesticulationLevel; + mCurrentGesticulationLevel = mVoiceVisualizer->getCurrentGesticulationLevel(); + + //--------------------------------------------------------------------------------------------------- + // If "current gesticulation level" changes, we catch this, and trigger the new gesture + //--------------------------------------------------------------------------------------------------- + if ( lastGesticulationLevel != mCurrentGesticulationLevel ) { - //---------------------------------------------------------------------------------------- - // The following takes the voice signal and uses that to trigger gesticulations. - //---------------------------------------------------------------------------------------- - int lastGesticulationLevel = mCurrentGesticulationLevel; - mCurrentGesticulationLevel = mVoiceVisualizer->getCurrentGesticulationLevel(); - - //--------------------------------------------------------------------------------------------------- - // If "current gesticulation level" changes, we catch this, and trigger the new gesture - //--------------------------------------------------------------------------------------------------- - if ( lastGesticulationLevel != mCurrentGesticulationLevel ) - { - if ( mCurrentGesticulationLevel != VOICE_GESTICULATION_LEVEL_OFF ) - { - LLString gestureString = "unInitialized"; - if ( mCurrentGesticulationLevel == 0 ) { gestureString = "/voicelevel1"; } - else if ( mCurrentGesticulationLevel == 1 ) { gestureString = "/voicelevel2"; } - else if ( mCurrentGesticulationLevel == 2 ) { gestureString = "/voicelevel3"; } - else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; } - - // this is the call that Karl S. created for triggering gestures from within the code. - gGestureManager.triggerAndReviseString( gestureString ); - } - } - - } //if( mIsSelf ) - - //----------------------------------------------------------------------------------------------------------------- - // If the avatar is speaking, then the voice amplitude signal is passed to the voice visualizer. - // Also, here we trigger voice visualizer start and stop speaking, so it can animate the voice symbol. - // - // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been - // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking. - //----------------------------------------------------------------------------------------------------------------- - if ( gVoiceClient->getIsSpeaking( mID ) ) - { - if ( ! mVoiceVisualizer->getCurrentlySpeaking() ) + if ( mCurrentGesticulationLevel != VOICE_GESTICULATION_LEVEL_OFF ) { - mVoiceVisualizer->setStartSpeaking(); + LLString gestureString = "unInitialized"; + if ( mCurrentGesticulationLevel == 0 ) { gestureString = "/voicelevel1"; } + else if ( mCurrentGesticulationLevel == 1 ) { gestureString = "/voicelevel2"; } + else if ( mCurrentGesticulationLevel == 2 ) { gestureString = "/voicelevel3"; } + else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; } - //printf( "gAwayTimer.reset();\n" ); - } - - mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) ); - - if( mIsSelf ) - { - gAgent.clearAFK(); + // this is the call that Karl S. created for triggering gestures from within the code. + gGestureManager.triggerAndReviseString( gestureString ); } } - else + + } //if( mIsSelf ) + + //----------------------------------------------------------------------------------------------------------------- + // If the avatar is speaking, then the voice amplitude signal is passed to the voice visualizer. + // Also, here we trigger voice visualizer start and stop speaking, so it can animate the voice symbol. + // + // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been + // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking. + //----------------------------------------------------------------------------------------------------------------- + if ( gVoiceClient->getIsSpeaking( mID ) ) + { + if ( ! mVoiceVisualizer->getCurrentlySpeaking() ) + { + mVoiceVisualizer->setStartSpeaking(); + + //printf( "gAwayTimer.reset();\n" ); + } + + mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) ); + + if( mIsSelf ) + { + gAgent.clearAFK(); + } + } + else + { + if ( mVoiceVisualizer->getCurrentlySpeaking() ) { - if ( mVoiceVisualizer->getCurrentlySpeaking() ) + mVoiceVisualizer->setStopSpeaking(); + + if ( mLipSyncActive ) { - mVoiceVisualizer->setStopSpeaking(); + if( mOohMorph ) mOohMorph->setWeight(mOohMorph->getMinWeight(), FALSE); + if( mAahMorph ) mAahMorph->setWeight(mAahMorph->getMinWeight(), FALSE); + + mLipSyncActive = false; + LLCharacter::updateVisualParams(); + dirtyMesh(); } } - - //-------------------------------------------------------------------------------------------- - // here we get the approximate head position and set as sound source for the voice symbol - // (the following version uses a tweak of "mHeadOffset" which handle sitting vs. standing) - //-------------------------------------------------------------------------------------------- - LLVector3 headOffset = LLVector3( 0.0f, 0.0f, mHeadOffset.mV[2] ); - mVoiceVisualizer->setVoiceSourceWorldPosition( mRoot.getWorldPosition() + headOffset ); - - }//if ( voiceEnabled ) - } - //End Ventrella + } + + //-------------------------------------------------------------------------------------------- + // here we get the approximate head position and set as sound source for the voice symbol + // (the following version uses a tweak of "mHeadOffset" which handle sitting vs. standing) + //-------------------------------------------------------------------------------------------- + LLVector3 headOffset = LLVector3( 0.0f, 0.0f, mHeadOffset.mV[2] ); + mVoiceVisualizer->setVoiceSourceWorldPosition( mRoot.getWorldPosition() + headOffset ); + + }//if ( voiceEnabled ) if (LLVOAvatar::sJointDebug) { @@ -2704,6 +2725,76 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) dirtyMesh(); } + // Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync + if ( voiceEnabled && (gVoiceClient->lipSyncEnabled()) && gVoiceClient->getIsSpeaking( mID ) ) + { + F32 ooh_morph_amount = 0.0f; + F32 aah_morph_amount = 0.0f; + + mVoiceVisualizer->lipSyncOohAah( ooh_morph_amount, aah_morph_amount ); + + if( mOohMorph ) + { + F32 ooh_weight = mOohMorph->getMinWeight() + + ooh_morph_amount * (mOohMorph->getMaxWeight() - mOohMorph->getMinWeight()); + + mOohMorph->setWeight( ooh_weight, FALSE ); + } + + if( mAahMorph ) + { + F32 aah_weight = mAahMorph->getMinWeight() + + aah_morph_amount * (mAahMorph->getMaxWeight() - mAahMorph->getMinWeight()); + + mAahMorph->setWeight( aah_weight, FALSE ); + } + + mLipSyncActive = true; + LLCharacter::updateVisualParams(); + dirtyMesh(); + } + + // update visibility when avatar is partially loaded + if (updateIsFullyLoaded()) // changed? + { + if (isFullyLoaded()) + { + deleteParticleSource(); + } + else + { + LLPartSysData particle_parameters; + + // fancy particle cloud designed by Brent + particle_parameters.mPartData.mMaxAge = 4.f; + particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f; + particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f; + particle_parameters.mPartData.mStartScale.mV[VY] = 1.0f; + particle_parameters.mPartData.mEndScale.mV[VX] = 0.02f; + particle_parameters.mPartData.mEndScale.mV[VY] = 0.02f; + particle_parameters.mPartData.mStartColor = LLColor4(1, 1, 1, 0.5f); + particle_parameters.mPartData.mEndColor = LLColor4(1, 1, 1, 0.0f); + particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f; + LLViewerImage* cloud = gImageList.getImageFromFile("cloud-particle.j2c"); + particle_parameters.mPartImageID = cloud->getID(); + particle_parameters.mMaxAge = 0.f; + particle_parameters.mPattern = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE; + particle_parameters.mInnerAngle = 3.14159f; + particle_parameters.mOuterAngle = 0.f; + particle_parameters.mBurstRate = 0.02f; + particle_parameters.mBurstRadius = 0.0f; + particle_parameters.mBurstPartCount = 1; + particle_parameters.mBurstSpeedMin = 0.1f; + particle_parameters.mBurstSpeedMax = 1.f; + particle_parameters.mPartData.mFlags = ( LLPartData::LL_PART_INTERP_COLOR_MASK | LLPartData::LL_PART_INTERP_SCALE_MASK | + LLPartData::LL_PART_EMISSIVE_MASK | // LLPartData::LL_PART_FOLLOW_SRC_MASK | + LLPartData::LL_PART_TARGET_POS_MASK ); + + setParticleSource(particle_parameters, getID()); + } + } + + // update wind effect if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH)) { @@ -3883,7 +3974,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)) { //LOD changed or new mesh created, allocate new vertex buffer if needed updateMeshData(); - mDirtyMesh = FALSE; + mDirtyMesh = FALSE; mNeedsSkin = TRUE; mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); } @@ -3957,7 +4048,10 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) } // render collision normal - if (sShowFootPlane && mDrawable.notNull()) + // *NOTE: this is disabled (there is no UI for enabling sShowFootPlane) due + // to DEV-14477. the code is left here to aid in tracking down the cause + // of the crash in the future. -brad + if (!gRenderForSelect && sShowFootPlane && mDrawable.notNull()) { LLVector3 slaved_pos = mDrawable->getPositionAgent(); LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]); @@ -3985,7 +4079,9 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) gGL.vertex3f(collide_point.mV[VX], collide_point.mV[VY], collide_point.mV[VZ]); gGL.vertex3f(collide_point.mV[VX] + mFootPlane.mV[VX], collide_point.mV[VY] + mFootPlane.mV[VY], collide_point.mV[VZ] + mFootPlane.mV[VZ]); - }gGL.end(); + } + gGL.end(); + gGL.flush(); } //-------------------------------------------------------------------- // render all geomety attached to the skeleton @@ -4027,23 +4123,23 @@ U32 LLVOAvatar::renderTransparent() BOOL first_pass = FALSE; if( isWearingWearableType( WT_SKIRT ) ) { - glAlphaFunc(GL_GREATER,0.25f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f); num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE); first_pass = FALSE; - glAlphaFunc(GL_GREATER,0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } if (!mIsSelf || gAgent.needsRenderHead()) { if (LLPipeline::sImpostorRender) { - glAlphaFunc(GL_GREATER, 0.5f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); } num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass); num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE); if (LLPipeline::sImpostorRender) { - glAlphaFunc(GL_GREATER, 0.01f); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } } @@ -4136,7 +4232,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color) up *= mImpostorDim.mV[1]; LLGLEnable test(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); gGL.color4f(1,1,1,1); gGL.color4ubv(color.mV); @@ -6637,6 +6733,89 @@ BOOL LLVOAvatar::isVisible() } +// call periodically to keep isFullyLoaded up to date. +// returns true if the value has changed. +BOOL LLVOAvatar::updateIsFullyLoaded() +{ + // a "heuristic" to determine if we have enough avatar data to render + // (to avoid rendering a "Ruth" - DEV-3168) + + BOOL loading = FALSE; + + // do we have a shape? + if (visualParamWeightsAreDefault()) + { + loading = TRUE; + } + + // are our texture settings still default? + if ((getTEImage( TEX_HAIR )->getID() == IMG_DEFAULT)) + { + loading = TRUE; + } + + // special case to keep nudity off orientation island - + // this is fragilely dependent on the compositing system, + // which gets available textures in the following order: + // + // 1) use the baked texture + // 2) use the layerset + // 3) use the previously baked texture + // + // on orientation island case (3) can show naked skin. + // so we test for that here: + // + // if we were previously unloaded, and we don't have enough + // texture info for our shirt/pants, stay unloaded: + if (!mPreviousFullyLoaded) + { + if ((!isLocalTextureDataAvailable(mLowerBodyLayerSet)) && + (getTEImage(TEX_LOWER_BAKED)->getID() == IMG_DEFAULT_AVATAR)) + { + loading = TRUE; + } + + if ((!isLocalTextureDataAvailable(mUpperBodyLayerSet)) && + (getTEImage(TEX_UPPER_BAKED)->getID() == IMG_DEFAULT_AVATAR)) + { + loading = TRUE; + } + } + + + // we wait a little bit before giving the all clear, + // to let textures settle down + const F32 PAUSE = 1.f; + if (loading) + mFullyLoadedTimer.reset(); + + mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE); + + + // did our loading state "change" from last call? + const S32 UPDATE_RATE = 30; + BOOL changed = + ((mFullyLoaded != mPreviousFullyLoaded) || // if the value is different from the previous call + (!mFullyLoadedInitialized) || // if we've never been called before + (mFullyLoadedFrameCounter % UPDATE_RATE == 0)); // every now and then issue a change + + mPreviousFullyLoaded = mFullyLoaded; + mFullyLoadedInitialized = TRUE; + mFullyLoadedFrameCounter++; + + return changed; +} + + +BOOL LLVOAvatar::isFullyLoaded() +{ + if (gSavedSettings.getBOOL("RenderUnloadedAvatar")) + return TRUE; + else + return mFullyLoaded; +} + + //----------------------------------------------------------------------------- // findMotion() //----------------------------------------------------------------------------- @@ -8289,12 +8468,12 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } // static -void LLVOAvatar::getAnimLabels( LLDynamicArray* labels ) +void LLVOAvatar::getAnimLabels( LLDynamicArray* labels ) { S32 i; for( i = 0; i < gUserAnimStatesCount; i++ ) { - labels->put( gUserAnimStates[i].mLabel ); + labels->put( LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName ) ); } // Special case to trigger away (AFK) state @@ -8302,13 +8481,13 @@ void LLVOAvatar::getAnimLabels( LLDynamicArray* labels ) } // static -void LLVOAvatar::getAnimNames( LLDynamicArray* names ) +void LLVOAvatar::getAnimNames( LLDynamicArray* names ) { S32 i; for( i = 0; i < gUserAnimStatesCount; i++ ) { - names->put( gUserAnimStates[i].mName ); + names->put( std::string(gUserAnimStates[i].mName) ); } // Special case to trigger away (AFK) state @@ -9507,7 +9686,7 @@ BOOL LLVOAvatar::updateLOD() if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)) { //LOD changed or new mesh created, allocate new vertex buffer if needed updateMeshData(); - mDirtyMesh = FALSE; + mDirtyMesh = FALSE; mNeedsSkin = TRUE; mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); } diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h index bc68cf4..1df8275 100644 --- a/linden/indra/newview/llvoavatar.h +++ b/linden/indra/newview/llvoavatar.h @@ -413,8 +413,8 @@ public: //-------------------------------------------------------------------- BOOL allocateCollisionVolumes( U32 num ); void resetHUDAttachments(); - static void getAnimLabels( LLDynamicArray* labels ); - static void getAnimNames( LLDynamicArray* names ); + static void getAnimLabels( LLDynamicArray* labels ); + static void getAnimNames( LLDynamicArray* names ); static void onCustomizeStart(); static void onCustomizeEnd(); @@ -832,6 +832,17 @@ public: BOOL mAppearanceAnimating; //-------------------------------------------------------------------- + // we're morphing for lip sync + //-------------------------------------------------------------------- + bool mLipSyncActive; + + //-------------------------------------------------------------------- + // cached pointers morphs for lip sync + //-------------------------------------------------------------------- + LLVisualParam *mOohMorph; + LLVisualParam *mAahMorph; + + //-------------------------------------------------------------------- // static members //-------------------------------------------------------------------- static S32 sMaxVisible; @@ -957,7 +968,21 @@ protected: static LLVOAvatarSkeletonInfo* sSkeletonInfo; static LLVOAvatarInfo* sAvatarInfo; + + //-------------------------------------------------------------------- + // Handling partially loaded avatars (Ruth) + //-------------------------------------------------------------------- +public: + BOOL isFullyLoaded(); + BOOL updateIsFullyLoaded(); +private: + BOOL mFullyLoaded; + BOOL mPreviousFullyLoaded; + BOOL mFullyLoadedInitialized; + S32 mFullyLoadedFrameCounter; + LLFrameTimer mFullyLoadedTimer; + protected: BOOL loadSkeletonNode(); diff --git a/linden/indra/newview/llvocache.cpp b/linden/indra/newview/llvocache.cpp index 39ee63f..45b7782 100644 --- a/linden/indra/newview/llvocache.cpp +++ b/linden/indra/newview/llvocache.cpp @@ -63,7 +63,7 @@ LLVOCacheEntry::LLVOCacheEntry() } -static inline void checkedRead(FILE *fp, void *data, size_t nbytes) +static inline void checkedRead(LLFILE *fp, void *data, size_t nbytes) { if (fread(data, 1, nbytes, fp) != nbytes) { @@ -72,7 +72,7 @@ static inline void checkedRead(FILE *fp, void *data, size_t nbytes) } } -LLVOCacheEntry::LLVOCacheEntry(FILE *fp) +LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp) { S32 size; checkedRead(fp, &mLocalID, sizeof(U32)); @@ -153,7 +153,7 @@ void LLVOCacheEntry::dump() const << llendl; } -static inline void checkedWrite(FILE *fp, const void *data, size_t nbytes) +static inline void checkedWrite(LLFILE *fp, const void *data, size_t nbytes) { if (fwrite(data, 1, nbytes, fp) != nbytes) { @@ -161,7 +161,7 @@ static inline void checkedWrite(FILE *fp, const void *data, size_t nbytes) } } -void LLVOCacheEntry::writeToFile(FILE *fp) const +void LLVOCacheEntry::writeToFile(LLFILE *fp) const { checkedWrite(fp, &mLocalID, sizeof(U32)); checkedWrite(fp, &mCRC, sizeof(U32)); diff --git a/linden/indra/newview/llvocache.h b/linden/indra/newview/llvocache.h index c994d4b..2432f22 100644 --- a/linden/indra/newview/llvocache.h +++ b/linden/indra/newview/llvocache.h @@ -45,7 +45,7 @@ class LLVOCacheEntry : public LLDLinked { public: LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp); - LLVOCacheEntry(FILE *fp); + LLVOCacheEntry(LLFILE *fp); LLVOCacheEntry(); ~LLVOCacheEntry(); @@ -55,7 +55,7 @@ public: S32 getCRCChangeCount() const { return mCRCChangeCount; } void dump() const; - void writeToFile(FILE *fp) const; + void writeToFile(LLFILE *fp) const; void assignCRC(U32 crc, LLDataPackerBinaryBuffer &dp); LLDataPackerBinaryBuffer *getDP(U32 crc); void recordHit(); diff --git a/linden/indra/newview/llvograss.h b/linden/indra/newview/llvograss.h index f5b0c5d..679f5dc 100644 --- a/linden/indra/newview/llvograss.h +++ b/linden/indra/newview/llvograss.h @@ -56,8 +56,8 @@ public: U32 block_num, const EObjectUpdateType update_type, LLDataPacker *dp); - static void import(FILE *file, LLMessageSystem *mesgsys, const LLVector3 &pos); - /*virtual*/ void exportFile(FILE *file, const LLVector3 &position); + static void import(LLFILE *file, LLMessageSystem *mesgsys, const LLVector3 &pos); + /*virtual*/ void exportFile(LLFILE *file, const LLVector3 &position); void updateDrawable(BOOL force_damped); diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp index 738eeac..7f63aca 100644 --- a/linden/indra/newview/llvoiceclient.cpp +++ b/linden/indra/newview/llvoiceclient.cpp @@ -268,7 +268,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl( } else { - llinfos << "parsing: " << mInput.substr(start, delim - start) << llendl; + LL_INFOS("Voice") << "parsing: " << mInput.substr(start, delim - start) << LL_ENDL; } } @@ -287,12 +287,12 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl( if(start != 0) mInput = mInput.substr(start); -// llinfos << "at end, mInput is: " << mInput << llendl; + LL_DEBUGS("Voice") << "at end, mInput is: " << mInput << LL_ENDL; if(!gVoiceClient->mConnected) { // If voice has been disabled, we just want to close the socket. This does so. - llinfos << "returning STATUS_STOP" << llendl; + LL_INFOS("Voice") << "returning STATUS_STOP" << LL_ENDL; return STATUS_STOP; } @@ -366,17 +366,17 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr) } } } - //llinfos << tag << " (" << responseDepth << ")" << llendl; + LL_DEBUGS("Voice") << tag << " (" << responseDepth << ")" << LL_ENDL; } else { if (ignoringTags) { - //llinfos << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << llendl; + LL_DEBUGS("Voice") << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL; } else { - //llinfos << tag << " (" << responseDepth << ")" << llendl; + LL_DEBUGS("Voice") << tag << " (" << responseDepth << ")" << LL_ENDL; // Ignore the InputXml stuff so we don't get confused if (strcmp("InputXml", tag) == 0) @@ -385,7 +385,7 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr) ignoreDepth = responseDepth; accumulateText = false; - //llinfos << "starting ignore, ignoreDepth is " << ignoreDepth << llendl; + LL_DEBUGS("Voice") << "starting ignore, ignoreDepth is " << ignoreDepth << LL_ENDL; } else if (strcmp("CaptureDevices", tag) == 0) { @@ -413,18 +413,18 @@ void LLVivoxProtocolParser::EndTag(const char *tag) { if (ignoreDepth == responseDepth) { - //llinfos << "end of ignore" << llendl; + LL_DEBUGS("Voice") << "end of ignore" << LL_ENDL; ignoringTags = false; } else { - //llinfos << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << llendl; + LL_DEBUGS("Voice") << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL; } } if (!ignoringTags) { - //llinfos << "processing tag " << tag << " (depth = " << responseDepth << ")" << llendl; + LL_DEBUGS("Voice") << "processing tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL; // Closing a tag. Finalize the text we've accumulated and reset if (strcmp("ReturnCode", tag) == 0) @@ -531,7 +531,7 @@ void LLVivoxProtocolParser::CharData(const char *buffer, int length) void LLVivoxProtocolParser::processResponse(std::string tag) { - //llinfos << tag << llendl; + LL_DEBUGS("Voice") << tag << LL_ENDL; if (isEvent) { @@ -700,9 +700,9 @@ private: void LLVoiceClientCapResponder::error(U32 status, const std::string& reason) { - llwarns << "LLVoiceClientCapResponder::error(" + LL_WARNS("Voice") << "LLVoiceClientCapResponder::error(" << status << ": " << reason << ")" - << llendl; + << LL_ENDL; } void LLVoiceClientCapResponder::result(const LLSD& content) @@ -710,8 +710,8 @@ void LLVoiceClientCapResponder::result(const LLSD& content) LLSD::map_const_iterator iter; for(iter = content.beginMap(); iter != content.endMap(); ++iter) { - llinfos << "LLVoiceClientCapResponder::result got " - << iter->first << llendl; + LL_DEBUGS("Voice") << "LLVoiceClientCapResponder::result got " + << iter->first << LL_ENDL; } if ( content.has("voice_credentials") ) @@ -833,6 +833,7 @@ LLVoiceClient::LLVoiceClient() setCaptureDevice(captureDevice); std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); setRenderDevice(renderDevice); + mLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled"); mTuningMode = false; mTuningEnergy = 0.0f; @@ -917,7 +918,7 @@ bool LLVoiceClient::writeString(const std::string &str) apr_size_t size = (apr_size_t)str.size(); apr_size_t written = size; -// llinfos << "sending: " << str << llendl; + LL_DEBUGS("Voice") << "sending: " << str << LL_ENDL; // MBW -- XXX -- check return code - sockets will fail (broken, etc.) err = apr_socket_send( @@ -940,7 +941,7 @@ bool LLVoiceClient::writeString(const std::string &str) { // Assume any socket error means something bad. For now, just close the socket. char buf[MAX_STRING]; - llwarns << "apr error " << err << " ("<< apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << llendl; + LL_WARNS("Voice") << "apr error " << err << " ("<< apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << LL_ENDL; daemonDied(); } } @@ -964,7 +965,7 @@ void LLVoiceClient::connectorCreate() if(savedLogLevel != "-1") { - llinfos << "creating connector with logging enabled" << llendl; + LL_DEBUGS("Voice") << "creating connector with logging enabled" << LL_ENDL; loglevel = "10"; logpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); } @@ -1013,15 +1014,9 @@ void LLVoiceClient::userAuthorized(const std::string& firstName, const std::stri mAccountDisplayName += " "; mAccountDisplayName += lastName; - llinfos << "name \"" << mAccountDisplayName << "\" , ID " << agentID << llendl; + LL_INFOS("Voice") << "name \"" << mAccountDisplayName << "\" , ID " << agentID << LL_ENDL; - std::string gridname = gGridName; - LLString::toLower(gridname); - if((gGridChoice == GRID_INFO_AGNI) || - ((gGridChoice == GRID_INFO_OTHER) && (gridname.find("agni") != std::string::npos))) - { - sConnectingToAgni = true; - } + sConnectingToAgni = LLViewerLogin::getInstance()->isInProductionGrid(); // MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert. if(sConnectingToAgni) @@ -1064,13 +1059,13 @@ void LLVoiceClient::login( if((getState() >= stateLoggingIn) && (getState() < stateLoggedOut)) { // Already logged in. This is an internal error. - llerrs << "called from wrong state." << llendl; + LL_ERRS("Voice") << "Can't login again. Called from wrong state." << LL_ENDL; } else if ( accountName != mAccountName ) { //TODO: error? - llinfos << "Wrong account name! " << accountName - << " instead of " << mAccountName << llendl; + LL_WARNS("Voice") << "Wrong account name! " << accountName + << " instead of " << mAccountName << LL_ENDL; } else { @@ -1166,7 +1161,7 @@ const char *LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv void LLVoiceClient::setState(state inState) { - llinfos << "entering state " << state2string(inState) << llendl; + LL_DEBUGS("Voice") << "entering state " << state2string(inState) << LL_ENDL; mState = inState; } @@ -1187,7 +1182,7 @@ void LLVoiceClient::stateMachine() if(!mConnected) { // if voice was turned off after the daemon was launched but before we could connect to it, we may need to issue a kill. - llinfos << "Disabling voice before connection to daemon, terminating." << llendl; + LL_INFOS("Voice") << "Disabling voice before connection to daemon, terminating." << LL_ENDL; killGateway(); } @@ -1212,7 +1207,7 @@ void LLVoiceClient::stateMachine() std::string regionName = region->getName(); std::string capURI = region->getCapability("ParcelVoiceInfoRequest"); -// llinfos << "Region name = \"" << regionName <<"\", " << "parcel local ID = " << parcelLocalID << llendl; + LL_DEBUGS("Voice") << "Region name = \"" << regionName <<"\", " << "parcel local ID = " << parcelLocalID << LL_ENDL; // The region name starts out empty and gets filled in later. // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes. @@ -1276,7 +1271,7 @@ void LLVoiceClient::stateMachine() args += " -ll "; args += loglevel; -// llinfos << "Args for SLVoice: " << args << llendl; + LL_DEBUGS("Voice") << "Args for SLVoice: " << args << LL_ENDL; #if LL_WINDOWS PROCESS_INFORMATION pinfo; @@ -1348,7 +1343,7 @@ void LLVoiceClient::stateMachine() } else { - llinfos << exe_path << "not found." << llendl + LL_INFOS("Voice") << exe_path << "not found." << LL_ENDL } } else @@ -1375,7 +1370,7 @@ void LLVoiceClient::stateMachine() break; case stateDaemonLaunched: -// llinfos << "Connecting to vivox daemon" << llendl; + LL_DEBUGS("Voice") << "Connecting to vivox daemon" << LL_ENDL; if(mUpdateTimer.hasExpired()) { mUpdateTimer.setTimerExpirySec(CONNECT_THROTTLE_SECONDS); @@ -1532,7 +1527,7 @@ void LLVoiceClient::stateMachine() if(mTuningMicVolumeDirty) { - llinfos << "setting tuning mic level to " << mTuningMicVolume << llendl; + LL_INFOS("Voice") << "setting tuning mic level to " << mTuningMicVolume << LL_ENDL; stream << "" << "" << mTuningMicVolume << "" @@ -1583,12 +1578,12 @@ void LLVoiceClient::stateMachine() if(mLoginRetryCount > MAX_LOGIN_RETRIES) { - llinfos << "too many login retries, giving up." << llendl; + LL_WARNS("Voice") << "too many login retries, giving up." << LL_ENDL; setState(stateLoginFailed); } else { - llinfos << "will retry login in " << LOGIN_RETRY_SECONDS << " seconds." << llendl; + LL_INFOS("Voice") << "will retry login in " << LOGIN_RETRY_SECONDS << " seconds." << LL_ENDL; mUpdateTimer.start(); mUpdateTimer.setTimerExpirySec(LOGIN_RETRY_SECONDS); setState(stateLoginRetryWait); @@ -1848,7 +1843,7 @@ void LLVoiceClient::stateMachine() case stateJoinSessionFailed: // Transition to error state. Send out any notifications here. - llwarns << "stateJoinSessionFailed: (" << mVivoxErrorStatusCode << "): " << mVivoxErrorStatusString << llendl; + LL_WARNS("Voice") << "stateJoinSessionFailed: (" << mVivoxErrorStatusCode << "): " << mVivoxErrorStatusString << LL_ENDL; notifyStatusObservers(LLVoiceClientStatusObserver::ERROR_UNKNOWN); setState(stateJoinSessionFailedWaiting); break; @@ -1868,8 +1863,7 @@ void LLVoiceClient::stateMachine() case stateMicTuningNoLogin: // *TODO: Implement me. - llwarns << "stateMicTuningNoLogin not handled" - << llendl; + LL_WARNS("Voice") << "stateMicTuningNoLogin not handled" << LL_ENDL; break; } @@ -1938,7 +1932,7 @@ void LLVoiceClient::channelGetListSendMessage() void LLVoiceClient::sessionCreateSendMessage() { - llinfos << "requesting join: " << mNextSessionURI << llendl; + LL_DEBUGS("Voice") << "requesting join: " << mNextSessionURI << LL_ENDL; mSessionURI = mNextSessionURI; mNonSpatialChannel = !mNextSessionSpatial; @@ -1978,7 +1972,7 @@ void LLVoiceClient::sessionCreateSendMessage() void LLVoiceClient::sessionConnectSendMessage() { - llinfos << "connecting to session handle: " << mNextSessionHandle << llendl; + LL_DEBUGS("Voice") << "connecting to session handle: " << mNextSessionHandle << LL_ENDL; mSessionHandle = mNextSessionHandle; mSessionURI = mNextP2PSessionURI; @@ -2007,7 +2001,7 @@ void LLVoiceClient::sessionTerminate() void LLVoiceClient::sessionTerminateSendMessage() { - llinfos << "leaving session: " << mSessionURI << llendl; + LL_DEBUGS("Voice") << "leaving session: " << mSessionURI << LL_ENDL; switch(getState()) { @@ -2026,7 +2020,7 @@ void LLVoiceClient::sessionTerminateSendMessage() } else { - llwarns << "called with no session handle" << llendl; + LL_WARNS("Voice") << "called with no session handle" << LL_ENDL; setState(stateSessionTerminated); } break; @@ -2036,14 +2030,14 @@ void LLVoiceClient::sessionTerminateSendMessage() break; default: - llwarns << "called from unknown state" << llendl; + LL_WARNS("Voice") << "called from unknown state" << LL_ENDL; break; } } void LLVoiceClient::sessionTerminateByHandle(std::string &sessionHandle) { - llinfos << "Sending Session.Terminate with handle " << sessionHandle << llendl; + LL_DEBUGS("Voice") << "Sending Session.Terminate with handle " << sessionHandle << LL_ENDL; std::ostringstream stream; stream @@ -2078,14 +2072,14 @@ void LLVoiceClient::getRenderDevicesSendMessage() void LLVoiceClient::clearCaptureDevices() { // MBW -- XXX -- do something here - llinfos << "called" << llendl; + LL_DEBUGS("Voice") << "called" << LL_ENDL; mCaptureDevices.clear(); } void LLVoiceClient::addCaptureDevice(const std::string& name) { // MBW -- XXX -- do something here - llinfos << name << llendl; + LL_DEBUGS("Voice") << name << LL_ENDL; mCaptureDevices.push_back(name); } @@ -2118,14 +2112,14 @@ void LLVoiceClient::setCaptureDevice(const std::string& name) void LLVoiceClient::clearRenderDevices() { // MBW -- XXX -- do something here - llinfos << "called" << llendl; + LL_DEBUGS("Voice") << "called" << LL_ENDL; mRenderDevices.clear(); } void LLVoiceClient::addRenderDevice(const std::string& name) { // MBW -- XXX -- do something here - llinfos << name << llendl; + LL_DEBUGS("Voice") << name << LL_ENDL; mRenderDevices.push_back(name); } @@ -2209,7 +2203,7 @@ void LLVoiceClient::tuningRenderStopSendMessage() void LLVoiceClient::tuningCaptureStartSendMessage(int duration) { - llinfos << "sending CaptureAudioStart" << llendl; + LL_DEBUGS("Voice") << "sending CaptureAudioStart" << LL_ENDL; std::ostringstream stream; stream @@ -2222,7 +2216,7 @@ void LLVoiceClient::tuningCaptureStartSendMessage(int duration) void LLVoiceClient::tuningCaptureStopSendMessage() { - llinfos << "sending CaptureAudioStop" << llendl; + LL_DEBUGS("Voice") << "sending CaptureAudioStop" << LL_ENDL; std::ostringstream stream; stream @@ -2295,7 +2289,7 @@ void LLVoiceClient::refreshDeviceLists(bool clearCurrentList) void LLVoiceClient::daemonDied() { // The daemon died, so the connection is gone. Reset everything and start over. - llwarns << "Connection to vivox daemon lost. Resetting state."<< llendl; + LL_WARNS("Voice") << "Connection to vivox daemon lost. Resetting state."<< LL_ENDL; closeSocket(); removeAllParticipants(); @@ -2331,7 +2325,7 @@ void LLVoiceClient::sendPositionalUpdate(void) u = mAvatarRot.getUpRow(); a = mAvatarRot.getFwdRow(); -// llinfos << "Sending speaker position " << mSpeakerPosition << llendl; + LL_DEBUGS("Voice") << "Sending speaker position " << mAvatarPosition << LL_ENDL; stream << "" @@ -2394,7 +2388,7 @@ void LLVoiceClient::sendPositionalUpdate(void) u = earRot.getUpRow(); a = earRot.getFwdRow(); -// llinfos << "Sending listener position " << mListenerPosition << llendl; + LL_DEBUGS("Voice") << "Sending listener position " << earPosition << LL_ENDL; stream << "" @@ -2434,7 +2428,7 @@ void LLVoiceClient::sendPositionalUpdate(void) // NOTE that the state of "PTT" is the inverse of "local mute". // (i.e. when PTT is true, we send a mute command with "false", and vice versa) -// llinfos << "Sending MuteLocalMic command with parameter " << (mPTT?"false":"true") << llendl; + LL_DEBUGS("Voice") << "Sending MuteLocalMic command with parameter " << (mPTT?"false":"true") << LL_ENDL; stream << "" << "" << mConnectorHandle << "" @@ -2455,7 +2449,7 @@ void LLVoiceClient::sendPositionalUpdate(void) { int volume = p->mOnMuteList?0:p->mUserVolume; - llinfos << "Setting volume for avatar " << p->mAvatarID << " to " << volume << llendl; + LL_INFOS("Voice") << "Setting volume for avatar " << p->mAvatarID << " to " << volume << LL_ENDL; // Send a mute/unumte command for the user (actually "volume for me"). stream << "" @@ -2472,7 +2466,7 @@ void LLVoiceClient::sendPositionalUpdate(void) if(mSpeakerMuteDirty) { const char *muteval = ((mSpeakerVolume == -100)?"true":"false"); - llinfos << "Setting speaker mute to " << muteval << llendl; + LL_INFOS("Voice") << "Setting speaker mute to " << muteval << LL_ENDL; stream << "" << "" << mConnectorHandle << "" @@ -2482,7 +2476,7 @@ void LLVoiceClient::sendPositionalUpdate(void) if(mSpeakerVolumeDirty) { - llinfos << "Setting speaker volume to " << mSpeakerVolume << llendl; + LL_INFOS("Voice") << "Setting speaker volume to " << mSpeakerVolume << LL_ENDL; stream << "" << "" << mConnectorHandle << "" @@ -2492,7 +2486,7 @@ void LLVoiceClient::sendPositionalUpdate(void) if(mMicVolumeDirty) { - llinfos << "Setting mic volume to " << mMicVolume << llendl; + LL_INFOS("Voice") << "Setting mic volume to " << mMicVolume << LL_ENDL; stream << "" << "" << mConnectorHandle << "" @@ -2529,7 +2523,7 @@ void LLVoiceClient::sendPositionalUpdate(void) void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream) { - llinfos << "Setting input device = \"" << mCaptureDevice << "\"" << llendl; + LL_DEBUGS("Voice") << "Setting input device = \"" << mCaptureDevice << "\"" << LL_ENDL; stream << "" @@ -2540,7 +2534,7 @@ void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream) void LLVoiceClient::buildSetRenderDevice(std::ostringstream &stream) { - llinfos << "Setting output device = \"" << mRenderDevice << "\"" << llendl; + LL_DEBUGS("Voice") << "Setting output device = \"" << mRenderDevice << "\"" << LL_ENDL; stream << "" @@ -2556,7 +2550,7 @@ void LLVoiceClient::connectorCreateResponse(int statusCode, std::string &statusS { if(statusCode != 0) { - llwarns << "Connector.Create response failure: " << statusString << llendl; + LL_WARNS("Voice") << "Connector.Create response failure: " << statusString << LL_ENDL; setState(stateConnectorFailed); } else @@ -2572,19 +2566,19 @@ void LLVoiceClient::connectorCreateResponse(int statusCode, std::string &statusS void LLVoiceClient::loginResponse(int statusCode, std::string &statusString, std::string &accountHandle) { - llinfos << "Account.Login response (" << statusCode << "): " << statusString << llendl; + LL_DEBUGS("Voice") << "Account.Login response (" << statusCode << "): " << statusString << LL_ENDL; // Status code of 20200 means "bad password". We may want to special-case that at some point. if ( statusCode == 401 ) { // Login failure which is probably caused by the delay after a user's password being updated. - llinfos << "Account.Login response failure (" << statusCode << "): " << statusString << llendl; + LL_INFOS("Voice") << "Account.Login response failure (" << statusCode << "): " << statusString << LL_ENDL; setState(stateLoginRetry); } else if(statusCode != 0) { - llwarns << "Account.Login response failure (" << statusCode << "): " << statusString << llendl; + LL_WARNS("Voice") << "Account.Login response failure (" << statusCode << "): " << statusString << LL_ENDL; setState(stateLoginFailed); } else @@ -2603,7 +2597,7 @@ void LLVoiceClient::channelGetListResponse(int statusCode, std::string &statusSt { if(statusCode != 0) { - llwarns << "Account.ChannelGetList response failure: " << statusString << llendl; + LL_WARNS("Voice") << "Account.ChannelGetList response failure: " << statusString << LL_ENDL; switchChannel(); } else @@ -2613,12 +2607,12 @@ void LLVoiceClient::channelGetListResponse(int statusCode, std::string &statusSt if(uri.empty()) { // Lookup failed, can't join a channel for this area. - llinfos << "failed to map channel name: " << mChannelName << llendl; + LL_INFOS("Voice") << "failed to map channel name: " << mChannelName << LL_ENDL; } else { // We have a sip URL for this area. - llinfos << "mapped channel " << mChannelName << " to URI "<< uri << llendl; + LL_INFOS("Voice") << "mapped channel " << mChannelName << " to URI "<< uri << LL_ENDL; } // switchChannel with an empty uri string will do the right thing (leave channel and not rejoin) @@ -2630,13 +2624,13 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr { if(statusCode != 0) { - llwarns << "Session.Create response failure (" << statusCode << "): " << statusString << llendl; + LL_WARNS("Voice") << "Session.Create response failure (" << statusCode << "): " << statusString << LL_ENDL; // if(statusCode == 1015) // { // if(getState() == stateJoiningSession) // { // // this happened during a real join. Going to sessionTerminated should cause a retry in appropriate cases. -// llwarns << "session handle \"" << sessionHandle << "\", mSessionStateEventHandle \"" << mSessionStateEventHandle << "\""<< llendl; +// LL_WARNS("Voice") << "session handle \"" << sessionHandle << "\", mSessionStateEventHandle \"" << mSessionStateEventHandle << "\""<< LL_ENDL; // if(!sessionHandle.empty()) // { // // This session is bad. Terminate it. @@ -2658,7 +2652,7 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr // else // { // // We didn't think we were in the middle of a join. Don't change state. -// llwarns << "Not in stateJoiningSession, ignoring" << llendl; +// LL_WARNS("Voice") << "Not in stateJoiningSession, ignoring" << LL_ENDL; // } // } // else @@ -2670,7 +2664,7 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr } else { - llinfos << "Session.Create response received (success), session handle is " << sessionHandle << llendl; + LL_DEBUGS("Voice") << "Session.Create response received (success), session handle is " << sessionHandle << LL_ENDL; if(getState() == stateJoiningSession) { // This is also grabbed in the SessionStateChangeEvent handler, but it might be useful to have it early... @@ -2688,10 +2682,10 @@ void LLVoiceClient::sessionConnectResponse(int statusCode, std::string &statusSt { if(statusCode != 0) { - llwarns << "Session.Connect response failure (" << statusCode << "): " << statusString << llendl; + LL_WARNS("Voice") << "Session.Connect response failure (" << statusCode << "): " << statusString << LL_ENDL; // if(statusCode == 1015) // { -// llwarns << "terminating existing session" << llendl; +// LL_WARNS("Voice") << "terminating existing session" << LL_ENDL; // sessionTerminate(); // } // else @@ -2703,7 +2697,7 @@ void LLVoiceClient::sessionConnectResponse(int statusCode, std::string &statusSt } else { - llinfos << "Session.Connect response received (success)" << llendl; + LL_DEBUGS("Voice") << "Session.Connect response received (success)" << LL_ENDL; } } @@ -2711,7 +2705,7 @@ void LLVoiceClient::sessionTerminateResponse(int statusCode, std::string &status { if(statusCode != 0) { - llwarns << "Session.Terminate response failure: (" << statusCode << "): " << statusString << llendl; + LL_WARNS("Voice") << "Session.Terminate response failure: (" << statusCode << "): " << statusString << LL_ENDL; if(getState() == stateLeavingSession) { // This is probably "(404): Server reporting Failure. Not a member of this conference." @@ -2726,7 +2720,7 @@ void LLVoiceClient::logoutResponse(int statusCode, std::string &statusString) { if(statusCode != 0) { - llwarns << "Account.Logout response failure: " << statusString << llendl; + LL_WARNS("Voice") << "Account.Logout response failure: " << statusString << LL_ENDL; // MBW -- XXX -- Should this ever fail? do we care if it does? } @@ -2740,7 +2734,7 @@ void LLVoiceClient::connectorShutdownResponse(int statusCode, std::string &statu { if(statusCode != 0) { - llwarns << "Connector.InitiateShutdown response failure: " << statusString << llendl; + LL_WARNS("Voice") << "Connector.InitiateShutdown response failure: " << statusString << LL_ENDL; // MBW -- XXX -- Should this ever fail? do we care if it does? } @@ -2764,7 +2758,7 @@ void LLVoiceClient::sessionStateChangeEvent( switch(state) { case 4: // I see this when joining the session - llinfos << "joined session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << llendl; + LL_INFOS("Voice") << "joined session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << LL_ENDL; // Session create succeeded, move forward. mSessionStateEventHandle = sessionHandle; @@ -2777,23 +2771,23 @@ void LLVoiceClient::sessionStateChangeEvent( setState(stateSessionJoined); //RN: the uriString being returned by vivox here is actually your account uri, not the channel // you are attempting to join, so ignore it - //llinfos << "received URI " << uriString << "(previously " << mSessionURI << ")" << llendl; + //LL_DEBUGS("Voice") << "received URI " << uriString << "(previously " << mSessionURI << ")" << LL_ENDL; //mSessionURI = uriString; } } else if(sessionHandle == mNextSessionHandle) { -// llinfos << "received URI " << uriString << ", name " << nameString << " for next session (handle " << mNextSessionHandle << ")" << llendl; +// LL_DEBUGS("Voice") << "received URI " << uriString << ", name " << nameString << " for next session (handle " << mNextSessionHandle << ")" << LL_ENDL; } else { - llwarns << "joining unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << llendl; + LL_WARNS("Voice") << "joining unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << LL_ENDL; // MBW -- XXX -- Should we send a Session.Terminate here? } break; case 5: // I see this when leaving the session - llinfos << "left session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << llendl; + LL_INFOS("Voice") << "left session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << LL_ENDL; // Set the session handle to the empty string. If we get back to stateJoiningSession, we'll want to wait for the new session handle. if(sessionHandle == mSessionHandle) @@ -2821,17 +2815,17 @@ void LLVoiceClient::sessionStateChangeEvent( case stateJoinSessionFailed: case stateJoinSessionFailedWaiting: // normal transition - llinfos << "left session " << sessionHandle << "in state " << state2string(getState()) << llendl; + LL_INFOS("Voice") << "left session " << sessionHandle << "in state " << state2string(getState()) << LL_ENDL; setState(stateSessionTerminated); break; case stateSessionTerminated: // this will happen sometimes -- there are cases where we send the terminate and then go straight to this state. - llwarns << "left session " << sessionHandle << "in state " << state2string(getState()) << llendl; + LL_WARNS("Voice") << "left session " << sessionHandle << "in state " << state2string(getState()) << LL_ENDL; break; default: - llwarns << "unexpected SessionStateChangeEvent (left session) in state " << state2string(getState()) << llendl; + LL_WARNS("Voice") << "unexpected SessionStateChangeEvent (left session) in state " << state2string(getState()) << LL_ENDL; setState(stateSessionTerminated); break; } @@ -2842,14 +2836,14 @@ void LLVoiceClient::sessionStateChangeEvent( } else { - llinfos << "leaving unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << llendl; + LL_INFOS("Voice") << "leaving unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << LL_ENDL; } mSessionStateEventHandle.clear(); mSessionStateEventURI.clear(); break; default: - llwarns << "unknown state: " << state << llendl; + LL_WARNS("Voice") << "unknown state: " << state << LL_ENDL; break; } } @@ -2860,7 +2854,7 @@ void LLVoiceClient::loginStateChangeEvent( std::string &statusString, int state) { - llinfos << "state is " << state << llendl; + LL_DEBUGS("Voice") << "state is " << state << LL_ENDL; /* According to Mike S., status codes for this event are: login_state_logged_out=0, @@ -2881,7 +2875,8 @@ void LLVoiceClient::loginStateChangeEvent( break; default: -// llwarns << "unknown state: " << state << llendl; + //Used to be a commented out warning + LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL; break; } } @@ -2893,13 +2888,13 @@ void LLVoiceClient::sessionNewEvent( std::string &nameString, std::string &uriString) { -// llinfos << "state is " << state << llendl; + LL_DEBUGS("Voice") << "state is " << state << LL_ENDL; switch(state) { case 0: { - llinfos << "session handle = " << eventSessionHandle << ", name = " << nameString << ", uri = " << uriString << llendl; + LL_DEBUGS("Voice") << "session handle = " << eventSessionHandle << ", name = " << nameString << ", uri = " << uriString << LL_ENDL; LLUUID caller_id; if(IDFromName(nameString, caller_id)) @@ -2917,13 +2912,13 @@ void LLVoiceClient::sessionNewEvent( } else { - llwarns << "Could not generate caller id from uri " << uriString << llendl; + LL_WARNS("Voice") << "Could not generate caller id from uri " << uriString << LL_ENDL; } } break; default: - llwarns << "unknown state: " << state << llendl; + LL_WARNS("Voice") << "unknown state: " << state << LL_ENDL; break; } } @@ -2938,7 +2933,7 @@ void LLVoiceClient::participantStateChangeEvent( int participantType) { participantState *participant = NULL; - llinfos << "state is " << state << llendl; + LL_DEBUGS("Voice") << "state is " << state << LL_ENDL; switch(state) { @@ -2947,8 +2942,8 @@ void LLVoiceClient::participantStateChangeEvent( if(participant) { participant->mName = nameString; - llinfos << "added participant \"" << participant->mName - << "\" (" << participant->mAvatarID << ")"<< llendl; + LL_DEBUGS("Voice") << "added participant \"" << participant->mName + << "\" (" << participant->mAvatarID << ")"<< LL_ENDL; } break; case 9: // I see this when a participant leaves @@ -2959,7 +2954,7 @@ void LLVoiceClient::participantStateChangeEvent( } break; default: -// llwarns << "unknown state: " << state << llendl; + LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL; break; } } @@ -2989,13 +2984,13 @@ void LLVoiceClient::participantPropertiesEvent( } else { - llwarns << "unknown participant: " << uriString << llendl; + LL_WARNS("Voice") << "unknown participant: " << uriString << LL_ENDL; } } void LLVoiceClient::auxAudioPropertiesEvent(F32 energy) { -// llinfos << "got energy " << energy << llendl; + LL_DEBUGS("Voice") << "got energy " << energy << LL_ENDL; mTuningEnergy = energy; } @@ -3053,7 +3048,7 @@ LLVoiceClient::participantState *LLVoiceClient::addParticipant(const std::string } } - llinfos << "participant \"" << result->mURI << "\" added." << llendl; + LL_DEBUGS("Voice") << "participant \"" << result->mURI << "\" added." << LL_ENDL; } return result; @@ -3079,7 +3074,7 @@ void LLVoiceClient::removeParticipant(LLVoiceClient::participantState *participa { participantMap::iterator iter = mParticipantMap.find(participant->mURI); - llinfos << "participant \"" << participant->mURI << "\" (" << participant->mAvatarID << ") removed." << llendl; + LL_DEBUGS("Voice") << "participant \"" << participant->mURI << "\" (" << participant->mAvatarID << ") removed." << LL_ENDL; mParticipantMap.erase(iter); delete participant; @@ -3089,7 +3084,7 @@ void LLVoiceClient::removeParticipant(LLVoiceClient::participantState *participa void LLVoiceClient::removeAllParticipants() { - llinfos << "called" << llendl; + LL_DEBUGS("Voice") << "called" << LL_ENDL; while(!mParticipantMap.empty()) { @@ -3172,7 +3167,7 @@ void LLVoiceClient::clearChannelMap(void) void LLVoiceClient::addChannelMapEntry(std::string &name, std::string &uri) { -// llinfos << "Adding channel name mapping: " << name << " -> " << uri << llendl; + LL_DEBUGS("Voice") << "Adding channel name mapping: " << name << " -> " << uri << LL_ENDL; mChannelMap.insert(channelMap::value_type(name, uri)); } @@ -3195,7 +3190,7 @@ void LLVoiceClient::parcelChanged() if(getState() >= stateLoggedIn) { // If the user is logged in, start a channel lookup. - llinfos << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << llendl; + LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL; std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest"); LLSD data; @@ -3207,7 +3202,7 @@ void LLVoiceClient::parcelChanged() else { // The transition to stateLoggedIn needs to kick this off again. - llinfos << "not logged in yet, deferring" << llendl; + LL_INFOS("Voice") << "not logged in yet, deferring" << LL_ENDL; } } @@ -3219,7 +3214,7 @@ void LLVoiceClient::switchChannel( { bool needsSwitch = false; - llinfos << "called in state " << state2string(getState()) << " with uri \"" << uri << "\"" << llendl; + LL_DEBUGS("Voice") << "called in state " << state2string(getState()) << " with uri \"" << uri << "\"" << LL_ENDL; switch(getState()) { @@ -3258,12 +3253,12 @@ void LLVoiceClient::switchChannel( if(uri.empty()) { // Leave any channel we may be in - llinfos << "leaving channel" << llendl; + LL_DEBUGS("Voice") << "leaving channel" << LL_ENDL; notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED); } else { - llinfos << "switching to channel " << uri << llendl; + LL_DEBUGS("Voice") << "switching to channel " << uri << LL_ENDL; } if(getState() <= stateNoChannel) @@ -3312,12 +3307,12 @@ void LLVoiceClient::setSpatialChannel( mSpatialSessionURI = uri; mAreaVoiceDisabled = mSpatialSessionURI.empty(); - llinfos << "got spatial channel uri: \"" << uri << "\"" << llendl; + LL_DEBUGS("Voice") << "got spatial channel uri: \"" << uri << "\"" << LL_ENDL; if(mNonSpatialChannel || !mNextSessionSpatial) { // User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels. - llinfos << "in non-spatial chat, not switching channels" << llendl; + LL_INFOS("Voice") << "in non-spatial chat, not switching channels" << LL_ENDL; } else { @@ -3559,7 +3554,7 @@ void LLVoiceClient::leaveChannel(void) { if(getState() == stateRunning) { -// llinfos << "leaving channel for teleport/logout" << llendl; + LL_DEBUGS("Voice") << "leaving channel for teleport/logout" << LL_ENDL; mChannelName.clear(); sessionTerminate(); } @@ -3607,6 +3602,24 @@ bool LLVoiceClient::voiceEnabled() return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice"); } +void LLVoiceClient::setLipSyncEnabled(BOOL enabled) +{ + mLipSyncEnabled = enabled; +} + +BOOL LLVoiceClient::lipSyncEnabled() +{ + + if ( mVoiceEnabled && stateDisabled != getState() ) + { + return mLipSyncEnabled; + } + else + { + return FALSE; + } +} + void LLVoiceClient::setUsePTT(bool usePTT) { if(usePTT && !mUsePTT) @@ -3650,7 +3663,7 @@ void LLVoiceClient::setEarLocation(S32 loc) { if(mEarLocation != loc) { - llinfos << "Setting mEarLocation to " << loc << llendl; + LL_DEBUGS("Voice") << "Setting mEarLocation to " << loc << LL_ENDL; mEarLocation = loc; mSpatialCoordsDirty = true; @@ -3659,7 +3672,7 @@ void LLVoiceClient::setEarLocation(S32 loc) void LLVoiceClient::setVoiceVolume(F32 volume) { -// llinfos << "volume is " << volume << llendl; + LL_DEBUGS("Voice") << "volume is " << volume << LL_ENDL; // incoming volume has the range [0.0 ... 1.0], with 0.5 as the default. // Map it as follows: 0.0 -> -100, 0.5 -> 24, 1.0 -> 50 @@ -3708,7 +3721,7 @@ void LLVoiceClient::setVivoxDebugServerName(std::string &serverName) void LLVoiceClient::keyDown(KEY key, MASK mask) { -// llinfos << "key is " << LLKeyboard::stringFromKey(key) << llendl; + LL_DEBUGS("Voice") << "key is " << LLKeyboard::stringFromKey(key) << LL_ENDL; if (gKeyboard->getKeyRepeated(key)) { @@ -4002,7 +4015,7 @@ void LLVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::EStatusTy mVivoxErrorStatusCode = 0; } - llinfos << " " << LLVoiceClientStatusObserver::status2string(status) << ", session URI " << mSessionURI << llendl; + LL_DEBUGS("Voice") << " " << LLVoiceClientStatusObserver::status2string(status) << ", session URI " << mSessionURI << LL_ENDL; for (status_observer_set_t::iterator it = mStatusObservers.begin(); it != mStatusObservers.end(); diff --git a/linden/indra/newview/llvoiceclient.h b/linden/indra/newview/llvoiceclient.h index d12bfa8..d1609a8 100644 --- a/linden/indra/newview/llvoiceclient.h +++ b/linden/indra/newview/llvoiceclient.h @@ -210,6 +210,8 @@ class LLVoiceClient: public LLSingleton void setMicGain(F32 volume); void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal) void setVivoxDebugServerName(std::string &serverName); + void setLipSyncEnabled(BOOL enabled); + BOOL lipSyncEnabled(); // PTT key triggering void keyDown(KEY key, MASK mask); @@ -516,6 +518,8 @@ class LLVoiceClient: public LLSingleton LLTimer mUpdateTimer; + BOOL mLipSyncEnabled; + typedef std::set observer_set_t; observer_set_t mObservers; diff --git a/linden/indra/newview/llvoicevisualizer.cpp b/linden/indra/newview/llvoicevisualizer.cpp index 6b2a3e6..ba16feb 100644 --- a/linden/indra/newview/llvoicevisualizer.cpp +++ b/linden/indra/newview/llvoicevisualizer.cpp @@ -45,7 +45,7 @@ #include "llviewerimage.h" #include "llviewerimagelist.h" #include "llvoiceclient.h" -#include "llglimmediate.h" +#include "llrender.h" //brent's wave image //29de489d-0491-fb00-7dab-f9e686d31e83 @@ -79,6 +79,35 @@ const F32 DEFAULT_MAXIMUM_GESTICULATION_AMPLITUDE = 1.0f; const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code. const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL + +//------------------------------------------------------------------ +// handles parameter updates +//------------------------------------------------------------------ +static bool handleVoiceVisualizerPrefsChanged(const LLSD& newvalue) +{ + // Note: Ignore the specific event value, we look up the ones we want + LLVoiceVisualizer::setPreferences(); + return true; +} + +//------------------------------------------------------------------ +// Initialize the statics +//------------------------------------------------------------------ +bool LLVoiceVisualizer::sPrefsInitialized = false; +BOOL LLVoiceVisualizer::sLipSyncEnabled = FALSE; +F32* LLVoiceVisualizer::sOoh = NULL; +F32* LLVoiceVisualizer::sAah = NULL; +U32 LLVoiceVisualizer::sOohs = 0; +U32 LLVoiceVisualizer::sAahs = 0; +F32 LLVoiceVisualizer::sOohAahRate = 0.0f; +F32* LLVoiceVisualizer::sOohPowerTransfer = NULL; +U32 LLVoiceVisualizer::sOohPowerTransfers = 0; +F32 LLVoiceVisualizer::sOohPowerTransfersf = 0.0f; +F32* LLVoiceVisualizer::sAahPowerTransfer = NULL; +U32 LLVoiceVisualizer::sAahPowerTransfers = 0; +F32 LLVoiceVisualizer::sAahPowerTransfersf = 0.0f; + + //----------------------------------------------- // constructor //----------------------------------------------- @@ -87,6 +116,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type ) { mCurrentTime = mTimer.getTotalSeconds(); mPreviousTime = mCurrentTime; + mStartTime = mCurrentTime; mVoiceSourceWorldPosition = LLVector3( 0.0f, 0.0f, 0.0f ); mSpeakingAmplitude = 0.0f; mCurrentlySpeaking = false; @@ -105,7 +135,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type ) "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", - "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", + "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", "29de489d-0491-fb00-7dab-f9e686d31e83.j2c" }; @@ -117,7 +147,23 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type ) mSoundSymbol.mWaveOpacity [i] = 1.0f; mSoundSymbol.mWaveExpansion [i] = 1.0f; } - + + // The first instance loads the initial state from prefs. + if (!sPrefsInitialized) + { + setPreferences(); + + // Set up our listener to get updates on all prefs values we care about. + gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1)); + gSavedSettings.getControl("LipSyncOohAahRate")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1)); + gSavedSettings.getControl("LipSyncOoh")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1)); + gSavedSettings.getControl("LipSyncAah")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1)); + gSavedSettings.getControl("LipSyncOohPowerTransfer")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1)); + gSavedSettings.getControl("LipSyncAahPowerTransfer")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1)); + + sPrefsInitialized = true; + } + }//--------------------------------------------------- //--------------------------------------------------- @@ -144,6 +190,7 @@ void LLVoiceVisualizer::setVoiceEnabled( bool v ) //--------------------------------------------------- void LLVoiceVisualizer::setStartSpeaking() { + mStartTime = mTimer.getTotalSeconds(); mCurrentlySpeaking = true; mSoundSymbol.mActive = true; @@ -176,6 +223,130 @@ void LLVoiceVisualizer::setSpeakingAmplitude( F32 a ) //--------------------------------------------------- +void LLVoiceVisualizer::setPreferences( ) +{ + sLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled"); + sOohAahRate = gSavedSettings.getF32("LipSyncOohAahRate"); + + std::string oohString = gSavedSettings.getString("LipSyncOoh"); + lipStringToF32s (oohString, sOoh, sOohs); + + std::string aahString = gSavedSettings.getString("LipSyncAah"); + lipStringToF32s (aahString, sAah, sAahs); + + std::string oohPowerString = gSavedSettings.getString("LipSyncOohPowerTransfer"); + lipStringToF32s (oohPowerString, sOohPowerTransfer, sOohPowerTransfers); + sOohPowerTransfersf = (F32) sOohPowerTransfers; + + std::string aahPowerString = gSavedSettings.getString("LipSyncAahPowerTransfer"); + lipStringToF32s (aahPowerString, sAahPowerTransfer, sAahPowerTransfers); + sAahPowerTransfersf = (F32) sAahPowerTransfers; + +}//--------------------------------------------------- + + +//--------------------------------------------------- +// convert a string of digits to an array of floats. +// the result for each digit is the value of the +// digit multiplied by 0.11 +//--------------------------------------------------- +void LLVoiceVisualizer::lipStringToF32s ( std::string& in_string, F32*& out_F32s, U32& count_F32s ) +{ + delete[] out_F32s; // get rid of the current array + + count_F32s = in_string.length(); + if (count_F32s == 0) + { + // we don't like zero length arrays + + count_F32s = 1; + out_F32s = new F32[1]; + out_F32s[0] = 0.0f; + } + else + { + out_F32s = new F32[count_F32s]; + + for (U32 i=0; i 9) + { + four_bits = 9; + } + out_F32s[i] = 0.11f * (F32) four_bits; + } + } + +}//--------------------------------------------------- + + +//-------------------------------------------------------------------------- +// find the amount to blend the ooh and aah mouth morphs +//-------------------------------------------------------------------------- +void LLVoiceVisualizer::lipSyncOohAah( F32& ooh, F32& aah ) +{ + if( ( sLipSyncEnabled == TRUE ) && mCurrentlySpeaking ) + { + U32 transfer_index = (U32) (sOohPowerTransfersf * mSpeakingAmplitude); + if (transfer_index < 0) + { + transfer_index = 0; + } + if (transfer_index >= sOohPowerTransfers) + { + transfer_index = sOohPowerTransfers - 1; + } + F32 transfer_ooh = sOohPowerTransfer[transfer_index]; + + transfer_index = (U32) (sAahPowerTransfersf * mSpeakingAmplitude); + if (transfer_index < 0) + { + transfer_index = 0; + } + if (transfer_index >= sAahPowerTransfers) + { + transfer_index = sAahPowerTransfers - 1; + } + F32 transfer_aah = sAahPowerTransfer[transfer_index]; + + F64 current_time = mTimer.getTotalSeconds(); + F64 elapsed_time = current_time - mStartTime; + U32 elapsed_frames = (U32) (elapsed_time * sOohAahRate); + U32 elapsed_oohs = elapsed_frames % sOohs; + U32 elapsed_aahs = elapsed_frames % sAahs; + + ooh = transfer_ooh * sOoh[elapsed_oohs]; + aah = transfer_aah * sAah[elapsed_aahs]; + + /* + llinfos << " elapsed frames " << elapsed_frames + << " ooh " << ooh + << " aah " << aah + << " transfer ooh" << transfer_ooh + << " transfer aah" << transfer_aah + << " start time " << mStartTime + << " current time " << current_time + << " elapsed time " << elapsed_time + << " elapsed oohs " << elapsed_oohs + << " elapsed aahs " << elapsed_aahs + << llendl; + */ + } + else + { + ooh = 0.0f; + aah = 0.0f; + } + +}//--------------------------------------------------- + + +//--------------------------------------------------- // this method is inherited from HUD Effect //--------------------------------------------------- void LLVoiceVisualizer::render() diff --git a/linden/indra/newview/llvoicevisualizer.h b/linden/indra/newview/llvoicevisualizer.h index 8b1636f..76eb282 100644 --- a/linden/indra/newview/llvoicevisualizer.h +++ b/linden/indra/newview/llvoicevisualizer.h @@ -90,7 +90,9 @@ class LLVoiceVisualizer : public LLHUDEffect void setStopSpeaking(); // tell me when the av stops speaking bool getCurrentlySpeaking(); // the get for the above set VoiceGesticulationLevel getCurrentGesticulationLevel(); // based on voice amplitude, I'll give you the current "energy level" of avatar speech - + static void setPreferences( ); + static void lipStringToF32s ( std::string& in_string, F32*& out_F32s, U32& count_F32s ); // convert a string of digits to an array of floats + void lipSyncOohAah( F32& ooh, F32& aah ); void render(); // inherited from HUD Effect void packData(LLMessageSystem *mesgsys); // inherited from HUD Effect void unpackData(LLMessageSystem *mesgsys, S32 blocknum); // inherited from HUD Effect @@ -124,6 +126,7 @@ class LLVoiceVisualizer : public LLHUDEffect }; LLFrameTimer mTimer; // so I can ask the current time in seconds + F64 mStartTime; // time in seconds when speaking started F64 mCurrentTime; // current time in seconds, captured every step F64 mPreviousTime; // copy of "current time" from last frame SoundSymbol mSoundSymbol; // the sound symbol that appears over the avatar's head @@ -134,6 +137,24 @@ class LLVoiceVisualizer : public LLHUDEffect F32 mMaxGesticulationAmplitude; // this is the upper-limit of the envelope of detectable gesticulation leves F32 mMinGesticulationAmplitude; // this is the lower-limit of the envelope of detectable gesticulation leves + //--------------------------------------------------- + // private static members + //--------------------------------------------------- + + static BOOL sLipSyncEnabled; // 0 disabled, 1 babble loop + static bool sPrefsInitialized; // the first instance will initialize the static members + static F32* sOoh; // the babble loop of amplitudes for the ooh morph + static F32* sAah; // the babble loop of amplitudes for the ooh morph + static U32 sOohs; // the number of entries in the ooh loop + static U32 sAahs; // the number of entries in the aah loop + static F32 sOohAahRate; // frames per second for the babble loop + static F32* sOohPowerTransfer; // the power transfer characteristics for the ooh amplitude + static U32 sOohPowerTransfers; // the number of entries in the ooh transfer characteristics + static F32 sOohPowerTransfersf; // the number of entries in the ooh transfer characteristics as a float + static F32* sAahPowerTransfer; // the power transfer characteristics for the aah amplitude + static U32 sAahPowerTransfers; // the number of entries in the aah transfer characteristics + static F32 sAahPowerTransfersf; // the number of entries in the aah transfer characteristics as a float + };//----------------------------------------------------------------- // end of LLVoiceVisualizer class //------------------------------------------------------------------ diff --git a/linden/indra/newview/llvosky.cpp b/linden/indra/newview/llvosky.cpp index 8e60010..eae322e 100644 --- a/linden/indra/newview/llvosky.cpp +++ b/linden/indra/newview/llvosky.cpp @@ -194,11 +194,13 @@ inline void color_gamma_correct(LLColor3 &col) S32 LLSkyTex::sComponents = 4; S32 LLSkyTex::sResolution = 64; -F32 LLSkyTex::sInterpVal = 0.f; +F32 LLSkyTex::sInterpVal = 0.f; S32 LLSkyTex::sCurrent = 0; -LLSkyTex::LLSkyTex() +LLSkyTex::LLSkyTex() : + mSkyData(NULL), + mSkyDirs(NULL) { } diff --git a/linden/indra/newview/llvosky.h b/linden/indra/newview/llvosky.h index 70aa3af..124b690 100644 --- a/linden/indra/newview/llvosky.h +++ b/linden/indra/newview/llvosky.h @@ -207,7 +207,7 @@ protected: F32 mDiskRadius; BOOL mDraw; // FALSE - do not draw. F32 mHorizonVisibility; // number [0, 1] due to how horizon - F32 mVisibility; // same but due to other objects being in frong. + F32 mVisibility; // same but due to other objects being in throng. BOOL mVisible; static F32 sInterpVal; LLVector3 mQuadCorner[4]; @@ -217,10 +217,12 @@ protected: public: LLHeavenBody(const F32 rad) : - mDirectionCached(LLVector3(0,0,0)), mDirection(LLVector3(0,0,0)), - mDiskRadius(rad), mDraw(FALSE), - mHorizonVisibility(1), mVisibility(1) - + mDirectionCached(LLVector3(0,0,0)), + mDirection(LLVector3(0,0,0)), + mIntensity(0.f), + mDiskRadius(rad), mDraw(FALSE), + mHorizonVisibility(1.f), mVisibility(1.f), + mVisible(FALSE) { mColor.setToBlack(); mColorCached.setToBlack(); @@ -261,7 +263,6 @@ public: BOOL isVisible() const { return mVisible; } void setVisible(const BOOL v) { mVisible = v; } - const F32& getIntensity() const { return mIntensity; } void setIntensity(const F32 c) { mIntensity = c; } @@ -311,19 +312,19 @@ LL_FORCE_INLINE LLColor3 calc_air_sca_sea_level() const LLColor3 gAirScaSeaLevel = calc_air_sca_sea_level(); const F32 AIR_SCA_INTENS = color_intens(gAirScaSeaLevel); -const F32 AIR_SCA_AVG = AIR_SCA_INTENS / 3; +const F32 AIR_SCA_AVG = AIR_SCA_INTENS / 3.f; class LLHaze { public: - LLHaze() : mG(0), mFalloff(1) {mSigSca.setToBlack();} - LLHaze(const F32 g, const LLColor3& sca, const F32 fo = 2) : - mG(g), mSigSca(0.25f/F_PI * sca), mFalloff(fo), mAbsCoef(0) + LLHaze() : mG(0), mFalloff(1), mAbsCoef(0.f) {mSigSca.setToBlack();} + LLHaze(const F32 g, const LLColor3& sca, const F32 fo = 2.f) : + mG(g), mSigSca(0.25f/F_PI * sca), mFalloff(fo), mAbsCoef(0.f) { mAbsCoef = color_intens(mSigSca) / AIR_SCA_INTENS; } - LLHaze(const F32 g, const F32 sca, const F32 fo = 2) : mG(g), + LLHaze(const F32 g, const F32 sca, const F32 fo = 2.f) : mG(g), mSigSca(0.25f/F_PI * LLColor3(sca, sca, sca)), mFalloff(fo) { mAbsCoef = 0.01f * sca / AIR_SCA_AVG; diff --git a/linden/indra/newview/llvosurfacepatch.cpp b/linden/indra/newview/llvosurfacepatch.cpp index c0474f2..310a745 100644 --- a/linden/indra/newview/llvosurfacepatch.cpp +++ b/linden/indra/newview/llvosurfacepatch.cpp @@ -960,12 +960,12 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group) LLStrider colors; LLStrider indices; - buffer->getVertexStrider(vertices); - buffer->getNormalStrider(normals); - buffer->getTexCoordStrider(texcoords); - buffer->getTexCoord2Strider(texcoords2); - buffer->getColorStrider(colors); - buffer->getIndexStrider(indices); + llassert_always(buffer->getVertexStrider(vertices)); + llassert_always(buffer->getNormalStrider(normals)); + llassert_always(buffer->getTexCoordStrider(texcoords)); + llassert_always(buffer->getTexCoord2Strider(texcoords2)); + llassert_always(buffer->getColorStrider(colors)); + llassert_always(buffer->getIndexStrider(indices)); U32 indices_index = 0; U32 index_offset = 0; diff --git a/linden/indra/newview/llwatchdog.cpp b/linden/indra/newview/llwatchdog.cpp new file mode 100644 index 0000000..1dd984e --- /dev/null +++ b/linden/indra/newview/llwatchdog.cpp @@ -0,0 +1,222 @@ +/** + * @file llthreadwatchdog.cpp + * @brief The LLThreadWatchdog class definitions + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + * + * Copyright (c) 2007-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$ + */ + + +#include "llviewerprecompiledheaders.h" +#include "llwatchdog.h" + +// This class runs the watchdog timing thread. +class LLWatchdogTimerThread : public LLThread +{ +public: + LLWatchdogTimerThread() : + LLThread("Watchdog"), + mSleepMsecs(0), + mStopping(false) + { + } + + ~LLWatchdogTimerThread() {} + + void setSleepTime(long ms) { mSleepMsecs = ms; } + void stop() + { + mStopping = true; + ms_sleep(1); + } + + /* virtual */ void run() + { + while(!mStopping) + { + LLWatchdog::getInstance()->run(); + ms_sleep(mSleepMsecs); + } + } + +private: + long mSleepMsecs; + bool mStopping; +}; + +// LLWatchdogEntry +LLWatchdogEntry::LLWatchdogEntry() +{ +} + +LLWatchdogEntry::~LLWatchdogEntry() +{ +} + +void LLWatchdogEntry::start() +{ + LLWatchdog::getInstance()->add(this); +} + +void LLWatchdogEntry::stop() +{ + LLWatchdog::getInstance()->remove(this); +} + +// LLWatchdogTimeout +LLWatchdogTimeout::LLWatchdogTimeout() : + mTimeout(0.0f) +{ +} + +LLWatchdogTimeout::~LLWatchdogTimeout() +{ +} + +bool LLWatchdogTimeout::isAlive() const +{ + return (mTimer.getStarted() && !mTimer.hasExpired()); +} + +void LLWatchdogTimeout::setTimeout(F32 d) +{ + mTimeout = d; +} + +void LLWatchdogTimeout::start() +{ + // Order of operation is very impmortant here. + // After LLWatchdogEntry::start() is called + // LLWatchdogTimeout::isAlive() will be called asynchronously. + mTimer.start(); + mTimer.setTimerExpirySec(mTimeout); + LLWatchdogEntry::start(); +} +void LLWatchdogTimeout::stop() +{ + LLWatchdogEntry::stop(); + mTimer.stop(); +} + +void LLWatchdogTimeout::ping() +{ + mTimer.setTimerExpirySec(mTimeout); +} + +// LlWatchdog +LLWatchdog::LLWatchdog() : + mSuspectsAccessMutex(NULL), + mTimer(NULL) +{ +} + +LLWatchdog::~LLWatchdog() +{ +} + +void LLWatchdog::add(LLWatchdogEntry* e) +{ + lockThread(); + mSuspects.insert(e); + unlockThread(); +} + +void LLWatchdog::remove(LLWatchdogEntry* e) +{ + lockThread(); + mSuspects.erase(e); + unlockThread(); +} + +void LLWatchdog::init() +{ + if(!mSuspectsAccessMutex && !mTimer) + { + mSuspectsAccessMutex = new LLMutex(NULL); + mTimer = new LLWatchdogTimerThread(); + mTimer->setSleepTime(1000); + mTimer->start(); + } +} + +void LLWatchdog::cleanup() +{ + if(mTimer) + { + mTimer->stop(); + delete mTimer; + } + + if(mSuspectsAccessMutex) + { + delete mSuspectsAccessMutex; + } +} + +void LLWatchdog::run() +{ + lockThread(); + + SuspectsRegistry::iterator result = + std::find_if(mSuspects.begin(), + mSuspects.end(), + std::not1(std::mem_fun(&LLWatchdogEntry::isAlive)) + ); + + if(result != mSuspects.end()) + { + // error!!! + if(mTimer) + { + mTimer->stop(); + } + + llinfos << "Watchdog detected error:" << llendl; +#ifdef LL_WINDOWS + RaiseException(0,0,0,0); +#else + raise(SIGQUIT); +#endif + } + + unlockThread(); +} + +void LLWatchdog::lockThread() +{ + if(mSuspectsAccessMutex != NULL) + { + mSuspectsAccessMutex->lock(); + } +} + +void LLWatchdog::unlockThread() +{ + if(mSuspectsAccessMutex != NULL) + { + mSuspectsAccessMutex->unlock(); + } +} diff --git a/linden/indra/newview/llwatchdog.h b/linden/indra/newview/llwatchdog.h new file mode 100644 index 0000000..96388bb --- /dev/null +++ b/linden/indra/newview/llwatchdog.h @@ -0,0 +1,98 @@ +/** + * @file llthreadwatchdog.h + * @brief The LLThreadWatchdog class declaration + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + * + * Copyright (c) 2007-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_LLTHREADWATCHDOG_H +#define LL_LLTHREADWATCHDOG_H + +#ifndef LL_TIMER_H + #include "lltimer.h" +#endif + +// LLWatchdogEntry is the interface used by the tasks that +// need to be watched. +class LLWatchdogEntry +{ +public: + LLWatchdogEntry(); + virtual ~LLWatchdogEntry(); + + // isAlive is accessed by the watchdog thread. + // This may mean that resources used by + // isAlive and other method may need synchronization. + virtual bool isAlive() const = 0; + virtual void start(); + virtual void stop(); +}; + +class LLWatchdogTimeout : public LLWatchdogEntry +{ +public: + LLWatchdogTimeout(); + virtual ~LLWatchdogTimeout(); + + /* virtual */ bool isAlive() const; + /* virtual */ void start(); + /* virtual */ void stop(); + + void setTimeout(F32 d); + void ping(); + +private: + LLTimer mTimer; + F32 mTimeout; +}; + +class LLWatchdogTimerThread; // Defined in the cpp +class LLWatchdog : public LLSingleton +{ +public: + LLWatchdog(); + ~LLWatchdog(); + + // Add an entry to the watchdog. + void add(LLWatchdogEntry* e); + void remove(LLWatchdogEntry* e); + + void init(); + void run(); + void cleanup(); + +private: + void lockThread(); + void unlockThread(); + + typedef std::set SuspectsRegistry; + SuspectsRegistry mSuspects; + LLMutex* mSuspectsAccessMutex; + LLWatchdogTimerThread* mTimer; +}; + +#endif // LL_LLTHREADWATCHDOG_H diff --git a/linden/indra/newview/llwaterparammanager.cpp b/linden/indra/newview/llwaterparammanager.cpp index f121d46..fb09fd8 100644 --- a/linden/indra/newview/llwaterparammanager.cpp +++ b/linden/indra/newview/llwaterparammanager.cpp @@ -75,7 +75,8 @@ LLWaterParamManager::LLWaterParamManager() : mBlurMultiplier(0.1f, "blurMultiplier"), mWave1Dir(.5f, .5f, "wave1Dir"), mWave2Dir(.5f, .5f, "wave2Dir"), - mDensitySliderValue(1.0f) + mDensitySliderValue(1.0f), + mWaterFogKS(1.0f) { } @@ -86,7 +87,7 @@ LLWaterParamManager::~LLWaterParamManager() void LLWaterParamManager::loadAllPresets(const LLString& file_name) { LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", "")); - llinfos << "Loading water settings from " << path_name << llendl; + LL_INFOS2("AppInit", "Shaders") << "Loading water settings from " << path_name << LL_ENDL; //mParamList.clear(); @@ -96,7 +97,7 @@ void LLWaterParamManager::loadAllPresets(const LLString& file_name) std::string name; found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); - llinfos << "name: " << name << llendl; + LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL; // if we have one if(found) @@ -111,7 +112,7 @@ void LLWaterParamManager::loadAllPresets(const LLString& file_name) std::string water_name = unescaped_name.substr(0, unescaped_name.size() - 4); LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", name)); - llinfos << "Loading water from " << cur_path << llendl; + LL_DEBUGS2("AppInit", "Shaders") << "Loading water from " << cur_path << LL_ENDL; std::ifstream water_xml(cur_path.c_str()); if (water_xml) @@ -255,8 +256,8 @@ void LLWaterParamManager::update(LLViewerCamera * cam) if(gPipeline.canUseVertexShaders()) { //transform water plane to eye space - glh::vec3f norm(0, 0, 1); - glh::vec3f p(0, 0, gAgent.getRegion()->getWaterHeight()+0.1f); + glh::vec3f norm(0.f, 0.f, 1.f); + glh::vec3f p(0.f, 0.f, gAgent.getRegion()->getWaterHeight()+0.1f); F32 modelView[16]; for (U32 i = 0; i < 16; i++) @@ -406,7 +407,7 @@ F32 LLWaterParamManager::getFogDensity(void) F32 fogDensity = mCurParams.getFloat("waterFogDensity", err); // modify if we're underwater - const F32 water_height = gAgent.getRegion()->getWaterHeight(); + const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f; F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; if(camera_height <= water_height) { diff --git a/linden/indra/newview/llwaterparammanager.h b/linden/indra/newview/llwaterparammanager.h index ad40c12..6c9ce3e 100644 --- a/linden/indra/newview/llwaterparammanager.h +++ b/linden/indra/newview/llwaterparammanager.h @@ -315,18 +315,16 @@ public: F32 mDensitySliderValue; private: - // our parameter manager singleton instance - static LLWaterParamManager * sInstance; - -private: - LLVector4 mWaterPlane; F32 mWaterFogKS; + + // our parameter manager singleton instance + static LLWaterParamManager * sInstance; }; inline void LLWaterParamManager::setDensitySliderValue(F32 val) { - val /= 10; + val /= 10.0f; val = 1.0f - val; val *= val * val; // val *= val; diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp index 9365eeb..6e8123a 100644 --- a/linden/indra/newview/llwearable.cpp +++ b/linden/indra/newview/llwearable.cpp @@ -185,7 +185,7 @@ const char* terse_F32_to_string( F32 f, char s[MAX_STRING] ) /* Flawfinder: ign return r; } -BOOL LLWearable::exportFile( FILE* file ) +BOOL LLWearable::exportFile( LLFILE* file ) { // header and version if( fprintf( file, "LLWearable version %d\n", mDefinitionVersion ) < 0 ) @@ -266,7 +266,7 @@ BOOL LLWearable::exportFile( FILE* file ) -BOOL LLWearable::importFile( FILE* file ) +BOOL LLWearable::importFile( LLFILE* file ) { // *NOTE: changing the type or size of this buffer will require // changes in the fscanf() code below. You would be better off @@ -852,7 +852,7 @@ void LLWearable::saveNewAsset() mAssetID.toString(new_asset_id_string); char filename[LL_MAX_PATH]; /* Flawfinder: ignore */ snprintf(filename, LL_MAX_PATH, "%s.wbl", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,new_asset_id_string).c_str()); /* Flawfinder: ignore */ - FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ + LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ BOOL successful_save = FALSE; if(fp && exportFile(fp)) { diff --git a/linden/indra/newview/llwearable.h b/linden/indra/newview/llwearable.h index aa4b3dd..63243eb 100644 --- a/linden/indra/newview/llwearable.h +++ b/linden/indra/newview/llwearable.h @@ -78,8 +78,8 @@ public: void removeFromAvatar( BOOL set_by_user ) { LLWearable::removeFromAvatar( mType, set_by_user ); } static void removeFromAvatar( EWearableType type, BOOL set_by_user ); - BOOL exportFile(FILE* file); - BOOL importFile(FILE* file); + BOOL exportFile(LLFILE* file); + BOOL importFile(LLFILE* file); EWearableType getType() const { return mType; } void setType( EWearableType type ) { mType = type; } diff --git a/linden/indra/newview/llwearablelist.cpp b/linden/indra/newview/llwearablelist.cpp index 01a2459..cabf20a 100644 --- a/linden/indra/newview/llwearablelist.cpp +++ b/linden/indra/newview/llwearablelist.cpp @@ -110,7 +110,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID if( status >= 0 ) { // read the file - FILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ + LLFILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ if( !fp ) { llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl; diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp index 710b7e1..1d187cb 100644 --- a/linden/indra/newview/llwebbrowserctrl.cpp +++ b/linden/indra/newview/llwebbrowserctrl.cpp @@ -43,8 +43,9 @@ #include "llviewborder.h" #include "llviewercontrol.h" #include "llviewerwindow.h" +#include "llnotify.h" #include "llweb.h" -#include "llglimmediate.h" +#include "llrender.h" // linden library includes #include "llfocusmgr.h" @@ -587,7 +588,7 @@ void LLWebBrowserCtrl::draw() F32 max_v = ( F32 )mWebBrowserImage->getBrowserHeight() / ( F32 )mWebBrowserImage->getHeight(); // draw the browser - gGL.blendFunc( GL_ONE, GL_ZERO ); + gGL.setSceneBlendType(LLRender::BT_REPLACE); gGL.begin( LLVertexBuffer::QUADS ); { // render using web browser reported width and height, instead of trying to invert GL scale @@ -604,7 +605,7 @@ void LLWebBrowserCtrl::draw() gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), 0 ); } gGL.end(); - gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } gGL.popMatrix(); @@ -762,6 +763,8 @@ void LLWebBrowserCtrl::onClickLinkNoFollow( const EventType& eventIn ) && !mOpenAppSLURLs) { // block handling of this secondlife:///app/ URL + LLNotifyBox::showXml("UnableToOpenCommandURL"); + return; } diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h index e1b5357..95757f1 100644 --- a/linden/indra/newview/llwebbrowserctrl.h +++ b/linden/indra/newview/llwebbrowserctrl.h @@ -47,11 +47,13 @@ class LLWebBrowserCtrlEvent }; LLWebBrowserCtrlEvent( std::string stringValIn ) : + mIntVal(-1), mStringVal( stringValIn ) { }; LLWebBrowserCtrlEvent( std::string stringValIn, std::string stringValExIn ) : + mIntVal(-1), mStringVal( stringValIn ), mStringValEx( stringValExIn ) { diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp index 1b52a14..aba637c 100644 --- a/linden/indra/newview/llwindebug.cpp +++ b/linden/indra/newview/llwindebug.cpp @@ -35,7 +35,6 @@ #include #include -#include "llappviewer.h" #include "llwindebug.h" #include "llviewercontrol.h" #include "lldir.h" @@ -106,6 +105,8 @@ MINIDUMPWRITEDUMP f_mdwp = NULL; #undef UNICODE +static LPTOP_LEVEL_EXCEPTION_FILTER gFilterFunc = NULL; + HMODULE hDbgHelp; // Tool Help functions. @@ -554,14 +555,13 @@ void LLMemoryReserve::release() static LLMemoryReserve gEmergencyMemoryReserve; // static -BOOL LLWinDebug::setupExceptionHandler() +void LLWinDebug::initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func) { - static BOOL s_first_run = TRUE; + static bool s_first_run = true; // Load the dbghelp dll now, instead of waiting for the crash. // Less potential for stack mangling - BOOL ok = TRUE; if (s_first_run) { // First, try loading from the directory that the app resides in. @@ -576,15 +576,7 @@ BOOL LLWinDebug::setupExceptionHandler() if (!hDll) { - llwarns << "Couldn't find dbghelp.dll!" << llendl; - - std::string msg = "Couldn't find dbghelp.dll at "; - msg += local_dll_name; - msg += "!\n"; - - //write_debug(msg.c_str()); - - ok = FALSE; + LL_WARNS("AppInit") << "Couldn't find dbghelp.dll!" << LL_ENDL; } else { @@ -592,18 +584,15 @@ BOOL LLWinDebug::setupExceptionHandler() if (!f_mdwp) { - //write_debug("No MiniDumpWriteDump!\n"); FreeLibrary(hDll); hDll = NULL; - ok = FALSE; } } gEmergencyMemoryReserve.reserve(); - } - LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; - prev_filter = SetUnhandledExceptionFilter(LLWinDebug::handleException); + s_first_run = false; + } // Try to get Tool Help library functions. HMODULE hKernel32; @@ -612,26 +601,44 @@ BOOL LLWinDebug::setupExceptionHandler() Module32First_ = (MODULE32_FIRST)GetProcAddress(hKernel32, "Module32FirstW"); Module32Next_ = (MODULE32_NEST)GetProcAddress(hKernel32, "Module32NextW"); - if (s_first_run) + LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; + prev_filter = SetUnhandledExceptionFilter(filter_func); + + if(prev_filter != gFilterFunc) { - // We're fine, this is the first run. - s_first_run = FALSE; - return ok; + LL_WARNS("AppInit") + << "Replacing unknown exception (" << (void *)prev_filter << ") with (" << (void *)filter_func << ") !" << LL_ENDL; } - if (!prev_filter) + + gFilterFunc = filter_func; +} + +bool LLWinDebug::checkExceptionHandler() +{ + bool ok = true; + LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; + prev_filter = SetUnhandledExceptionFilter(gFilterFunc); + + if (prev_filter != gFilterFunc) { - llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with NULL!" << llendl; - ok = FALSE; + LL_WARNS("AppInit") << "Our exception handler (" << (void *)gFilterFunc << ") replaced with " << prev_filter << "!" << LL_ENDL; + ok = false; } - if (prev_filter != LLWinDebug::handleException) + + if (prev_filter == NULL) { - llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with " << prev_filter << "!" << llendl; ok = FALSE; + if (gFilterFunc == NULL) + { + LL_WARNS("AppInit") << "Exception handler uninitialized." << LL_ENDL; + } + else + { + LL_WARNS("AppInit") << "Our exception handler (" << (void *)gFilterFunc << ") replaced with NULL!" << LL_ENDL; + } } return ok; - // Internal builds don't mess with exception handling. - //return TRUE; } void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename) @@ -644,7 +651,7 @@ void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMAT else { std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, - filename); + filename); HANDLE hFile = CreateFileA(dump_path.c_str(), GENERIC_WRITE, @@ -672,20 +679,26 @@ void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMAT } // static -LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop) +void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop) { - // *NOTE:Mani - This method is no longer the initial exception handler. - // It is called from viewer_windows_exception_handler() and other places. + // *NOTE:Mani - This method is no longer the exception handler. + // Its called from viewer_windows_exception_handler() and other places. // // Let go of a bunch of reserved memory to give library calls etc // a chance to execute normally in the case that we ran out of // memory. // - gEmergencyMemoryReserve.release(); + LLSD info; + std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, + "SecondLifeException"); + std::string log_path = dump_path + ".log"; if (exception_infop) { + // Since there is exception info... Release the hounds. + gEmergencyMemoryReserve.release(); + if(gSavedSettings.getControl("SaveMinidump") != NULL && gSavedSettings.getBOOL("SaveMinidump")) { _MINIDUMP_EXCEPTION_INFORMATION ExInfo; @@ -698,67 +711,34 @@ LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop) writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "SecondLifePlus.dmp"); } - - std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, - "SecondLifeException"); - - std::string log_path = dump_path + ".log"; - - LLSD info; info = Get_Exception_Info(exception_infop); + } + LLSD threads; + std::vector thread_ids; + GetProcessThreadIDs(GetCurrentProcessId(), thread_ids); - LLSD threads; - std::vector thread_ids; - GetProcessThreadIDs(GetCurrentProcessId(), thread_ids); - - for(std::vector::iterator th_itr = thread_ids.begin(); - th_itr != thread_ids.end(); - ++th_itr) + for(std::vector::iterator th_itr = thread_ids.begin(); + th_itr != thread_ids.end(); + ++th_itr) + { + LLSD thread_info; + if(*th_itr != GetCurrentThreadId()) { - LLSD thread_info; - if(*th_itr != GetCurrentThreadId()) - { - GetThreadCallStack(*th_itr, thread_info); - } - - if(thread_info) - { - - threads[llformat("ID %d", *th_itr)] = thread_info; - } + GetThreadCallStack(*th_itr, thread_info); } + if(thread_info) + { + threads[llformat("ID %d", *th_itr)] = thread_info; + } + } - info["Threads"] = threads; - - if (info) - { - std::ofstream out_file(log_path.c_str()); - LLSDSerialize::toPrettyXML(info, out_file); - out_file.close(); - } - } - else - { - // We're calling this due to a network error, not due to an actual exception. - // It doesn't realy matter what we return. - return EXCEPTION_CONTINUE_SEARCH; - } - - //handle viewer crash must be called here since - //we don't return handling of the application - //back to the process. - LLAppViewer::handleViewerCrash(); + info["Threads"] = threads; - // - // At this point, we always want to exit the app. There's no graceful - // recovery for an unhandled exception. - // - // Just kill the process. - LONG retval = EXCEPTION_EXECUTE_HANDLER; - - return retval; + std::ofstream out_file(log_path.c_str()); + LLSDSerialize::toPrettyXML(info, out_file); + out_file.close(); } #endif diff --git a/linden/indra/newview/llwindebug.h b/linden/indra/newview/llwindebug.h index b11cdf6..cf15fae 100644 --- a/linden/indra/newview/llwindebug.h +++ b/linden/indra/newview/llwindebug.h @@ -38,10 +38,36 @@ class LLWinDebug { public: - static BOOL setupExceptionHandler(); - static LONG WINAPI handleException(struct _EXCEPTION_POINTERS *pExceptionInfo); + + /** + * @brief initialize the llwindebug exception filter callback + * + * Hand a windows unhandled exception filter to LLWinDebug + * This method should only be called to change the + * exception filter used by llwindebug. + * + * Setting filter_func to NULL will clear any custom filters. + **/ + static void initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func); + + /** + * @brief check the status of the exception filter. + * + * Resets unhandled exception filter to the filter specified + * w/ initExceptionFilter). + * Returns false if the exception filter was modified. + * + * *NOTE:Mani In the past mozlib has been accused of + * overriding the exception filter. If the mozlib filter + * is required, perhaps we can chain calls from our + * filter to mozlib's. + **/ + static bool checkExceptionHandler(); + + static void generateCrashStacks(struct _EXCEPTION_POINTERS *pExceptionInfo = NULL); static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename); +private: }; #endif // LL_LLWINDEBUG_H diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp index 9f59947..9f23b37 100644 --- a/linden/indra/newview/llwlparammanager.cpp +++ b/linden/indra/newview/llwlparammanager.cpp @@ -111,7 +111,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name) if(file_name != "") { LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", file_name)); - llinfos << "Loading WindLight settings from " << path_name << llendl; + LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL; llifstream presetsXML(path_name.c_str()); @@ -137,7 +137,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name) else { LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", "")); - llinfos << "Loading WindLight settings from " << path_name << llendl; + LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL; //mParamList.clear(); @@ -147,7 +147,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name) std::string name; found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); - llinfos << "name: " << name << llendl; + LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL; // if we have one if(found) @@ -162,7 +162,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name) std::string sky_name = unescaped_name.substr(0, unescaped_name.size() - 4); LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", name)); - llinfos << "Loading sky from " << cur_path << llendl; + LL_DEBUGS2("AppInit", "Shaders") << "Loading sky from " << cur_path << LL_ENDL; std::ifstream sky_xml(cur_path.c_str()); if (sky_xml) @@ -299,7 +299,7 @@ void LLWLParamManager::propagateParameters(void) LLVector4 sunDir; LLVector4 moonDir; - // set the sun direction from mSunAngle and mEastAngle + // set the sun direction from SunAngle and EastAngle F32 sinTheta = sin(mCurParams.getEastAngle()); F32 cosTheta = cos(mCurParams.getEastAngle()); diff --git a/linden/indra/newview/llwlparammanager.h b/linden/indra/newview/llwlparammanager.h index bfb84e9..72b888d 100644 --- a/linden/indra/newview/llwlparammanager.h +++ b/linden/indra/newview/llwlparammanager.h @@ -199,8 +199,6 @@ public: public: // helper variables - F32 mSunAngle; - F32 mEastAngle; LLWLAnimator mAnimator; /// actual direction of the sun @@ -217,9 +215,6 @@ public: // list of params and how they're cycled for days LLWLDayCycle mDay; - // length of the day in seconds - F32 mLengthOfDay; - LLWLParamSet mCurParams; /// Sun Delta Terrain tweak variables. diff --git a/linden/indra/newview/llwlparamset.h b/linden/indra/newview/llwlparamset.h index 6fa0bff..ed3453d 100644 --- a/linden/indra/newview/llwlparamset.h +++ b/linden/indra/newview/llwlparamset.h @@ -132,18 +132,10 @@ public: /// get the star brightness value; F32 getStarBrightness(); - /// set the star's brightness - /// \param val brightness value void setSunAngle(F32 val); - - /// get the star brightness value; F32 getSunAngle(); - /// set the star's brightness - /// \param val brightness value void setEastAngle(F32 val); - - /// get the star brightness value; F32 getEastAngle(); diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp index 8c95260..27d7513 100644 --- a/linden/indra/newview/llworld.cpp +++ b/linden/indra/newview/llworld.cpp @@ -83,22 +83,25 @@ const F32 LLWorld::mWidthInMeters = mWidth * mScale; // // allocate the stack -LLWorld::LLWorld() +LLWorld::LLWorld() : + mLandFarClip(DEFAULT_FAR_PLANE), + mLastPacketsIn(0), + mLastPacketsOut(0), + mLastPacketsLost(0), + mMinRegionX(0), + mMaxRegionX(0), + mMinRegionY(0), + mMaxRegionY(0), + mSpaceTimeUSec(0) { - mSpaceTimeUSec = 0; - mLastPacketsIn = 0; - mLastPacketsOut = 0; - mLastPacketsLost = 0; - mLandFarClip = DEFAULT_FAR_PLANE; - - if (gNoRender) + for (S32 i = 0; i < 8; i++) { - return; + mEdgeWaterObjects[i] = NULL; } - for (S32 i = 0; i < 8; i++) + if (gNoRender) { - mEdgeWaterObjects[i] = NULL; + return; } LLPointer raw = new LLImageRaw(1,1,4); @@ -1112,6 +1115,10 @@ void process_region_handshake(LLMessageSystem* msg, void** user_data) void send_agent_pause() { + // *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause + // the thread monitor to timeout. + LLAppViewer::instance()->stopMainloopTimeout(); + // Note: used to check for LLWorld initialization before it became a singleton. // Rather than just remove this check I'm changing it to assure that the message // system has been initialized. -MG @@ -1167,6 +1174,8 @@ void send_agent_resume() // Reset the FPS counter to avoid an invalid fps LLViewerStats::getInstance()->mFPSStat.start(); + + LLAppViewer::instance()->startMainloopTimeout(); } diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp index 28ae94a..231f5dc 100644 --- a/linden/indra/newview/llworldmap.cpp +++ b/linden/indra/newview/llworldmap.cpp @@ -160,6 +160,11 @@ void LLWorldMap::reset() mNeighborMapWidth = 0; mNeighborMapHeight = 0; + + for (S32 i=0; imPopular.push_back(new_item); - break; - } case MAP_ITEM_LAND_FOR_SALE: // land for sale { new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2); diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h index 041dfc0..3f3a8e9 100644 --- a/linden/indra/newview/llworldmap.h +++ b/linden/indra/newview/llworldmap.h @@ -191,7 +191,6 @@ public: item_info_list_t mInfohubs; item_info_list_t mPGEvents; item_info_list_t mMatureEvents; - item_info_list_t mPopular; item_info_list_t mLandForSale; item_info_list_t mClassifieds; diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp index 1cc4921..a9e1061 100644 --- a/linden/indra/newview/llworldmapview.cpp +++ b/linden/indra/newview/llworldmapview.cpp @@ -38,7 +38,7 @@ #include "llmath.h" // clampf() #include "llregionhandle.h" #include "lleventflags.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llcallingcard.h" @@ -85,7 +85,6 @@ LLUIImagePtr LLWorldMapView::sTrackCircleImage = NULL; LLUIImagePtr LLWorldMapView::sTrackArrowImage = NULL; LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL; -LLUIImagePtr LLWorldMapView::sPopularImage = NULL; LLUIImagePtr LLWorldMapView::sForSaleImage = NULL; F32 LLWorldMapView::sThresholdA = 48.f; @@ -111,22 +110,21 @@ F32 CONE_SIZE = 0.6f; void LLWorldMapView::initClass() { - LLUUID image_id; - sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga"); sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga"); sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga"); sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga"); + sHomeImage = LLUI::getUIImage("map_home.tga"); sTelehubImage = LLUI::getUIImage("map_telehub.tga"); sInfohubImage = LLUI::getUIImage("map_infohub.tga"); sEventImage = LLUI::getUIImage("map_event.tga"); sEventMatureImage = LLUI::getUIImage("map_event_mature.tga"); + sTrackCircleImage = LLUI::getUIImage("map_track_16.tga"); sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga"); sClassifiedsImage = LLUI::getUIImage("icon_top_pick.tga"); - sPopularImage = LLUI::getUIImage("icon_popular.tga"); sForSaleImage = LLUI::getUIImage("icon_for_sale.tga"); } @@ -138,15 +136,16 @@ void LLWorldMapView::cleanupClass() sAvatarLargeImage = NULL; sAvatarAboveImage = NULL; sAvatarBelowImage = NULL; + sTelehubImage = NULL; sInfohubImage = NULL; sHomeImage = NULL; sEventImage = NULL; sEventMatureImage = NULL; + sTrackCircleImage = NULL; sTrackArrowImage = NULL; sClassifiedsImage = NULL; - sPopularImage = NULL; sForSaleImage = NULL; } @@ -303,17 +302,17 @@ void LLWorldMapView::draw() // Clear the background alpha to 0 gGL.flush(); - glColorMask(FALSE, FALSE, FALSE, TRUE); - glAlphaFunc(GL_GEQUAL, 0.00f); - gGL.blendFunc(GL_ONE, GL_ZERO); + gGL.setColorMask(false, true); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f); + gGL.setSceneBlendType(LLRender::BT_REPLACE); gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f); gl_rect_2d(0, height, width, 0); } gGL.flush(); - glAlphaFunc(GL_GEQUAL, 0.01f); - glColorMask(TRUE, TRUE, TRUE, TRUE); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setColorMask(true, true); + gGL.setSceneBlendType(LLRender::BT_ALPHA); F32 layer_alpha = 1.f; @@ -378,7 +377,7 @@ void LLWorldMapView::draw() // Draw map image into RGB //gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); gGL.flush(); - glColorMask(TRUE, TRUE, TRUE, FALSE); + gGL.setColorMask(true, false); gGL.color4f(1.f, 1.f, 1.f, layer_alpha); gGL.begin(LLVertexBuffer::QUADS); @@ -394,7 +393,7 @@ void LLWorldMapView::draw() // draw an alpha of 1 where the sims are visible gGL.flush(); - glColorMask(FALSE, FALSE, FALSE, TRUE); + gGL.setColorMask(false, true); gGL.color4f(1.f, 1.f, 1.f, 1.f); gGL.begin(LLVertexBuffer::QUADS); @@ -410,8 +409,8 @@ void LLWorldMapView::draw() } gGL.flush(); - glAlphaFunc(GL_GEQUAL, 0.01f); - glColorMask(TRUE, TRUE, TRUE, TRUE); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setColorMask(true, true); #if 1 F32 sim_alpha = 1.f; @@ -534,7 +533,7 @@ void LLWorldMapView::draw() LLGLSUIDefault gls_ui; LLViewerImage::bindTexture(simimage); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); F32 alpha = sim_alpha * info->mAlpha; gGL.color4f(1.f, 1.0f, 1.0f, alpha); @@ -569,8 +568,8 @@ void LLWorldMapView::draw() { // draw an alpha of 1 where the sims are visible (except NULL sims) gGL.flush(); - gGL.blendFunc(GL_ONE, GL_ZERO); - glColorMask(FALSE, FALSE, FALSE, TRUE); + gGL.setSceneBlendType(LLRender::BT_REPLACE); + gGL.setColorMask(false, true); gGL.color4f(1.f, 1.f, 1.f, 1.f); LLGLSNoTexture gls_no_texture; @@ -582,14 +581,14 @@ void LLWorldMapView::draw() gGL.end(); gGL.flush(); - glColorMask(TRUE, TRUE, TRUE, TRUE); + gGL.setColorMask(true, true); } } if (info->mAccess == SIM_ACCESS_DOWN) { // Draw a transparent red square over down sims - gGL.blendFunc(GL_DST_ALPHA, GL_SRC_ALPHA); + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA); gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f); LLGLSNoTexture gls_no_texture; @@ -606,7 +605,7 @@ void LLWorldMapView::draw() && info->mAccess > SIM_ACCESS_PG && gAgent.isTeen()) { - gGL.blendFunc(GL_DST_ALPHA, GL_ZERO); + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); LLGLSNoTexture gls_no_texture; gGL.color3f(1.f, 0.f, 0.f); @@ -667,14 +666,14 @@ void LLWorldMapView::draw() LLGLSUIDefault gls_ui; { LLGLSNoTexture gls_no_texture; - glAlphaFunc(GL_GEQUAL, 0.0f); - gGL.blendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f); + gGL.blendFunc(LLRender::BF_ONE_MINUS_DEST_ALPHA, LLRender::BF_DEST_ALPHA); gGL.color4fv( mBackgroundColor.mV ); gl_rect_2d(0, height, width, 0); } - glAlphaFunc(GL_GEQUAL, 0.01f); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setSceneBlendType(LLRender::BT_ALPHA); // Infohubs if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB) @@ -705,11 +704,6 @@ void LLWorldMapView::draw() drawGenericItems(LLWorldMap::getInstance()->mClassifieds, sClassifiedsImage); } - if (gSavedSettings.getBOOL("MapShowPopular")) - { - drawGenericItems(LLWorldMap::getInstance()->mPopular, sPopularImage); - } - if (gSavedSettings.getBOOL("MapShowEvents")) { drawEvents(); @@ -1533,10 +1527,6 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask, { (*it).mSelected = FALSE; } - for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it) - { - (*it).mSelected = FALSE; - } for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) { (*it).mSelected = FALSE; @@ -1578,21 +1568,6 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask, } } - if (gSavedSettings.getBOOL("MapShowPopular")) - { - for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it) - { - LLItemInfo& popular = *it; - - if (checkItemHit(x, y, popular, id, true)) - { - *hit_type = MAP_ITEM_POPULAR; - mItemPicked = TRUE; - return; - } - } - } - if (gSavedSettings.getBOOL("MapShowLandForSale")) { for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) @@ -1796,12 +1771,6 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) LLFloaterDirectory::showEvents(event_id); break; } - case MAP_ITEM_POPULAR: - { - gFloaterWorldMap->close(); - LLFloaterDirectory::showPopular(id); - break; - } case MAP_ITEM_LAND_FOR_SALE: { gFloaterWorldMap->close(); diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h index 18626b5..079cd47 100644 --- a/linden/indra/newview/llworldmapview.h +++ b/linden/indra/newview/llworldmapview.h @@ -149,7 +149,6 @@ public: static LLUIImagePtr sTrackCircleImage; static LLUIImagePtr sTrackArrowImage; static LLUIImagePtr sClassifiedsImage; - static LLUIImagePtr sPopularImage; static LLUIImagePtr sForSaleImage; static F32 sThresholdA; diff --git a/linden/indra/newview/llxmlrpctransaction.cpp b/linden/indra/newview/llxmlrpctransaction.cpp index 7179104..9b49eb9 100644 --- a/linden/indra/newview/llxmlrpctransaction.cpp +++ b/linden/indra/newview/llxmlrpctransaction.cpp @@ -569,10 +569,10 @@ F64 LLXMLRPCTransaction::transferRate() double rate_bits_per_sec = impl.mTransferInfo.mSpeedDownload * 8.0; - llinfos << "Buffer size: " << impl.mResponseText.size() << " B" << llendl; - llinfos << "Transfer size: " << impl.mTransferInfo.mSizeDownload << " B" << llendl; - llinfos << "Transfer time: " << impl.mTransferInfo.mTotalTime << " s" << llendl; - llinfos << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << llendl; + LL_INFOS("AppInit") << "Buffer size: " << impl.mResponseText.size() << " B" << LL_ENDL; + LL_DEBUGS("AppInit") << "Transfer size: " << impl.mTransferInfo.mSizeDownload << " B" << LL_ENDL; + LL_DEBUGS("AppInit") << "Transfer time: " << impl.mTransferInfo.mTotalTime << " s" << LL_ENDL; + LL_INFOS("AppInit") << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << LL_ENDL; return rate_bits_per_sec; } diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj index 33a709c..c817b27 100644 --- a/linden/indra/newview/macview.xcodeproj/project.pbxproj +++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ /* Begin PBXBuildFile section */ 0633E5D209E341F500712406 /* llfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D009E341F500712406 /* llfile.cpp */; }; 0633E5D509E3421500712406 /* llstreamtools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D309E3421500712406 /* llstreamtools.cpp */; }; + 07167BBC0DCA8059003FE31D /* llrender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07167BBA0DCA8059003FE31D /* llrender.cpp */; }; 1A02016F0B7A85DE00D5C589 /* llbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */; }; 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; }; 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; }; @@ -60,6 +61,9 @@ 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; }; 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; }; 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */; }; + 1AE0820F0DA708E900575141 /* llanimstatelabels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE082090DA708E900575141 /* llanimstatelabels.cpp */; }; + 1AE082100DA708E900575141 /* llstylemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE0820B0DA708E900575141 /* llstylemap.cpp */; }; + 1AE082110DA708E900575141 /* lltrans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE0820D0DA708E900575141 /* lltrans.cpp */; }; 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; }; 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; }; 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; }; @@ -557,7 +561,6 @@ A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; }; A241CB9207B3E383001A39E3 /* llmessagethrottle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */; }; A241CB9507B3E3A7001A39E3 /* llperlin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB9407B3E3A7001A39E3 /* llperlin.cpp */; }; - A243B29A0C6769AC004DFF19 /* llglimmediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A243B2980C6769AC004DFF19 /* llglimmediate.cpp */; }; A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */; }; A2A8C5480C649EE20001FEB2 /* llmultislider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5440C649EE20001FEB2 /* llmultislider.cpp */; }; A2A8C5490C649EE20001FEB2 /* llmultisliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5460C649EE20001FEB2 /* llmultisliderctrl.cpp */; }; @@ -836,6 +839,8 @@ FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; }; FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; }; FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; }; + FE065EA40D8B0EE60089E9F1 /* llwatchdog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */; }; + FE065EA50D8B0EE60089E9F1 /* llwindebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */; }; FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; }; FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; }; FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */; }; @@ -988,6 +993,8 @@ 0633E5D109E341F500712406 /* llfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfile.h; sourceTree = ""; }; 0633E5D309E3421500712406 /* llstreamtools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstreamtools.cpp; sourceTree = ""; }; 0633E5D409E3421500712406 /* llstreamtools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstreamtools.h; sourceTree = ""; }; + 07167BBA0DCA8059003FE31D /* llrender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llrender.cpp; sourceTree = ""; }; + 07167BBB0DCA8059003FE31D /* llrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llrender.h; sourceTree = ""; }; 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase64.cpp; sourceTree = ""; }; 1A02016E0B7A85DE00D5C589 /* llbase64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbase64.h; sourceTree = ""; }; @@ -1075,6 +1082,12 @@ 1AD61F6C0AC09B2600507FB9 /* llimview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimview.h; sourceTree = ""; }; 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhud.cpp; sourceTree = ""; }; 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterhud.h; sourceTree = ""; }; + 1AE082090DA708E900575141 /* llanimstatelabels.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llanimstatelabels.cpp; sourceTree = ""; }; + 1AE0820A0DA708E900575141 /* llanimstatelabels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llanimstatelabels.h; sourceTree = ""; }; + 1AE0820B0DA708E900575141 /* llstylemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llstylemap.cpp; sourceTree = ""; }; + 1AE0820C0DA708E900575141 /* llstylemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llstylemap.h; sourceTree = ""; }; + 1AE0820D0DA708E900575141 /* lltrans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lltrans.cpp; sourceTree = ""; }; + 1AE0820E0DA708E900575141 /* lltrans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lltrans.h; sourceTree = ""; }; 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = ""; }; 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = ""; }; 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = ""; }; @@ -2113,8 +2126,6 @@ A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagethrottle.cpp; sourceTree = ""; }; A241CB8F07B3E383001A39E3 /* llmessagethrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagethrottle.h; sourceTree = ""; }; A241CB9407B3E3A7001A39E3 /* llperlin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llperlin.cpp; sourceTree = ""; }; - A243B2980C6769AC004DFF19 /* llglimmediate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llglimmediate.cpp; sourceTree = ""; }; - A243B2990C6769AC004DFF19 /* llglimmediate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llglimmediate.h; sourceTree = ""; }; A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhardwaresettings.cpp; sourceTree = ""; }; A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterhardwaresettings.h; sourceTree = ""; }; A29852A10BC6BC630005FA09 /* llhtmlhelp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhtmlhelp.h; sourceTree = ""; }; @@ -2396,6 +2407,9 @@ FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; }; FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; }; FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llwatchdog.cpp; sourceTree = ""; }; + FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llwindebug.cpp; sourceTree = ""; }; + FE065EA60D8B0F170089E9F1 /* llwatchdog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llwatchdog.h; sourceTree = ""; }; FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libllmozlib2.dylib; path = "../../libraries/universal-darwin/lib_debug/libllmozlib2.dylib"; sourceTree = SOURCE_ROOT; }; FE0AEE480D2D9C6E0097256A /* lllcd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lllcd.cpp; sourceTree = SOURCE_ROOT; }; FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; }; @@ -2654,10 +2668,19 @@ children = ( AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */, AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */, + 1AE082090DA708E900575141 /* llanimstatelabels.cpp */, + 1AE0820A0DA708E900575141 /* llanimstatelabels.h */, + 1AE0820B0DA708E900575141 /* llstylemap.cpp */, + 1AE0820C0DA708E900575141 /* llstylemap.h */, + 1AE0820D0DA708E900575141 /* lltrans.cpp */, + 1AE0820E0DA708E900575141 /* lltrans.h */, 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */, 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */, D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */, D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */, + FE065EA60D8B0F170089E9F1 /* llwatchdog.h */, + FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */, + FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */, FE0AEE480D2D9C6E0097256A /* lllcd.cpp */, FE0AEE490D2D9C6E0097256A /* lllcd.h */, FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */, @@ -4235,8 +4258,8 @@ D628314D0B4F3FA100F8830F /* llrender */ = { isa = PBXGroup; children = ( - A243B2980C6769AC004DFF19 /* llglimmediate.cpp */, - A243B2990C6769AC004DFF19 /* llglimmediate.h */, + 07167BBA0DCA8059003FE31D /* llrender.cpp */, + 07167BBB0DCA8059003FE31D /* llrender.h */, A30273550B3A13D800704420 /* llvertexbuffer.cpp */, A30273560B3A13D800704420 /* llvertexbuffer.h */, D628315B0B4F3FA100F8830F /* llfont.cpp */, @@ -5018,7 +5041,7 @@ A2A8C5680C649F490001FEB2 /* llwldaycycle.cpp in Sources */, A2A8C5690C649F490001FEB2 /* llwlparammanager.cpp in Sources */, A2A8C56A0C649F490001FEB2 /* llwlparamset.cpp in Sources */, - A243B29A0C6769AC004DFF19 /* llglimmediate.cpp in Sources */, + 07167BBC0DCA8059003FE31D /* llrender.cpp in Sources */, 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */, 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */, 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */, @@ -5027,10 +5050,15 @@ A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */, D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */, 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */, + FE065EA40D8B0EE60089E9F1 /* llwatchdog.cpp in Sources */, + FE065EA50D8B0EE60089E9F1 /* llwindebug.cpp in Sources */, CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */, 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */, D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */, AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */, + 1AE0820F0DA708E900575141 /* llanimstatelabels.cpp in Sources */, + 1AE082100DA708E900575141 /* llstylemap.cpp in Sources */, + 1AE082110DA708E900575141 /* lltrans.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj index 3fe72e6..a378434 100644 --- a/linden/indra/newview/newview.vcproj +++ b/linden/indra/newview/newview.vcproj @@ -295,6 +295,9 @@ RelativePath=".\llagentpilot.cpp"> + + + + + + + + + + + + + + + + + + + + @@ -1437,6 +1441,10 @@ > + + @@ -1549,6 +1557,10 @@ > + + @@ -1905,6 +1917,10 @@ > + + @@ -1995,6 +2011,10 @@ > + + @@ -2679,6 +2699,10 @@ > + + @@ -3031,6 +3055,10 @@ > + + @@ -3151,6 +3179,10 @@ > + + @@ -3423,6 +3455,10 @@ > + + diff --git a/linden/indra/newview/newview_vc9.vcproj b/linden/indra/newview/newview_vc9.vcproj index 40851cb..6b693b5 100644 --- a/linden/indra/newview/newview_vc9.vcproj +++ b/linden/indra/newview/newview_vc9.vcproj @@ -406,6 +406,10 @@ > + + @@ -1422,6 +1426,10 @@ > + + @@ -1534,6 +1542,10 @@ > + + @@ -1890,6 +1902,10 @@ > + + @@ -1980,6 +1996,10 @@ > + + @@ -2664,6 +2684,10 @@ > + + @@ -3016,6 +3040,10 @@ > + + @@ -3136,6 +3164,10 @@ > + + @@ -3408,6 +3440,10 @@ > + + diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp index 5ec3310..20fd5a7 100644 --- a/linden/indra/newview/pipeline.cpp +++ b/linden/indra/newview/pipeline.cpp @@ -50,7 +50,7 @@ #include "v3color.h" #include "llui.h" #include "llglheaders.h" -#include "llglimmediate.h" +#include "llrender.h" // newview includes #include "llagent.h" @@ -125,6 +125,7 @@ extern S32 gBoxFrame; extern BOOL gRenderLightGlows; extern BOOL gHideSelectedObjects; extern BOOL gDisplaySwapBuffers; +extern BOOL gDebugGL; // hack counter for rendering a fixed number of frames after toggling // fullscreen to work around DEV-5361 @@ -134,6 +135,7 @@ BOOL gAvatarBacklight = FALSE; BOOL gRenderForSelect = FALSE; +BOOL gDebugPipeline = FALSE; LLPipeline gPipeline; const LLMatrix4* gGLLastMatrix = NULL; @@ -504,11 +506,7 @@ void LLPipeline::createGLBuffers() res = 128; mCubeBuffer = new LLCubeMap(); mCubeBuffer->initGL(); - glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCubeBuffer->getGLName()); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + mCubeBuffer->setReflection(); for (U32 i = 0; i < 6; i++) { @@ -1178,7 +1176,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl LLGLDisable test(GL_ALPHA_TEST); LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gGL.setColorMask(false, false); LLGLDepthTest depth(GL_TRUE, GL_FALSE); for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); @@ -1236,7 +1234,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl sCull->pushDrawable(gSky.mVOGroundp->mDrawable); } - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); glPopMatrix(); if (to_texture) @@ -1313,11 +1311,11 @@ void LLPipeline::doOcclusion(LLCamera& camera) LLVertexBuffer::unbind(); if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION)) { - glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); + gGL.setColorMask(true, false, false, false); } else { - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gGL.setColorMask(false, false); } LLGLDisable blend(GL_BLEND); LLGLDisable test(GL_ALPHA_TEST); @@ -1334,7 +1332,7 @@ void LLPipeline::doOcclusion(LLCamera& camera) } } - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); glFlush(); } @@ -2262,11 +2260,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); // Do verification of GL state -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif if (mRenderDebugMask & RENDER_DEBUG_VERIFY) { if (!verify()) @@ -2384,19 +2380,18 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) } poolp->endRenderPass(i); LLVertexBuffer::unbind(); -#ifndef LL_RELEASE_FOR_DOWNLOAD -# if LL_DEBUG_GL - GLint depth; - glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth); - if (depth > 3) + if (gDebugGL || gDebugPipeline) { - llerrs << "GL matrix stack corrupted!" << llendl; + GLint depth; + glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth); + if (depth > 3) + { + llerrs << "GL matrix stack corrupted!" << llendl; + } + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + LLGLState::checkClientArrays(); } - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); -# endif -#endif } } else @@ -2417,11 +2412,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) } LLVertexBuffer::unbind(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif gGLLastMatrix = NULL; glLoadMatrixd(gGLModelView); @@ -2436,12 +2429,10 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) stop_glerror(); -#ifndef LL_RELEASE_FOR_DOWNLOAD - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); -#endif - + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + LLGLState::checkClientArrays(); + if (!sReflectionRender) { renderHighlights(); @@ -2475,11 +2466,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif } void LLPipeline::renderGeomDeferred() @@ -2514,7 +2503,7 @@ void LLPipeline::renderDebug() gGLLastMatrix = NULL; glLoadMatrixd(gGLModelView); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); // Debug stuff. for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); @@ -2585,7 +2574,7 @@ void LLPipeline::renderForSelect(std::set& objects) { assertInitialized(); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); gPipeline.resetDrawOrders(); for (std::set::iterator iter = objects.begin(); iter != objects.end(); ++iter) @@ -2607,12 +2596,11 @@ void LLPipeline::renderForSelect(std::set& objects) LLVertexBuffer::unbind(); //for each drawpool -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); U32 last_type = 0; -#endif + for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) { LLDrawPool *poolp = *iter; @@ -2624,7 +2612,6 @@ void LLPipeline::renderForSelect(std::set& objects) gGLLastMatrix = NULL; glLoadMatrixd(gGLModelView); -#ifndef LL_RELEASE_FOR_DOWNLOAD if (poolp->getType() != last_type) { last_type = poolp->getType(); @@ -2632,32 +2619,21 @@ void LLPipeline::renderForSelect(std::set& objects) LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); } -#endif } } LLGLEnable alpha_test(GL_ALPHA_TEST); if (gPickTransparent) { - glAlphaFunc(GL_GEQUAL, 0.0f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f); } else { - glAlphaFunc(GL_GREATER, 0.2f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f); } - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); U32 prim_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD; @@ -2758,12 +2734,11 @@ void LLPipeline::renderForSelect(std::set& objects) glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); } - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); LLVertexBuffer::unbind(); - LLVertexBuffer::unbind(); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); } void LLPipeline::renderFaceForUVSelect(LLFace* facep) @@ -4118,11 +4093,9 @@ void apply_cube_face_rotation(U32 face) } void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam) { -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif assertInitialized(); @@ -4140,10 +4113,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam) glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width); if (width != res) { - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + cube_map->setReflection(); for (U32 i = 0; i < 6; i++) { @@ -4224,9 +4194,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam) gPipeline.stateSort(cube_cam, result); glClearColor(0,0,0,0); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); + gGL.setColorMask(true, false); stop_glerror(); gPipeline.renderGeom(cube_cam); } @@ -4254,12 +4224,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam) LLPipeline::sSkipUpdate = FALSE; LLPipeline::sReflectionRender = FALSE; -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif - } //send cube map vertices and texture coordinates @@ -4336,18 +4303,16 @@ void validate_framebuffer_object() void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) { -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif assertInitialized(); U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes"); enableLightsFullbright(LLColor4::white); LLGLDepthTest depth(GL_FALSE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); @@ -4361,10 +4326,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width); if (width != res) { - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + cube_out->setReflection(); for (U32 i = 0; i < 6; i++) { @@ -4391,7 +4353,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) stop_glerror(); glViewport(0,0,res, res); - gGL.blendFunc(GL_ONE, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD); cube_in->enableTexture(0); //3-axis blur for (U32 j = 0; j < 3; j++) @@ -4421,7 +4383,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) gl_cube_face[i], j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0); validate_framebuffer_object(); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); apply_cube_face_rotation(i); @@ -4441,7 +4403,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); + gGL.setColorMask(true, false); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); @@ -4449,13 +4411,11 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) cube_in->disableTexture(); gViewerWindow->setupViewport(); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif } void LLPipeline::bindScreenToTexture() @@ -4471,10 +4431,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot) return; } -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif assertInitialized(); @@ -4494,7 +4452,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot) tc2 /= (F32) res_mod; } - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM); gGL.color4f(1,1,1,1); @@ -4513,7 +4471,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot) LLGLDisable test(GL_ALPHA_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); glClearColor(0,0,0,0); if (for_snapshot) @@ -4525,7 +4483,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot) //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); //LLGLDisable blend(GL_BLEND); LLGLEnable blend(GL_BLEND); - gGL.blendFunc(GL_ONE, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD); tc2.setVec(1,1); gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); gGL.color4f(1,1,1,1); @@ -4543,7 +4501,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot) gGL.end(); gGL.flush(); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } gGL.flush(); @@ -4575,8 +4533,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot) gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount); LLGLEnable blend_on(GL_BLEND); LLGLEnable test(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.f); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D); @@ -4785,26 +4743,17 @@ void LLPipeline::renderBloom(BOOL for_snapshot) LLGLDisable blend(GL_BLEND); - //tex unit 0 - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); mGlow[1].bindTexture(); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, uv0); - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glEnable(GL_TEXTURE_RECTANGLE_ARB); //tex unit 1 - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); glClientActiveTextureARB(GL_TEXTURE1_ARB); glEnableClientState(GL_TEXTURE_COORD_ARRAY); @@ -4819,23 +4768,23 @@ void LLPipeline::renderBloom(BOOL for_snapshot) glDisable(GL_TEXTURE_RECTANGLE_ARB); glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); glClientActiveTextureARB(GL_TEXTURE0_ARB); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); -#ifndef LL_RELEASE_FOR_DOWNLOAD + LLVertexBuffer::unbind(); + LLGLState::checkStates(); LLGLState::checkTextureChannels(); -#endif } @@ -4867,11 +4816,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) { LLVertexBuffer::unbind(); -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif LLCamera camera = camera_in; camera.setFar(camera.getFar()*0.87654321f); @@ -4916,11 +4863,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) { //generate planar reflection map LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); glClearColor(0,0,0,0); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); mWaterRef.bindTarget(); mWaterRef.getViewport(gGLViewport); mWaterRef.clear(); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); + gGL.setColorMask(true, false); stop_glerror(); @@ -5022,11 +4969,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); LLColor4& col = LLDrawPoolWater::sWaterFogColor; glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); + gGL.setColorMask(true, true); mWaterDis.bindTarget(); mWaterDis.getViewport(gGLViewport); mWaterDis.clear(); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); + gGL.setColorMask(true, false); if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate) { @@ -5060,11 +5007,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd)); LLPipeline::sUseOcclusion = occlusion; -#ifndef LL_RELEASE_FOR_DOWNLOAD LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); -#endif } } @@ -5203,7 +5148,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) glh_set_current_modelview(mat); glClearColor(0.0f,0.0f,0.0f,0.0f); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); glStencilMask(0xFFFFFFFF); glClearStencil(0); @@ -5250,14 +5195,14 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) if (muted) { - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gGL.setColorMask(true, true); } else { - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); + gGL.setColorMask(false, true); } - gGL.blendFunc(GL_ONE, GL_ONE); + gGL.setSceneBlendType(LLRender::BT_ADD); LLImageGL::unbindTexture(0, GL_TEXTURE_2D); LLGLDepthTest depth(GL_FALSE, GL_FALSE); @@ -5273,7 +5218,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) gGL.flush(); - gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h index 9896a4a..bd857c2 100644 --- a/linden/indra/newview/pipeline.h +++ b/linden/indra/newview/pipeline.h @@ -550,6 +550,7 @@ void render_bbox(const LLVector3 &min, const LLVector3 &max); extern LLPipeline gPipeline; extern BOOL gRenderForSelect; +extern BOOL gDebugPipeline; extern const LLMatrix4* gGLLastMatrix; #endif diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt index b6b38d8..12cd9fb 100644 --- a/linden/indra/newview/releasenotes.txt +++ b/linden/indra/newview/releasenotes.txt @@ -1,3 +1,119 @@ +Release Notes for Second Life 1.20(7) May 16th, 2008 +===================================== + +New features and changes: +* Pasting multiline clipboard content into Chat will show a Paragraph symbol at newlines +* Moved "Set Window Size" options from File menu into Preferences > Graphics +* New users are rendered as a cloud, rather than naked, before they choose a gender +* Directly interacting with a muted resident will unmute them, with a note logged in the Chat history (VWR-1735) +* Fly button is now shown as disabled when you are sitting +* Group Info > Notices tab explains the storage limits of 200 notices and 14 days +* Added OpenGL monitoring via Advanced menu > Rendering > Debug GL option to turn on extra rendering error checking and help reproduce crashes +* Added beta support for basic voice lipsync for voice visualization (VWR-4794) - via Advanced menu > Character +* Changed resident names to be interactive in Chat/IM: +** Clicking on resident names in Local Chat will open their Profile page +** Clicking on resident names in a Group IM will open an individual IM + +* Added four texture constants for referencing in llSetLinkTexture in scripts: +** TEXTURE_BLANK, TEXTURE_DEFAULT, TEXTURE_PLYWOOD and TEXTURE_TRANSPARENT +** Note: Scripts using these constants will run in all Second Life viewers, however previous versions of the viewer will not be able to edit and recompile scripts using the new TEXTURE_BLANK constant; older versions trying to compile such a script will report "(XX,YY) : ERROR : Name not defined within scope." + +* Thread monitoring to catch freezes +** A new thread monitor will detect when the viewer application frozen for a period greater than 10 seconds and possibly force a crash with detailed logs + +* Improved internationalization support: +** Make 'System Default' language option work on Linux and Windows. +** Make unicode system font support good on Linux + +* Improvements to Search +** Search > Popular Places is replaced by a Search > Showcase tab that points to the website Showcase +** Search > Places and Search > Groups use web-based search +** Classified ads have a drop-down menu to indicate Mature or Not Mature content + +Changes: +* VWR-4794: Basic voice lipsync for voice visualization +* VWR-4204: Clicking on names in Chat/Group IM history should open Profile page or IM +* VWR-463: Blank is a pre-defined texture in client, but not in LSL +* Updated library version for openssl +* New users are shown as a cloud rather than naked until they choose a gender. +* Move "Set Window Size" options from File menu into Preferences > Graphics +* Make clothing-still-downloading dialog into an ignorable alert dialog +* Internationalize additional hard-coded viewer strings to a strings.xml file +* Search > Popular Places is replaced by a Search > Showcase tab that points to the website Showcase +* Convert Search > Places tab to use HTML search +* Convert Search > Group tab to use HTML search +* Search: Require Mature/Not Mature in Classifieds +* Make strict GL debugging toggleable on-the-fly via Advanced menu > Rendering > Debug GL option - turns on extra rendering error checking and help reproduce crashes + +Fixes: +* Fixed: VWR-104: Unused class LLVertexProgramGL should be removed +* Fixed: VWR-2778: System skirt textures turn invisible on wearing +* Fixed: VWR-2272: Fly button doesn't work while sitting +* Fixed: VWR-2404: Lossless texture compression on small textures is not lossless +* Fixed: VWR-5807: Wild rotations of linkset while using the editor in Local Ruler Mode via CTRL key +* Fixed: VWR-6056: Animation viewer does not play animations on upload. +* Fixed: VWR-6399: llMapDestination should still show teleport map -- Teleport / Map screen changes in 1.20 RC0 need to be undone +* Fixed: VWR-4860: WindLight: Planar texturing renders incorrectly in 1.19.0 (79674) +* Fixed: VWR-5963: LLImageGL::setClamp may affect random texture (making repeating textures on objects non-repeating) +* Fixed: VWR-7061: Trivial UI grammar error in the title of the "Script Warning/Error" window +* Fixed: VWR-6186: Second Life is leaking Objective-C objects at startup +* Fixed: VWR-3598: Non-group owned objects appear to belong to the group of the last selected object, no matter the owner/group. +* Fixed: SVC-1241: Dead code in lscript_execute.cpp +* Fixed: VWR-4057: Multi-line chat display bug - first character in line missing +* Fixed: VWR-3857: Script (LSL) editor shows non Latin 1 characters as square boxes +* Fixed: VWR-2275: Linux 1.18.3 Won't Link +* Fixed: VWR-3813: gtk_check_version() API changed to return const gchar * - causes gcc ERROR +* Fixed: llrender.cpp export +* Fixed: Create secondlife:///app/ URL to open my groups panel +* Fixed: Create secondlife:///app/ URL to open create groups dialog +* Fixed: Display a message if LLWebBrowserCtrl blocks a secondlife:///app/* url +* Fixed: Abstract common glTexParameter calls +* Fixed: Orientation Island HUD select language texture is wrong for English in 1.20 +* Fixed: Double-clicking border of communicate window makes window unrecoverable +* Fixed: Command line parser bug parsing "--multiple true" at beginning of a command line. +* Fixed: --loginuri is not being handled correctly +* Fixed: Grid selection drop-down on login screen does not take priority over -loginuri when selection is first opened +* Fixed: crash in LLMediaImplQuickTime::load +* Fixed: crash on LLViewerParcelMedia::update +* Fixed: Pop-up menu width should try to accomodate the longest menu item (within reason) +* Fixed: VWR-1735: Directly interacting with a muted resident should unmute them +* Fixed: VWR-2142: Parcel voice icon doesn't reflect disabled status if voice isn't used +* Fixed: VWR-5853: Double-Clicking on vertical edge of Inventory/Gesture window destroys the floating window. +* Fixed: VWR-2448: Snapshot Preview tool should respect 'Quiet Snapshots to Disk' +* Fixed: Can't change values with debug settings floater +* Fixed: Focus > Zoom button can't be re-selected +* Fixed: Debug Permissions displays overlap +* Fixed: Objects with no group tagging show group tags of previously clicked items +* Fixed: stop bundling libexpat with the linux viewer +* Partial Fix: Pasting multiline clipboard content into chat loses newlines + +Localization Fixes: +* Fixed: VWR-7168: A typo in base (en-us) version of mime_types.xml +* Fixed: VWR-7153: An typo in en-us version of alerts.xml file makes an text of unlocalizable +* Fixed: VWR-7087: Japanese "About Second Life..." file includes an invalid UTF-8 character + +Release Notes for Second Life 1.20(6) May 7th, 2008 +===================================== +Changes: +* Changed the reference in Group Information window > Notices tab to 14 days instead of 30 +* Removed menu option Advanced > Character > Show Collision Plane + +Fixes: +* Fixed: VWR-6389: Runtime Library error after quitting Second Life +* Fixed: VWR-4580: Property lines are visible through avatar, objects and through ground +* Fixed: VWR-6896: Crash when selecting Advanced > Rendering > Info Displays > Lights (and other Info Displays) +* Fixed: VWR-7042: Incorrect tooltip for "Use built-in web browser" option +* Fixed: the spinners are broken in the snapshot UI when upload a snapshot +* Fixed: Create tool's last 11 shapes are not the proper height ("sphere" looks like an "egg") +* Fixed: Typographical error in Transfer permissions alert dialog +* Fixed: Crash selecting Edit > Land Owners with Basic Shaders disabled +* Fixed: crash on LLFloaterWorldMap::buildLandmarkIDLists +* Fixed: 3dConnexion device does not default to enabled with 1.20 RC 5 +* Fixed: Settings in the Joystick Configuration window reset to defaults on each launch when a SpaceNavigator is connected + +Localization Fixes: +* Fixed: XML resizing to repair truncated text in 1.20 localizations + Release Notes for Second Life 1.20(5) May 1st, 2008 ===================================== Changes: @@ -219,3 +335,140 @@ Source changes: * Fixed: g++ 4 viewer compile issues * Dead code removal createLegacyWearableFromAvatar + +Release Notes for Second Life 1.19.0(4) February 28th, 2008 +===================================== +New features and changes: +* Voice +** Voice Chat is now enabled by default to allow Residents to hear other Residents. +** A microphone is required to speak to other Residents. +** Push-to-Talk is the default mode for transmitting voice. +** These settings can be modified via the Voice Chat tab of the Preferences dialog. + +* Age Verification: +** The user interface for parcel and estate access has been clarified and improved. +** Added the ability to restrict access to parcels and estates to age verified adults. +** Removed the ability to *ban* access to Residents who have provided payment info or who have used payment info. We continue to support the ability to *allow* access to only those who have provided payment info. + +* Crash Reporter +** The crash reporting mechanism has been improved. Following a crash, more useful information will be sent and reports should now take less than 10 seconds. + +* VWR-210: Voice Support on Linux (EXPERIMENTAL) - see README-linux-voice.txt + +* Other changes: +** Change alert message that pops up when you set Busy +** Add "Teleporting from SLURL to SLURL" to the chat history to provide quick and dirty "back" links +** Print the name of the missing gesture in the error message +** Remove "New Account..." and "Preferences" buttons from login screen for 1.19.0 + +Fixes: +* SVC-930: Prims set for sale - prices are incorrectly set when multiple prims taken to inventory and rezzed +* SVC-1125: New Search: Beacons aren't shown when teleporting to regions with "Allow Direct Teleport" disabled +* VWR-1125: Clicking Title Bar While Mouselook'd Repositions SL Window +* VWR-1137: Inventory names out of sync after renaming via Properties window +* VWR-1145: Unable To Connect help not available +* VWR-1162: Land for sale includes L$1 parcels that are not actually for sale +* VWR-1350: Color settings do not appear to be applied to LSL default text +* VWR-1475: OpenJPEG always uploads single layer lossless images +* VWR-1590: Keyboard changes inventory selection after right-click +* VWR-1627: Classified metrics are reset to 0 when the ad is updated +* VWR-1651: Add ability to open a partners profile whilst viewing an avatar's profile +* VWR-1774: Some avatar positions result in no Z-axis arrow when editing attachments +* VWR-1873: Typos in en-us locale file +* VWR-1919: Remove texture UUID information from UI unless full-perm +* VWR-2030: Avatar only turns half-way in Appearance Mode +* VWR-2142: Parcel voice icon doesn't reflect disabled status if voice isn't used +* VWR-2256: Mac updater directory permission issues +* VWR-2367: Wrong handling of maximum length of Group Notice message +* VWR-2404: lossless texture compression on small textures not lossless +* VWR-2410: noise dot appear in chat window when clien running long with chatting. +* VWR-2411: Possible crash in pipeline.cpp +* VWR-2412: Possible crash drawpoolwater +* VWR-2421: ATI Radeon HD 2900 XT + Second Life = "Couldn't match GPU to a class","Setting GPU Class to Class0" +* VWR-2483: the macviewer.xcodeprj file doesn't create stripped binaries on Deployment or Universal +* VWR-250: Preedit (composition) strings are shown poorly when typing Japanese text on Windows +* VWR-2550: Scuplty vertex coordinates are size/256 meters too small on the positive faces +* VWR-2614: gActiveChannelSpeakerMgr not deleted at end of program in viewer.cpp +* VWR-2617: Adds LLSD support to flex/light/sculpt params for primitives +* VWR-2652: Changes needed to compile viewer against lastest libopenjpeg2000 +* VWR-2684: Minor leak in floaters using layoutstacks +* VWR-2722: Muting an object with pie menu only mutes the prim you select, not entire linkset +* VWR-2847: Wrong hover text in Japanese UI +* VWR-2854: Some sculpted prims render as balls on close zoom, which look fine in older clients +* VWR-2867: Eyes rotate unnaturally around their X axis. Clockwise/Counter-Clockwise +* VWR-289: URLs for video media streaming need to be URL-encoded or stream doesn't work +* VWR-2959: Windows (Visual Studio) solution file refers to a non-existing project "build_all" +* VWR-3088: Unchecking "Automatic Appearance Camera Movement" no longer has any effect +* VWR-3206: OpenJPEG svn478 causes slviewer to crash +* VWR-3428: Checking a users profile while editing a linked set causes viewer crash +* VWR-3458: Mouse cursor background is opaque white instead of transparent on big endian systems +* VWR-3558: llLoadURL cannot be muted +* VWR-356: Move delete to the bottom of context menus, separated by spacer +* VWR-3748: Builds fail on 1.18.6 RC if not using MOZLIB due to missing #if LL_LIBXUL_ENABLED in 3 places in indra/newview/llpanellogin.cpp +* VWR-3948: Underlayers no longer removable by pie menu in Windlight, release candidates +* VWR-412: Object editing arrows hidden but clickable on objects you can't edit. +* dialogs have extra vertical space +* Photo Album: name in Properties cut off some Japanese characters +* New gestures do not appear active in inventory +* Make parcel name in menu "look" active +* "Wear" pie option shows up for many objects even if resident does not own and cannot wear them. +* Textures on no-transfer objects can be transferred +* Deleted gestures still work +* Inventory description out of sync after renaming via Properties window +* Show private estate tiles when World Map is zoomed out +* Properties description not updated when preview description updated +* Buying object contents broken +* Improve window opening behavior, ensuring it is mostly on screen +* No-modify objects can be modified through Open pane +* Inventory names out of sync after renaming via Properties +* Japanese IME mode should be set and postiion of any input windows fixed for non-Japanese fields +* ctrl-shift-w doesn't work if no windows have focus +* Avatar falling in place - Alliez Mysterio +* Linux crash reporter does not run on next execution after forcing an infinite loop and forcefully exiting +* hitting enter should immediately set the value of a field +* Inventory Folder Loading state not clearly indicated +* Add warning dialog to the Land Sale process to warn against selling land to Anyone +* Legacy flossexception link needs to be fixed in source +* make link from client log in window to "Forgot Password" page +* Remove button under estate managers list enables after estate manager clicks in the list +* Changing search field should cancel current selection +* Estate tab within Tools / Region Estate has wrong settings for enable of Restrict Access upon initialization +* llEscapeURL and llUnescapeURL caps output to 255 characters +* XUI LoadFromXML function doesn't work +* Sanitize floater sizing behavior when SL window is made very small +* Animation won't stop if avatar teleports while animated +* Can't paste name of object into View > Mute List > Mute object by name +* pressing ctrl-F10 then Escape causes keyboard to be unresponsive +* Make SL viewer updater show a progress bar so that people know how long to wait +* Can't double-click on groups in profile after changing your active title +* Getting multiple copies of texture dragged onto prim +* blue dialog's 'next' widget steals focus +* Audio should be encoded for upload at a 'good enough' quality rather than a user-selected bitrate +* multiple preview windows open for a single texture/snapshot saved inside a note card +* Enhance Viewer to support new Age Verification feature +* Rename crash setting to cause crash logger to come up for all residents +* Change crash logger "Remember this choice" function to default to on +* Rework Ban tab of floater_about_land +* Windows IME positioning fixed +* Viewer crashes in assert when playing Sword Strike animation +* Unable to set 'Group Access' for land that is also 'Public Access' (Was VWR-3667) +* Disable QuickTime when the installed version is less than version with RTSP exploit +* Korean viewer crashes on startup +* Move fullscreen message from login screen to viewer prefs +* linux client doesn't recognise that a viewer is already running (slurl crapout) +* Search results window displays "s..." and "n..." instead of "searching..." and "none found" +* QuickTime disabled message can not be ignored +* Crash on login page when using Logitech LCD Keyboard +* SEC-17 Ability to Access Sculpted Prim Textures from Database without owning actual sculpt texture, allowing for people to "steal" sculpts. +* info window does not pop up when transitioning from a Havok1 to Havok4 region +* Repoint Report Bug... Viewer link to Pjira +* Upload Animation window: Button missing in Stopped window state + +Source changes: +* Upgrade Win32 libvorbis to v1.2 +* VWR-2881: Bundled Mesa libs are not GPL compatible +* upgrade in-tree Linux GL headers to Mesa 7.x +* upgrade in-tree Win32 GL headers to version without SGI Free B license +* Rebuild and/or update libraries to use statically linked libs. +* Remove llfloaterhtmlhelp.cpp / h and floater_html_help.xml + diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc index 6254613..099d5dc 100644 --- a/linden/indra/newview/res/newViewRes.rc +++ b/linden/indra/newview/res/newViewRes.rc @@ -231,8 +231,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,19,1,4 - PRODUCTVERSION 1,19,1,4 + FILEVERSION 1,20,6,86975 + PRODUCTVERSION 1,20,6,86975 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -249,12 +249,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.19.1.4" + VALUE "FileVersion", "1.20.6.86975" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright 2001-2008, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.19.1.4" + VALUE "ProductVersion", "1.20.6.86975" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml index 6e7553f..4dbbdf0 100644 --- a/linden/indra/newview/skins/textures/textures.xml +++ b/linden/indra/newview/skins/textures/textures.xml @@ -106,6 +106,7 @@ + @@ -121,7 +122,6 @@ - @@ -179,7 +179,7 @@ - + diff --git a/linden/indra/newview/skins/xui/de/floater_html.xml b/linden/indra/newview/skins/xui/de/floater_html.xml index f5c69ce..7e97d4f 100644 --- a/linden/indra/newview/skins/xui/de/floater_html.xml +++ b/linden/indra/newview/skins/xui/de/floater_html.xml @@ -5,4 +5,7 @@