summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2013-10-16 11:52:43 -0400
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2013-10-16 11:52:43 -0400
commit1f8b37e9ad65f8064b83adac295d9eb162976e4c (patch)
tree3ced849ad5750b7884d291e17e89fec419e03382 /indra/newview
parent2331b9a93b12eb0a2f5fb6109f990d81b29d0584 (diff)
parentf7158bc5afcec1da8b9d2d5a4ed86921e62d4959 (diff)
merge
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rwxr-xr-xindra/newview/app_settings/keywords.ini51
-rwxr-xr-xindra/newview/app_settings/settings.xml108
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/alphaF.glsl430
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl150
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl92
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl136
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/alphaV.glsl84
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl153
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/avatarF.glsl4
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl17
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl2
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl134
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl9
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/giF.glsl190
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/impostorF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/materialF.glsl158
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/materialV.glsl1
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl44
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl66
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl17
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl25
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl114
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl54
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/srgb.glsl46
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/srgb_mac.glsl54
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl17
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl157
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/waterF.glsl63
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/waterV.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl2
-rwxr-xr-xindra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl4
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl235
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl242
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl156
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/alphaV.glsl224
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl153
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl59
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl100
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl57
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl17
-rwxr-xr-xindra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl17
-rwxr-xr-xindra/newview/featuretable_mac.txt4
-rwxr-xr-xindra/newview/gpu_table.txt1
-rwxr-xr-xindra/newview/llagent.cpp71
-rwxr-xr-xindra/newview/llagent.h3
-rw-r--r--indra/newview/llappdelegate-objc.mm13
-rwxr-xr-xindra/newview/llappviewer.cpp8
-rwxr-xr-xindra/newview/llappviewermacosx.cpp53
-rw-r--r--indra/newview/llavatarrenderinfoaccountant.cpp398
-rw-r--r--indra/newview/llavatarrenderinfoaccountant.h56
-rwxr-xr-xindra/newview/llchathistory.cpp16
-rw-r--r--[-rwxr-xr-x]indra/newview/llconversationmodel.h0
-rw-r--r--[-rwxr-xr-x]indra/newview/llconversationview.cpp0
-rw-r--r--[-rwxr-xr-x]indra/newview/llconversationview.h0
-rwxr-xr-xindra/newview/lldrawable.cpp10
-rwxr-xr-xindra/newview/lldrawpool.cpp1
-rwxr-xr-xindra/newview/lldrawpoolalpha.cpp113
-rwxr-xr-xindra/newview/lldrawpoolalpha.h2
-rwxr-xr-xindra/newview/lldrawpoolavatar.cpp47
-rwxr-xr-xindra/newview/lldrawpoolavatar.h1
-rwxr-xr-xindra/newview/lldrawpoolbump.cpp13
-rw-r--r--indra/newview/lldrawpoolmaterials.cpp7
-rwxr-xr-xindra/newview/lldrawpoolsimple.cpp84
-rwxr-xr-xindra/newview/lldrawpoolsky.cpp1
-rwxr-xr-xindra/newview/lldrawpoolterrain.cpp8
-rwxr-xr-xindra/newview/lldrawpoolwater.cpp77
-rwxr-xr-xindra/newview/lldrawpoolwlsky.cpp7
-rwxr-xr-xindra/newview/llface.cpp140
-rwxr-xr-xindra/newview/llface.h3
-rwxr-xr-xindra/newview/llfasttimerview.cpp2
-rwxr-xr-xindra/newview/llfavoritesbar.cpp9
-rwxr-xr-xindra/newview/llfeaturemanager.cpp117
-rwxr-xr-xindra/newview/llfeaturemanager.h15
-rwxr-xr-xindra/newview/llfilepicker.cpp2
-rw-r--r--indra/newview/llfilepicker_mac.mm1
-rwxr-xr-xindra/newview/llflexibleobject.cpp23
-rwxr-xr-xindra/newview/llfloaterconversationpreview.cpp44
-rwxr-xr-xindra/newview/llfloaterconversationpreview.h3
-rwxr-xr-xindra/newview/llfloaterimcontainer.cpp9
-rwxr-xr-xindra/newview/llfloaterimnearbychathandler.cpp13
-rwxr-xr-xindra/newview/llfloaterland.cpp9
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp21
-rwxr-xr-xindra/newview/llfloaterpreference.cpp29
-rwxr-xr-xindra/newview/llfloaterpreference.h3
-rwxr-xr-xindra/newview/llfloatertools.cpp4
-rwxr-xr-xindra/newview/llfloatertools.h2
-rwxr-xr-xindra/newview/llfloaterwebcontent.h1
-rwxr-xr-xindra/newview/llimview.cpp5
-rwxr-xr-xindra/newview/llmaniptranslate.cpp3
-rw-r--r--indra/newview/llmaterialmgr.cpp49
-rw-r--r--indra/newview/llmaterialmgr.h2
-rwxr-xr-xindra/newview/llmediactrl.h1
-rwxr-xr-xindra/newview/llmeshrepository.cpp50
-rwxr-xr-xindra/newview/llnamelistctrl.h1
-rwxr-xr-xindra/newview/llnotificationhandlerutil.cpp35
-rwxr-xr-xindra/newview/llpanelface.cpp37
-rwxr-xr-xindra/newview/llpanelface.h46
-rwxr-xr-xindra/newview/llpanelvolume.cpp12
-rwxr-xr-xindra/newview/llselectmgr.cpp6
-rwxr-xr-xindra/newview/llspatialpartition.cpp44
-rwxr-xr-xindra/newview/llspatialpartition.h9
-rwxr-xr-xindra/newview/lltexturectrl.cpp11
-rwxr-xr-xindra/newview/lltoast.cpp42
-rwxr-xr-xindra/newview/lltoast.h2
-rwxr-xr-xindra/newview/lltoastnotifypanel.cpp2
-rwxr-xr-xindra/newview/lltooldraganddrop.cpp47
-rwxr-xr-xindra/newview/lltoolselect.h2
-rwxr-xr-xindra/newview/llviewerdisplay.cpp9
-rw-r--r--[-rwxr-xr-x]indra/newview/llviewerfoldertype.cpp0
-rwxr-xr-xindra/newview/llviewerkeyboard.cpp5
-rwxr-xr-xindra/newview/llviewermenu.cpp65
-rwxr-xr-xindra/newview/llviewermessage.cpp52
-rwxr-xr-xindra/newview/llviewerobject.cpp47
-rwxr-xr-xindra/newview/llviewerobject.h8
-rwxr-xr-xindra/newview/llviewerpartsim.cpp31
-rwxr-xr-xindra/newview/llviewerpartsim.h13
-rwxr-xr-xindra/newview/llviewerpartsource.cpp75
-rwxr-xr-xindra/newview/llviewerpartsource.h4
-rwxr-xr-xindra/newview/llviewerregion.cpp52
-rwxr-xr-xindra/newview/llviewerregion.h14
-rwxr-xr-xindra/newview/llviewershadermgr.cpp460
-rwxr-xr-xindra/newview/llviewershadermgr.h65
-rwxr-xr-xindra/newview/llviewertexturelist.cpp56
-rwxr-xr-xindra/newview/llviewerwindow.cpp47
-rwxr-xr-xindra/newview/llvoavatar.cpp352
-rwxr-xr-xindra/newview/llvoavatar.h43
-rwxr-xr-xindra/newview/llvograss.cpp7
-rwxr-xr-xindra/newview/llvograss.h1
-rwxr-xr-xindra/newview/llvoicevivox.cpp29
-rwxr-xr-xindra/newview/llvopartgroup.cpp378
-rwxr-xr-xindra/newview/llvopartgroup.h6
-rwxr-xr-xindra/newview/llvovolume.cpp303
-rwxr-xr-xindra/newview/llwaterparammanager.cpp13
-rwxr-xr-xindra/newview/llwaterparamset.h15
-rwxr-xr-xindra/newview/llwlanimator.h1
-rwxr-xr-xindra/newview/llwlparammanager.cpp6
-rwxr-xr-xindra/newview/llwlparammanager.h1
-rwxr-xr-xindra/newview/llwlparamset.cpp56
-rwxr-xr-xindra/newview/llwlparamset.h10
-rwxr-xr-xindra/newview/llworldmapview.cpp2
-rwxr-xr-xindra/newview/pipeline.cpp883
-rwxr-xr-xindra/newview/pipeline.h2
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_add_person.pngbin373 -> 373 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_ne.pngbin215 -> 215 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_sw.pngbin211 -> 211 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_call_log.pngbin546 -> 546 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_close.pngbin275 -> 275 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_collapse.pngbin345 -> 345 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_expand.pngbin342 -> 342 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_hang_up.pngbin459 -> 459 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_open_call.pngbin366 -> 366 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_plus.pngbin144 -> 144 bytes
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/textures/icons/Conv_toolbar_sort.pngbin230 -> 230 bytes
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_about.xml4
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/de/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/de/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_viewer.xml15
-rwxr-xr-xindra/newview/skins/default/xui/de/notifications.xml71
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_preferences_chat.xml44
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/de/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/de/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_attachment_other.xml37
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_avatar_other.xml43
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_viewer.xml21
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_graphics1.xml94
-rw-r--r--indra/newview/skins/default/xui/en/panel_tools_texture.xml8
-rwxr-xr-xindra/newview/skins/default/xui/en/strings.xml11
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml0
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_about.xml4
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/es/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/es/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/es/notifications.xml87
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_preferences_chat.xml70
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/es/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/es/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_about.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/fr/notifications.xml73
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_preferences_chat.xml46
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/fr/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_about.xml4
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/it/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/it/notifications.xml79
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_preferences_chat.xml40
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/it/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/it/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_about.xml4
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/ja/notifications.xml87
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_preferences_chat.xml84
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/ja/role_actions.xml4
-rwxr-xr-xindra/newview/skins/default/xui/ja/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_about.xml4
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/pt/notifications.xml83
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_preferences_chat.xml66
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/pt/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_about.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/ru/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/ru/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/ru/notifications.xml61
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_preferences_chat.xml38
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/ru/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_about.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/tr/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/tr/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/tr/notifications.xml65
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_preferences_chat.xml44
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/tr/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/strings.xml36
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_about.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_bulk_perms.xml7
-rw-r--r--indra/newview/skins/default/xui/zh/floater_goto_line.xml7
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_im_session.xml12
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_attachment_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_attachment_self.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_avatar_other.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_land.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_login.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_mute_particle.xml5
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_object.xml5
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_url_agent.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_url_objectim.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_viewer.xml14
-rwxr-xr-xindra/newview/skins/default/xui/zh/notifications.xml57
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_people.xml3
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_preferences_chat.xml46
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_preferences_setup.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_script_ed.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/panel_tools_texture.xml116
-rwxr-xr-xindra/newview/skins/default/xui/zh/role_actions.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/strings.xml36
-rwxr-xr-xindra/newview/tests/llagentaccess_test.cpp2
399 files changed, 8423 insertions, 3724 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 9f9b9c68a3..acb9c57af8 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -124,6 +124,7 @@ set(viewer_SOURCE_FILES
llavatariconctrl.cpp
llavatarlist.cpp
llavatarlistitem.cpp
+ llavatarrenderinfoaccountant.cpp
llavatarpropertiesprocessor.cpp
llblockedlistitem.cpp
llblocklist.cpp
@@ -710,6 +711,7 @@ set(viewer_HEADER_FILES
llavatarlist.h
llavatarlistitem.h
llavatarpropertiesprocessor.h
+ llavatarrenderinfoaccountant.h
llblockedlistitem.h
llblocklist.h
llbox.h
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 4f2c1d15f6..424e1794de 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.6.6
+3.6.8
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index a87310955f..ad843bca14 100755
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -62,10 +62,12 @@ STATUS_ROTATE_X Passed in the llSetStatus library function. If FALSE, object do
STATUS_ROTATE_Y Passed in the llSetStatus library function. If FALSE, object doesn't rotate around local Y axis
STATUS_ROTATE_Z Passed in the llSetStatus library function. If FALSE, object doesn't rotate around local Z axis
STATUS_SANDBOX Passed in the llSetStatus library function. If TRUE, object can't cross region boundaries or move more than 10 meters from its start location
-STATUS_BLOCK_GRAB Passed in the llSetStatus library function. If TRUE, object can't be grabbed and physically dragged
+STATUS_BLOCK_GRAB Passed in the llSetStatus library function. If TRUE, root prim of linkset (or unlinked prim) can't be grabbed and physically dragged
STATUS_DIE_AT_EDGE Passed in the llSetStatus library function. If TRUE, objects that reach the edge of the world just die:rather than teleporting back to the owner
STATUS_RETURN_AT_EDGE Passed in the llSetStatus library function. If TRUE, script rezzed objects that reach the edge of the world:are returned rather than killed:STATUS_RETURN_AT_EDGE trumps STATUS_DIE_AT_EDGE if both are set
STATUS_CAST_SHADOWS Passed in the llSetStatus library function. If TRUE, object casts shadows on other objects
+STATUS_BLOCK_GRAB_OBJECT Passed in the llSetStatus library function. If TRUE, no prims in linkset can be grabbed or physically dragged
+
AGENT Passed in llSensor library function to look for other Agents
ACTIVE Passed in llSensor library function to look for moving objects
PASSIVE Passed in llSensor library function to look for objects that aren't moving
@@ -92,7 +94,7 @@ PERMISSION_CHANGE_LINKS Passed to llRequestPermissions library function to req
PERMISSION_TRACK_CAMERA Passed to llRequestPermissions library function to request permission to track agent's camera
PERMISSION_CONTROL_CAMERA Passed to llRequestPermissions library function to request permission to change agent's camera
PERMISSION_TELEPORT Passed to llRequestPermissions library function to request permission to teleport agent
-SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT Passed to llRequestPermissions library function to request permission to silently modify estate access lists
+PERMISSION_SILENT_ESTATE_MANAGEMENT Passed to llRequestPermissions library function to request permission to silently modify estate access lists
PERMISSION_OVERRIDE_ANIMATIONS Passed to llRequestPermissions library function to request permission to override animations on agent
PERMISSION_RETURN_OBJECTS Passed to llRequestPermissions library function to request permission to return objects
@@ -132,6 +134,7 @@ PSYS_PART_FOLLOW_VELOCITY_MASK
PSYS_PART_TARGET_POS_MASK
PSYS_PART_EMISSIVE_MASK
PSYS_PART_TARGET_LINEAR_MASK
+PSYS_PART_RIBBON_MASK
PSYS_SRC_PATTERN
PSYS_SRC_INNERANGLE Deprecated -- Use PSYS_SRC_ANGLE_BEGIN
@@ -148,12 +151,24 @@ PSYS_SRC_ACCEL
PSYS_SRC_TEXTURE
PSYS_SRC_TARGET_KEY
PSYS_SRC_OMEGA
+PSYS_PART_BLEND_FUNC_SOURCE
+PSYS_PART_BLEND_FUNC_DEST
+PSYS_PART_START_GLOW
+PSYS_PART_END_GLOW
PSYS_SRC_PATTERN_DROP
PSYS_SRC_PATTERN_EXPLODE
PSYS_SRC_PATTERN_ANGLE
PSYS_SRC_PATTERN_ANGLE_CONE
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
+PSYS_PART_BF_ONE
+PSYS_PART_BF_ZERO
+PSYS_PART_BF_DEST_COLOR
+PSYS_PART_BF_SOURCE_COLOR
+PSYS_PART_BF_ONE_MINUS_DEST_COLOR
+PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR
+PSYS_PART_BF_SOURCE_ALPHA
+PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA
OBJECT_UNKNOWN_DETAIL Returned by llGetObjectDetails when passed an invalid object parameter type
OBJECT_NAME Used with llGetObjectDetails to get an object's name
@@ -164,6 +179,23 @@ OBJECT_VELOCITY Used with llGetObjectDetails to get an object's velocity
OBJECT_OWNER Used with llGetObjectDetails to get an object's owner's key. Will be NULL_KEY if group owned
OBJECT_GROUP Used with llGetObjectDetails to get an object's group's key
OBJECT_CREATOR Used with llGetObjectDetails to get an object's creator's key
+OBJECT_RUNNING_SCRIPT_COUNT Used with llGetObjectDetails to get the number of running scripts in an object
+OBJECT_TOTAL_SCRIPT_COUNT Used with llGetObjectDetails to get the total number of scripts in an object
+OBJECT_SCRIPT_MEMORY Used with llGetObjectDetails to get the total amount of script memory in an object
+OBJECT_SCRIPT_TIME Used with llGetObjectDetails to get the average script time used by an object
+OBJECT_PRIM_EQUIVALENCE Used with llGetObjectDetails to get the prim equivalence of an object
+OBJECT_SERVER_COST Used with llGetObjectDetails to get the server cost of an object
+OBJECT_STREAMING_COST Used with llGetObjectDetails to get the streaming (download) cost of an object
+OBJECT_PHYSICS_COST Used with llGetObjectDetails to get the physics cost of an object
+OBJECT_CHARACTER_TIME Used with llGetObjectDetails to get the pathfinding time (seconds) for an object
+OBJECT_ROOT Used with llGetObjectDetails to get root ID of an object
+OBJECT_ATTACHED_POINT Used with llGetObjectDetails to get attachent point where an object is attached
+OBJECT_PATHFINDING_TYPE Used with llGetObjectDetails to get the pathfinding setting of an object
+OBJECT_PHYSICS Used with llGetObjectDetails to determine if the object is physical or not
+OBJECT_PHANTOM Used with llGetObjectDetails to determine if the object is phantom or not
+OBJECT_TEMP_ON_REZ Used with llGetObjectDetails to determine if the object is temporary or not
+OBJECT_RENDER_WEIGHT Used with llGetObjectDetails to return an avatar's rendering weight
+
# some vehicle params
VEHICLE_TYPE_NONE
@@ -346,7 +378,7 @@ PRIM_MATERIAL Followed by PRIM_MATERIAL_STONE, PRIM_MATERIAL_METAL, PRIM_MATERI
PRIM_PHYSICS Sets physics to TRUE or FALSE
PRIM_FLEXIBLE Followed by TRUE or FALSE, integer softness, float gravity, float friction, float wind, float tension, and vector force
PRIM_POINT_LIGHT Followed by TRUE or FALSE, vector color, float intensity, float radius, float falloff
-PRIM_TEMP_ON_REZ Sets temporay on rez to TRUE or FALSE
+PRIM_TEMP_ON_REZ Sets temporary on rez to TRUE or FALSE
PRIM_PHANTOM Sets phantom to TRUE or FALSE
PRIM_CAST_SHADOWS DEPRECATED. Takes 1 parameter, an integer, but has no effect when set and always returns 0 if used in llGetPrimitiveParams
PRIM_POSITION Sets primitive position to a vector position
@@ -358,6 +390,19 @@ PRIM_BUMP_SHINY Followed by an integer face, one of PRIM_SHINY_NONE, PRIM_SHINY
PRIM_FULLBRIGHT Followed by an integer face, and TRUE or FALSE
PRIM_TEXGEN Followed by an integer face, and one of PRIM_TEXGEN_DEFAULT or PRIM_TEXGEN_PLANAR
PRIM_GLOW Followed by an integer face, and a float from 0.0 to 1.0 specifying glow amount
+PRIM_TEXT Followed by string text, vector color, and float alpha
+PRIM_NAME Followed by string name
+PRIM_DESC Followed by string description
+PRIM_ROT_LOCAL Followed by rotation rot
+PRIM_PHYSICS_SHAPE_TYPE Followed by PRIM_PHYSICS_SHAPE_PRIM, PRIM_PHYSICS_SHAPE_NONE, or PRIM_PHYSICS_SHAPE_CONVEX
+PRIM_OMEGA Followed by vector axis, float spinrate, and float gain
+PRIM_POS_LOCAL Followed by vector position
+PRIM_LINK_TARGET Followed by integer link_target, then additional prim parameter flags
+PRIM_SLICE Followed by vector slice
+
+PRIM_PHYSICS_SHAPE_PRIM Use the default physics shape
+PRIM_PHYSICS_SHAPE_CONVEX Use the convex hull of the prim shape for physics
+PRIM_PHYSICS_SHAPE_NONE Ignore this prim in the physics shape
PRIM_TYPE_BOX Followed by integer hole shape, vector cut, float hollow, vector twist,:vector top size, and vector top shear
PRIM_TYPE_CYLINDER Followed by integer hole shape, vector cut, float hollow, vector twist,:vector top size, and vector top shear
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 501552664a..44bf682908 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2224,6 +2224,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>DebugShowAvatarRenderInfo</key>
+ <map>
+ <key>Comment</key>
+ <string>Show avatar render cost information</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugShowColor</key>
<map>
<key>Comment</key>
@@ -8831,6 +8842,18 @@
</array>
</map>
+ <key>RenderSpecularPrecision</key>
+ <map>
+ <key>Comment</key>
+ <string>Force 32-bit floating point LUT</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <real>0</real>
+ </map>
+
<key>RenderSpecularResX</key>
<map>
<key>Comment</key>
@@ -9121,6 +9144,17 @@
<key>Value</key>
<real>1.0</real>
</map>
+ <key>RenderDeferredDisplayGamma</key>
+ <map>
+ <key>Comment</key>
+ <string>Gamma ramp exponent for final correction before display gamma.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>2.2</real>
+ </map>
<key>RenderGLCoreProfile</key>
<map>
<key>Comment</key>
@@ -9724,10 +9758,22 @@
<key>Value</key>
<integer>1</integer>
</map>
+
<key>RenderAutoMuteByteLimit</key>
<map>
<key>Comment</key>
- <string>Maximum bytes of attachments before an avatar is automatically visually muted (0 for no limit).</string>
+ <string>Maximum bytes of attachments before an avatar is rendered as a simple impostor (0 for no limit).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderAutoMuteRenderWeightLimit</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum render weight before an avatar is rendered as a simple impostor (0 to not use this limit).</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -9738,7 +9784,7 @@
<key>RenderAutoMuteSurfaceAreaLimit</key>
<map>
<key>Comment</key>
- <string>Maximum surface area of attachments before an avatar is automatically visually muted (0 for no limit).</string>
+ <string>Maximum surface area of attachments before an avatar is rendered as a simple impostor (0 to not use this limit).</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -9746,7 +9792,28 @@
<key>Value</key>
<integer>0</integer>
</map>
-
+ <key>RenderAutoMuteFunctions</key>
+ <map>
+ <key>Comment</key>
+ <string>Developing feature to render some avatars using simple impostors or colored silhouettes. (Set to 7 for all functionality)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <real>0</real>
+ </map>
+ <key>RenderAutoMuteLogging</key>
+ <map>
+ <key>Comment</key>
+ <string>Show extra information in viewer logs about avatar rendering costs</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderAutoHideSurfaceAreaLimit</key>
<map>
<key>Comment</key>
@@ -9848,6 +9915,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>RenderWaterMaterials</key>
+ <map>
+ <key>Comment</key>
+ <string>Water planar reflections include materials rendering.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderWaterMipNormal</key>
<map>
<key>Comment</key>
@@ -9892,6 +9970,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>RevokePermsOnStopAnimation</key>
+ <map>
+ <key>Comment</key>
+ <string>Clear animation permssions when choosing "Stop Animating Me"</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RotateRight</key>
<map>
<key>Comment</key>
@@ -14805,5 +14894,18 @@
<key>Value</key>
<integer>0</integer>
</map>
+
+ <key>VersionChannelName</key>
+ <map>
+ <key>Comment</key>
+ <string>Version information generated by running the viewer</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
</map>
</llsd>
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index 0899caa2af..e5f7366b70 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -35,6 +35,26 @@ out vec4 frag_color;
#define frag_color gl_FragColor
#endif
+uniform float display_gamma;
+uniform vec4 gamma;
+uniform vec4 lightnorm;
+uniform vec4 sunlight_color;
+uniform vec4 ambient;
+uniform vec4 blue_horizon;
+uniform vec4 blue_density;
+uniform float haze_horizon;
+uniform float haze_density;
+uniform float cloud_shadow;
+uniform float density_multiplier;
+uniform float distance_multiplier;
+uniform float max_y;
+uniform vec4 glow;
+uniform float scene_light_strength;
+uniform mat3 env_mat;
+uniform mat3 ssao_effect_mat;
+
+uniform vec3 sun_dir;
+
#if HAS_SHADOW
uniform sampler2DShadow shadowMap0;
uniform sampler2DShadow shadowMap1;
@@ -53,14 +73,8 @@ uniform float shadow_bias;
uniform sampler2D diffuseMap;
#endif
-vec3 atmosLighting(vec3 light);
-vec3 scaleSoftClip(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
VARYING vec3 vary_fragcoord;
VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
VARYING vec2 vary_texcoord0;
VARYING vec3 vary_norm;
@@ -68,12 +82,73 @@ VARYING vec3 vary_norm;
VARYING vec4 vertex_color;
#endif
+vec3 vary_PositionEye;
+vec3 vary_SunlitColor;
+vec3 vary_AmblitColor;
+vec3 vary_AdditiveColor;
+vec3 vary_AtmosAttenuation;
+
+uniform mat4 inv_proj;
+uniform vec2 screen_res;
+
uniform vec4 light_position[8];
uniform vec3 light_direction[8];
uniform vec3 light_attenuation[8];
uniform vec3 light_diffuse[8];
-uniform vec2 screen_res;
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
+vec2 encode_normal(vec3 n)
+{
+ float f = sqrt(8 * n.z + 8);
+ return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+ vec2 fenc = enc*4-2;
+ float f = dot(fenc,fenc);
+ float g = sqrt(1-f/4);
+ vec3 n;
+ n.xy = fenc*g;
+ n.z = 1-f/2;
+ return n;
+}
vec3 calcDirectionalLight(vec3 n, vec3 l)
{
@@ -82,7 +157,7 @@ vec3 calcDirectionalLight(vec3 n, vec3 l)
return vec3(a,a,a);
}
-vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
{
//get light vector
vec3 lv = lp.xyz-v;
@@ -90,7 +165,9 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float
//get distance
float d = length(lv);
- float da = 0.0;
+ float da = 1.0;
+
+ vec3 col = vec3(0);
if (d > 0.0 && la > 0.0 && fa > 0.0)
{
@@ -99,10 +176,9 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float
//distance attenuation
float dist = d/la;
- da = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
- da *= da;
- da *= 1.4;
-
+ float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
+ dist_atten *= dist_atten;
+ dist_atten *= 2.0;
// spotlight coefficient.
float spot = max(dot(-ln, lv), is_pointlight);
@@ -110,9 +186,15 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float
//angular attenuation
da *= max(dot(n, lv), 0.0);
+
+ float lit = max(da * dist_atten,0.0);
+
+ col = light_col * lit * diffuse;
+
+ // no spec for alpha shader...
}
- return vec3(da,da,da);
+ return max(col, vec3(0.0,0.0,0.0));
}
#if HAS_SHADOW
@@ -135,6 +217,237 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
}
#endif
+#ifdef WATER_FOG
+uniform vec4 waterPlane;
+uniform vec4 waterFogColor;
+uniform float waterFogDensity;
+uniform float waterFogKS;
+
+vec4 applyWaterFogDeferred(vec3 pos, vec4 color)
+{
+ //normalize view vector
+ vec3 view = normalize(pos);
+ float es = -(dot(view, waterPlane.xyz));
+
+ //find intersection point with water plane and eye vector
+
+ //get eye depth
+ float e0 = max(-waterPlane.w, 0.0);
+
+ vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
+
+ //get object depth
+ float depth = length(pos - int_v);
+
+ //get "thickness" of water
+ float l = max(depth, 0.1);
+
+ float kd = waterFogDensity;
+ float ks = waterFogKS;
+ vec4 kc = waterFogColor;
+
+ float F = 0.98;
+
+ float t1 = -kd * pow(F, ks * e0);
+ float t2 = kd + ks * es;
+ float t3 = pow(F, t2*l) - 1.0;
+
+ float L = min(t1/t2*t3, 1.0);
+
+ float D = pow(0.98, l*kd);
+
+ color.rgb = color.rgb * D + kc.rgb * L;
+ color.a = kc.a + color.a;
+
+ return color;
+}
+#endif
+
+vec3 getSunlitColor()
+{
+ return vary_SunlitColor;
+}
+vec3 getAmblitColor()
+{
+ return vary_AmblitColor;
+}
+vec3 getAdditiveColor()
+{
+ return vary_AdditiveColor;
+}
+vec3 getAtmosAttenuation()
+{
+ return vary_AtmosAttenuation;
+}
+
+void setPositionEye(vec3 v)
+{
+ vary_PositionEye = v;
+}
+
+void setSunlitColor(vec3 v)
+{
+ vary_SunlitColor = v;
+}
+
+void setAmblitColor(vec3 v)
+{
+ vary_AmblitColor = v;
+}
+
+void setAdditiveColor(vec3 v)
+{
+ vary_AdditiveColor = v;
+}
+
+void setAtmosAttenuation(vec3 v)
+{
+ vary_AtmosAttenuation = v;
+}
+
+void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
+
+ vec3 P = inPositionEye;
+ setPositionEye(P);
+
+ vec3 tmpLightnorm = lightnorm.xyz;
+
+ vec3 Pn = normalize(P);
+ float Plen = length(P);
+
+ vec4 temp1 = vec4(0);
+ vec3 temp2 = vec3(0);
+ vec4 blue_weight;
+ vec4 haze_weight;
+ vec4 sunlight = sunlight_color;
+ vec4 light_atten;
+
+ //sunlight attenuation effect (hue and brightness) due to atmosphere
+ //this is used later for sunlight modulation at various altitudes
+ light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+ //I had thought blue_density and haze_density should have equal weighting,
+ //but attenuation due to haze_density tends to seem too strong
+
+ temp1 = blue_density + vec4(haze_density);
+ blue_weight = blue_density / temp1;
+ haze_weight = vec4(haze_density) / temp1;
+
+ //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)
+ temp2.y = max(0.0, tmpLightnorm.y);
+ temp2.y = 1. / temp2.y;
+ sunlight *= exp( - light_atten * temp2.y);
+
+ // main atmospheric scattering line integral
+ temp2.z = Plen * density_multiplier;
+
+ // Transparency (-> temp1)
+ // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati
+ // compiler gets confused.
+ temp1 = exp(-temp1 * temp2.z * distance_multiplier);
+
+ //final atmosphere attenuation factor
+ setAtmosAttenuation(temp1.rgb);
+
+ //compute haze glow
+ //(can use temp2.x as temp because we haven't used it yet)
+ temp2.x = dot(Pn, tmpLightnorm.xyz);
+ temp2.x = 1. - temp2.x;
+ //temp2.x is 0 at the sun and increases away from sun
+ temp2.x = max(temp2.x, .03); //was glow.y
+ //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)
+ temp2.x *= glow.x;
+ //higher glow.x gives dimmer glow (because next step is 1 / "angle")
+ temp2.x = pow(temp2.x, glow.z);
+ //glow.z should be negative, so we're doing a sort of (1 / "angle") function
+
+ //add "minimum anti-solar illumination"
+ temp2.x += .25;
+
+ //increase ambient when there are more clouds
+ vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;
+
+ /* decrease value and saturation (that in HSV, not HSL) for occluded areas
+ * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html
+ * // The following line of code performs the equivalent of:
+ * float ambAlpha = tmpAmbient.a;
+ * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis
+ * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue);
+ * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha);
+ */
+ tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a);
+
+ //haze color
+ setAdditiveColor(
+ vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient)
+ + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x
+ + tmpAmbient)));
+
+ //brightness of surface both sunlight and ambient
+ setSunlitColor(vec3(sunlight * .5));
+ setAmblitColor(vec3(tmpAmbient * .25));
+ setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
+}
+
+vec3 atmosLighting(vec3 light)
+{
+ light *= getAtmosAttenuation().r;
+ light += getAdditiveColor();
+ return (2.0 * light);
+}
+
+vec3 atmosTransport(vec3 light) {
+ light *= getAtmosAttenuation().r;
+ light += getAdditiveColor() * 2.0;
+ return light;
+}
+vec3 atmosGetDiffuseSunlightColor()
+{
+ return getSunlitColor();
+}
+
+vec3 scaleDownLight(vec3 light)
+{
+ return (light / vec3(scene_light_strength, scene_light_strength, scene_light_strength));
+}
+
+vec3 scaleUpLight(vec3 light)
+{
+ return (light * vec3(scene_light_strength, scene_light_strength, scene_light_strength));
+}
+
+vec3 atmosAmbient(vec3 light)
+{
+ return getAmblitColor() + (light * vec3(0.5f, 0.5f, 0.5f));
+}
+
+vec3 atmosAffectDirectionalLight(float lightIntensity)
+{
+ return getSunlitColor() * vec3(lightIntensity, lightIntensity, lightIntensity);
+}
+
+vec3 scaleSoftClip(vec3 light)
+{
+ //soft clip effect:
+ vec3 zeroes = vec3(0.0f, 0.0f, 0.0f);
+ vec3 ones = vec3(1.0f, 1.0f, 1.0f);
+
+ light = ones - clamp(light, zeroes, ones);
+ light = ones - pow(light, gamma.xxx);
+
+ return light;
+}
+
+vec3 fullbrightAtmosTransport(vec3 light) {
+ float brightness = dot(light.rgb, vec3(0.33333));
+
+ return mix(atmosTransport(light.rgb), light.rgb + getAdditiveColor().rgb, brightness * brightness);
+}
+
+vec3 fullbrightScaleSoftClip(vec3 light)
+{
+ //soft clip effect:
+ return light;
+}
void main()
{
@@ -143,13 +456,15 @@ void main()
vec4 pos = vec4(vary_position, 1.0);
+ float shadow = 1.0;
#if HAS_SHADOW
- float shadow = 0.0;
vec4 spos = pos;
if (spos.z > -shadow_clip.w)
{
+ shadow = 0.0;
+
vec4 lpos;
vec4 near_split = shadow_clip*-0.75;
@@ -215,39 +530,76 @@ void main()
#else
vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
#endif
- vec4 gamma_diff = diff;
- diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f));
+#ifdef FOR_IMPOSTOR
+ vec4 color;
+ color.rgb = diff.rgb;
#ifdef USE_VERTEX_COLOR
- float vertex_color_alpha = vertex_color.a;
+ float final_alpha = diff.a * vertex_color.a;
+ diff.rgb *= vertex_color.rgb;
#else
- float vertex_color_alpha = 1.0;
+ float final_alpha = diff.a;
#endif
- vec3 normal = vary_norm;
+ // Insure we don't pollute depth with invis pixels in impostor rendering
+ //
+ if (final_alpha < 0.01)
+ {
+ discard;
+ }
+#else
- vec3 l = light_position[0].xyz;
- vec3 dlight = calcDirectionalLight(normal, l);
- dlight = dlight * vary_directional.rgb * vary_pointlight_col;
-
-#if HAS_SHADOW
- vec4 col = vec4(vary_ambient + dlight * shadow, vertex_color_alpha);
+#ifdef USE_VERTEX_COLOR
+ float final_alpha = diff.a * vertex_color.a;
+ diff.rgb *= vertex_color.rgb;
#else
- vec4 col = vec4(vary_ambient + dlight, vertex_color_alpha);
+ float final_alpha = diff.a;
#endif
- vec4 color = gamma_diff * col;
+
+ vec4 gamma_diff = diff;
+ diff.rgb = srgb_to_linear(diff.rgb);
+
+ vec3 norm = vary_norm;
+
+ calcAtmospherics(pos.xyz, 1.0);
+
+ vec2 abnormal = encode_normal(norm.xyz);
+ norm.xyz = decode_normal(abnormal.xy);
+
+ float da = dot(norm.xyz, sun_dir.xyz);
+
+ float final_da = da;
+ final_da = min(final_da, shadow);
+ final_da = max(final_da, 0.0f);
+ final_da = min(final_da, 1.0f);
+ final_da = pow(final_da, 1.0/1.3);
+
+ vec4 color = vec4(0,0,0,0);
+
+ color.rgb = atmosAmbient(color.rgb);
+ color.a = final_alpha;
+
+ float ambient = abs(da);
+ ambient *= 0.5;
+ ambient *= ambient;
+ ambient = (1.0-ambient);
+
+ color.rgb *= ambient;
+ color.rgb += atmosAffectDirectionalLight(final_da);
+ color.rgb *= gamma_diff.rgb;
+
+ //color.rgb = mix(diff.rgb, color.rgb, final_alpha);
color.rgb = atmosLighting(color.rgb);
-
color.rgb = scaleSoftClip(color.rgb);
- color.rgb = pow(color.rgb, vec3(2.2));
- col = vec4(0,0,0,0);
+ vec4 light = vec4(0,0,0,0);
+ color.rgb = srgb_to_linear(color.rgb);
- #define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
+ #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diff.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
LIGHT_LOOP(1)
LIGHT_LOOP(2)
@@ -257,9 +609,19 @@ void main()
LIGHT_LOOP(6)
LIGHT_LOOP(7)
- color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb;
+ // keep it linear
+ //
+ color.rgb += light.rgb;
- color.rgb = pow(color.rgb, vec3(1.0/2.2));
+ // straight to display gamma, we're post-deferred
+ //
+ color.rgb = linear_to_srgb(color.rgb);
+
+#ifdef WATER_FOG
+ color = applyWaterFogDeferred(pos.xyz, color);
+#endif
+
+#endif
frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
deleted file mode 100755
index 2ce44d599f..0000000000
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * @file alphaF.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#extension GL_ARB_texture_rectangle : enable
-
-#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
-
-uniform sampler2DRect depthMap;
-uniform sampler2D diffuseMap;
-
-
-uniform vec2 screen_res;
-
-vec3 atmosLighting(vec3 light);
-vec3 scaleSoftClip(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-VARYING vec2 vary_texcoord0;
-VARYING vec4 vertex_color;
-VARYING vec3 vary_norm;
-
-uniform mat4 inv_proj;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-vec3 calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = pow(max(dot(n,l),0.0), 0.7);
- return vec3(a,a,a);
-}
-
-vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(pow(dot(n, lv), 0.7), 0.0);
- }
-
- return vec3(da,da,da);
-}
-
-vec4 getPosition(vec2 pos_screen)
-{
- float depth = texture2DRect(depthMap, pos_screen.xy).a;
- vec2 sc = pos_screen.xy*2.0;
- sc /= screen_res;
- sc -= vec2(1.0,1.0);
- vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
- vec4 pos = inv_proj * ndc;
- pos /= pos.w;
- pos.w = 1.0;
- return pos;
-}
-
-void main()
-{
- vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
- frag *= screen_res;
-
- vec4 pos = vec4(vary_position, 1.0);
-
- vec4 diff= texture2D(diffuseMap,vary_texcoord0.xy);
-
- vec3 n = vary_norm;
- vec3 l = light_position[0].xyz;
- vec3 dlight = calcDirectionalLight(n, l);
- dlight = dlight * vary_directional.rgb * vary_pointlight_col;
-
- vec4 col = vec4(vary_ambient + dlight, vertex_color.a);
- vec4 color = diff * col;
-
- color.rgb = atmosLighting(color.rgb);
-
- color.rgb = scaleSoftClip(color.rgb);
- vec3 light_col = vec3(0,0,0);
-
- #define LIGHT_LOOP(i) \
- light_col += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, vary_norm, light_position[i], light_direction[i], light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
-
- LIGHT_LOOP(1)
- LIGHT_LOOP(2)
- LIGHT_LOOP(3)
- LIGHT_LOOP(4)
- LIGHT_LOOP(5)
- LIGHT_LOOP(6)
- LIGHT_LOOP(7)
-
- color.rgb += diff.rgb * vary_pointlight_col * light_col;
-
- color.rgb = pow(color.rgb, vec3(1.0/2.2));
-
- frag_color = color;
- //frag_color = vec4(1,0,1,1);
- //frag_color = vec4(1,0,1,1)*shadow;
-
-}
-
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl
deleted file mode 100755
index 1113a9845b..0000000000
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * @file alphaNonIndexedNoColorF.glsl
- *
- * $LicenseInfo:firstyear=2005&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2005, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#extension GL_ARB_texture_rectangle : enable
-
-#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
-
-uniform float minimum_alpha;
-
-uniform sampler2DRect depthMap;
-uniform sampler2D diffuseMap;
-
-uniform vec2 screen_res;
-
-vec3 atmosLighting(vec3 light);
-vec3 scaleSoftClip(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-VARYING vec2 vary_texcoord0;
-
-uniform mat4 inv_proj;
-
-vec4 getPosition(vec2 pos_screen)
-{
- float depth = texture2DRect(depthMap, pos_screen.xy).a;
- vec2 sc = pos_screen.xy*2.0;
- sc /= screen_res;
- sc -= vec2(1.0,1.0);
- vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
- vec4 pos = inv_proj * ndc;
- pos /= pos.w;
- pos.w = 1.0;
- return pos;
-}
-
-void main()
-{
- vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
- frag *= screen_res;
-
- vec4 pos = vec4(vary_position, 1.0);
-
- vec4 diff= texture2D(diffuseMap,vary_texcoord0.xy);
-
- if (diff.a < minimum_alpha)
- {
- discard;
- }
-
- vec4 col = vec4(vary_ambient + vary_directional.rgb, 1.0);
- vec4 color = diff * col;
-
-
- color.rgb = atmosLighting(color.rgb);
-
- color.rgb = scaleSoftClip(color.rgb);
-
- color.rgb += diff.rgb * vary_pointlight_col.rgb;
-
- frag_color = color;
-}
-
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
deleted file mode 100755
index 5f93986f1d..0000000000
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * @file alphaSkinnedV.glsl
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-uniform mat4 projection_matrix;
-uniform mat4 modelview_matrix;
-
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
-
-mat4 getObjectSkinnedTransform();
-void calcAtmospherics(vec3 inPositionEye);
-
-float calcDirectionalLight(vec3 n, vec3 l);
-
-vec3 atmosAmbient(vec3 light);
-vec3 atmosAffectDirectionalLight(float lightIntensity);
-
-VARYING vec3 vary_position;
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_pointlight_col;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-
-VARYING vec3 vary_norm;
-
-uniform float near_clip;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-float calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = max(dot(n,l),0.0);
- return a;
-}
-
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(dot(n, lv), 0.0);
- }
-
- return da;
-}
-
-void main()
-{
- vary_texcoord0 = texcoord0;
-
- vec4 pos;
- vec3 norm;
-
- mat4 trans = getObjectSkinnedTransform();
- trans = modelview_matrix * trans;
-
- pos = trans * vec4(position.xyz, 1.0);
-
- norm = position.xyz + normal.xyz;
- norm = normalize(( trans*vec4(norm, 1.0) ).xyz-pos.xyz);
- vary_norm = norm;
- vec4 frag_pos = projection_matrix * pos;
- gl_Position = frag_pos;
-
- vary_position = pos.xyz;
-
- calcAtmospherics(pos.xyz);
-
- //vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
- vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
- vary_pointlight_col = diffuse_color.rgb;
- col.rgb = vec3(0,0,0);
-
- // Add windlight lights
- col.rgb = atmosAmbient(vec3(0.));
-
- vary_ambient = col.rgb*diffuse_color.rgb;
- vary_directional.rgb = atmosAffectDirectionalLight(1);
-
- col.rgb = col.rgb*diffuse_color.rgb;
-
- vertex_color = col;
-
-
-
- vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
-}
-
-
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
index 9d3ba564cd..b40785bbd7 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
@@ -55,67 +55,18 @@ mat4 getSkinnedTransform();
#endif
#endif
-vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
-void calcAtmospherics(vec3 inPositionEye);
-
-vec3 atmosAmbient(vec3 light);
-vec3 atmosAffectDirectionalLight(float lightIntensity);
-vec3 scaleDownLight(vec3 light);
-vec3 scaleUpLight(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
VARYING vec3 vary_fragcoord;
VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
#ifdef USE_VERTEX_COLOR
VARYING vec4 vertex_color;
#endif
VARYING vec2 vary_texcoord0;
-
VARYING vec3 vary_norm;
uniform float near_clip;
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-uniform vec3 sun_dir;
-
-vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(dot(n, lv), 0.0);
- }
-
- return vec3(da,da,da);
-}
-
void main()
{
vec4 pos;
@@ -168,41 +119,8 @@ void main()
vary_norm = norm;
vary_position = pos.xyz;
- calcAtmospherics(pos.xyz);
-
-#ifndef USE_VERTEX_COLOR
- vec4 diffuse_color = vec4(1,1,1,1);
-#endif
- //vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
- vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
-
- vec3 diff = diffuse_color.rgb;
-
-
-
- vary_pointlight_col = diff;
-
-
- col.rgb = vec3(0,0,0);
-
- // Add windlight lights
- col.rgb = atmosAmbient(col.rgb);
-
- float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
- ambient *= 0.5;
- ambient *= ambient;
- ambient = (1.0-ambient);
-
- col.rgb *= ambient;
-
- vary_ambient = col.rgb*diff.rgb;
-
- vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
-
- col.rgb = col.rgb*diff.rgb;
-
#ifdef USE_VERTEX_COLOR
- vertex_color = col;
+ vertex_color = diffuse_color;
#endif
#ifdef HAS_SKIN
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
deleted file mode 100755
index d6149fcc32..0000000000
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * @file avatarAlphaV.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-uniform mat4 projection_matrix;
-
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
-
-vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
-mat4 getSkinnedTransform();
-void calcAtmospherics(vec3 inPositionEye);
-
-float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
-
-vec3 atmosAmbient(vec3 light);
-vec3 atmosAffectDirectionalLight(float lightIntensity);
-vec3 scaleDownLight(vec3 light);
-vec3 scaleUpLight(vec3 light);
-
-VARYING vec3 vary_position;
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_pointlight_col;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-
-
-uniform float near_clip;
-
-uniform vec4 color;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-float calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = max(dot(n,l),0.0);
- return a;
-}
-
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(dot(n, lv), 0.0);
- }
-
- return da;
-}
-
-void main()
-{
- vary_texcoord0 = texcoord0;
-
- vec4 pos;
- vec3 norm;
-
- mat4 trans = getSkinnedTransform();
- vec4 pos_in = vec4(position.xyz, 1.0);
- pos.x = dot(trans[0], pos_in);
- pos.y = dot(trans[1], pos_in);
- pos.z = dot(trans[2], pos_in);
- pos.w = 1.0;
-
- norm.x = dot(trans[0].xyz, normal);
- norm.y = dot(trans[1].xyz, normal);
- norm.z = dot(trans[2].xyz, normal);
- norm = normalize(norm);
-
- vec4 frag_pos = projection_matrix * pos;
- gl_Position = frag_pos;
-
- vary_position = pos.xyz;
-
- calcAtmospherics(pos.xyz);
-
- vec4 col = vec4(0.0, 0.0, 0.0, 1.0);
-
- // Collect normal lights
- col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
- col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
- col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
- col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
- col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
- col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
-
- vary_pointlight_col = col.rgb*color.rgb;
-
- col.rgb = vec3(0,0,0);
-
- // Add windlight lights
- col.rgb = atmosAmbient(vec3(0.));
-
- vary_ambient = col.rgb*color.rgb;
- vary_directional = color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), 0.0));
-
- col.rgb = col.rgb * color.rgb;
-
- vertex_color = col;
-
-
-
- vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
-}
-
-
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index bcccbf77d2..662c762bca 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -31,6 +31,8 @@ out vec4 frag_data[3];
uniform sampler2D diffuseMap;
+uniform float minimum_alpha;
+
VARYING vec3 vary_normal;
VARYING vec2 vary_texcoord0;
@@ -44,7 +46,7 @@ void main()
{
vec4 diff = texture2D(diffuseMap, vary_texcoord0.xy);
- if (diff.a < 0.2)
+ if (diff.a < minimum_alpha)
{
discard;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
index 968a5f6b3d..a4f54dff70 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
@@ -59,22 +59,6 @@ vec4 getPosition(vec2 pos_screen)
return pos;
}
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -91,7 +75,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
void main()
{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
index 59d109b886..8525e13333 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -50,7 +50,7 @@ void main()
{
discard;
}
-
+
frag_data[0] = vec4(col.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index dc1dead656..f22b16965c 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -35,29 +35,143 @@ out vec4 frag_color;
uniform sampler2D diffuseMap;
#endif
+VARYING vec3 vary_position;
VARYING vec4 vertex_color;
VARYING vec2 vary_texcoord0;
-vec3 fullbrightAtmosTransport(vec3 light);
-vec3 fullbrightScaleSoftClip(vec3 light);
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
+vec3 fullbrightAtmosTransportDeferred(vec3 light)
+{
+ return light;
+}
+
+vec3 fullbrightScaleSoftClipDeferred(vec3 light)
+{
+ //soft clip effect:
+ return light;
+}
+
+#ifdef HAS_ALPHA_MASK
+uniform float minimum_alpha;
+#endif
+
+#ifdef WATER_FOG
+uniform vec4 waterPlane;
+uniform vec4 waterFogColor;
+uniform float waterFogDensity;
+uniform float waterFogKS;
+
+vec4 applyWaterFogDeferred(vec3 pos, vec4 color)
+{
+ //normalize view vector
+ vec3 view = normalize(pos);
+ float es = -(dot(view, waterPlane.xyz));
+
+ //find intersection point with water plane and eye vector
+
+ //get eye depth
+ float e0 = max(-waterPlane.w, 0.0);
+
+ vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
+
+ //get object depth
+ float depth = length(pos - int_v);
+
+ //get "thickness" of water
+ float l = max(depth, 0.1);
+
+ float kd = waterFogDensity;
+ float ks = waterFogKS;
+ vec4 kc = waterFogColor;
+
+ float F = 0.98;
+
+ float t1 = -kd * pow(F, ks * e0);
+ float t2 = kd + ks * es;
+ float t3 = pow(F, t2*l) - 1.0;
+
+ float L = min(t1/t2*t3, 1.0);
+
+ float D = pow(0.98, l*kd);
+
+ color.rgb = color.rgb * D + kc.rgb * L;
+ color.a = kc.a + color.a;
+
+ return color;
+}
+#endif
void main()
{
#if HAS_DIFFUSE_LOOKUP
- vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color;
+ vec4 color = diffuseLookup(vary_texcoord0.xy);
#else
- vec4 color = texture2D(diffuseMap, vary_texcoord0.xy)*vertex_color;
+ vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
#endif
- color.rgb = pow(color.rgb,vec3(2.2f,2.2f,2.2f));
-
- color.rgb = fullbrightAtmosTransport(color.rgb);
+ float final_alpha = color.a * vertex_color.a;
- color.rgb = fullbrightScaleSoftClip(color.rgb);
+#ifdef HAS_ALPHA_MASK
+ if (color.a < minimum_alpha)
+ {
+ discard;
+ }
+#endif
+
+ color.rgb *= vertex_color.rgb;
+ color.rgb = srgb_to_linear(color.rgb);
+ color.rgb = fullbrightAtmosTransportDeferred(color.rgb);
+ color.rgb = fullbrightScaleSoftClipDeferred(color.rgb);
+
+ color.rgb = linear_to_srgb(color.rgb);
- color.rgb = pow(color.rgb, vec3(1.0/2.2));
+#ifdef WATER_FOG
+ vec3 pos = vary_position;
+ vec4 fogged = applyWaterFogDeferred(pos, vec4(color.rgb, final_alpha));
+ color.rgb = fogged.rgb;
+ color.a = fogged.a;
+#else
+ color.a = final_alpha;
+#endif
- frag_color = color;
+ frag_color.rgb = color.rgb;
+ frag_color.a = color.a;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
index 3f09a15375..8e899e3e0f 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
@@ -40,6 +40,9 @@ vec3 atmosAffectDirectionalLight(float lightIntensity);
vec3 scaleDownLight(vec3 light);
vec3 scaleUpLight(vec3 light);
+#ifdef WATER_FOG
+VARYING vec3 vary_position;
+#endif
VARYING vec4 vertex_color;
VARYING vec2 vary_texcoord0;
@@ -53,7 +56,11 @@ void main()
passTextureIndex();
gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
-
+
+#ifdef WATER_FOG
+ vary_position = pos.xyz;
+#endif
+
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
calcAtmospherics(pos.xyz);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
deleted file mode 100755
index da1b234240..0000000000
--- a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * @file giF.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#extension GL_ARB_texture_rectangle : enable
-
-#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
-
-uniform sampler2DRect depthMap;
-uniform sampler2DRect normalMap;
-uniform sampler2D noiseMap;
-
-uniform sampler2D diffuseGIMap;
-uniform sampler2D normalGIMap;
-uniform sampler2D depthGIMap;
-
-uniform sampler2D lightFunc;
-
-// Inputs
-VARYING vec2 vary_fragcoord;
-
-uniform vec2 screen_res;
-
-uniform mat4 inv_proj;
-uniform mat4 gi_mat; //gPipeline.mGIMatrix - eye space to sun space
-uniform mat4 gi_mat_proj; //gPipeline.mGIMatrixProj - eye space to projected sun space
-uniform mat4 gi_norm_mat; //gPipeline.mGINormalMatrix - eye space normal to sun space normal matrix
-uniform mat4 gi_inv_proj; //gPipeline.mGIInvProj - projected sun space to sun space
-uniform float gi_radius;
-uniform float gi_intensity;
-uniform int gi_samples;
-uniform vec2 gi_kern[25];
-uniform vec2 gi_scale;
-uniform vec3 gi_quad;
-uniform vec3 gi_spec;
-uniform float gi_direction_weight;
-uniform float gi_light_offset;
-
-vec4 getPosition(vec2 pos_screen)
-{
- float depth = texture2DRect(depthMap, pos_screen.xy).a;
- vec2 sc = pos_screen.xy*2.0;
- sc /= screen_res;
- sc -= vec2(1.0,1.0);
- vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
- vec4 pos = inv_proj * ndc;
- pos /= pos.w;
- pos.w = 1.0;
- return pos;
-}
-
-vec4 getGIPosition(vec2 gi_tc)
-{
- float depth = texture2D(depthGIMap, gi_tc).a;
- vec2 sc = gi_tc*2.0;
- sc -= vec2(1.0, 1.0);
- vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
- vec4 pos = gi_inv_proj*ndc;
- pos.xyz /= pos.w;
- pos.w = 1.0;
- return pos;
-}
-
-vec3 giAmbient(vec3 pos, vec3 norm)
-{
- vec4 gi_c = gi_mat_proj * vec4(pos, 1.0);
- gi_c.xyz /= gi_c.w;
-
- vec4 gi_pos = gi_mat*vec4(pos,1.0);
- vec3 gi_norm = (gi_norm_mat*vec4(norm,1.0)).xyz;
- gi_norm = normalize(gi_norm);
-
- vec2 tcx = gi_norm.xy;
- vec2 tcy = gi_norm.yx;
-
- vec4 eye_pos = gi_mat*vec4(0,0,0,1.0);
-
- vec3 eye_dir = normalize(gi_pos.xyz-eye_pos.xyz/eye_pos.w);
-
- //vec3 eye_dir = vec3(0,0,-1);
- //eye_dir = (gi_norm_mat*vec4(eye_dir, 1.0)).xyz;
- //eye_dir = normalize(eye_dir);
-
- //float round_x = gi_scale.x;
- //float round_y = gi_scale.y;
-
- vec3 debug = texture2D(normalGIMap, gi_c.xy).rgb*0.5+0.5;
- debug.xz = vec2(0.0,0.0);
- //debug = fract(debug);
-
- float round_x = 1.0/64.0;
- float round_y = 1.0/64.0;
-
- //gi_c.x = floor(gi_c.x/round_x+0.5)*round_x;
- //gi_c.y = floor(gi_c.y/round_y+0.5)*round_y;
-
- float fda = 0.0;
- vec3 fdiff = vec3(0,0,0);
-
- vec3 rcol = vec3(0,0,0);
-
- float fsa = 0.0;
-
- for (int i = -1; i < 2; i+=2 )
- {
- for (int j = -1; j < 2; j+=2)
- {
- vec2 tc = vec2(i, j)*0.75;
- vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0+tc*0.5).xyz;
- //tc += gi_norm.xy*nz.z;
- tc += nz.xy*2.0;
- tc /= gi_samples;
- tc += gi_c.xy;
-
- vec3 lnorm = -normalize(texture2D(normalGIMap, tc.xy).xyz*2.0-1.0);
- vec3 lpos = getGIPosition(tc.xy).xyz;
-
- vec3 at = lpos-gi_pos.xyz;
- float dist = dot(at,at);
- float da = clamp(1.0/(gi_spec.x*dist), 0.0, 1.0);
-
- if (da > 0.0)
- {
- //add angular attenuation
- vec3 ldir = at;
- float ang_atten = clamp(dot(ldir, gi_norm), 0.0, 1.0);
-
- float ld = -dot(ldir, lnorm);
-
- if (ang_atten > 0.0 && ld < 0.0)
- {
- vec3 diff = texture2D(diffuseGIMap, tc.xy).xyz;
- da = da*ang_atten;
- fda += da;
- fdiff += diff*da;
- }
- }
- }
- }
-
- fdiff /= max(gi_spec.y*fda, gi_quad.z);
- fdiff = clamp(fdiff, vec3(0), vec3(1));
-
- vec3 ret = fda*fdiff;
- //ret = ret*ret*gi_quad.x+ret*gi_quad.y+gi_quad.z;
-
- //fda *= nz.z;
-
- //rcol.rgb *= gi_intensity;
- //return rcol.rgb+vary_AmblitColor.rgb*0.25;
- //return vec4(debug, 0.0);
- //return vec4(fda*fdiff, 0.0);
- return clamp(ret,vec3(0.0), vec3(1.0));
- //return debug.xyz;
-}
-
-void main()
-{
- vec2 pos_screen = vary_fragcoord.xy;
- vec4 pos = getPosition(pos_screen);
- vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
-
- frag_color.xyz = giAmbient(pos, norm);
-}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index bc0719cb82..f8fdde43f9 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -38,6 +38,42 @@ uniform sampler2D specularMap;
VARYING vec2 vary_texcoord0;
+vec3 decode_normal (vec2 enc)
+{
+ vec2 fenc = enc*4-2;
+ float f = dot(fenc,fenc);
+ float g = sqrt(1-f/4);
+ vec3 n;
+ n.xy = fenc*g;
+ n.z = 1-f/2;
+ return n;
+}
+
+vec2 encode_normal(vec3 n)
+{
+ float f = sqrt(8 * n.z + 8);
+ return n.xy / f + 0.5;
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
void main()
{
vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
@@ -47,7 +83,12 @@ void main()
discard;
}
- frag_data[0] = vec4(col.rgb, col.a * 0.005);
- frag_data[1] = texture2D(specularMap, vary_texcoord0.xy);
- frag_data[2] = vec4(texture2D(normalMap, vary_texcoord0.xy).xyz, 0.0);
+ vec4 norm = texture2D(normalMap, vary_texcoord0.xy);
+ vec4 spec = texture2D(specularMap, vary_texcoord0.xy);
+
+ col.rgb = linear_to_srgb(col.rgb);
+
+ frag_data[0] = vec4(col.rgb, 0.0);
+ frag_data[1] = spec;
+ frag_data[2] = vec4(norm.xy,0,0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index 618ea747f5..07d28ed4cd 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -29,6 +29,44 @@
#define DIFFUSE_ALPHA_MODE_EMISSIVE 3
uniform float emissive_brightness;
+uniform float display_gamma;
+
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
@@ -114,6 +152,52 @@ uniform vec3 light_direction[8];
uniform vec3 light_attenuation[8];
uniform vec3 light_diffuse[8];
+#ifdef WATER_FOG
+uniform vec4 waterPlane;
+uniform vec4 waterFogColor;
+uniform float waterFogDensity;
+uniform float waterFogKS;
+
+vec4 applyWaterFogDeferred(vec3 pos, vec4 color)
+{
+ //normalize view vector
+ vec3 view = normalize(pos);
+ float es = -(dot(view, waterPlane.xyz));
+
+ //find intersection point with water plane and eye vector
+
+ //get eye depth
+ float e0 = max(-waterPlane.w, 0.0);
+
+ vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
+
+ //get object depth
+ float depth = length(pos - int_v);
+
+ //get "thickness" of water
+ float l = max(depth, 0.1);
+
+ float kd = waterFogDensity;
+ float ks = waterFogKS;
+ vec4 kc = waterFogColor;
+
+ float F = 0.98;
+
+ float t1 = -kd * pow(F, ks * e0);
+ float t2 = kd + ks * es;
+ float t3 = pow(F, t2*l) - 1.0;
+
+ float L = min(t1/t2*t3, 1.0);
+
+ float D = pow(0.98, l*kd);
+
+ color.rgb = color.rgb * D + kc.rgb * L;
+ color.a = kc.a + color.a;
+
+ return color;
+}
+#endif
+
vec3 calcDirectionalLight(vec3 n, vec3 l)
{
float a = max(dot(n,l),0.0);
@@ -142,7 +226,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe
float dist = d/la;
float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
dist_atten *= dist_atten;
- dist_atten *= 1.4;
+ dist_atten *= 2.0;
// spotlight coefficient.
float spot = max(dot(-ln, lv), is_pointlight);
@@ -199,10 +283,13 @@ vec4 getPosition_d(vec2 pos_screen, float depth)
return pos;
}
+#ifndef WATER_FOG
vec3 getPositionEye()
{
return vary_PositionEye;
}
+#endif
+
vec3 getSunlitColor()
{
return vary_SunlitColor;
@@ -428,22 +515,6 @@ VARYING vec3 vary_normal;
VARYING vec4 vertex_color;
VARYING vec2 vary_texcoord0;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -460,7 +531,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
void main()
{
@@ -475,8 +545,8 @@ void main()
#endif
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
- vec3 old_diffcol = diffcol.rgb;
- diffcol.rgb = pow(diffcol.rgb, vec3(2.2));
+ vec3 gamma_diff = diffcol.rgb;
+ diffcol.rgb = srgb_to_linear(diffcol.rgb);
#endif
#if HAS_SPECULAR_MAP
@@ -502,6 +572,9 @@ void main()
norm.xyz = tnorm;
norm.xyz = normalize(norm.xyz);
+ vec2 abnormal = encode_normal(norm.xyz);
+ norm.xyz = decode_normal(abnormal.xy);
+
vec4 final_color = diffcol;
#if (DIFFUSE_ALPHA_MODE != DIFFUSE_ALPHA_MODE_EMISSIVE)
@@ -605,22 +678,26 @@ void main()
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
float da =dot(norm.xyz, sun_dir.xyz);
+
float final_da = da;
final_da = min(final_da, shadow);
- final_da = max(final_da, diffuse.a);
+ //final_da = max(final_da, diffuse.a);
final_da = max(final_da, 0.0f);
+ final_da = min(final_da, 1.0f);
+ final_da = pow(final_da, 1.0/1.3);
col.rgb = atmosAmbient(col);
- float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
+ float ambient = min(abs(da), 1.0);
ambient *= 0.5;
ambient *= ambient;
ambient = (1.0-ambient);
col.rgb *= ambient;
- col.rgb = col.rgb + atmosAffectDirectionalLight(pow(final_da, 1.0/1.3));
- col.rgb *= old_diffcol.rgb;
+ col.rgb = col.rgb + atmosAffectDirectionalLight(final_da);
+
+ col.rgb *= gamma_diff.rgb;
float glare = 0.0;
@@ -643,7 +720,8 @@ void main()
col += spec_contrib;
}
- col = mix(col.rgb, old_diffcol.rgb, diffuse.a);
+
+ col = mix(col.rgb, diffcol.rgb, diffuse.a);
if (envIntensity > 0.0)
{
@@ -661,16 +739,20 @@ void main()
glare += cur_glare;
}
- col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
- col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
+ //col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
+ //col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
+
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
//convert to linear space before adding local lights
- col = pow(col, vec3(2.2));
+ col = srgb_to_linear(col);
-
vec3 npos = normalize(-pos.xyz);
+
+ vec3 light = vec3(0,0,0);
- #define LIGHT_LOOP(i) col.rgb = col.rgb + calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare);
+ #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare);
LIGHT_LOOP(1)
LIGHT_LOOP(2)
@@ -680,13 +762,22 @@ void main()
LIGHT_LOOP(6)
LIGHT_LOOP(7)
+ col.rgb += light.rgb;
+
+ glare = min(glare, 1.0);
+ float al = max(diffcol.a,glare)*vertex_color.a;
//convert to gamma space for display on screen
- col.rgb = pow(col.rgb, vec3(1.0/2.2));
+ col.rgb = linear_to_srgb(col.rgb);
+
+#ifdef WATER_FOG
+ vec4 temp = applyWaterFogDeferred(pos, vec4(col.rgb, al));
+ col.rgb = temp.rgb;
+ al = temp.a;
+#endif
frag_color.rgb = col.rgb;
- glare = min(glare, 1.0);
- frag_color.a = max(diffcol.a,glare)*vertex_color.a;
+ frag_color.a = al;
#else
frag_data[0] = final_color;
@@ -694,3 +785,4 @@ void main()
frag_data[2] = final_normal; // XY = Normal. Z = Env. intensity.
#endif
}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
index b25032866b..393d1e69da 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
@@ -142,3 +142,4 @@ vary_normal = n;
#endif
#endif
}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 868526d457..236567219b 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -45,9 +45,8 @@ uniform float sun_wash;
uniform int light_count;
-#define MAX_LIGHT_COUNT 16
-uniform vec4 light[MAX_LIGHT_COUNT];
-uniform vec4 light_col[MAX_LIGHT_COUNT];
+uniform vec4 light[LIGHT_COUNT];
+uniform vec4 light_col[LIGHT_COUNT];
VARYING vec4 vary_fragcoord;
uniform vec2 screen_res;
@@ -56,22 +55,6 @@ uniform float far_z;
uniform mat4 inv_proj;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -88,7 +71,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition(vec2 pos_screen)
{
@@ -117,30 +99,21 @@ void main()
norm = normalize(norm);
vec4 spec = texture2DRect(specularRect, frag.xy);
vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
+
float noise = texture2D(noiseMap, frag.xy/128.0).b;
vec3 out_col = vec3(0,0,0);
vec3 npos = normalize(-pos);
// As of OSX 10.6.7 ATI Apple's crash when using a variable size loop
- for (int i = 0; i < MAX_LIGHT_COUNT; ++i)
+ for (int i = 0; i < LIGHT_COUNT; ++i)
{
- bool light_contrib = (i < light_count);
-
vec3 lv = light[i].xyz-pos;
float dist = length(lv);
dist /= light[i].w;
- if (dist > 1.0)
+ if (dist <= 1.0)
{
- light_contrib = false;
- }
-
float da = dot(norm, lv);
- if (da < 0.0)
- {
- light_contrib = false;
- }
-
- if (light_contrib)
+ if (da > 0.0)
{
lv = normalize(lv);
da = dot(norm, lv);
@@ -183,12 +156,9 @@ void main()
out_col += col;
}
}
-
- if (dot(out_col, out_col) <= 0.0)
- {
- discard;
}
+
frag_color.rgb = out_col;
frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
index 0443b592e2..0e6ab80d4d 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
@@ -68,22 +68,6 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -100,17 +84,48 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
#endif
-vec4 correctWithGamma(vec4 col)
+}
+
+vec3 linear_to_srgb(vec3 cl)
{
- return vec4(pow(col.rgb, vec3(2.2)), col.a);
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
}
+
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
- ret = correctWithGamma(ret);
+ ret.rgb = srgb_to_linear(ret.rgb);
vec2 dist = tc-vec2(0.5);
@@ -126,7 +141,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
- ret = correctWithGamma(ret);
+ ret.rgb = srgb_to_linear(ret.rgb);
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
@@ -144,7 +159,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
- ret = correctWithGamma(ret);
+ ret.rgb = srgb_to_linear(ret.rgb);
vec2 dist = tc-vec2(0.5);
@@ -296,14 +311,11 @@ void main()
vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds;
vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0));
-
+ stc /= stc.w;
if (stc.z > 0.0)
{
- stc.xy /= stc.w;
-
- float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0);
+ float fatten = clamp(envIntensity*envIntensity+envIntensity*0.25, 0.25, 1.0);
- //stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
if (stc.x < 1.0 &&
@@ -311,7 +323,7 @@ void main()
stc.x > 0.0 &&
stc.y > 0.0)
{
- col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*spec.rgb;
+ col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod).rgb*spec.rgb;
}
}
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index caf20ce707..106d48bd71 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -54,22 +54,6 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
uniform vec4 viewport;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -86,7 +70,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition(vec2 pos_screen)
{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index 6f2cfae6d2..4e2f98aa29 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -36,11 +36,32 @@ uniform sampler2DRect diffuseRect;
uniform vec2 screen_res;
VARYING vec2 vary_fragcoord;
-uniform float texture_gamma;
+uniform float display_gamma;
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
void main()
{
vec4 diff = texture2DRect(diffuseRect, vary_fragcoord);
- frag_color = pow(diff, vec4(texture_gamma, texture_gamma, texture_gamma, 1.0f));
+ diff.rgb = linear_to_srgb(diff.rgb);
+ frag_color = diff;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 58875ff4ea..760d52a9ce 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -79,22 +79,43 @@ vec3 vary_AtmosAttenuation;
uniform mat4 inv_proj;
uniform vec2 screen_res;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
+vec3 srgb_to_linear(vec3 cs)
{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
}
-vec3 decode_normal (vec2 enc)
+vec3 linear_to_srgb(vec3 cl)
{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
+
vec3 decode_normal (vec2 enc)
{
vec2 fenc = enc*4-2;
@@ -105,7 +126,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition_d(vec2 pos_screen, float depth)
{
@@ -171,6 +191,53 @@ void setAtmosAttenuation(vec3 v)
vary_AtmosAttenuation = v;
}
+
+#ifdef WATER_FOG
+uniform vec4 waterPlane;
+uniform vec4 waterFogColor;
+uniform float waterFogDensity;
+uniform float waterFogKS;
+
+vec4 applyWaterFogDeferred(vec3 pos, vec4 color)
+{
+ //normalize view vector
+ vec3 view = normalize(pos);
+ float es = -(dot(view, waterPlane.xyz));
+
+ //find intersection point with water plane and eye vector
+
+ //get eye depth
+ float e0 = max(-waterPlane.w, 0.0);
+
+ vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
+
+ //get object depth
+ float depth = length(pos - int_v);
+
+ //get "thickness" of water
+ float l = max(depth, 0.1);
+
+ float kd = waterFogDensity;
+ float ks = waterFogKS;
+ vec4 kc = waterFogColor;
+
+ float F = 0.98;
+
+ float t1 = -kd * pow(F, ks * e0);
+ float t2 = kd + ks * es;
+ float t3 = pow(F, t2*l) - 1.0;
+
+ float L = min(t1/t2*t3, 1.0);
+
+ float D = pow(0.98, l*kd);
+
+ color.rgb = color.rgb * D + kc.rgb * L;
+ color.a = kc.a + color.a;
+
+ return color;
+}
+#endif
+
void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
vec3 P = inPositionEye;
@@ -325,13 +392,16 @@ void main()
float envIntensity = norm.z;
norm.xyz = decode_normal(norm.xy); // unpack norm
- float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
- da = pow(da, 1.0/1.3);
+ float da = dot(norm.xyz, sun_dir.xyz);
+
+ float final_da = max(0.0,da);
+ final_da = min(final_da, 1.0f);
+ final_da = pow(final_da, 1.0/1.3);
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
- diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
+ diffuse.rgb = linear_to_srgb(diffuse.rgb);
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 col;
@@ -347,7 +417,7 @@ void main()
col.rgb *= ambient;
- col += atmosAffectDirectionalLight(max(min(da, 1.0), 0.0));
+ col += atmosAffectDirectionalLight(final_da);
col *= diffuse.rgb;
@@ -387,13 +457,19 @@ void main()
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
}
- col = pow(col, vec3(2.2));
+ #ifdef WATER_FOG
+ vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom));
+ col = fogged.rgb;
+ bloom = fogged.a;
+ #endif
+
+ col = srgb_to_linear(col);
//col = vec3(1,0,1);
//col.g = envIntensity;
}
- frag_color.rgb = col;
-
+ frag_color.rgb = col.rgb;
frag_color.a = bloom;
}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
index 28432dac9a..8d8a6c9dde 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
@@ -68,22 +68,6 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -100,11 +84,47 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
+
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
#endif
+}
+
vec4 correctWithGamma(vec4 col)
{
- return vec4(pow(col.rgb, vec3(2.2)), col.a);
+ return vec4(srgb_to_linear(col.rgb), col.a);
}
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
diff --git a/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl b/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl
new file mode 100644
index 0000000000..587f3d5a94
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl
@@ -0,0 +1,46 @@
+/**
+ * @file srgb.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+ return mix(high_range, low_range, lte);
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+ return mix(high_range, low_range, lt);
+
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/srgb_mac.glsl b/indra/newview/app_settings/shaders/class1/deferred/srgb_mac.glsl
new file mode 100644
index 0000000000..6cc1e6e798
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/srgb_mac.glsl
@@ -0,0 +1,54 @@
+/**
+ * @file srgb.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
index 6653f57ee1..c0a5865bef 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -49,22 +49,6 @@ VARYING vec2 vary_fragcoord;
uniform mat4 inv_proj;
uniform vec2 screen_res;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -81,7 +65,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition(vec2 pos_screen)
{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl
new file mode 100644
index 0000000000..78f841c733
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/underWaterF.glsl
@@ -0,0 +1,157 @@
+/**
+ * @file underWaterF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
+#endif
+
+uniform sampler2D diffuseMap;
+uniform sampler2D bumpMap;
+uniform sampler2D screenTex;
+uniform sampler2D refTex;
+uniform sampler2D screenDepth;
+
+uniform vec4 fogCol;
+uniform vec3 lightDir;
+uniform vec3 specular;
+uniform float lightExp;
+uniform vec2 fbScale;
+uniform float refScale;
+uniform float znear;
+uniform float zfar;
+uniform float kd;
+uniform vec4 waterPlane;
+uniform vec3 eyeVec;
+uniform vec4 waterFogColor;
+uniform float waterFogDensity;
+uniform float waterFogKS;
+uniform vec2 screenRes;
+
+//bigWave is (refCoord.w, view.w);
+VARYING vec4 refCoord;
+VARYING vec4 littleWave;
+VARYING vec4 view;
+
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
+vec2 encode_normal(vec3 n)
+{
+ float f = sqrt(8 * n.z + 8);
+ return n.xy / f + 0.5;
+}
+
+vec4 applyWaterFog(vec4 color, vec3 viewVec)
+{
+ //normalize view vector
+ vec3 view = normalize(viewVec);
+ float es = -view.z;
+
+ //find intersection point with water plane and eye vector
+
+ //get eye depth
+ float e0 = max(-waterPlane.w, 0.0);
+
+ //get object depth
+ float depth = length(viewVec);
+
+ //get "thickness" of water
+ float l = max(depth, 0.1);
+
+ float kd = waterFogDensity;
+ float ks = waterFogKS;
+ vec4 kc = waterFogColor;
+
+ float F = 0.98;
+
+ float t1 = -kd * pow(F, ks * e0);
+ float t2 = kd + ks * es;
+ float t3 = pow(F, t2*l) - 1.0;
+
+ float L = min(t1/t2*t3, 1.0);
+
+ float D = pow(0.98, l*kd);
+ //return vec4(1.0, 0.0, 1.0, 1.0);
+ return color * D + kc * L;
+ //depth /= 10.0;
+ //return vec4(depth,depth,depth,0.0);
+}
+
+void main()
+{
+ vec4 color;
+
+ //get detail normals
+ vec3 wave1 = texture2D(bumpMap, vec2(refCoord.w, view.w)).xyz*2.0-1.0;
+ vec3 wave2 = texture2D(bumpMap, littleWave.xy).xyz*2.0-1.0;
+ vec3 wave3 = texture2D(bumpMap, littleWave.zw).xyz*2.0-1.0;
+ vec3 wavef = normalize(wave1+wave2+wave3);
+
+ //figure out distortion vector (ripply)
+ vec2 distort = (refCoord.xy/refCoord.z) * 0.5 + 0.5;
+ distort = distort+wavef.xy*refScale;
+
+ vec4 fb = texture2D(screenTex, distort);
+
+ frag_data[0] = vec4(linear_to_srgb(fb.rgb), 1.0); // diffuse
+ frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
+ frag_data[2] = vec4(encode_normal(wavef), 0.0, 0.0); // normalxyz, displace
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index daa2fb390a..1c3ad49a21 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -67,6 +67,43 @@ VARYING vec4 littleWave;
VARYING vec4 view;
VARYING vec4 vary_position;
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -121,7 +158,7 @@ void main()
refcol *= df1 * 0.333;
vec3 wavef = (wave1 + wave2 * 0.4 + wave3 * 0.6) * 0.5;
- //wavef.z *= max(-viewVec.z, 0.1);
+ wavef.z *= max(-viewVec.z, 0.1);
wavef = normalize(wavef);
float df2 = dot(viewVec, wavef) * fresnelScale+fresnelOffset;
@@ -131,13 +168,14 @@ void main()
vec2 refvec4 = distort+refdistort4/dmod;
float dweight = min(dist2*blurMultiplier, 1.0);
vec4 baseCol = texture2D(refTex, refvec4);
+
refcol = mix(baseCol*df2, refcol, dweight);
//get specular component
- //float spec = clamp(dot(lightDir, (reflect(viewVec,wavef))),0.0,1.0);
+ float spec = clamp(dot(lightDir, (reflect(viewVec,wavef))),0.0,1.0);
//harden specular
- //spec = pow(spec, 128.0);
+ spec = pow(spec, 128.0);
//figure out distortion vector (ripply)
vec2 distort2 = distort+wavef.xy*refScale/max(dmod*df1, 1.0);
@@ -148,24 +186,17 @@ void main()
// Note we actually want to use just df1, but multiplying by 0.999999 gets around an nvidia compiler bug
color.rgb = mix(fb.rgb, refcol.rgb, df1 * 0.99999);
- float shadow = 1.0;
vec4 pos = vary_position;
- //vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz;
- vec4 spos = pos;
-
- //spec *= shadow;
- //color.rgb += spec * specular;
+ color.rgb += spec * specular;
color.rgb = atmosTransport(color.rgb);
color.rgb = scaleSoftClip(color.rgb);
- //color.a = spec * sunAngle2;
+ color.a = spec * sunAngle2;
- //wavef.z *= 0.1f;
- //wavef = normalize(wavef);
- vec3 screenspacewavef = (norm_mat*vec4(wavef, 1.0)).xyz;
+ vec3 screenspacewavef = normalize((norm_mat*vec4(wavef, 1.0)).xyz);
- frag_data[0] = vec4(color.rgb, 0.5); // diffuse
- frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
- frag_data[2] = vec4(encode_normal(screenspacewavef), 0.0, 0.0); // normalxyz, displace
+ frag_data[0] = vec4(color.rgb, color); // diffuse
+ frag_data[1] = vec4(0); // speccolor, spec
+ frag_data[2] = vec4(encode_normal(screenspacewavef.xyz*0.5+0.5), 0.05, 0);// normalxy, 0, 0
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
index ece34dcc4e..9734acf005 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
@@ -85,7 +85,7 @@ void main()
pos.w = 1.0;
pos = modelview_matrix*pos;
- calcAtmospherics(view.xyz);
+ calcAtmospherics(pos.xyz);
//pass wave parameters to pixel shader
vec2 bigWave = (v.xy) * vec2(0.04,0.04) + d1 * time * 0.055;
diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl
index 6523a06d22..f8efd7cb4a 100644
--- a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl
@@ -31,8 +31,6 @@ out vec4 frag_color;
uniform sampler2D depthMap;
-uniform float delta;
-
VARYING vec2 tc0;
VARYING vec2 tc1;
VARYING vec2 tc2;
diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl
index 0e5dc08183..942c5888e7 100644
--- a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl
@@ -33,8 +33,6 @@ out vec4 frag_color;
uniform sampler2DRect depthMap;
-uniform float delta;
-
VARYING vec2 tc0;
VARYING vec2 tc1;
VARYING vec2 tc2;
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
index eaaa7b208d..cad5b9ff04 100755
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
@@ -41,13 +41,13 @@ void default_lighting()
{
vec4 color = diffuseLookup(vary_texcoord0.xy);
+ color *= vertex_color;
+
if (color.a < minimum_alpha)
{
discard;
}
- color.rgb *= vertex_color.rgb;
-
color.rgb = atmosLighting(color.rgb);
color.rgb = scaleSoftClip(color.rgb);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
deleted file mode 100755
index 9670d59399..0000000000
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * @file alphaF.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#extension GL_ARB_texture_rectangle : enable
-
-#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
-
-uniform sampler2DShadow shadowMap0;
-uniform sampler2DShadow shadowMap1;
-uniform sampler2DShadow shadowMap2;
-uniform sampler2DShadow shadowMap3;
-uniform sampler2DRect depthMap;
-uniform sampler2D diffuseMap;
-
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
-uniform vec2 screen_res;
-
-vec3 atmosLighting(vec3 light);
-vec3 scaleSoftClip(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-VARYING vec2 vary_texcoord0;
-VARYING vec4 vertex_color;
-VARYING vec3 vary_norm;
-
-uniform vec2 shadow_res;
-uniform float shadow_bias;
-
-uniform mat4 inv_proj;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-vec3 calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = pow(max(dot(n,l),0.0), 0.7);
- return vec3(a,a,a);
-}
-
-vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(pow(dot(n, lv), 0.7), 0.0);
- }
-
- return vec3(da,da,da);
-}
-
-vec4 getPosition(vec2 pos_screen)
-{
- float depth = texture2DRect(depthMap, pos_screen.xy).a;
- vec2 sc = pos_screen.xy*2.0;
- sc /= screen_res;
- sc -= vec2(1.0,1.0);
- vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
- vec4 pos = inv_proj * ndc;
- pos.xyz /= pos.w;
- pos.w = 1.0;
- return pos;
-}
-
-float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
-{
- stc.xyz /= stc.w;
- stc.z += shadow_bias;
-
- stc.x = floor(stc.x*shadow_res.x + fract(stc.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
-
- float cs = shadow2D(shadowMap, stc.xyz).x;
- float shadow = cs;
-
- shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
- shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
- shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
- shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
-
- return shadow*0.2;
-}
-
-
-void main()
-{
- vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
- frag *= screen_res;
-
- float shadow = 0.0;
- vec4 pos = vec4(vary_position, 1.0);
-
- vec4 spos = pos;
-
- if (spos.z > -shadow_clip.w)
- {
- vec4 lpos;
-
- vec4 near_split = shadow_clip*-0.75;
- vec4 far_split = shadow_clip*-1.25;
- vec4 transition_domain = near_split-far_split;
- float weight = 0.0;
-
- if (spos.z < near_split.z)
- {
- lpos = shadow_matrix[3]*spos;
-
- float w = 1.0;
- w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
- shadow += pcfShadow(shadowMap3, lpos)*w;
- weight += w;
- shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
- }
-
- if (spos.z < near_split.y && spos.z > far_split.z)
- {
- lpos = shadow_matrix[2]*spos;
-
- float w = 1.0;
- w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
- w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
- shadow += pcfShadow(shadowMap2, lpos)*w;
- weight += w;
- }
-
- if (spos.z < near_split.x && spos.z > far_split.y)
- {
- lpos = shadow_matrix[1]*spos;
-
- float w = 1.0;
- w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
- w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
- shadow += pcfShadow(shadowMap1, lpos)*w;
- weight += w;
- }
-
- if (spos.z > far_split.x)
- {
- lpos = shadow_matrix[0]*spos;
-
- float w = 1.0;
- w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
-
- shadow += pcfShadow(shadowMap0, lpos)*w;
- weight += w;
- }
-
-
- shadow /= weight;
-
- }
- else
- {
- shadow = 1.0;
- }
- vec3 n = vary_norm;
- vec3 l = light_position[0].xyz;
- vec3 dlight = calcDirectionalLight(n, l);
- dlight = dlight * vary_directional.rgb * vary_pointlight_col;
- vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
-
- vec4 col = vec4(vary_ambient + dlight*shadow, vertex_color.a);
- vec4 color = diff * col;
-
- color.rgb = atmosLighting(color.rgb);
-
- color.rgb = scaleSoftClip(color.rgb);
- vec3 light_col = vec3(0,0,0);
-
- #define LIGHT_LOOP(i) \
- light_col += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, vary_norm, light_position[i], light_direction[i], light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
-
- LIGHT_LOOP(1)
- LIGHT_LOOP(2)
- LIGHT_LOOP(3)
- LIGHT_LOOP(4)
- LIGHT_LOOP(5)
- LIGHT_LOOP(6)
- LIGHT_LOOP(7)
-
- color.rgb += diff.rgb * vary_pointlight_col * light_col;
-
- frag_color = color;
-}
-
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
deleted file mode 100755
index fae279fba0..0000000000
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
+++ /dev/null
@@ -1,242 +0,0 @@
-/**
- * @file alphaNonIndexedNoColorF.glsl
- *
- * $LicenseInfo:firstyear=2005&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2005, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#extension GL_ARB_texture_rectangle : enable
-
-#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
-
-uniform float minimum_alpha;
-
-uniform sampler2DShadow shadowMap0;
-uniform sampler2DShadow shadowMap1;
-uniform sampler2DShadow shadowMap2;
-uniform sampler2DShadow shadowMap3;
-uniform sampler2DRect depthMap;
-uniform sampler2D diffuseMap;
-
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
-uniform vec2 screen_res;
-
-vec3 atmosLighting(vec3 light);
-vec3 scaleSoftClip(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_norm;
-
-uniform vec2 shadow_res;
-
-uniform float shadow_bias;
-
-uniform mat4 inv_proj;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-vec3 calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = pow(max(dot(n,l),0.0), 0.7);
- return vec3(a, a, a);
-}
-
-vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(pow(dot(n, lv), 0.7), 0.0);
- }
-
- return vec3(da,da,da);
-}
-
-vec4 getPosition(vec2 pos_screen)
-{
- float depth = texture2DRect(depthMap, pos_screen.xy).a;
- vec2 sc = pos_screen.xy*2.0;
- sc /= screen_res;
- sc -= vec2(1.0,1.0);
- vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
- vec4 pos = inv_proj * ndc;
- pos.xyz /= pos.w;
- pos.w = 1.0;
- return pos;
-}
-
-float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
-{
- stc.xyz /= stc.w;
- stc.z += shadow_bias;
-
- stc.x = floor(stc.x*shadow_res.x + fract(stc.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
- float cs = shadow2D(shadowMap, stc.xyz).x;
-
- float shadow = cs;
-
- shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
- shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
- shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
- shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
-
- return shadow*0.2;
-}
-
-
-void main()
-{
- vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
- frag *= screen_res;
-
- float shadow = 0.0;
- vec4 pos = vec4(vary_position, 1.0);
-
- vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
-
- if (diff.a < minimum_alpha)
- {
- discard;
- }
-
- vec4 spos = pos;
-
- if (spos.z > -shadow_clip.w)
- {
- vec4 lpos;
-
- vec4 near_split = shadow_clip*-0.75;
- vec4 far_split = shadow_clip*-1.25;
- vec4 transition_domain = near_split-far_split;
- float weight = 0.0;
-
- if (spos.z < near_split.z)
- {
- lpos = shadow_matrix[3]*spos;
-
- float w = 1.0;
- w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
- shadow += pcfShadow(shadowMap3, lpos)*w;
- weight += w;
- shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
- }
-
- if (spos.z < near_split.y && spos.z > far_split.z)
- {
- lpos = shadow_matrix[2]*spos;
-
- float w = 1.0;
- w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
- w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
- shadow += pcfShadow(shadowMap2, lpos)*w;
- weight += w;
- }
-
- if (spos.z < near_split.x && spos.z > far_split.y)
- {
- lpos = shadow_matrix[1]*spos;
-
- float w = 1.0;
- w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
- w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
- shadow += pcfShadow(shadowMap1, lpos)*w;
- weight += w;
- }
-
- if (spos.z > far_split.x)
- {
- lpos = shadow_matrix[0]*spos;
-
- float w = 1.0;
- w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
-
- shadow += pcfShadow(shadowMap0, lpos)*w;
- weight += w;
- }
-
-
- shadow /= weight;
- }
- else
- {
- shadow = 1.0;
- }
- vec3 n = vary_norm;
- vec3 l = light_position[0].xyz;
- vec3 dlight = calcDirectionalLight(n, l);
- dlight = dlight * vary_directional.rgb * vary_pointlight_col;
-
- vec4 col = vec4(vary_ambient + dlight*shadow, 1.0);
- vec4 color = diff * col;
-
- color.rgb = atmosLighting(color.rgb);
-
- color.rgb = scaleSoftClip(color.rgb);
- vec3 light_col = vec3(0,0,0);
-
- #define LIGHT_LOOP(i) \
- light_col += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, vary_norm, light_position[i], light_direction[i], light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
-
- LIGHT_LOOP(1)
- LIGHT_LOOP(2)
- LIGHT_LOOP(3)
- LIGHT_LOOP(4)
- LIGHT_LOOP(5)
- LIGHT_LOOP(6)
- LIGHT_LOOP(7)
-
- color.rgb += diff.rgb * vary_pointlight_col * light_col;
-
- frag_color = color;
-}
-
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
deleted file mode 100755
index 7f4d82ecc6..0000000000
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * @file alphaSkinnedV.glsl
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-uniform mat4 projection_matrix;
-uniform mat4 texture_matrix0;
-uniform mat4 modelview_matrix;
-uniform mat4 modelview_projection_matrix;
-
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
-
-vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
-void calcAtmospherics(vec3 inPositionEye);
-
-float calcDirectionalLight(vec3 n, vec3 l);
-mat4 getObjectSkinnedTransform();
-vec3 atmosAmbient(vec3 light);
-vec3 atmosAffectDirectionalLight(float lightIntensity);
-vec3 scaleDownLight(vec3 light);
-vec3 scaleUpLight(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_norm;
-
-uniform float near_clip;
-uniform float shadow_offset;
-uniform float shadow_bias;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-float calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = max(dot(n,l),0.0);
- return a;
-}
-
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
-//get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(dot(n, lv), 0.0);
- }
-
- return da;
-}
-
-void main()
-{
- vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
-
- mat4 mat = getObjectSkinnedTransform();
-
- mat = modelview_matrix * mat;
-
- vec3 pos = (mat*vec4(position, 1.0)).xyz;
-
- gl_Position = projection_matrix * vec4(pos, 1.0);
-
- vec4 n = vec4(position, 1.0);
- n.xyz += normal.xyz;
- n.xyz = (mat*n).xyz;
- n.xyz = normalize(n.xyz-pos.xyz);
-
- vec3 norm = n.xyz;
- vary_norm = norm;
-
- float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
- vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
-
- calcAtmospherics(pos.xyz);
-
- //vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
- vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
-
- // Collect normal lights
- col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
- col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
- col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
- col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
- col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
- col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
-
- vary_pointlight_col = col.rgb*diffuse_color.rgb;
-
- col.rgb = vec3(0,0,0);
-
- // Add windlight lights
- col.rgb = atmosAmbient(vec3(0.));
-
- vary_ambient = col.rgb*diffuse_color.rgb;
- vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a)));
-
- col.rgb = min(col.rgb*diffuse_color.rgb, 1.0);
-
- vertex_color = col;
-
-
-
- pos.xyz = (modelview_projection_matrix * vec4(position.xyz, 1.0)).xyz;
- vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
-
-}
-
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
deleted file mode 100755
index 13c6ffc607..0000000000
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
+++ /dev/null
@@ -1,224 +0,0 @@
-/**
- * @file alphaV.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-uniform mat3 normal_matrix;
-uniform mat4 texture_matrix0;
-uniform mat4 projection_matrix;
-uniform mat4 modelview_matrix;
-uniform mat4 modelview_projection_matrix;
-
-ATTRIBUTE vec3 position;
-
-#ifdef USE_INDEXED_TEX
-void passTextureIndex();
-#endif
-
-ATTRIBUTE vec3 normal;
-
-#ifdef USE_VERTEX_COLOR
-ATTRIBUTE vec4 diffuse_color;
-#endif
-
-ATTRIBUTE vec2 texcoord0;
-
-#ifdef HAS_SKIN
-mat4 getObjectSkinnedTransform();
-#else
-#ifdef IS_AVATAR_SKIN
-mat4 getSkinnedTransform();
-#endif
-#endif
-
-vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
-void calcAtmospherics(vec3 inPositionEye);
-
-vec3 calcDirectionalLight(vec3 n, vec3 l);
-
-vec3 atmosAmbient(vec3 light);
-vec3 atmosAffectDirectionalLight(float lightIntensity);
-vec3 scaleDownLight(vec3 light);
-vec3 scaleUpLight(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-
-#ifdef USE_VERTEX_COLOR
-VARYING vec4 vertex_color;
-#endif
-
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_norm;
-
-uniform float near_clip;
-uniform float shadow_offset;
-uniform float shadow_bias;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-uniform vec3 sun_dir;
-
-vec3 calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = max(dot(n,l),0.0);
- return vec3(a,a,a);
-}
-
-vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(dot(n, lv), 0.0);
- }
-
- return vec3(da,da,da);
-}
-
-void main()
-{
- vec4 pos;
- vec3 norm;
-
- //transform vertex
-#ifdef HAS_SKIN
- mat4 trans = getObjectSkinnedTransform();
- trans = modelview_matrix * trans;
-
- pos = trans * vec4(position.xyz, 1.0);
-
- norm = position.xyz + normal.xyz;
- norm = normalize((trans * vec4(norm, 1.0)).xyz - pos.xyz);
- vec4 frag_pos = projection_matrix * pos;
- gl_Position = frag_pos;
-#else
-
-#ifdef IS_AVATAR_SKIN
- mat4 trans = getSkinnedTransform();
- vec4 pos_in = vec4(position.xyz, 1.0);
- pos.x = dot(trans[0], pos_in);
- pos.y = dot(trans[1], pos_in);
- pos.z = dot(trans[2], pos_in);
- pos.w = 1.0;
-
- norm.x = dot(trans[0].xyz, normal);
- norm.y = dot(trans[1].xyz, normal);
- norm.z = dot(trans[2].xyz, normal);
- norm = normalize(norm);
-
- vec4 frag_pos = projection_matrix * pos;
- gl_Position = frag_pos;
-#else
- norm = normalize(normal_matrix * normal);
- vec4 vert = vec4(position.xyz, 1.0);
- pos = (modelview_matrix * vert);
- gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
-#endif
-
-#endif
-
-#ifdef USE_INDEXED_TEX
- passTextureIndex();
- vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
-#else
- vary_texcoord0 = texcoord0;
-#endif
-
- vary_norm = norm;
- float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
- vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
-
- calcAtmospherics(pos.xyz);
-
-#ifndef USE_VERTEX_COLOR
- vec4 diffuse_color = vec4(1,1,1,1);
-#endif
-
- //vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
- vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
-
- vec3 dff = pow(diffuse_color.rgb, vec3(2.2f,2.2f,2.2f));
-
- vary_pointlight_col = dff;
-
- col.rgb = vec3(0,0,0);
-
- // Add windlight lights
- col.rgb = atmosAmbient(col.rgb);
-
- float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
- ambient *= 0.5;
- ambient *= ambient;
- ambient = (1.0-ambient);
-
- col.rgb *= ambient;
-
- vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
- vary_ambient = col.rgb*dff;
-
- col.rgb = col.rgb*dff;
-
-#ifdef USE_VERTEX_COLOR
- vertex_color = col;
-#endif
-
-#ifdef HAS_SKIN
- vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
-#else
-
-#ifdef IS_AVATAR_SKIN
- vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
-#else
- pos = modelview_projection_matrix * vert;
- vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
-#endif
-
-#endif
-
-}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
deleted file mode 100755
index 44aaa98b97..0000000000
--- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * @file avatarAlphaV.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-uniform mat4 projection_matrix;
-
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
-
-vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
-mat4 getSkinnedTransform();
-void calcAtmospherics(vec3 inPositionEye);
-
-float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
-
-vec3 atmosAmbient(vec3 light);
-vec3 atmosAffectDirectionalLight(float lightIntensity);
-vec3 scaleDownLight(vec3 light);
-vec3 scaleUpLight(vec3 light);
-
-VARYING vec3 vary_position;
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_pointlight_col;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-
-uniform vec4 color;
-
-uniform float near_clip;
-uniform float shadow_offset;
-uniform float shadow_bias;
-
-uniform vec4 light_position[8];
-uniform vec3 light_direction[8];
-uniform vec3 light_attenuation[8];
-uniform vec3 light_diffuse[8];
-
-float calcDirectionalLight(vec3 n, vec3 l)
-{
- float a = max(dot(n,l),0.0);
- return a;
-}
-
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
-{
- //get light vector
- vec3 lv = lp.xyz-v;
-
- //get distance
- float d = dot(lv,lv);
-
- float da = 0.0;
-
- if (d > 0.0 && la > 0.0 && fa > 0.0)
- {
- //normalize light vector
- lv = normalize(lv);
-
- //distance attenuation
- float dist2 = d/la;
- da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-
- // spotlight coefficient.
- float spot = max(dot(-ln, lv), is_pointlight);
- da *= spot*spot; // GL_SPOT_EXPONENT=2
-
- //angular attenuation
- da *= max(dot(n, lv), 0.0);
- }
-
- return da;
-}
-
-void main()
-{
- vary_texcoord0 = texcoord0;
-
- vec4 pos;
- vec3 norm;
-
- mat4 trans = getSkinnedTransform();
- vec4 pos_in = vec4(position.xyz, 1.0);
- pos.x = dot(trans[0], pos_in);
- pos.y = dot(trans[1], pos_in);
- pos.z = dot(trans[2], pos_in);
- pos.w = 1.0;
-
- norm.x = dot(trans[0].xyz, normal);
- norm.y = dot(trans[1].xyz, normal);
- norm.z = dot(trans[2].xyz, normal);
- norm = normalize(norm);
-
- gl_Position = projection_matrix * pos;
-
- float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
- vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
-
- calcAtmospherics(pos.xyz);
-
- vec4 col = vec4(0.0, 0.0, 0.0, 1.0);
-
- // Collect normal lights
- col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
- col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
- col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
- col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
- col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
- col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
-
- vary_pointlight_col = col.rgb*color.rgb;
-
- col.rgb = vec3(0,0,0);
-
- // Add windlight lights
- col.rgb = atmosAmbient(vec3(0.));
-
- vary_ambient = col.rgb*color.rgb;
- vary_directional = atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), 0.0));
-
- col.rgb = col.rgb*color.rgb;
-
- vertex_color = col;
-
-
- vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
-}
-
-
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index 37179c7e14..c20e00163c 100755
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -69,22 +69,43 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
+vec3 srgb_to_linear(vec3 cs)
{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
}
-vec3 decode_normal (vec2 enc)
+vec3 linear_to_srgb(vec3 cl)
{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -101,14 +122,12 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 correctWithGamma(vec4 col)
{
- return vec4(pow(col.rgb, vec3(2.2)), col.a);
+ return vec4(srgb_to_linear(col.rgb), col.a);
}
-
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
@@ -315,14 +334,12 @@ void main()
vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds;
vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0));
+ stc /= stc.w;
if (stc.z > 0.0)
{
- stc.xy /= stc.w;
+ float fatten = clamp(envIntensity*envIntensity+envIntensity*0.25, 0.25, 1.0);
- float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0);
-
- //stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
if (stc.x < 1.0 &&
@@ -330,12 +347,16 @@ void main()
stc.x > 0.0 &&
stc.y > 0.0)
{
- col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*shadow*spec.rgb;
+ col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod).rgb*shadow*spec.rgb;
}
}
}
}
+
+ //not sure why, but this line prevents MATBUG-194
+ col = max(col, vec3(0.0));
+
frag_color.rgb = col;
frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 67bac1f7c2..1022c23f7b 100755
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -78,22 +78,43 @@ vec3 vary_AtmosAttenuation;
uniform mat4 inv_proj;
uniform vec2 screen_res;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
+vec3 srgb_to_linear(vec3 cs)
{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
}
-vec3 decode_normal (vec2 enc)
+vec3 linear_to_srgb(vec3 cl)
{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
#else
+ return mix(high_range, low_range, lt);
+#endif
+
+}
+
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -110,7 +131,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition_d(vec2 pos_screen, float depth)
{
@@ -263,6 +283,52 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
}
+#ifdef WATER_FOG
+uniform vec4 waterPlane;
+uniform vec4 waterFogColor;
+uniform float waterFogDensity;
+uniform float waterFogKS;
+
+vec4 applyWaterFogDeferred(vec3 pos, vec4 color)
+{
+ //normalize view vector
+ vec3 view = normalize(pos);
+ float es = -(dot(view, waterPlane.xyz));
+
+ //find intersection point with water plane and eye vector
+
+ //get eye depth
+ float e0 = max(-waterPlane.w, 0.0);
+
+ vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
+
+ //get object depth
+ float depth = length(pos - int_v);
+
+ //get "thickness" of water
+ float l = max(depth, 0.1);
+
+ float kd = waterFogDensity;
+ float ks = waterFogKS;
+ vec4 kc = waterFogColor;
+
+ float F = 0.98;
+
+ float t1 = -kd * pow(F, ks * e0);
+ float t2 = kd + ks * es;
+ float t3 = pow(F, t2*l) - 1.0;
+
+ float L = min(t1/t2*t3, 1.0);
+
+ float D = pow(0.98, l*kd);
+
+ color.rgb = color.rgb * D + kc.rgb * L;
+ color.a = kc.a + color.a;
+
+ return color;
+}
+#endif
+
vec3 atmosLighting(vec3 light)
{
light *= getAtmosAttenuation().r;
@@ -343,7 +409,7 @@ void main()
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
- diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
+ diffuse.rgb = linear_to_srgb(diffuse.rgb);
vec3 col;
float bloom = 0.0;
@@ -409,7 +475,13 @@ void main()
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
}
- col = pow(col, vec3(2.2));
+ #ifdef WATER_FOG
+ vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom));
+ col = fogged.rgb;
+ bloom = fogged.a;
+ #endif
+
+ col = srgb_to_linear(col);
//col = vec3(1,0,1);
//col.g = envIntensity;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index 9bdee15541..7689b72d20 100755
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -69,22 +69,6 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -101,11 +85,47 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
+
+vec3 srgb_to_linear(vec3 cs)
+{
+ vec3 low_range = cs / vec3(12.92);
+ vec3 high_range = pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
+ bvec3 lte = lessThanEqual(cs,vec3(0.04045));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lte.r ? low_range.r : high_range.r;
+ result.g = lte.g ? low_range.g : high_range.g;
+ result.b = lte.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lte);
+#endif
+
+}
+
+vec3 linear_to_srgb(vec3 cl)
+{
+ cl = clamp(cl, vec3(0), vec3(1));
+ vec3 low_range = cl * 12.92;
+ vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055;
+ bvec3 lt = lessThan(cl,vec3(0.0031308));
+
+#ifdef OLD_SELECT
+ vec3 result;
+ result.r = lt.r ? low_range.r : high_range.r;
+ result.g = lt.g ? low_range.g : high_range.g;
+ result.b = lt.b ? low_range.b : high_range.b;
+ return result;
+#else
+ return mix(high_range, low_range, lt);
#endif
+}
+
vec4 correctWithGamma(vec4 col)
{
- return vec4(pow(col.rgb, vec3(2.2)), col.a);
+ return vec4(srgb_to_linear(col.rgb), col.a);
}
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
@@ -334,6 +354,9 @@ void main()
}
}
+ //not sure why, but this line prevents MATBUG-194
+ col = max(col, vec3(0.0));
+
frag_color.rgb = col;
frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index 7b09dd29dd..95c09d3238 100755
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -65,22 +65,6 @@ uniform float shadow_offset;
uniform float spot_shadow_bias;
uniform float spot_shadow_offset;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -97,7 +81,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition(vec2 pos_screen)
{
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
index 01e34ed792..b5ff6404ea 100755
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -66,22 +66,6 @@ uniform float shadow_offset;
uniform float spot_shadow_bias;
uniform float spot_shadow_offset;
-#ifdef SINGLE_FP_ONLY
-vec2 encode_normal(vec3 n)
-{
- vec2 sn;
- sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
- return sn;
-}
-
-vec3 decode_normal (vec2 enc)
-{
- vec3 n;
- n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
- n.z = sqrt(1.0f - dot(n.xy,n.xy));
- return n;
-}
-#else
vec2 encode_normal(vec3 n)
{
float f = sqrt(8 * n.z + 8);
@@ -98,7 +82,6 @@ vec3 decode_normal (vec2 enc)
n.z = 1-f/2;
return n;
}
-#endif
vec4 getPosition(vec2 pos_screen)
{
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index 1c0d45c11b..0bdd425504 100755
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -309,8 +309,8 @@ RenderVolumeLODFactor 1 2.0
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
WLSkyDetail 1 128
-RenderDeferred 1 0
-RenderDeferredSSAO 1 0
+RenderDeferred 1 1
+RenderDeferredSSAO 1 1
RenderShadowDetail 1 2
RenderFSAASamples 1 2
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
index 122577b132..23a065caff 100755
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -1,3 +1,4 @@
+//GPU_TABLE - that token on line 1 tags this as a gpu table file
//
// Categorizes graphics chips into various classes by name
//
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 072e5a82b4..06a6a10a5c 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -91,6 +91,7 @@
#include "llwindow.h"
#include "llworld.h"
#include "llworldmap.h"
+#include "lscript_byteformat.h"
#include "stringize.h"
#include "boost/foreach.hpp"
@@ -3029,6 +3030,55 @@ void LLAgent::sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request)
sendReliableMessage();
}
+// Send a message to the region to stop the NULL animation state
+// This will reset animation state overrides for the agent.
+void LLAgent::sendAnimationStateReset()
+{
+ if (gAgentID.isNull() || !mRegionp)
+ {
+ return;
+ }
+
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_AgentAnimation);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, getID());
+ msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
+
+ msg->nextBlockFast(_PREHASH_AnimationList);
+ msg->addUUIDFast(_PREHASH_AnimID, LLUUID::null );
+ msg->addBOOLFast(_PREHASH_StartAnim, FALSE);
+
+ msg->nextBlockFast(_PREHASH_PhysicalAvatarEventList);
+ msg->addBinaryDataFast(_PREHASH_TypeData, NULL, 0);
+ sendReliableMessage();
+}
+
+
+// Send a message to the region to revoke sepecified permissions on ALL scripts in the region
+// If the target is an object in the region, permissions in scripts on that object are cleared.
+// If it is the region ID, all scripts clear the permissions for this agent
+void LLAgent::sendRevokePermissions(const LLUUID & target, U32 permissions)
+{
+ // Currently only the bits for SCRIPT_PERMISSION_TRIGGER_ANIMATION and SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS
+ // are supported by the server. Sending any other bits will cause the message to be dropped without changing permissions
+
+ if (gAgentID.notNull() && gMessageSystem)
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_RevokePermissions);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, getID()); // Must be our ID
+ msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
+
+ msg->nextBlockFast(_PREHASH_Data);
+ msg->addUUIDFast(_PREHASH_ObjectID, target); // Must be in the region
+ msg->addS32Fast(_PREHASH_ObjectPermissions, (S32) permissions);
+
+ sendReliableMessage();
+ }
+}
+
void LLAgent::sendWalkRun(bool running)
{
LLMessageSystem* msgsys = gMessageSystem;
@@ -4029,6 +4079,8 @@ void LLAgent::stopCurrentAnimations()
// avatar, propagating this change back to the server.
if (isAgentAvatarValid())
{
+ LLDynamicArray<LLUUID> anim_ids;
+
for ( LLVOAvatar::AnimIterator anim_it =
gAgentAvatarp->mPlayingAnimations.begin();
anim_it != gAgentAvatarp->mPlayingAnimations.end();
@@ -4046,7 +4098,24 @@ void LLAgent::stopCurrentAnimations()
// stop this animation locally
gAgentAvatarp->stopMotion(anim_it->first, TRUE);
// ...and tell the server to tell everyone.
- sendAnimationRequest(anim_it->first, ANIM_REQUEST_STOP);
+ anim_ids.push_back(anim_it->first);
+ }
+ }
+
+ sendAnimationRequests(anim_ids, ANIM_REQUEST_STOP);
+
+ // Tell the region to clear any animation state overrides
+ sendAnimationStateReset();
+
+ // Revoke all animation permissions
+ if (mRegionp &&
+ gSavedSettings.getBOOL("RevokePermsOnStopAnimation"))
+ {
+ U32 permissions = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_TRIGGER_ANIMATION] | LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS];
+ sendRevokePermissions(mRegionp->getRegionID(), permissions);
+ if (gAgentAvatarp->isSitting())
+ { // Also stand up, since auto-granted sit animation permission has been revoked
+ gAgent.standUp();
}
}
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index f2a42347b7..0095c280fb 100755
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -432,6 +432,9 @@ public:
void onAnimStop(const LLUUID& id);
void sendAnimationRequests(LLDynamicArray<LLUUID> &anim_ids, EAnimRequest request);
void sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request);
+ void sendAnimationStateReset();
+ void sendRevokePermissions(const LLUUID & target, U32 permissions);
+
void endAnimationUpdateUI();
void unpauseAnimation() { mPauseRequest = NULL; }
BOOL getCustomAnim() const { return mCustomAnim; }
diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm
index 30476b3d22..91251ed7c0 100644
--- a/indra/newview/llappdelegate-objc.mm
+++ b/indra/newview/llappdelegate-objc.mm
@@ -54,6 +54,19 @@
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageUpdated) name:@"NSTextInputContextKeyboardSelectionDidChangeNotification" object:nil];
+
+ [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
+}
+
+- (void) handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
+ NSString *url= nil;
+ url = [[[[NSAppleEventManager sharedAppleEventManager]// 1
+ currentAppleEvent]// 2
+ paramDescriptorForKeyword:keyDirectObject]// 3
+ stringValue];// 4
+
+ const char* url_utf8 = [url UTF8String];
+ handleUrl(url_utf8);
}
- (void) applicationDidBecomeActive:(NSNotification *)notification
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 02eb67bf80..f67142d1ed 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -96,6 +96,7 @@
#include "llupdaterservice.h"
#include "llfloatertexturefetchdebugger.h"
#include "llspellcheck.h"
+#include "llavatarrenderinfoaccountant.h"
// Linden library includes
#include "llavatarnamecache.h"
@@ -570,7 +571,7 @@ static void settings_to_globals()
LLSurface::setTextureSize(gSavedSettings.getU32("RegionTextureSize"));
LLRender::sGLCoreProfile = gSavedSettings.getBOOL("RenderGLCoreProfile");
-
+ LLVertexBuffer::sUseVAO = gSavedSettings.getBOOL("RenderUseVAO");
LLImageGL::sGlobalUseAnisotropic = gSavedSettings.getBOOL("RenderAnisotropic");
LLImageGL::sCompressTextures = gSavedSettings.getBOOL("RenderCompressTextures");
LLVOVolume::sLODFactor = gSavedSettings.getF32("RenderVolumeLODFactor");
@@ -1637,6 +1638,8 @@ bool LLAppViewer::cleanup()
//ditch LLVOAvatarSelf instance
gAgentAvatarp = NULL;
+ LLNotifications::instance().clear();
+
// workaround for DEV-35406 crash on shutdown
LLEventPumps::instance().reset();
@@ -4821,6 +4824,9 @@ void LLAppViewer::idle()
gObjectList.updateApparentAngles(gAgent);
}
+ // Update AV render info
+ LLAvatarRenderInfoAccountant::idle();
+
{
LLFastTimer t(FTM_AUDIO_UPDATE);
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 316c90d9d2..2723f0b90d 100755
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -483,41 +483,24 @@ bool LLAppViewerMacOSX::getMasterSystemAudioMute()
return (mute != 0);
}
-OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn)
+void handleUrl(const char* url_utf8)
{
- OSErr result = noErr;
- DescType actualType;
- char buffer[1024]; // Flawfinder: ignore
- Size size;
-
- result = AEGetParamPtr (
- messagein,
- keyDirectObject,
- typeCString,
- &actualType,
- (Ptr)buffer,
- sizeof(buffer),
- &size);
-
- if(result == noErr)
- {
- std::string url = buffer;
+ if (url_utf8)
+ {
+ std::string url = url_utf8;
+ // Safari 3.2 silently mangles secondlife:///app/ URLs into
+ // secondlife:/app/ (only one leading slash).
+ // Fix them up to meet the URL specification. JC
+ const std::string prefix = "secondlife:/app/";
+ std::string test_prefix = url.substr(0, prefix.length());
+ LLStringUtil::toLower(test_prefix);
+ if (test_prefix == prefix)
+ {
+ url.replace(0, prefix.length(), "secondlife:///app/");
+ }
- // Safari 3.2 silently mangles secondlife:///app/ URLs into
- // secondlife:/app/ (only one leading slash).
- // Fix them up to meet the URL specification. JC
- const std::string prefix = "secondlife:/app/";
- std::string test_prefix = url.substr(0, prefix.length());
- LLStringUtil::toLower(test_prefix);
- if (test_prefix == prefix)
- {
- url.replace(0, prefix.length(), "secondlife:///app/");
- }
-
- LLMediaCtrl* web = NULL;
- const bool trusted_browser = false;
- LLURLDispatcher::dispatch(url, "", web, trusted_browser);
- }
-
- return(result);
+ LLMediaCtrl* web = NULL;
+ const bool trusted_browser = false;
+ LLURLDispatcher::dispatch(url, "", web, trusted_browser);
+ }
}
diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp
new file mode 100644
index 0000000000..9e3225a264
--- /dev/null
+++ b/indra/newview/llavatarrenderinfoaccountant.cpp
@@ -0,0 +1,398 @@
+/**
+ * @file llavatarrenderinfoaccountant.cpp
+ * @author Dave Simmons
+ * @date 2013-02-28
+ * @brief
+ *
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+// associated header
+#include "llavatarrenderinfoaccountant.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "llcharacter.h"
+#include "llhttpclient.h"
+#include "lltimer.h"
+#include "llviewercontrol.h"
+#include "llviewermenu.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llvoavatar.h"
+#include "llworld.h"
+
+
+static const std::string KEY_AGENTS = "agents"; // map
+static const std::string KEY_WEIGHT = "weight"; // integer
+
+static const std::string KEY_IDENTIFIER = "identifier";
+static const std::string KEY_MESSAGE = "message";
+static const std::string KEY_ERROR = "error";
+
+
+// Send data updates about once per minute, only need per-frame resolution
+LLFrameTimer LLAvatarRenderInfoAccountant::sRenderInfoReportTimer;
+
+
+// HTTP responder class for GET request for avatar render weight information
+class LLAvatarRenderInfoGetResponder : public LLHTTPClient::Responder
+{
+public:
+ LLAvatarRenderInfoGetResponder(U64 region_handle) : mRegionHandle(region_handle)
+ {
+ }
+
+ virtual void error(U32 statusNum, const std::string& reason)
+ {
+ LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if (regionp)
+ {
+ llwarns << "HTTP error result for avatar weight GET: " << statusNum
+ << ", " << reason
+ << " returned by region " << regionp->getName()
+ << llendl;
+ }
+ else
+ {
+ llwarns << "Avatar render weight GET error recieved but region not found for "
+ << mRegionHandle
+ << ", error " << statusNum
+ << ", " << reason
+ << llendl;
+ }
+
+ }
+
+ virtual void result(const LLSD& content)
+ {
+ LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if (regionp)
+ {
+ if (LLAvatarRenderInfoAccountant::logRenderInfo())
+ {
+ llinfos << "LRI: Result for avatar weights request for region " << regionp->getName() << ":" << llendl;
+ }
+
+ if (content.isMap())
+ {
+ if (content.has(KEY_AGENTS))
+ {
+ const LLSD & agents = content[KEY_AGENTS];
+ if (agents.isMap())
+ {
+ LLSD::map_const_iterator report_iter = agents.beginMap();
+ while (report_iter != agents.endMap())
+ {
+ LLUUID target_agent_id = LLUUID(report_iter->first);
+ const LLSD & agent_info_map = report_iter->second;
+ LLViewerObject* avatarp = gObjectList.findObject(target_agent_id);
+ if (avatarp &&
+ avatarp->isAvatar() &&
+ agent_info_map.isMap())
+ { // Extract the data for this avatar
+
+ if (LLAvatarRenderInfoAccountant::logRenderInfo())
+ {
+ llinfos << "LRI: Agent " << target_agent_id
+ << ": " << agent_info_map << llendl;
+ }
+
+ if (agent_info_map.has(KEY_WEIGHT))
+ {
+ ((LLVOAvatar *) avatarp)->setReportedVisualComplexity(agent_info_map[KEY_WEIGHT].asInteger());
+ }
+ }
+ report_iter++;
+ }
+ }
+ } // has "agents"
+ else if (content.has(KEY_ERROR))
+ {
+ const LLSD & error = content[KEY_ERROR];
+ llwarns << "Avatar render info GET error: "
+ << error[KEY_IDENTIFIER]
+ << ": " << error[KEY_MESSAGE]
+ << " from region " << regionp->getName()
+ << llendl;
+ }
+ }
+ }
+ else
+ {
+ llinfos << "Avatar render weight info recieved but region not found for "
+ << mRegionHandle << llendl;
+ }
+ }
+
+private:
+ U64 mRegionHandle;
+};
+
+
+// HTTP responder class for POST request for avatar render weight information
+class LLAvatarRenderInfoPostResponder : public LLHTTPClient::Responder
+{
+public:
+ LLAvatarRenderInfoPostResponder(U64 region_handle) : mRegionHandle(region_handle)
+ {
+ }
+
+ virtual void error(U32 statusNum, const std::string& reason)
+ {
+ LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if (regionp)
+ {
+ llwarns << "HTTP error result for avatar weight POST: " << statusNum
+ << ", " << reason
+ << " returned by region " << regionp->getName()
+ << llendl;
+ }
+ else
+ {
+ llwarns << "Avatar render weight POST error recieved but region not found for "
+ << mRegionHandle
+ << ", error " << statusNum
+ << ", " << reason
+ << llendl;
+ }
+ }
+
+ virtual void result(const LLSD& content)
+ {
+ LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if (regionp)
+ {
+ if (LLAvatarRenderInfoAccountant::logRenderInfo())
+ {
+ llinfos << "LRI: Result for avatar weights POST for region " << regionp->getName()
+ << ": " << content << llendl;
+ }
+
+ if (content.isMap())
+ {
+ if (content.has(KEY_ERROR))
+ {
+ const LLSD & error = content[KEY_ERROR];
+ llwarns << "Avatar render info POST error: "
+ << error[KEY_IDENTIFIER]
+ << ": " << error[KEY_MESSAGE]
+ << " from region " << regionp->getName()
+ << llendl;
+ }
+ }
+ }
+ else
+ {
+ llinfos << "Avatar render weight POST result recieved but region not found for "
+ << mRegionHandle << llendl;
+ }
+ }
+
+private:
+ U64 mRegionHandle;
+};
+
+
+// static
+// Send request for one region, no timer checks
+void LLAvatarRenderInfoAccountant::sendRenderInfoToRegion(LLViewerRegion * regionp)
+{
+ std::string url = regionp->getCapability("AvatarRenderInfo");
+ if (!url.empty())
+ {
+ if (logRenderInfo())
+ {
+ llinfos << "LRI: Sending avatar render info to region "
+ << regionp->getName()
+ << " from " << url
+ << llendl;
+ }
+
+ // Build the render info to POST to the region
+ LLSD report = LLSD::emptyMap();
+ LLSD agents = LLSD::emptyMap();
+
+ std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
+ while( iter != LLCharacter::sInstances.end() )
+ {
+ LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(*iter);
+ if (avatar &&
+ avatar->getRezzedStatus() >= 2 && // Mostly rezzed (maybe without baked textures downloaded)
+ !avatar->isDead() && // Not dead yet
+ avatar->getObjectHost() == regionp->getHost()) // Ensure it's on the same region
+ {
+ avatar->calculateUpdateRenderCost(); // Make sure the numbers are up-to-date
+
+ LLSD info = LLSD::emptyMap();
+ if (avatar->getVisualComplexity() > 0)
+ {
+ info[KEY_WEIGHT] = avatar->getVisualComplexity();
+ agents[avatar->getID().asString()] = info;
+
+ if (logRenderInfo())
+ {
+ llinfos << "LRI: Sending avatar render info for " << avatar->getID()
+ << ": " << info << llendl;
+ llinfos << "LRI: geometry " << avatar->getAttachmentGeometryBytes()
+ << ", area " << avatar->getAttachmentSurfaceArea()
+ << llendl;
+ }
+ }
+ }
+ iter++;
+ }
+
+ report[KEY_AGENTS] = agents;
+ if (agents.size() > 0)
+ {
+ LLHTTPClient::post(url, report, new LLAvatarRenderInfoPostResponder(regionp->getHandle()));
+ }
+ }
+}
+
+
+
+
+// static
+// Send request for one region, no timer checks
+void LLAvatarRenderInfoAccountant::getRenderInfoFromRegion(LLViewerRegion * regionp)
+{
+ std::string url = regionp->getCapability("AvatarRenderInfo");
+ if (!url.empty())
+ {
+ if (logRenderInfo())
+ {
+ llinfos << "LRI: Requesting avatar render info for region "
+ << regionp->getName()
+ << " from " << url
+ << llendl;
+ }
+
+ // First send a request to get the latest data
+ LLHTTPClient::get(url, new LLAvatarRenderInfoGetResponder(regionp->getHandle()));
+ }
+}
+
+
+// static
+// Called every frame - send render weight requests to every region
+void LLAvatarRenderInfoAccountant::idle()
+{
+ if (sRenderInfoReportTimer.hasExpired())
+ {
+ const F32 SECS_BETWEEN_REGION_SCANS = 5.f; // Scan the region list every 5 seconds
+ const F32 SECS_BETWEEN_REGION_REQUEST = 60.0; // Update each region every 60 seconds
+
+ S32 num_avs = LLCharacter::sInstances.size();
+
+ if (logRenderInfo())
+ {
+ llinfos << "LRI: Scanning all regions and checking for render info updates"
+ << llendl;
+ }
+
+ // Check all regions and see if it's time to fetch/send data
+ for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
+ iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
+ {
+ LLViewerRegion* regionp = *iter;
+ if (regionp &&
+ regionp->isAlive() &&
+ regionp->capabilitiesReceived() && // Region has capability URLs available
+ regionp->getRenderInfoRequestTimer().hasExpired()) // Time to make request
+ {
+ sendRenderInfoToRegion(regionp);
+ getRenderInfoFromRegion(regionp);
+
+ // Reset this regions timer, moving to longer intervals if there are lots of avatars around
+ regionp->getRenderInfoRequestTimer().resetWithExpiry(SECS_BETWEEN_REGION_REQUEST + (2.f * num_avs));
+ }
+ }
+
+ // We scanned all the regions, reset the request timer.
+ sRenderInfoReportTimer.resetWithExpiry(SECS_BETWEEN_REGION_SCANS);
+ }
+
+ static LLCachedControl<U32> render_auto_mute_functions(gSavedSettings, "RenderAutoMuteFunctions");
+ static U32 prev_render_auto_mute_functions = (U32) -1;
+ if (prev_render_auto_mute_functions != render_auto_mute_functions)
+ {
+ prev_render_auto_mute_functions = render_auto_mute_functions;
+
+ // Adjust menus
+ BOOL show_items = (BOOL)(render_auto_mute_functions & 0x04);
+ gMenuAvatarOther->setItemVisible( std::string("Normal"), show_items);
+ gMenuAvatarOther->setItemVisible( std::string("Always use impostor"), show_items);
+ gMenuAvatarOther->setItemVisible( std::string("Never use impostor"), show_items);
+ gMenuAvatarOther->setItemVisible( std::string("Impostor seperator"), show_items);
+
+ gMenuAttachmentOther->setItemVisible( std::string("Normal"), show_items);
+ gMenuAttachmentOther->setItemVisible( std::string("Always use impostor"), show_items);
+ gMenuAttachmentOther->setItemVisible( std::string("Never use impostor"), show_items);
+ gMenuAttachmentOther->setItemVisible( std::string("Impostor seperator"), show_items);
+
+ if (!show_items)
+ { // Turning off visual muting
+ for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
+ iter != LLCharacter::sInstances.end(); ++iter)
+ { // Make sure all AVs have the setting cleared
+ LLVOAvatar* inst = (LLVOAvatar*) *iter;
+ inst->setCachedVisualMute(false);
+ }
+ }
+ }
+}
+
+
+// static
+// Make sRenderInfoReportTimer expire so the next call to idle() will scan and query a new region
+// called via LLViewerRegion::setCapabilitiesReceived() boost signals when the capabilities
+// are returned for a new LLViewerRegion, and is the earliest time to get render info
+void LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer(const LLUUID& region_id)
+{
+ if (logRenderInfo())
+ {
+ llinfos << "LRI: Viewer has new region capabilities, clearing global render info timer"
+ << " and timer for region " << region_id
+ << llendl;
+ }
+
+ // Reset the global timer so it will scan regions immediately
+ sRenderInfoReportTimer.reset();
+
+ LLViewerRegion* regionp = LLWorld::instance().getRegionFromID(region_id);
+ if (regionp)
+ { // Reset the region's timer so it will request data immediately
+ regionp->getRenderInfoRequestTimer().reset();
+ }
+}
+
+// static
+bool LLAvatarRenderInfoAccountant::logRenderInfo()
+{
+ static LLCachedControl<bool> render_mute_logging_enabled(gSavedSettings, "RenderAutoMuteLogging", false);
+ return render_mute_logging_enabled;
+}
diff --git a/indra/newview/llavatarrenderinfoaccountant.h b/indra/newview/llavatarrenderinfoaccountant.h
new file mode 100644
index 0000000000..d68f2dccfb
--- /dev/null
+++ b/indra/newview/llavatarrenderinfoaccountant.h
@@ -0,0 +1,56 @@
+/**
+ * @file llavatarrenderinfoaccountant.h
+ * @author Dave Simmons
+ * @date 2013-02-28
+ * @brief
+ *
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_llavatarrenderinfoaccountant_H)
+#define LL_llavatarrenderinfoaccountant_H
+
+class LLViewerRegion;
+
+// Class to gather avatar rendering information
+// that is sent to or fetched from regions.
+class LLAvatarRenderInfoAccountant
+{
+public:
+ LLAvatarRenderInfoAccountant() {};
+ ~LLAvatarRenderInfoAccountant() {};
+
+ static void sendRenderInfoToRegion(LLViewerRegion * regionp);
+ static void getRenderInfoFromRegion(LLViewerRegion * regionp);
+
+ static void expireRenderInfoReportTimer(const LLUUID& region_id);
+
+ static void idle();
+
+ static bool logRenderInfo();
+
+private:
+ // Send data updates about once per minute, only need per-frame resolution
+ static LLFrameTimer sRenderInfoReportTimer;
+};
+
+#endif /* ! defined(LL_llavatarrenderinfoaccountant_H) */
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index af3c6eff11..43a733f918 100755
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -898,20 +898,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
LLStyle::Params link_params(body_message_params);
link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
- if (from_me)
- { std::string localized_name;
- bool is_localized = LLTrans::findString(localized_name, "AgentNameSubst");
- mEditor->appendText((is_localized? localized_name:"(You)") + delimiter,
- prependNewLineState, link_params);
- prependNewLineState = false;
- }
- else
- {
// Add link to avatar's inspector and delimiter to message.
- mEditor->appendText(std::string(link_params.link_href) + delimiter,
- prependNewLineState, link_params);
- prependNewLineState = false;
- }
+ mEditor->appendText(std::string(link_params.link_href) + delimiter,
+ prependNewLineState, link_params);
+ prependNewLineState = false;
}
else
{
diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h
index d8cdcdfc97..d8cdcdfc97 100755..100644
--- a/indra/newview/llconversationmodel.h
+++ b/indra/newview/llconversationmodel.h
diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp
index 9faa12b2ee..9faa12b2ee 100755..100644
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h
index 5a74974302..5a74974302 100755..100644
--- a/indra/newview/llconversationview.h
+++ b/indra/newview/llconversationview.h
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 8c9fd4152a..9682f38227 100755
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -132,10 +132,16 @@ void LLDrawable::destroy()
sNumZombieDrawables--;
}
+ // Attempt to catch violations of this in debug,
+ // knowing that some false alarms may result
+ //
+ llassert(!LLSpatialGroup::sNoDelete);
+
+ /* cannot be guaranteed and causes crashes on false alarms
if (LLSpatialGroup::sNoDelete)
{
llerrs << "Illegal deletion of LLDrawable!" << llendl;
- }
+ }*/
std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
mFaces.clear();
@@ -527,6 +533,8 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
}
updatePartition();
}
+
+ llassert(isAvatar() || isRoot() || mParent->isStatic());
}
// Returns "distance" between target destination and resulting xfrom
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 04e31e6486..714f9a1718 100755
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -504,6 +504,7 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba
{
params.mGroup->rebuildMesh();
}
+
params.mVertexBuffer->setBuffer(mask);
params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index c832e1401d..6c5d229dba 100755
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -93,15 +93,35 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
if (pass == 0)
{
+ if (LLPipeline::sImpostorRender)
+ {
+ simple_shader = &gDeferredAlphaImpostorProgram;
+ fullbright_shader = &gDeferredFullbrightProgram;
+ }
+ else if (LLPipeline::sUnderWaterRender)
+ {
+ simple_shader = &gDeferredAlphaWaterProgram;
+ fullbright_shader = &gDeferredFullbrightWaterProgram;
+ }
+ else
+ {
simple_shader = &gDeferredAlphaProgram;
- fullbright_shader = &gObjectFullbrightProgram;
+ fullbright_shader = &gDeferredFullbrightProgram;
+ }
+
+ F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
+
fullbright_shader->bind();
fullbright_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+ fullbright_shader->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
fullbright_shader->unbind();
+
//prime simple shader (loads shadow relevant uniforms)
gPipeline.bindDeferredShader(*simple_shader);
+
+ simple_shader->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
}
- else
+ else if (!LLPipeline::sImpostorRender)
{
//update depth buffer sampler
gPipeline.mScreen.flush();
@@ -113,6 +133,23 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
gObjectFullbrightAlphaMaskProgram.setMinimumAlpha(0.33f);
}
+
+ if (LLPipeline::sRenderDeferred)
+ {
+ emissive_shader = &gDeferredEmissiveProgram;
+ }
+ else
+ {
+ if (LLPipeline::sUnderWaterRender)
+ {
+ emissive_shader = &gObjectEmissiveWaterProgram;
+ }
+ else
+ {
+ emissive_shader = &gObjectEmissiveProgram;
+ }
+ }
+
deferred_render = TRUE;
if (mVertexShaderLevel > 0)
{
@@ -124,7 +161,7 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
void LLDrawPoolAlpha::endPostDeferredPass(S32 pass)
{
- if (pass == 1)
+ if (pass == 1 && !LLPipeline::sImpostorRender)
{
gPipeline.mDeferredDepth.flush();
gPipeline.mScreen.bindTarget();
@@ -144,7 +181,13 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_ALPHA);
- if (LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sImpostorRender)
+ {
+ simple_shader = &gObjectSimpleImpostorProgram;
+ fullbright_shader = &gObjectFullbrightProgram;
+ emissive_shader = &gObjectEmissiveProgram;
+ }
+ else if (LLPipeline::sUnderWaterRender)
{
simple_shader = &gObjectSimpleWaterProgram;
fullbright_shader = &gObjectFullbrightWaterProgram;
@@ -192,8 +235,13 @@ void LLDrawPoolAlpha::render(S32 pass)
gGL.setColorMask(true, true);
}
- LLGLDepthTest depth(GL_TRUE, LLDrawPoolWater::sSkipScreenCopy ||
- (deferred_render && pass == 1) ? GL_TRUE : GL_FALSE);
+ bool write_depth = LLDrawPoolWater::sSkipScreenCopy
+ || (deferred_render && pass == 1)
+ // we want depth written so that rendered alpha will
+ // contribute to the alpha mask used for impostors
+ || LLPipeline::sImpostorRenderAlphaDepthPass;
+
+ LLGLDepthTest depth(GL_TRUE, write_depth ? GL_TRUE : GL_FALSE);
if (deferred_render && pass == 1)
{
@@ -239,11 +287,11 @@ void LLDrawPoolAlpha::render(S32 pass)
if (mVertexShaderLevel > 0)
{
- renderAlpha(getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX | LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2);
+ renderAlpha(getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX | LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2, pass);
}
else
{
- renderAlpha(getVertexDataMask());
+ renderAlpha(getVertexDataMask(), pass);
}
gGL.setColorMask(true, false);
@@ -315,7 +363,7 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)
}
}
-void LLDrawPoolAlpha::renderAlpha(U32 mask)
+void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)
{
BOOL initialized_lighting = FALSE;
BOOL light_enabled = TRUE;
@@ -331,10 +379,18 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
if (group->mSpatialPartition->mRenderByGroup &&
!group->isDead())
{
+ bool is_particle_or_hud_particle = group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_PARTICLE
+ || group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_HUD_PARTICLE;
+
bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow.
// All particle systems seem to come off the wire with texture entries which claim that they glow. This is probably a bug in the data. Suppress.
- group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_PARTICLE &&
- group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD_PARTICLE;
+ !is_particle_or_hud_particle;
+
+ static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_GROUP_LOOP("Alpha Group");
+ LLFastTimer t(FTM_RENDER_ALPHA_GROUP_LOOP);
+
+ bool disable_cull = is_particle_or_hud_particle;
+ LLGLDisable cull(disable_cull ? GL_CULL_FACE : 0);
LLSpatialGroup::drawmap_elem_t& draw_info = group->mDrawMap[LLRenderPass::PASS_ALPHA];
@@ -348,11 +404,28 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
continue;
}
+ // Fix for bug - NORSPEC-271
+ // If the face is more than 90% transparent, then don't update the Depth buffer for Dof
+ // We don't want the nearly invisible objects to cause of DoF effects
+ if(pass == 1 && !LLPipeline::sImpostorRender)
+ {
+ LLFace* face = params.mFace;
+ if(face)
+ {
+ const LLTextureEntry* tep = face->getTextureEntry();
+ if(tep)
+ {
+ if(tep->getColor().mV[3] < 0.1f)
+ continue;
+ }
+ }
+ }
+
LLRenderPass::applyModelMatrix(params);
LLMaterial* mat = NULL;
- if (deferred_render && !LLPipeline::sUnderWaterRender)
+ if (deferred_render)
{
mat = params.mMaterial;
}
@@ -396,6 +469,11 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
llassert(mask < LLMaterial::SHADER_COUNT);
target_shader = &(gDeferredMaterialProgram[mask]);
+ if (LLPipeline::sUnderWaterRender)
+ {
+ target_shader = &(gDeferredMaterialWaterProgram[mask]);
+ }
+
if (current_shader != target_shader)
{
gPipeline.bindDeferredShader(*target_shader);
@@ -500,9 +578,15 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
}
}
- params.mVertexBuffer->setBuffer(mask);
+ static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_PUSH("Alpha Push Verts");
+ {
+ LLFastTimer t(FTM_RENDER_ALPHA_PUSH);
+ gGL.blendFunc((LLRender::eBlendFactor) params.mBlendFuncSrc, (LLRender::eBlendFactor) params.mBlendFuncDst, mAlphaSFactor, mAlphaDFactor);
+ params.mVertexBuffer->setBuffer(mask & ~(params.mFullbright ? (LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2) : 0));
+
params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
+ }
// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow). Interleaving these state-changing calls could be expensive, but glow must be drawn Z-sorted with alpha.
if (current_shader &&
@@ -515,7 +599,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
emissive_shader->bind();
- // glow doesn't use vertex colors from the mesh data
params.mVertexBuffer->setBuffer((mask & ~LLVertexBuffer::MAP_COLOR) | LLVertexBuffer::MAP_EMISSIVE);
// do the actual drawing, again
@@ -538,6 +621,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
}
}
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
+
LLVertexBuffer::unbind();
if (!light_enabled)
diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h
index 43122218ed..d064a3a324 100755
--- a/indra/newview/lldrawpoolalpha.h
+++ b/indra/newview/lldrawpoolalpha.h
@@ -63,7 +63,7 @@ public:
/*virtual*/ void prerender();
void renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask, BOOL texture = TRUE);
- void renderAlpha(U32 mask);
+ void renderAlpha(U32 mask, S32 pass);
void renderAlphaHighlight(U32 mask);
static BOOL sShowDebugAlpha;
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index a0024a231c..ba8c449c3d 100755
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -49,6 +49,7 @@
#include "llappviewer.h"
#include "llrendersphere.h"
#include "llviewerpartsim.h"
+#include "llviewercontrol.h" // for gSavedSettings
static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK;
static U32 sBufferUsage = GL_STREAM_DRAW_ARB;
@@ -59,6 +60,7 @@ LLGLSLShader* LLDrawPoolAvatar::sVertexProgram = NULL;
BOOL LLDrawPoolAvatar::sSkipOpaque = FALSE;
BOOL LLDrawPoolAvatar::sSkipTransparent = FALSE;
S32 LLDrawPoolAvatar::sDiffuseChannel = 0;
+F32 LLDrawPoolAvatar::sMinimumAlpha = 0.2f;
static bool is_deferred_render = false;
@@ -282,7 +284,7 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha()
gPipeline.bindDeferredShader(*sVertexProgram);
- sVertexProgram->setMinimumAlpha(0.2f);
+ sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
}
@@ -309,6 +311,11 @@ void LLDrawPoolAvatar::beginDeferredRiggedMaterialAlpha(S32 pass)
sVertexProgram = &gDeferredMaterialProgram[pass];
+ if (LLPipeline::sUnderWaterRender)
+ {
+ sVertexProgram = &(gDeferredMaterialWaterProgram[pass]);
+ }
+
gPipeline.bindDeferredShader(*sVertexProgram);
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);
@@ -501,7 +508,7 @@ S32 LLDrawPoolAvatar::getNumDeferredPasses()
{
if (LLPipeline::sImpostorRender)
{
- return 3;
+ return 19;
}
else
{
@@ -660,7 +667,7 @@ void LLDrawPoolAvatar::beginRigid()
if (sVertexProgram != NULL)
{ //eyeballs render with the specular shader
sVertexProgram->bind();
- sVertexProgram->setMinimumAlpha(0.2f);
+ sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
}
}
else
@@ -687,12 +694,10 @@ void LLDrawPoolAvatar::beginDeferredImpostor()
}
sVertexProgram = &gDeferredImpostorProgram;
-
specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP);
normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL);
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
-
- sVertexProgram->bind();
+ gPipeline.bindDeferredShader(*sVertexProgram);
sVertexProgram->setMinimumAlpha(0.01f);
}
@@ -702,8 +707,9 @@ void LLDrawPoolAvatar::endDeferredImpostor()
sVertexProgram->disableTexture(LLViewerShaderMgr::DEFERRED_NORMAL);
sVertexProgram->disableTexture(LLViewerShaderMgr::SPECULAR_MAP);
sVertexProgram->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
- sVertexProgram->unbind();
- gGL.getTexUnit(0)->activate();
+ gPipeline.unbindDeferredShader(*sVertexProgram);
+ sVertexProgram = NULL;
+ sDiffuseChannel = 0;
}
void LLDrawPoolAvatar::beginDeferredRigid()
@@ -711,7 +717,7 @@ void LLDrawPoolAvatar::beginDeferredRigid()
sVertexProgram = &gDeferredNonIndexedDiffuseAlphaMaskNoColorProgram;
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
sVertexProgram->bind();
- sVertexProgram->setMinimumAlpha(0.2f);
+ sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
}
void LLDrawPoolAvatar::endDeferredRigid()
@@ -769,7 +775,7 @@ void LLDrawPoolAvatar::beginSkinned()
if (LLGLSLShader::sNoFixedFunction)
{
- sVertexProgram->setMinimumAlpha(0.2f);
+ sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
}
}
@@ -891,6 +897,8 @@ void LLDrawPoolAvatar::beginRiggedGlow()
sVertexProgram->bind();
sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, LLPipeline::sRenderDeferred ? 2.2f : 1.1f);
+ F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
+ sVertexProgram->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
}
}
@@ -943,6 +951,9 @@ void LLDrawPoolAvatar::beginRiggedFullbright()
else
{
sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+
+ F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
+ sVertexProgram->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
}
}
}
@@ -1044,6 +1055,8 @@ void LLDrawPoolAvatar::beginRiggedFullbrightShiny()
else
{
sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+ F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
+ sVertexProgram->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
}
}
}
@@ -1103,6 +1116,12 @@ void LLDrawPoolAvatar::beginDeferredRiggedMaterial(S32 pass)
return;
}
sVertexProgram = &gDeferredMaterialProgram[pass+LLMaterial::SHADER_COUNT];
+
+ if (LLPipeline::sUnderWaterRender)
+ {
+ sVertexProgram = &(gDeferredMaterialWaterProgram[pass+LLMaterial::SHADER_COUNT]);
+ }
+
sVertexProgram->bind();
normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);
specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP);
@@ -1136,7 +1155,7 @@ void LLDrawPoolAvatar::beginDeferredSkinned()
sRenderingSkinned = TRUE;
sVertexProgram->bind();
- sVertexProgram->setMinimumAlpha(0.2f);
+ sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
gGL.getTexUnit(0)->activate();
@@ -1705,7 +1724,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
stop_glerror();
- LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv("matrixPalette",
+ LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv(LLViewerShaderMgr::AVATAR_MATRIX,
count,
FALSE,
(GLfloat*) mat[0].mMatrix);
@@ -1782,7 +1801,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
}
}
- if (face->mTextureMatrix)
+ if (face->mTextureMatrix && vobj->mTexAnimMode)
{
gGL.matrixMode(LLRender::MM_TEXTURE);
gGL.loadMatrix((F32*) face->mTextureMatrix->mMatrix);
@@ -1796,6 +1815,8 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
buff->setBuffer(data_mask);
buff->drawRange(LLRender::TRIANGLES, start, end, count, offset);
}
+
+ gPipeline.addTrianglesDrawn(count, LLRender::TRIANGLES);
}
}
}
diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h
index 4fbda1f862..b9d2204052 100755
--- a/indra/newview/lldrawpoolavatar.h
+++ b/indra/newview/lldrawpoolavatar.h
@@ -272,6 +272,7 @@ public:
static BOOL sSkipOpaque;
static BOOL sSkipTransparent;
static S32 sDiffuseChannel;
+ static F32 sMinimumAlpha;
static LLGLSLShader* sVertexProgram;
};
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 155e289c9d..6b4c5cfca1 100755
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -461,6 +461,8 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
}
}
}
+ // Moved below shader->disableTexture call to avoid false alarms from auto-re-enable of textures on stage 0
+ // MAINT-755
cube_map->disable();
cube_map->restoreMatrix();
}
@@ -1377,9 +1379,14 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI
LLGLDisable blend(GL_BLEND);
gGL.setColorMask(TRUE, TRUE);
gNormalMapGenProgram.bind();
- gNormalMapGenProgram.uniform1f("norm_scale", gSavedSettings.getF32("RenderNormalMapScale"));
- gNormalMapGenProgram.uniform1f("stepX", 1.f/bump->getWidth());
- gNormalMapGenProgram.uniform1f("stepY", 1.f/bump->getHeight());
+
+ static LLStaticHashedString sNormScale("norm_scale");
+ static LLStaticHashedString sStepX("stepX");
+ static LLStaticHashedString sStepY("stepY");
+
+ gNormalMapGenProgram.uniform1f(sNormScale, gSavedSettings.getF32("RenderNormalMapScale"));
+ gNormalMapGenProgram.uniform1f(sStepX, 1.f/bump->getWidth());
+ gNormalMapGenProgram.uniform1f(sStepY, 1.f/bump->getHeight());
LLVector2 v((F32) bump->getWidth()/gPipeline.mScreen.getWidth(),
(F32) bump->getHeight()/gPipeline.mScreen.getHeight());
diff --git a/indra/newview/lldrawpoolmaterials.cpp b/indra/newview/lldrawpoolmaterials.cpp
index 08a36bddf1..d1b5080650 100644
--- a/indra/newview/lldrawpoolmaterials.cpp
+++ b/indra/newview/lldrawpoolmaterials.cpp
@@ -72,6 +72,12 @@ void LLDrawPoolMaterials::beginDeferredPass(S32 pass)
};
mShader = &(gDeferredMaterialProgram[shader_idx[pass]]);
+
+ if (LLPipeline::sUnderWaterRender)
+ {
+ mShader = &(gDeferredMaterialWaterProgram[shader_idx[pass]]);
+ }
+
mShader->bind();
diffuse_channel = mShader->enableTexture(LLShaderMgr::DIFFUSE_MAP);
@@ -215,3 +221,4 @@ void LLDrawPoolMaterials::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture,
gGL.matrixMode(LLRender::MM_MODELVIEW);
}
}
+
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index 2cf9d833c6..8926f64c64 100755
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -37,6 +37,7 @@
#include "llviewershadermgr.h"
#include "llrender.h"
+#define GE_FORCE_WORKAROUND LL_DARWIN
static LLGLSLShader* simple_shader = NULL;
static LLGLSLShader* fullbright_shader = NULL;
@@ -111,7 +112,14 @@ void LLDrawPoolGlow::render(S32 pass)
LLGLSLShader* shader = LLPipeline::sUnderWaterRender ? &gObjectEmissiveWaterProgram : &gObjectEmissiveProgram;
shader->bind();
- shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.f);
+ if (LLPipeline::sRenderDeferred)
+ {
+ shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+ }
+ else
+ {
+ shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.f);
+ }
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
gGL.setColorMask(false, true);
@@ -148,7 +156,11 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_SIMPLE);
- if (LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sImpostorRender)
+ {
+ simple_shader = &gObjectSimpleImpostorProgram;
+ }
+ else if (LLPipeline::sUnderWaterRender)
{
simple_shader = &gObjectSimpleWaterProgram;
}
@@ -536,7 +548,15 @@ void LLDrawPoolFullbright::prerender()
void LLDrawPoolFullbright::beginPostDeferredPass(S32 pass)
{
- gDeferredFullbrightProgram.bind();
+ if (LLPipeline::sUnderWaterRender)
+ {
+ gDeferredFullbrightWaterProgram.bind();
+ }
+ else
+ {
+ gDeferredFullbrightProgram.bind();
+ }
+
}
void LLDrawPoolFullbright::renderPostDeferred(S32 pass)
@@ -550,7 +570,14 @@ void LLDrawPoolFullbright::renderPostDeferred(S32 pass)
void LLDrawPoolFullbright::endPostDeferredPass(S32 pass)
{
- gDeferredFullbrightProgram.unbind();
+ if (LLPipeline::sUnderWaterRender)
+ {
+ gDeferredFullbrightWaterProgram.unbind();
+ }
+ else
+ {
+ gDeferredFullbrightProgram.unbind();
+ }
LLRenderPass::endRenderPass(pass);
}
@@ -625,15 +652,35 @@ S32 LLDrawPoolFullbright::getNumPasses()
void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
{
- gObjectFullbrightAlphaMaskProgram.bind();
+
if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
{
+ gObjectFullbrightAlphaMaskProgram.bind();
gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0f);
}
else
- {
+ {
+
+// Work-around until we can figure out why the right shader causes
+// the GeForce driver to go tango uniform on OS X 10.6.8 only
+//
+#if GE_FORCE_WORKAROUND
+ gObjectFullbrightAlphaMaskProgram.bind();
gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+#else
+ if (LLPipeline::sUnderWaterRender)
+ {
+ gDeferredFullbrightAlphaMaskWaterProgram.bind();
+ gDeferredFullbrightAlphaMaskWaterProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+ }
+ else
+ {
+ gDeferredFullbrightAlphaMaskProgram.bind();
+ gDeferredFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+ }
+#endif
}
+
}
void LLDrawPoolFullbrightAlphaMask::renderPostDeferred(S32 pass)
@@ -646,7 +693,30 @@ void LLDrawPoolFullbrightAlphaMask::renderPostDeferred(S32 pass)
void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
{
- gObjectFullbrightAlphaMaskProgram.unbind();
+ if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
+ {
+ gObjectFullbrightAlphaMaskProgram.unbind();
+ }
+ else
+ {
+
+// Work-around until we can figure out why the right shader causes
+// the GeForce driver to go tango uniform on OS X 10.6.8 only
+//
+#if GE_FORCE_WORKAROUND
+ gObjectFullbrightAlphaMaskProgram.unbind();
+#else
+ if (LLPipeline::sUnderWaterRender)
+ {
+ gDeferredFullbrightAlphaMaskWaterProgram.unbind();
+ }
+ else
+ {
+ gDeferredFullbrightAlphaMaskProgram.unbind();
+ }
+#endif
+
+ }
LLRenderPass::endRenderPass(pass);
}
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 7f7d9f65c6..ef8bdc3304 100755
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -155,3 +155,4 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
void LLDrawPoolSky::endRenderPass( S32 pass )
{
}
+
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 0adb42428d..c3ec234223 100755
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -354,8 +354,8 @@ void LLDrawPoolTerrain::renderFullShader()
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
llassert(shader);
- shader->uniform4fv("object_plane_s", 1, tp0.mV);
- shader->uniform4fv("object_plane_t", 1, tp1.mV);
+ shader->uniform4fv(LLShaderMgr::OBJECT_PLANE_S, 1, tp0.mV);
+ shader->uniform4fv(LLShaderMgr::OBJECT_PLANE_T, 1, tp1.mV);
gGL.matrixMode(LLRender::MM_TEXTURE);
gGL.loadIdentity();
@@ -864,8 +864,8 @@ void LLDrawPoolTerrain::renderSimple()
if (LLGLSLShader::sNoFixedFunction)
{
- sShader->uniform4fv("object_plane_s", 1, tp0.mV);
- sShader->uniform4fv("object_plane_t", 1, tp1.mV);
+ sShader->uniform4fv(LLShaderMgr::OBJECT_PLANE_S, 1, tp0.mV);
+ sShader->uniform4fv(LLShaderMgr::OBJECT_PLANE_T, 1, tp1.mV);
}
else
{
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 5ddc15df42..76e89b26e4 100755
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -407,8 +407,8 @@ void LLDrawPoolWater::renderOpaqueLegacyWater()
}
else
{
- shader->uniform4fv("object_plane_s", 1, tp0);
- shader->uniform4fv("object_plane_t", 1, tp1);
+ shader->uniform4fv(LLShaderMgr::OBJECT_PLANE_S, 1, tp0);
+ shader->uniform4fv(LLShaderMgr::OBJECT_PLANE_T, 1, tp1);
}
gGL.diffuseColor3f(1.f, 1.f, 1.f);
@@ -522,14 +522,21 @@ void LLDrawPoolWater::shade()
F32 eyedepth = LLViewerCamera::getInstance()->getOrigin().mV[2] - gAgent.getRegion()->getWaterHeight();
+ if (eyedepth < 0.f && LLPipeline::sWaterReflections)
+ {
if (deferred_render)
{
- shader = &gDeferredWaterProgram;
+ shader = &gDeferredUnderWaterProgram;
}
- else if (eyedepth < 0.f && LLPipeline::sWaterReflections)
+ else
{
shader = &gUnderWaterProgram;
}
+ }
+ else if (deferred_render)
+ {
+ shader = &gDeferredWaterProgram;
+ }
else
{
shader = &gWaterProgram;
@@ -546,7 +553,7 @@ void LLDrawPoolWater::shade()
sTime = (F32)LLFrameTimer::getElapsedSeconds()*0.5f;
- S32 reftex = shader->enableTexture(LLViewerShaderMgr::WATER_REFTEX);
+ S32 reftex = shader->enableTexture(LLShaderMgr::WATER_REFTEX);
if (reftex > -1)
{
@@ -577,12 +584,12 @@ void LLDrawPoolWater::shade()
mWaterNormp->setFilteringOption(LLTexUnit::TFO_POINT);
}
- S32 screentex = shader->enableTexture(LLViewerShaderMgr::WATER_SCREENTEX);
+ S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX);
if (screentex > -1)
{
- shader->uniform4fv(LLViewerShaderMgr::WATER_FOGCOLOR, 1, sWaterFogColor.mV);
- shader->uniform1f(LLViewerShaderMgr::WATER_FOGDENSITY,
+ shader->uniform4fv(LLShaderMgr::WATER_FOGCOLOR, 1, sWaterFogColor.mV);
+ shader->uniform1f(LLShaderMgr::WATER_FOGDENSITY,
param_mgr->getFogDensity());
gPipeline.mWaterDis.bindTexture(0, screentex);
}
@@ -594,7 +601,7 @@ void LLDrawPoolWater::shade()
if (mVertexShaderLevel == 1)
{
sWaterFogColor.mV[3] = param_mgr->mDensitySliderValue;
- shader->uniform4fv(LLViewerShaderMgr::WATER_FOGCOLOR, 1, sWaterFogColor.mV);
+ shader->uniform4fv(LLShaderMgr::WATER_FOGCOLOR, 1, sWaterFogColor.mV);
}
F32 screenRes[] =
@@ -602,10 +609,10 @@ void LLDrawPoolWater::shade()
1.f/gGLViewport[2],
1.f/gGLViewport[3]
};
- shader->uniform2fv("screenRes", 1, screenRes);
+ shader->uniform2fv(LLShaderMgr::DEFERRED_SCREEN_RES, 1, screenRes);
stop_glerror();
- S32 diffTex = shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
+ S32 diffTex = shader->enableTexture(LLShaderMgr::DIFFUSE_MAP);
stop_glerror();
light_dir.normVec();
@@ -614,26 +621,26 @@ void LLDrawPoolWater::shade()
light_diffuse *= 6.f;
//shader->uniformMatrix4fv("inverse_ref", 1, GL_FALSE, (GLfloat*) gGLObliqueProjectionInverse.mMatrix);
- shader->uniform1f(LLViewerShaderMgr::WATER_WATERHEIGHT, eyedepth);
- shader->uniform1f(LLViewerShaderMgr::WATER_TIME, sTime);
- shader->uniform3fv(LLViewerShaderMgr::WATER_EYEVEC, 1, LLViewerCamera::getInstance()->getOrigin().mV);
- shader->uniform3fv(LLViewerShaderMgr::WATER_SPECULAR, 1, light_diffuse.mV);
- shader->uniform1f(LLViewerShaderMgr::WATER_SPECULAR_EXP, light_exp);
- shader->uniform2fv(LLViewerShaderMgr::WATER_WAVE_DIR1, 1, param_mgr->getWave1Dir().mV);
- shader->uniform2fv(LLViewerShaderMgr::WATER_WAVE_DIR2, 1, param_mgr->getWave2Dir().mV);
- shader->uniform3fv(LLViewerShaderMgr::WATER_LIGHT_DIR, 1, light_dir.mV);
-
- shader->uniform3fv("normScale", 1, param_mgr->getNormalScale().mV);
- shader->uniform1f("fresnelScale", param_mgr->getFresnelScale());
- shader->uniform1f("fresnelOffset", param_mgr->getFresnelOffset());
- shader->uniform1f("blurMultiplier", param_mgr->getBlurMultiplier());
+ shader->uniform1f(LLShaderMgr::WATER_WATERHEIGHT, eyedepth);
+ shader->uniform1f(LLShaderMgr::WATER_TIME, sTime);
+ shader->uniform3fv(LLShaderMgr::WATER_EYEVEC, 1, LLViewerCamera::getInstance()->getOrigin().mV);
+ shader->uniform3fv(LLShaderMgr::WATER_SPECULAR, 1, light_diffuse.mV);
+ shader->uniform1f(LLShaderMgr::WATER_SPECULAR_EXP, light_exp);
+ shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR1, 1, param_mgr->getWave1Dir().mV);
+ shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR2, 1, param_mgr->getWave2Dir().mV);
+ shader->uniform3fv(LLShaderMgr::WATER_LIGHT_DIR, 1, light_dir.mV);
+
+ shader->uniform3fv(LLShaderMgr::WATER_NORM_SCALE, 1, param_mgr->getNormalScale().mV);
+ shader->uniform1f(LLShaderMgr::WATER_FRESNEL_SCALE, param_mgr->getFresnelScale());
+ shader->uniform1f(LLShaderMgr::WATER_FRESNEL_OFFSET, param_mgr->getFresnelOffset());
+ shader->uniform1f(LLShaderMgr::WATER_BLUR_MULTIPLIER, param_mgr->getBlurMultiplier());
F32 sunAngle = llmax(0.f, light_dir.mV[2]);
F32 scaledAngle = 1.f - sunAngle;
- shader->uniform1f("sunAngle", sunAngle);
- shader->uniform1f("scaledAngle", scaledAngle);
- shader->uniform1f("sunAngle2", 0.1f + 0.2f*sunAngle);
+ shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE, sunAngle);
+ shader->uniform1f(LLShaderMgr::WATER_SCALED_ANGLE, scaledAngle);
+ shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE2, 0.1f + 0.2f*sunAngle);
LLColor4 water_color;
LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis();
@@ -641,12 +648,12 @@ void LLDrawPoolWater::shade()
if (LLViewerCamera::getInstance()->cameraUnderWater())
{
water_color.setVec(1.f, 1.f, 1.f, 0.4f);
- shader->uniform1f(LLViewerShaderMgr::WATER_REFSCALE, param_mgr->getScaleBelow());
+ shader->uniform1f(LLShaderMgr::WATER_REFSCALE, param_mgr->getScaleBelow());
}
else
{
water_color.setVec(1.f, 1.f, 1.f, 0.5f*(1.f + up_dot));
- shader->uniform1f(LLViewerShaderMgr::WATER_REFSCALE, param_mgr->getScaleAbove());
+ shader->uniform1f(LLShaderMgr::WATER_REFSCALE, param_mgr->getScaleAbove());
}
if (water_color.mV[3] > 0.9f)
@@ -689,12 +696,12 @@ void LLDrawPoolWater::shade()
}
}
- shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
- shader->disableTexture(LLViewerShaderMgr::WATER_SCREENTEX);
- shader->disableTexture(LLViewerShaderMgr::BUMP_MAP);
- shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
- shader->disableTexture(LLViewerShaderMgr::WATER_REFTEX);
- shader->disableTexture(LLViewerShaderMgr::WATER_SCREENDEPTH);
+ shader->disableTexture(LLShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
+ shader->disableTexture(LLShaderMgr::WATER_SCREENTEX);
+ shader->disableTexture(LLShaderMgr::BUMP_MAP);
+ shader->disableTexture(LLShaderMgr::DIFFUSE_MAP);
+ shader->disableTexture(LLShaderMgr::WATER_REFTEX);
+ shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH);
if (deferred_render)
{
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index b5faff7968..a98d3e6b05 100755
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -152,7 +152,8 @@ void LLDrawPoolWLSky::renderDome(F32 camHeightLocal, LLGLSLShader * shader) cons
gGL.translatef(0.f,-camHeightLocal, 0.f);
// Draw WL Sky
- shader->uniform3f("camPosLocal", 0.f, camHeightLocal, 0.f);
+ static LLStaticHashedString sCamPosLocal("camPosLocal");
+ shader->uniform3f(sCamPosLocal, 0.f, camHeightLocal, 0.f);
gSky.mVOWLSkyp->drawDome();
@@ -207,7 +208,8 @@ void LLDrawPoolWLSky::renderStars(void) const
if (LLGLSLShader::sNoFixedFunction)
{
gCustomAlphaProgram.bind();
- gCustomAlphaProgram.uniform1f("custom_alpha", star_alpha.mV[3]);
+ static LLStaticHashedString sCustomAlpha("custom_alpha");
+ gCustomAlphaProgram.uniform1f(sCustomAlpha, star_alpha.mV[3]);
}
else
{
@@ -420,3 +422,4 @@ void LLDrawPoolWLSky::restoreGL()
sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
}
}
+
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 9b2b778677..369273bca6 100755
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -52,9 +52,20 @@
#include "llviewerwindow.h"
#include "llviewershadermgr.h"
#include "llviewertexture.h"
+#include "llvoavatar.h"
+#if LL_LINUX
+// Work-around spurious used before init warning on Vector4a
+//
+#pragma GCC diagnostic ignored "-Wuninitialized"
+#endif
+
+extern BOOL gGLDebugLoggingEnabled;
#define LL_MAX_INDICES_COUNT 1000000
+static LLStaticHashedString sTextureIndexIn("texture_index_in");
+static LLStaticHashedString sColorIn("color_in");
+
BOOL LLFace::sSafeRenderSelect = TRUE; // FALSE
#define DOTVEC(a,b) (a.mV[0]*b.mV[0] + a.mV[1]*b.mV[1] + a.mV[2]*b.mV[2])
@@ -318,6 +329,12 @@ void LLFace::dirtyTexture()
if (vobj)
{
vobj->mLODChanged = TRUE;
+
+ LLVOAvatar* avatar = vobj->getAvatar();
+ if (avatar)
+ { //avatar render cost may have changed
+ avatar->updateVisualComplexity();
+ }
}
gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME, FALSE);
}
@@ -1139,6 +1156,15 @@ static LLFastTimer::DeclareTimer FTM_FACE_GEOM_COLOR("Color");
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_EMISSIVE("Emissive");
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_WEIGHTS("Weights");
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_TANGENT("Binormal");
+
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK("Face Feedback");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_POSITION("Feedback Position");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_NORMAL("Feedback Normal");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_TEXTURE("Feedback Texture");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_COLOR("Feedback Color");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_EMISSIVE("Feedback Emissive");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_BINORMAL("Feedback Binormal");
+
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX("Index");
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX_TAIL("Tail");
static LLFastTimer::DeclareTimer FTM_FACE_POSITION_STORE("Pos");
@@ -1364,12 +1390,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
#ifdef GL_TRANSFORM_FEEDBACK_BUFFER
if (use_transform_feedback &&
+ mVertexBuffer->getUsage() == GL_DYNAMIC_COPY_ARB &&
gTransformPositionProgram.mProgramObject && //transform shaders are loaded
mVertexBuffer->useVBOs() && //target buffer is in VRAM
!rebuild_weights && //TODO: add support for weights
!volume.isUnique()) //source volume is NOT flexi
{ //use transform feedback to pack vertex buffer
-
+ //gGLDebugLoggingEnabled = TRUE;
+ LLFastTimer t(FTM_FACE_GEOM_FEEDBACK);
+ LLGLEnable discard(GL_RASTERIZER_DISCARD);
LLVertexBuffer* buff = (LLVertexBuffer*) vf.mVertexBuffer.get();
if (vf.mVertexBuffer.isNull() || buff->getNumVerts() != vf.mNumVertices)
@@ -1386,7 +1415,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_pos)
{
- LLFastTimer t(FTM_FACE_GEOM_POSITION);
+ LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_POSITION);
gTransformPositionProgram.bind();
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_VERTEX, mGeomIndex, mGeomCount);
@@ -1400,7 +1429,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
vp[2] = 0;
vp[3] = 0;
- gTransformPositionProgram.uniform1i("texture_index_in", val);
+ gTransformPositionProgram.uniform1i(sTextureIndexIn, val);
glBeginTransformFeedback(GL_POINTS);
buff->setBuffer(LLVertexBuffer::MAP_VERTEX);
@@ -1411,14 +1440,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_color)
{
- LLFastTimer t(FTM_FACE_GEOM_COLOR);
+ LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_COLOR);
gTransformColorProgram.bind();
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_COLOR, mGeomIndex, mGeomCount);
S32 val = *((S32*) color.mV);
- gTransformColorProgram.uniform1i("color_in", val);
+ gTransformColorProgram.uniform1i(sColorIn, val);
glBeginTransformFeedback(GL_POINTS);
buff->setBuffer(LLVertexBuffer::MAP_VERTEX);
push_for_transform(buff, vf.mNumVertices, mGeomCount);
@@ -1427,7 +1456,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_emissive)
{
- LLFastTimer t(FTM_FACE_GEOM_EMISSIVE);
+ LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_EMISSIVE);
gTransformColorProgram.bind();
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_EMISSIVE, mGeomIndex, mGeomCount);
@@ -1439,7 +1468,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
(glow << 16) |
(glow << 24);
- gTransformColorProgram.uniform1i("color_in", glow32);
+ gTransformColorProgram.uniform1i(sColorIn, glow32);
glBeginTransformFeedback(GL_POINTS);
buff->setBuffer(LLVertexBuffer::MAP_VERTEX);
push_for_transform(buff, vf.mNumVertices, mGeomCount);
@@ -1448,7 +1477,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_normal)
{
- LLFastTimer t(FTM_FACE_GEOM_NORMAL);
+ LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_NORMAL);
gTransformNormalProgram.bind();
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_NORMAL, mGeomIndex, mGeomCount);
@@ -1474,7 +1503,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_tcoord)
{
- LLFastTimer t(FTM_FACE_GEOM_TEXTURE);
+ LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_TEXTURE);
gTransformTexCoordProgram.bind();
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_TEXCOORD0, mGeomIndex, mGeomCount);
@@ -1897,20 +1926,31 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_pos)
{
- LLFastTimer t(FTM_FACE_GEOM_POSITION);
+ LLVector4a* src = vf.mPositions;
+
+ //_mm_prefetch((char*)src, _MM_HINT_T0);
+
+ LLVector4a* end = src+num_vertices;
+ //LLVector4a* end_64 = end-4;
+
+ //LLFastTimer t(FTM_FACE_GEOM_POSITION);
llassert(num_vertices > 0);
mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, map_range);
-
LLMatrix4a mat_vert;
mat_vert.loadu(mat_vert_in);
- LLVector4a* src = vf.mPositions;
- volatile F32* dst = (volatile F32*) vert.get();
+ F32* dst = (F32*) vert.get();
+ F32* end_f32 = dst+mGeomCount*4;
+
+ //_mm_prefetch((char*)dst, _MM_HINT_NTA);
+ //_mm_prefetch((char*)src, _MM_HINT_NTA);
+
+ //_mm_prefetch((char*)dst, _MM_HINT_NTA);
+
- volatile F32* end = dst+num_vertices*4;
- LLVector4a res;
+ LLVector4a res0; //,res1,res2,res3;
LLVector4a texIdx;
@@ -1928,29 +1968,53 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
texIdx.set(0,0,0,val);
+ LLVector4a tmp;
+
{
- LLFastTimer t(FTM_FACE_POSITION_STORE);
- LLVector4a tmp;
+ //LLFastTimer t2(FTM_FACE_POSITION_STORE);
+
+ /*if (num_vertices > 4)
+ { //more than 64 bytes
+ while (src < end_64)
+ {
+ _mm_prefetch((char*)src + 64, _MM_HINT_T0);
+ _mm_prefetch((char*)dst + 64, _MM_HINT_T0);
+
+ mat_vert.affineTransform(*src, res0);
+ tmp.setSelectWithMask(mask, texIdx, res0);
+ tmp.store4a((F32*) dst);
- do
+ mat_vert.affineTransform(*(src+1), res1);
+ tmp.setSelectWithMask(mask, texIdx, res1);
+ tmp.store4a((F32*) dst+4);
+
+ mat_vert.affineTransform(*(src+2), res2);
+ tmp.setSelectWithMask(mask, texIdx, res2);
+ tmp.store4a((F32*) dst+8);
+
+ mat_vert.affineTransform(*(src+3), res3);
+ tmp.setSelectWithMask(mask, texIdx, res3);
+ tmp.store4a((F32*) dst+12);
+
+ dst += 16;
+ src += 4;
+ }
+ }*/
+
+ while (src < end)
{
- mat_vert.affineTransform(*src++, res);
- tmp.setSelectWithMask(mask, texIdx, res);
+ mat_vert.affineTransform(*src++, res0);
+ tmp.setSelectWithMask(mask, texIdx, res0);
tmp.store4a((F32*) dst);
dst += 4;
}
- while(dst < end);
}
{
- LLFastTimer t(FTM_FACE_POSITION_PAD);
- S32 aligned_pad_vertices = mGeomCount - num_vertices;
- res.set(res[0], res[1], res[2], 0.f);
-
- while (aligned_pad_vertices > 0)
+ //LLFastTimer t(FTM_FACE_POSITION_PAD);
+ while (dst < end_f32)
{
- --aligned_pad_vertices;
- res.store4a((F32*) dst);
+ res0.store4a((F32*) dst);
dst += 4;
}
}
@@ -1964,14 +2028,16 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_normal)
{
- LLFastTimer t(FTM_FACE_GEOM_NORMAL);
+ //LLFastTimer t(FTM_FACE_GEOM_NORMAL);
mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, map_range);
F32* normals = (F32*) norm.get();
- for (S32 i = 0; i < num_vertices; i++)
+ LLVector4a* src = vf.mNormals;
+ LLVector4a* end = src+num_vertices;
+
+ while (src < end)
{
LLVector4a normal;
- mat_normal.rotate(vf.mNormals[i], normal);
- normal.normalize3fast();
+ mat_normal.rotate(*src++, normal);
normal.store4a(normals);
normals += 4;
}
@@ -1994,14 +2060,18 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
mask.clear();
mask.setElement<3>();
- for (S32 i = 0; i < num_vertices; i++)
+ LLVector4a* src = vf.mTangents;
+ LLVector4a* end = vf.mTangents+num_vertices;
+
+ while (src < end)
{
LLVector4a tangent_out;
- mat_normal.rotate(vf.mTangents[i], tangent_out);
+ mat_normal.rotate(*src, tangent_out);
tangent_out.normalize3fast();
- tangent_out.setSelectWithMask(mask, vf.mTangents[i], tangent_out);
+ tangent_out.setSelectWithMask(mask, *src, tangent_out);
tangent_out.store4a(tangents);
+ src++;
tangents += 4;
}
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 763634a3ab..66b5f13740 100755
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -194,8 +194,7 @@ public:
void setSize(S32 numVertices, S32 num_indices = 0, bool align = false);
- BOOL genVolumeBBoxes(const LLVolume &volume, S32 f,
- const LLMatrix4& mat, BOOL global_volume = FALSE);
+ BOOL genVolumeBBoxes(const LLVolume &volume, S32 f,const LLMatrix4& mat, BOOL global_volume = FALSE);
void init(LLDrawable* drawablep, LLViewerObject* objp);
void destroy();
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index fbf72b1a85..8e1a1df211 100755
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -345,7 +345,7 @@ BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks)
return TRUE;
}
-static LLFastTimer::DeclareTimer FTM_RENDER_TIMER("Timers", true);
+static LLFastTimer::DeclareTimer FTM_RENDER_TIMER("Timers");
static std::map<LLFastTimer::NamedTimer*, LLColor4> sTimerColors;
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index b35ef3a961..a2d0759587 100755
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -552,6 +552,10 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con
bool insert_before = true;
if (!mItems.empty())
{
+ // [MAINT-2386] When multiple landmarks are selected and dragged onto an empty favorites bar,
+ // the viewer would crash when casting mLastTab below, as mLastTab is still null when the
+ // second landmark is being added.
+ // To ensure mLastTab is valid, we need to call updateButtons() at the end of this function
dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLandingTab);
if (!dest)
{
@@ -623,6 +627,11 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con
cb);
}
+ // [MAINT-2386] Ensure the favorite button has been created and is valid.
+ // This also ensures that mLastTab will be valid when dropping multiple
+ // landmarks to an empty favorites bar.
+ updateButtons();
+
llinfos << "Copied inventory item #" << item->getUUID() << " to favorites." << llendl;
}
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index e311e09c8b..ae4d4d5ef6 100755
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -262,7 +262,7 @@ BOOL LLFeatureManager::maskFeatures(const std::string& name)
return maskList(*maskp);
}
-BOOL LLFeatureManager::loadFeatureTables()
+bool LLFeatureManager::loadFeatureTables()
{
// *TODO - if I or anyone else adds something else to the skipped list
// make this data driven. Put it in the feature table and parse it
@@ -303,28 +303,36 @@ BOOL LLFeatureManager::loadFeatureTables()
// use HTTP table if it exists
std::string path;
+ bool parse_ok = false;
if (gDirUtilp->fileExists(http_path))
{
- path = http_path;
+ parse_ok = parseFeatureTable(http_path);
+ if (!parse_ok)
+ {
+ // the HTTP table failed to parse, so delete it
+ LLFile::remove(http_path);
+ LL_WARNS("RenderInit") << "Removed invalid feature table '" << http_path << "'" << LL_ENDL;
+ }
}
- else
+
+ if (!parse_ok)
{
- path = app_path;
+ parse_ok = parseFeatureTable(app_path);
}
-
- return parseFeatureTable(path);
+ return parse_ok;
}
-BOOL LLFeatureManager::parseFeatureTable(std::string filename)
+bool LLFeatureManager::parseFeatureTable(std::string filename)
{
- llinfos << "Looking for feature table in " << filename << llendl;
+ LL_INFOS("RenderInit") << "Attempting to parse feature table from " << filename << LL_ENDL;
llifstream file;
std::string name;
U32 version;
+ cleanupFeatureTables(); // in case an earlier attempt left partial results
file.open(filename); /*Flawfinder: ignore*/
if (!file)
@@ -339,13 +347,14 @@ BOOL LLFeatureManager::parseFeatureTable(std::string filename)
if (name != "version")
{
LL_WARNS("RenderInit") << filename << " does not appear to be a valid feature table!" << LL_ENDL;
- return FALSE;
+ return false;
}
mTableVersion = version;
-
+
LLFeatureList *flp = NULL;
- while (file >> name)
+ bool parse_ok = true;
+ while (file >> name && parse_ok)
{
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
@@ -358,39 +367,58 @@ BOOL LLFeatureManager::parseFeatureTable(std::string filename)
if (name == "list")
{
+ LL_DEBUGS("RenderInit") << "Before new list" << std::endl;
if (flp)
{
- //flp->dump();
+ flp->dump();
}
+ else
+ {
+ LL_CONT << "No current list";
+ }
+ LL_CONT << LL_ENDL;
+
// It's a new mask, create it.
file >> name;
- if (mMaskList.count(name))
+ if (!mMaskList.count(name))
{
- LL_ERRS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL;
+ flp = new LLFeatureList(name);
+ mMaskList[name] = flp;
+ }
+ else
+ {
+ LL_WARNS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL;
+ parse_ok = false;
}
-
- flp = new LLFeatureList(name);
- mMaskList[name] = flp;
}
else
{
- if (!flp)
+ if (flp)
+ {
+ S32 available;
+ F32 recommended;
+ file >> available >> recommended;
+ flp->addFeature(name, available, recommended);
+ }
+ else
{
- LL_ERRS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL;
- return FALSE;
+ LL_WARNS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL;
+ parse_ok = false;
}
- S32 available;
- F32 recommended;
- file >> available >> recommended;
- flp->addFeature(name, available, recommended);
}
}
file.close();
- return TRUE;
+ if (!parse_ok)
+ {
+ LL_WARNS("RenderInit") << "Discarding feature table data from " << filename << LL_ENDL;
+ cleanupFeatureTables();
+ }
+
+ return parse_ok;
}
-void LLFeatureManager::loadGPUClass()
+bool LLFeatureManager::loadGPUClass()
{
// defaults
mGPUClass = GPU_CLASS_UNKNOWN;
@@ -408,29 +436,49 @@ void LLFeatureManager::loadGPUClass()
// use HTTP table if it exists
std::string path;
+ bool parse_ok = false;
if (gDirUtilp->fileExists(http_path))
{
- path = http_path;
+ parse_ok = parseGPUTable(http_path);
+ if (!parse_ok)
+ {
+ // the HTTP table failed to parse, so delete it
+ LLFile::remove(http_path);
+ LL_WARNS("RenderInit") << "Removed invalid gpu table '" << http_path << "'" << LL_ENDL;
+ }
}
- else
+
+ if (!parse_ok)
{
- path = app_path;
+ parse_ok = parseGPUTable(app_path);
}
- parseGPUTable(path);
+ return parse_ok; // indicates that the file parsed correctly, not that the gpu was recognized
}
-void LLFeatureManager::parseGPUTable(std::string filename)
+bool LLFeatureManager::parseGPUTable(std::string filename)
{
llifstream file;
-
+
+ LL_INFOS("RenderInit") << "Attempting to parse GPU table from " << filename << LL_ENDL;
file.open(filename);
- if (!file)
+ if (file)
+ {
+ const char recognizer[] = "//GPU_TABLE";
+ char first_line[MAX_STRING];
+ file.getline(first_line, MAX_STRING);
+ if (0 != strncmp(first_line, recognizer, strlen(recognizer)))
+ {
+ LL_WARNS("RenderInit") << "Invalid GPU table: " << filename << "!" << LL_ENDL;
+ return false;
+ }
+ }
+ else
{
LL_WARNS("RenderInit") << "Unable to open GPU table: " << filename << "!" << LL_ENDL;
- return;
+ return false;
}
std::string rawRenderer = gGLManager.getRawGLString();
@@ -557,6 +605,7 @@ void LLFeatureManager::parseGPUTable(std::string filename)
#if LL_DARWIN // never go over "Mid" settings by default on OS X
mGPUClass = llmin(mGPUClass, GPU_CLASS_2);
#endif
+ return true;
}
// responder saves table into file
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 3b8d251236..95141b241d 100755
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -75,7 +75,7 @@ public:
void setFeatureAvailable(const std::string& name, const BOOL available);
void setRecommendedLevel(const std::string& name, const F32 level);
- BOOL loadFeatureList(LLFILE *fp);
+ bool loadFeatureList(LLFILE *fp);
BOOL maskList(LLFeatureList &mask);
@@ -114,7 +114,7 @@ public:
void maskCurrentList(const std::string& name); // Mask the current feature list with the named list
- BOOL loadFeatureTables();
+ bool loadFeatureTables();
EGPUClass getGPUClass() { return mGPUClass; }
std::string& getGPUString() { return mGPUString; }
@@ -157,9 +157,14 @@ public:
void fetchHTTPTables();
protected:
- void loadGPUClass();
- BOOL parseFeatureTable(std::string filename);
- void parseGPUTable(std::string filename);
+ bool loadGPUClass();
+
+ bool parseFeatureTable(std::string filename);
+ ///< @returns TRUE is file parsed correctly, FALSE if not
+
+ bool parseGPUTable(std::string filename);
+ ///< @returns true if file parsed correctly, false if not - does not reflect whether or not the gpu was recognized
+
void initBaseMask();
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
index c51645afb8..1f6a0b6052 100755
--- a/indra/newview/llfilepicker.cpp
+++ b/indra/newview/llfilepicker.cpp
@@ -857,6 +857,8 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
success = false;
}
+ send_agent_resume();
+
// Account for the fact that the app has been stalled.
LLFrameTimer::updateFrameTime();
return success;
diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm
index 2a84226e0a..13757904e3 100644
--- a/indra/newview/llfilepicker_mac.mm
+++ b/indra/newview/llfilepicker_mac.mm
@@ -117,6 +117,7 @@ std::string* doSaveDialog(const std::string* file,
std::string *outfile = NULL;
NSURL* url = [NSURL fileURLWithPath:fileName];
+ [panel setNameFieldStringValue: fileName];
[panel setDirectoryURL: url];
if([panel runModal] ==
NSFileHandlingPanelOKButton)
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index caad0afec0..98c0c0bf51 100755
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -294,6 +294,9 @@ void LLVolumeImplFlexible::onSetVolume(const LLVolumeParams &volume_params, cons
void LLVolumeImplFlexible::updateRenderRes()
{
+ if (!mAttributes)
+ return;
+
LLDrawable* drawablep = mVO->mDrawable;
S32 new_res = mAttributes->getSimulateLOD();
@@ -435,7 +438,7 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
}
}
- if(!mInitialized)
+ if(!mInitialized || !mAttributes)
{
//the object is not visible
return ;
@@ -689,30 +692,36 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
LLVector4(z_axis, 0.f),
LLVector4(delta_pos, 1.f));
+ LL_CHECK_MEMORY
for (i=0; i<=num_render_sections; ++i)
{
new_point = &path->mPath[i];
LLVector3 pos = newSection[i].mPosition * rel_xform;
LLQuaternion rot = mSection[i].mAxisRotation * newSection[i].mRotation * delta_rot;
-
- if (!mUpdated || (new_point->mPos-pos).magVec()/mVO->mDrawable->mDistanceWRTCamera > 0.001f)
+
+ LLVector3 np(new_point->mPos.getF32ptr());
+
+ if (!mUpdated || (np-pos).magVec()/mVO->mDrawable->mDistanceWRTCamera > 0.001f)
{
- new_point->mPos = newSection[i].mPosition * rel_xform;
+ new_point->mPos.load3((newSection[i].mPosition * rel_xform).mV);
mUpdated = FALSE;
}
- new_point->mRot = rot;
- new_point->mScale = newSection[i].mScale;
+ new_point->mRot.loadu(LLMatrix3(rot));
+ new_point->mScale.set(newSection[i].mScale.mV[0], newSection[i].mScale.mV[1], 0,1);
new_point->mTexT = ((F32)i)/(num_render_sections);
}
-
+ LL_CHECK_MEMORY
mLastSegmentRotation = parentSegmentRotation;
}
+static LLFastTimer::DeclareTimer FTM_FLEXI_PREBUILD("Flexi Prebuild");
+
void LLVolumeImplFlexible::preRebuild()
{
if (!mUpdated)
{
+ LLFastTimer t(FTM_FLEXI_PREBUILD);
doFlexibleRebuild();
}
}
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index b570de14aa..4a85160f95 100755
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -43,14 +43,15 @@ LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_i
mCurrentPage(0),
mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")),
mAccountName(session_id[LL_FCP_ACCOUNT_NAME]),
- mCompleteName(session_id[LL_FCP_COMPLETE_NAME])
+ mCompleteName(session_id[LL_FCP_COMPLETE_NAME]),
+ mMutex(NULL)
{
}
BOOL LLFloaterConversationPreview::postBuild()
{
mChatHistory = getChild<LLChatHistory>("chat_history");
- LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::SetPages, this, _1, _2));
+ LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::setPages, this, _1, _2));
const LLConversation* conv = LLConversationLog::instance().getConversation(mSessionID);
std::string name;
@@ -95,14 +96,15 @@ BOOL LLFloaterConversationPreview::postBuild()
return LLFloater::postBuild();
}
-void LLFloaterConversationPreview::SetPages(std::list<LLSD>& messages, const std::string& file_name)
+void LLFloaterConversationPreview::setPages(std::list<LLSD>& messages,const std::string& file_name)
{
if(file_name == mChatHistoryFileName)
{
+ // additional protection to avoid changes of mMessages in setPages()
+ LLMutexLock lock(&mMutex);
mMessages = messages;
+ mCurrentPage = (mMessages.size() ? (mMessages.size() - 1) / mPageSize : 0);
-
- mCurrentPage = mMessages.size() / mPageSize;
mPageSpinner->setEnabled(true);
mPageSpinner->setMaxValue(mCurrentPage+1);
mPageSpinner->set(mCurrentPage+1);
@@ -110,10 +112,9 @@ void LLFloaterConversationPreview::SetPages(std::list<LLSD>& messages, const std
std::string total_page_num = llformat("/ %d", mCurrentPage+1);
getChild<LLTextBox>("page_num_label")->setValue(total_page_num);
mChatHistoryLoaded = true;
-
}
-
}
+
void LLFloaterConversationPreview::draw()
{
if(mChatHistoryLoaded)
@@ -126,37 +127,29 @@ void LLFloaterConversationPreview::draw()
void LLFloaterConversationPreview::onOpen(const LLSD& key)
{
- showHistory();
+ if(mChatHistoryLoaded)
+ {
+ showHistory();
+ }
}
void LLFloaterConversationPreview::showHistory()
{
- if (!mMessages.size())
+ // additional protection to avoid changes of mMessages in setPages()
+ LLMutexLock lock(&mMutex);
+
+ if (!mMessages.size() || mCurrentPage * mPageSize >= mMessages.size())
{
return;
}
mChatHistory->clear();
-
std::ostringstream message;
std::list<LLSD>::const_iterator iter = mMessages.begin();
+ std::advance(iter, mCurrentPage * mPageSize);
- int delta = 0;
- if (mCurrentPage)
- {
- int remainder = mMessages.size() % mPageSize;
- delta = (remainder == 0) ? 0 : (mPageSize - remainder);
- }
-
- std::advance(iter, (mCurrentPage * mPageSize) - delta);
-
- for (int msg_num = 0; (iter != mMessages.end() && msg_num < mPageSize); ++iter, ++msg_num)
+ for (int msg_num = 0; iter != mMessages.end() && msg_num < mPageSize; ++iter, ++msg_num)
{
- if (iter->size() == 0)
- {
- continue;
- }
-
LLSD msg = *iter;
LLUUID from_id = LLUUID::null;
@@ -200,7 +193,6 @@ void LLFloaterConversationPreview::showHistory()
mChatHistory->appendMessage(chat,chat_args);
}
-
}
void LLFloaterConversationPreview::onMoreHistoryBtnClick()
diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h
index 389f3dfd09..f8796127ba 100755
--- a/indra/newview/llfloaterconversationpreview.h
+++ b/indra/newview/llfloaterconversationpreview.h
@@ -42,7 +42,7 @@ public:
virtual ~LLFloaterConversationPreview(){};
virtual BOOL postBuild();
- void SetPages(std::list<LLSD>& messages,const std::string& file_name);
+ void setPages(std::list<LLSD>& messages,const std::string& file_name);
virtual void draw();
virtual void onOpen(const LLSD& key);
@@ -51,6 +51,7 @@ private:
void onMoreHistoryBtnClick();
void showHistory();
+ LLMutex mMutex;
LLSpinCtrl* mPageSpinner;
LLChatHistory* mChatHistory;
LLUUID mSessionID;
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 4591b80ac4..2c3b34e128 100755
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -674,13 +674,18 @@ void LLFloaterIMContainer::setVisible(BOOL visible)
void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& floaters)
{
typedef conversations_widgets_map::value_type conv_pair;
+ LLFloaterIMNearbyChat *nearby_chat = LLFloaterReg::findTypedInstance<LLFloaterIMNearbyChat>("nearby_chat");
+
BOOST_FOREACH(conv_pair item, mConversationsWidgets)
{
LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(item.second);
if (widget)
{
LLFloater* session_floater = widget->getSessionFloater();
- if (session_floater && session_floater->isDetachedAndNotMinimized())
+
+ // Exclude nearby chat from output, as it should be handled separately
+ if (session_floater && session_floater->isDetachedAndNotMinimized()
+ && session_floater != nearby_chat)
{
floaters.push_back(session_floater);
}
@@ -1604,7 +1609,7 @@ LLConversationItem* LLFloaterIMContainer::addConversationListItem(const LLUUID&
// Create the participants widgets now
// Note: usually, we do not get an updated avatar list at that point
- if (uuid.isNull() || im_sessionp && !im_sessionp->isP2PSessionType())
+ if (uuid.isNull() || (im_sessionp && !im_sessionp->isP2PSessionType()))
{
LLFolderViewModelItemCommon::child_list_t::const_iterator current_participant_model = item->getChildrenBegin();
LLFolderViewModelItemCommon::child_list_t::const_iterator end_participant_model = item->getChildrenEnd();
diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp
index cc00b6fd10..a8f815c389 100755
--- a/indra/newview/llfloaterimnearbychathandler.cpp
+++ b/indra/newview/llfloaterimnearbychathandler.cpp
@@ -187,14 +187,11 @@ void LLFloaterIMNearbyChatScreenChannel::deactivateToast(LLToast* toast)
{
toast_vec_t::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast->getHandle());
- if (pos == m_active_toasts.end())
+ if (pos != m_active_toasts.end())
{
- llassert(pos == m_active_toasts.end());
- return;
+ LL_DEBUGS("NearbyChat") << "Deactivating toast" << llendl;
+ m_active_toasts.erase(pos);
}
-
- LL_DEBUGS("NearbyChat") << "Deactivating toast" << llendl;
- m_active_toasts.erase(pos);
}
void LLFloaterIMNearbyChatScreenChannel::createOverflowToast(S32 bottom, F32 timer)
@@ -210,8 +207,8 @@ void LLFloaterIMNearbyChatScreenChannel::onToastDestroyed(LLToast* toast, bool a
{
// Viewer is quitting.
// Immediately stop processing chat messages (EXT-1419).
- mStopProcessing = true;
-}
+ mStopProcessing = true;
+ }
else
{
// The toast is being closed by user (STORM-192).
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index d4355007c1..6ef4d8717d 100755
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2027,6 +2027,10 @@ void LLPanelLandOptions::refresh()
mSnapshotCtrl->setImageAssetID(parcel->getSnapshotID());
mSnapshotCtrl->setEnabled( can_change_identity );
+ // find out where we're looking and convert that to an angle in degrees on a regular compass (not the internal representation)
+ LLVector3 user_look_at = parcel->getUserLookAt();
+ U32 user_look_at_angle = ( (U32)( ( atan2(user_look_at[1], -user_look_at[0]) + F_PI * 2 ) * RAD_TO_DEG + 0.5) - 90) % 360;
+
LLVector3 pos = parcel->getUserLocation();
if (pos.isExactlyZero())
{
@@ -2034,10 +2038,11 @@ void LLPanelLandOptions::refresh()
}
else
{
- mLocationText->setTextArg("[LANDING]",llformat("%d, %d, %d",
+ mLocationText->setTextArg("[LANDING]",llformat("%d, %d, %d (%d\xC2\xB0)",
llround(pos.mV[VX]),
llround(pos.mV[VY]),
- llround(pos.mV[VZ])));
+ llround(pos.mV[VZ]),
+ user_look_at_angle));
}
mSetBtn->setEnabled( can_change_landing_point );
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 5830156fdd..f70258e644 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -290,6 +290,22 @@ bool ll_is_degenerate(const LLVector4a& a, const LLVector4a& b, const LLVector4a
bool validate_face(const LLVolumeFace& face)
{
+
+ for (U32 v = 0; v < face.mNumVertices; v++)
+ {
+ if(face.mPositions && !face.mPositions[v].isFinite3())
+ {
+ llwarns << "NaN position data in face found!" << llendl;
+ return false;
+ }
+
+ if(face.mNormals && !face.mNormals[v].isFinite3())
+ {
+ llwarns << "NaN normal data in face found!" << llendl;
+ return false;
+ }
+ }
+
for (U32 i = 0; i < face.mNumIndices; ++i)
{
if (face.mIndices[i] >= face.mNumVertices)
@@ -305,8 +321,10 @@ bool validate_face(const LLVolumeFace& face)
return false;
}
+
/*const LLVector4a scale(0.5f);
+
for (U32 i = 0; i < face.mNumIndices; i+=3)
{
U16 idx1 = face.mIndices[i];
@@ -323,7 +341,6 @@ bool validate_face(const LLVolumeFace& face)
return false;
}
}*/
-
return true;
}
@@ -5921,3 +5938,5 @@ void LLFloaterModelPreview::setPermissonsErrorStatus(S32 status, const std::stri
LLNotificationsUtil::add("MeshUploadPermError");
}
+
+
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 4ebe813be6..1969435ba1 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -337,7 +337,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this));
mCommitCallbackRegistrar.add("Pref.VertexShaderEnable", boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));
mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
- mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
+ mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::refreshUI,this));
mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
@@ -1150,6 +1150,8 @@ void LLFloaterPreference::refreshEnabledState()
//Deferred/SSAO/Shadows
LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
+ LLCheckBoxCtrl* ctrl_deferred2 = getChild<LLCheckBoxCtrl>("UseLightShaders2");
+
BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
((bumpshiny_ctrl && bumpshiny_ctrl->get()) ? TRUE : FALSE) &&
@@ -1159,11 +1161,13 @@ void LLFloaterPreference::refreshEnabledState()
(ctrl_wind_light->get()) ? TRUE : FALSE;
ctrl_deferred->setEnabled(enabled);
-
+ ctrl_deferred2->setEnabled(enabled);
+
LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
LLComboBox* ctrl_shadow = getChild<LLComboBox>("ShadowDetail");
+ // note, okay here to get from ctrl_deferred as it's twin, ctrl_deferred2 will alway match it
enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO") && (ctrl_deferred->get() ? TRUE : FALSE);
ctrl_deferred->set(gSavedSettings.getBOOL("RenderDeferred"));
@@ -1191,6 +1195,7 @@ void LLFloaterPreference::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
LLCheckBoxCtrl* ctrl_avatar_impostors = getChild<LLCheckBoxCtrl>("AvatarImpostors");
LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
+ LLCheckBoxCtrl* ctrl_deferred2 = getChild<LLCheckBoxCtrl>("UseLightShaders2");
LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail");
LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
@@ -1224,6 +1229,8 @@ void LLFloaterPreference::disableUnavailableSettings()
ctrl_deferred->setEnabled(FALSE);
ctrl_deferred->setValue(FALSE);
+ ctrl_deferred2->setEnabled(FALSE);
+ ctrl_deferred2->setValue(FALSE);
}
// disabled windlight
@@ -1244,6 +1251,8 @@ void LLFloaterPreference::disableUnavailableSettings()
ctrl_deferred->setEnabled(FALSE);
ctrl_deferred->setValue(FALSE);
+ ctrl_deferred2->setEnabled(FALSE);
+ ctrl_deferred2->setValue(FALSE);
}
// disabled deferred
@@ -1261,6 +1270,8 @@ void LLFloaterPreference::disableUnavailableSettings()
ctrl_deferred->setEnabled(FALSE);
ctrl_deferred->setValue(FALSE);
+ ctrl_deferred2->setEnabled(FALSE);
+ ctrl_deferred2->setValue(FALSE);
}
// disabled deferred SSAO
@@ -1305,6 +1316,8 @@ void LLFloaterPreference::disableUnavailableSettings()
ctrl_deferred->setEnabled(FALSE);
ctrl_deferred->setValue(FALSE);
+ ctrl_deferred2->setEnabled(FALSE);
+ ctrl_deferred2->setValue(FALSE);
}
// disabled cloth
@@ -1333,6 +1346,7 @@ void LLFloaterPreference::refresh()
updateSliderText(getChild<LLSliderCtrl>("FlexibleMeshDetail", true), getChild<LLTextBox>("FlexibleMeshDetailText", true));
updateSliderText(getChild<LLSliderCtrl>("TreeMeshDetail", true), getChild<LLTextBox>("TreeMeshDetailText", true));
updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail", true), getChild<LLTextBox>("AvatarMeshDetailText", true));
+ updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail2", true), getChild<LLTextBox>("AvatarMeshDetailText2", true));
updateSliderText(getChild<LLSliderCtrl>("AvatarPhysicsDetail", true), getChild<LLTextBox>("AvatarPhysicsDetailText", true));
updateSliderText(getChild<LLSliderCtrl>("TerrainMeshDetail", true), getChild<LLTextBox>("TerrainMeshDetailText", true));
updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess", true), getChild<LLTextBox>("PostProcessText", true));
@@ -1584,16 +1598,9 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
getChildView("chat_font_size")->setEnabled(TRUE);
}
-void LLFloaterPreference::onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name)
+void LLFloaterPreference::refreshUI()
{
- std::string ctrl_name = name.asString();
-
- if ((ctrl_name =="" )|| !hasChild(ctrl_name, TRUE))
- return;
-
- LLTextBox* text_box = getChild<LLTextBox>(name.asString());
- LLSliderCtrl* slider = dynamic_cast<LLSliderCtrl*>(ctrl);
- updateSliderText(slider, text_box);
+ refresh();
}
void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box)
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 22e80a21cb..cb180f6f1e 100755
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -154,8 +154,7 @@ public:
void onChangeQuality(const LLSD& data);
void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box);
- void onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name);
-// void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
+ void refreshUI();
void onCommitParcelMediaAutoPlayEnable();
void onCommitMediaEnabled();
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 14923eec3c..7b25291da7 100755
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -1328,7 +1328,7 @@ void LLFloaterTools::getMediaState()
getChildView("media_tex")->setEnabled(bool_has_media && editable);
getChildView("edit_media")->setEnabled(bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable );
getChildView("delete_media")->setEnabled(bool_has_media && editable );
- getChildView("add_media")->setEnabled(( ! bool_has_media ) && editable );
+ getChildView("add_media")->setEnabled(editable);
// TODO: display a list of all media on the face - use 'identical' flag
}
else // not all face has media but at least one does.
@@ -1358,7 +1358,7 @@ void LLFloaterTools::getMediaState()
getChildView("media_tex")->setEnabled(TRUE);
getChildView("edit_media")->setEnabled(LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo);
getChildView("delete_media")->setEnabled(TRUE);
- getChildView("add_media")->setEnabled(FALSE );
+ getChildView("add_media")->setEnabled(editable);
}
media_info->setText(media_title);
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index ecb0092a6f..189bae46c2 100755
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -109,6 +109,8 @@ public:
static void setGridMode(S32 mode);
+ LLPanelFace* getPanelFace() { return mPanelFace; }
+
private:
void refresh();
void refreshMedia();
diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h
index cfc87e9015..86b5a5e00b 100755
--- a/indra/newview/llfloaterwebcontent.h
+++ b/indra/newview/llfloaterwebcontent.h
@@ -43,6 +43,7 @@ class LLFloaterWebContent :
public LLInstanceTracker<LLFloaterWebContent, std::string>
{
public:
+
typedef LLInstanceTracker<LLFloaterWebContent, std::string> instance_tracker_t;
LOG_CLASS(LLFloaterWebContent);
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index c667492427..4bf4f6edfc 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2678,7 +2678,8 @@ void LLIMMgr::addMessage(
name_is_setted = true;
}
bool skip_message = false;
- if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))
+ bool from_linden = LLMuteList::getInstance()->isLinden(from);
+ if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden)
{
// Evaluate if we need to skip this message when that setting is true (default is false)
skip_message = (LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL); // Skip non friends...
@@ -2724,7 +2725,7 @@ void LLIMMgr::addMessage(
// Logically it would make more sense to reject the session sooner, in another area of the
// code, but the session has to be established inside the server before it can be left.
- if (LLMuteList::getInstance()->isMuted(other_participant_id) && !LLMuteList::getInstance()->isLinden(from))
+ if (LLMuteList::getInstance()->isMuted(other_participant_id) && !from_linden)
{
llwarns << "Leaving IM session from initiating muted resident " << from << llendl;
if(!gIMMgr->leaveSession(new_session_id))
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index b62db70ec8..06bf294417 100755
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -1681,7 +1681,8 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
gGL.getModelviewMatrix().inverse().mult_vec_matrix(plane);
- gClipProgram.uniform4fv("clip_plane", 1, plane.v);
+ static LLStaticHashedString sClipPlane("clip_plane");
+ gClipProgram.uniform4fv(sClipPlane, 1, plane.v);
BOOL particles = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES);
BOOL clouds = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
diff --git a/indra/newview/llmaterialmgr.cpp b/indra/newview/llmaterialmgr.cpp
index 16871adc4d..14d3d4e7a8 100644
--- a/indra/newview/llmaterialmgr.cpp
+++ b/indra/newview/llmaterialmgr.cpp
@@ -50,6 +50,7 @@
#define MATERIALS_CAP_MATERIAL_FIELD "Material"
#define MATERIALS_CAP_OBJECT_ID_FIELD "ID"
#define MATERIALS_CAP_MATERIAL_ID_FIELD "MaterialID"
+#define SIM_FEATURE_MAX_MATERIALS_PER_TRANSACTION "MaxMaterialsPerTransaction"
#define MATERIALS_GET_MAX_ENTRIES 50
#define MATERIALS_GET_TIMEOUT (60.f * 20)
@@ -544,11 +545,9 @@ void LLMaterialMgr::onIdle(void*)
instancep->processGetAllQueue();
}
- static LLFrameTimer mPutTimer;
- if ( (!instancep->mPutQueue.empty()) && (mPutTimer.hasExpired()) )
+ if (!instancep->mPutQueue.empty())
{
instancep->processPutQueue();
- mPutTimer.resetWithExpiry(MATERIALS_PUT_THROTTLE_SECS);
}
}
@@ -565,14 +564,14 @@ void LLMaterialMgr::processGetQueue()
continue;
}
- const LLViewerRegion* regionp = LLWorld::instance().getRegionFromID(region_id);
+ LLViewerRegion* regionp = LLWorld::instance().getRegionFromID(region_id);
if (!regionp)
{
LL_WARNS("Materials") << "Unknown region with id " << region_id.asString() << LL_ENDL;
mGetQueue.erase(itRegionQueue);
continue;
}
- else if (!regionp->capabilitiesReceived())
+ else if (!regionp->capabilitiesReceived() || regionp->materialsCapThrottled())
{
continue;
}
@@ -595,8 +594,9 @@ void LLMaterialMgr::processGetQueue()
LLSD materialsData = LLSD::emptyArray();
material_queue_t& materials = itRegionQueue->second;
+ U32 max_entries = regionp->getMaxMaterialsPerTransaction();
material_queue_t::iterator loopMaterial = materials.begin();
- while ( (materials.end() != loopMaterial) && (materialsData.size() <= MATERIALS_GET_MAX_ENTRIES) )
+ while ( (materials.end() != loopMaterial) && (materialsData.size() < max_entries) )
{
material_queue_t::iterator itMaterial = loopMaterial++;
materialsData.append((*itMaterial).asLLSD());
@@ -628,6 +628,7 @@ void LLMaterialMgr::processGetQueue()
LL_DEBUGS("Materials") << "POSTing to region '" << regionp->getName() << "' at '"<< capURL << " for " << materialsData.size() << " materials."
<< "\ndata: " << ll_pretty_print_sd(materialsData) << LL_ENDL;
LLHTTPClient::post(capURL, postData, materialsResponder);
+ regionp->resetMaterialsCapThrottle();
}
}
@@ -646,7 +647,7 @@ void LLMaterialMgr::processGetAllQueue()
clearGetQueues(region_id); // Invalidates region_id
continue;
}
- else if (!regionp->capabilitiesReceived())
+ else if (!regionp->capabilitiesReceived() || regionp->materialsCapThrottled())
{
continue;
}
@@ -663,6 +664,7 @@ void LLMaterialMgr::processGetAllQueue()
LL_DEBUGS("Materials") << "GET all for region " << region_id << "url " << capURL << LL_ENDL;
LLHTTPClient::ResponderPtr materialsResponder = new LLMaterialsResponder("GET", capURL, boost::bind(&LLMaterialMgr::onGetAllResponse, this, _1, _2, *itRegion));
LLHTTPClient::get(capURL, materialsResponder);
+ regionp->resetMaterialsCapThrottle();
mGetAllPending.insert(std::pair<LLUUID, F64>(region_id, LLFrameTimer::getTotalSeconds()));
mGetAllQueue.erase(itRegion); // Invalidates region_id
}
@@ -670,7 +672,7 @@ void LLMaterialMgr::processGetAllQueue()
void LLMaterialMgr::processPutQueue()
{
- typedef std::map<const LLViewerRegion*, LLSD> regionput_request_map;
+ typedef std::map<LLViewerRegion*, LLSD> regionput_request_map;
regionput_request_map requests;
put_queue_t::iterator loopQueue = mPutQueue.begin();
@@ -680,25 +682,27 @@ void LLMaterialMgr::processPutQueue()
const LLUUID& object_id = itQueue->first;
const LLViewerObject* objectp = gObjectList.findObject(object_id);
- if ( (!objectp) || (!objectp->getRegion()) )
+ if ( !objectp )
{
- LL_WARNS("Materials") << "Object or object region is NULL" << LL_ENDL;
-
+ LL_WARNS("Materials") << "Object is NULL" << LL_ENDL;
mPutQueue.erase(itQueue);
- continue;
}
-
- const LLViewerRegion* regionp = objectp->getRegion();
- if (!regionp->capabilitiesReceived())
+ else
{
- continue;
+ LLViewerRegion* regionp = objectp->getRegion();
+ if ( !regionp )
+ {
+ LL_WARNS("Materials") << "Object region is NULL" << LL_ENDL;
+ mPutQueue.erase(itQueue);
}
-
+ else if ( regionp->capabilitiesReceived() && !regionp->materialsCapThrottled())
+ {
LLSD& facesData = requests[regionp];
facematerial_map_t& face_map = itQueue->second;
+ U32 max_entries = regionp->getMaxMaterialsPerTransaction();
facematerial_map_t::iterator itFace = face_map.begin();
- while ( (face_map.end() != itFace) && (facesData.size() < MATERIALS_GET_MAX_ENTRIES) )
+ while ( (face_map.end() != itFace) && (facesData.size() < max_entries) )
{
LLSD faceData = LLSD::emptyMap();
faceData[MATERIALS_CAP_FACE_FIELD] = static_cast<LLSD::Integer>(itFace->first);
@@ -715,14 +719,17 @@ void LLMaterialMgr::processPutQueue()
mPutQueue.erase(itQueue);
}
}
+ }
+ }
for (regionput_request_map::const_iterator itRequest = requests.begin(); itRequest != requests.end(); ++itRequest)
{
- std::string capURL = itRequest->first->getCapability(MATERIALS_CAPABILITY_NAME);
+ LLViewerRegion* regionp = itRequest->first;
+ std::string capURL = regionp->getCapability(MATERIALS_CAPABILITY_NAME);
if (capURL.empty())
{
LL_WARNS("Materials") << "Capability '" << MATERIALS_CAPABILITY_NAME
- << "' is not defined on region '" << itRequest->first->getName() << "'" << LL_ENDL;
+ << "' is not defined on region '" << regionp->getName() << "'" << LL_ENDL;
continue;
}
@@ -745,6 +752,7 @@ void LLMaterialMgr::processPutQueue()
LL_DEBUGS("Materials") << "put for " << itRequest->second.size() << " faces to region " << itRequest->first->getName() << LL_ENDL;
LLHTTPClient::ResponderPtr materialsResponder = new LLMaterialsResponder("PUT", capURL, boost::bind(&LLMaterialMgr::onPutResponse, this, _1, _2));
LLHTTPClient::put(capURL, putData, materialsResponder);
+ regionp->resetMaterialsCapThrottle();
}
else
{
@@ -773,7 +781,6 @@ void LLMaterialMgr::clearGetQueues(const LLUUID& region_id)
mGetAllPending.erase(region_id);
mGetAllCallbacks.erase(region_id);
}
-
void LLMaterialMgr::onRegionRemoved(LLViewerRegion* regionp)
{
clearGetQueues(regionp->getRegionID());
diff --git a/indra/newview/llmaterialmgr.h b/indra/newview/llmaterialmgr.h
index e317a791ad..e83f1f4e01 100644
--- a/indra/newview/llmaterialmgr.h
+++ b/indra/newview/llmaterialmgr.h
@@ -124,6 +124,8 @@ protected:
put_queue_t mPutQueue;
material_map_t mMaterials;
+
+ U32 getMaxEntries(const LLViewerRegion* regionp);
};
#endif // LL_LLMATERIALMGR_H
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 7f2a5e1642..6c38c1fb56 100755
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -46,6 +46,7 @@ class LLMediaCtrl :
{
LOG_CLASS(LLMediaCtrl);
public:
+
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
Optional<std::string> start_url;
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 6bdc99ad5e..ff4d96eb54 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -290,7 +290,14 @@ public:
~LLMeshSkinInfoResponder()
{
- llassert(mProcessed);
+ if (!LLApp::isQuitting() &&
+ !mProcessed &&
+ mMeshID.notNull())
+ { // Something went wrong, retry
+ llwarns << "Timeout or service unavailable, retrying loadMeshSkinInfo() for " << mMeshID << llendl;
+ LLMeshRepository::sHTTPRetryCount++;
+ gMeshRepo.mThread->loadMeshSkinInfo(mMeshID);
+ }
}
virtual void completedRaw(const LLChannelDescriptors& channels,
@@ -315,7 +322,14 @@ public:
~LLMeshDecompositionResponder()
{
- llassert(mProcessed);
+ if (!LLApp::isQuitting() &&
+ !mProcessed &&
+ mMeshID.notNull())
+ { // Something went wrong, retry
+ llwarns << "Timeout or service unavailable, retrying loadMeshDecomposition() for " << mMeshID << llendl;
+ LLMeshRepository::sHTTPRetryCount++;
+ gMeshRepo.mThread->loadMeshDecomposition(mMeshID);
+ }
}
virtual void completedRaw(const LLChannelDescriptors& channels,
@@ -340,7 +354,14 @@ public:
~LLMeshPhysicsShapeResponder()
{
- llassert(mProcessed);
+ if (!LLApp::isQuitting() &&
+ !mProcessed &&
+ mMeshID.notNull())
+ { // Something went wrong, retry
+ llwarns << "Timeout or service unavailable, retrying loadMeshPhysicsShape() for " << mMeshID << llendl;
+ LLMeshRepository::sHTTPRetryCount++;
+ gMeshRepo.mThread->loadMeshPhysicsShape(mMeshID);
+ }
}
virtual void completedRaw(const LLChannelDescriptors& channels,
@@ -590,7 +611,7 @@ void LLMeshRepoThread::run()
if (!fetchMeshLOD(req.mMeshParams, req.mLOD, count))//failed, resubmit
{
mMutex->lock();
- mLODReqQ.push(req) ;
+ mLODReqQ.push(req);
mMutex->unlock();
}
}
@@ -1202,8 +1223,7 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
LLMutexLock lock(mHeaderMutex);
mMeshHeaderSize[mesh_id] = header_size;
mMeshHeader[mesh_id] = header;
- }
-
+ }
LLMutexLock lock(mMutex); // make sure only one thread access mPendingLOD at the same time.
@@ -1989,14 +2009,14 @@ void LLMeshSkinInfoResponder::completedRaw(const LLChannelDescriptors& channels,
{
if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)
{ //timeout or service unavailable, try again
- llwarns << "Timeout or service unavailable, retrying." << llendl;
+ llwarns << "Timeout or service unavailable, retrying loadMeshSkinInfo() for " << mMeshID << llendl;
LLMeshRepository::sHTTPRetryCount++;
gMeshRepo.mThread->loadMeshSkinInfo(mMeshID);
}
else
{
- llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint
llwarns << "Unhandled status " << dumpResponse() << llendl;
+ llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint
}
return;
}
@@ -2053,14 +2073,14 @@ void LLMeshDecompositionResponder::completedRaw(const LLChannelDescriptors& chan
{
if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)
{ //timeout or service unavailable, try again
- llwarns << "Timeout or service unavailable, retrying." << llendl;
+ llwarns << "Timeout or service unavailable, retrying loadMeshDecomposition() for " << mMeshID << llendl;
LLMeshRepository::sHTTPRetryCount++;
gMeshRepo.mThread->loadMeshDecomposition(mMeshID);
}
else
{
- llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint
llwarns << "Unhandled status " << dumpResponse() << llendl;
+ llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint
}
return;
}
@@ -2118,14 +2138,14 @@ void LLMeshPhysicsShapeResponder::completedRaw(const LLChannelDescriptors& chann
{
if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)
{ //timeout or service unavailable, try again
- llwarns << "Timeout or service unavailable, retrying." << llendl;
+ llwarns << "Timeout or service unavailable, retrying loadMeshPhysicsShape() for " << mMeshID << llendl;
LLMeshRepository::sHTTPRetryCount++;
gMeshRepo.mThread->loadMeshPhysicsShape(mMeshID);
}
else
{
- llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint
llwarns << "Unhandled status " << dumpResponse() << llendl;
+ llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint
}
return;
}
@@ -2178,16 +2198,14 @@ void LLMeshHeaderResponder::completedRaw(const LLChannelDescriptors& channels,
// << "Header responder failed with status: "
// << status << ": " << reason << llendl;
- // 503 (service unavailable) or 499 (timeout)
+ // 503 (service unavailable) or 499 (internal Linden-generated error)
// can be due to server load and can be retried
// TODO*: Add maximum retry logic, exponential backoff
// and (somewhat more optional than the others) retries
// again after some set period of time
- llassert(status == HTTP_SERVICE_UNAVAILABLE || status == HTTP_INTERNAL_ERROR);
-
- if (status == HTTP_SERVICE_UNAVAILABLE || status == HTTP_INTERNAL_ERROR)
+ if (status == HTTP_SERVICE_UNAVAILABLE || status == HTTP_REQUEST_TIME_OUT || status == HTTP_INTERNAL_ERROR)
{ //retry
llwarns << "Timeout or service unavailable, retrying." << llendl;
LLMeshRepository::sHTTPRetryCount++;
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index 5aa1e1c458..92e82b672d 100755
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -67,6 +67,7 @@ class LLNameListCtrl
: public LLScrollListCtrl, public LLInstanceTracker<LLNameListCtrl>
{
public:
+
typedef enum e_name_type
{
INDIVIDUAL,
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index eb4601a469..ef4d735616 100755
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -125,24 +125,29 @@ void log_name_callback(const std::string& full_name, const std::string& from_nam
// static
void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_file_only)
{
- LLUUID from_id = notification->getPayload()["from_id"];
+ if (!gCacheName)
+ {
+ return;
+ }
- if (from_id.isNull())
- {
- // Normal behavior for system generated messages, don't spam.
- // llwarns << " from_id for notification " << notification->getName() << " is null " << llendl;
- return;
- }
+ LLUUID from_id = notification->getPayload()["from_id"];
- if(to_file_only)
- {
- gCacheName->get(from_id, false, boost::bind(&log_name_callback, _2, "", notification->getMessage(), LLUUID()));
- }
- else
- {
- gCacheName->get(from_id, false, boost::bind(&log_name_callback, _2, INTERACTIVE_SYSTEM_FROM, notification->getMessage(), from_id));
- }
+ if (from_id.isNull())
+ {
+ // Normal behavior for system generated messages, don't spam.
+ // llwarns << " from_id for notification " << notification->getName() << " is null " << llendl;
+ return;
+ }
+
+ if(to_file_only)
+ {
+ gCacheName->get(from_id, false, boost::bind(&log_name_callback, _2, "", notification->getMessage(), LLUUID()));
}
+ else
+ {
+ gCacheName->get(from_id, false, boost::bind(&log_name_callback, _2, INTERACTIVE_SYSTEM_FROM, notification->getMessage(), from_id));
+ }
+}
// static
void LLHandlerUtil::logGroupNoticeToIMGroup(
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 911af9df04..3869219da6 100755
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -66,7 +66,7 @@
#include "llvovolume.h"
#include "lluictrlfactory.h"
#include "llpluginclassmedia.h"
-#include "llviewertexturelist.h"
+#include "llviewertexturelist.h"// Update sel manager as to which channel we're editing so it can reflect the correct overlay UI
//
// Constant definitions for comboboxes
@@ -89,6 +89,19 @@ const S32 SHINY_TEXTURE = 4; // use supplied specular map
//
std::string USE_TEXTURE;
+LLRender::eTexIndex LLPanelFace::getTextureChannelToEdit()
+{
+ LLComboBox* combobox_matmedia = getChild<LLComboBox>("combobox matmedia");
+ LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
+
+ LLRender::eTexIndex channel_to_edit = (combobox_matmedia && combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ?
+ (combobox_mattype ? (LLRender::eTexIndex)combobox_mattype->getCurrentIndex() : LLRender::DIFFUSE_MAP) : LLRender::DIFFUSE_MAP;
+
+ channel_to_edit = (channel_to_edit == LLRender::NORMAL_MAP) ? (getCurrentNormalMap().isNull() ? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit;
+ channel_to_edit = (channel_to_edit == LLRender::SPECULAR_MAP) ? (getCurrentSpecularMap().isNull() ? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit;
+ return channel_to_edit;
+}
+
// Things the UI provides...
//
LLUUID LLPanelFace::getCurrentNormalMap() { return getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID(); }
@@ -1194,7 +1207,8 @@ void LLPanelFace::updateUI()
getChildView("checkbox fullbright")->setEnabled(editable);
getChild<LLUICtrl>("checkbox fullbright")->setTentative(!identical_fullbright);
}
-
+
+
// Repeats per meter
{
F32 repeats_diff = 1.f;
@@ -1218,6 +1232,9 @@ void LLPanelFace::updateUI()
F32 repeats = 1.0f;
U32 material_type = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? combobox_mattype->getCurrentIndex() : MATTYPE_DIFFUSE;
+
+ LLSelectMgr::getInstance()->setTextureChannel(LLRender::eTexIndex(material_type));
+
switch (material_type)
{
default:
@@ -1328,18 +1345,6 @@ void LLPanelFace::updateUI()
getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE);
}
- // Update sel manager as to which channel we're editing so it can reflect the correct overlay UI
- // NORSPEC-103
- LLRender::eTexIndex channel_to_edit = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? (LLRender::eTexIndex)combobox_mattype->getCurrentIndex() : LLRender::DIFFUSE_MAP;
-
- if ( ((channel_to_edit == LLRender::NORMAL_MAP) && material->getNormalID().isNull())
- ||((channel_to_edit == LLRender::SPECULAR_MAP) && material->getSpecularID().isNull()))
- {
- channel_to_edit = LLRender::DIFFUSE_MAP;
- }
-
- LLSelectMgr::getInstance()->setTextureChannel(channel_to_edit);
-
// Bumpy (normal)
texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
texture_ctrl->setImageAssetID(material->getNormalID());
@@ -1365,10 +1370,6 @@ void LLPanelFace::updateUI()
updateBumpyControls(!material->getNormalID().isNull(), true);
}
}
- else
- {
- LLSelectMgr::getInstance()->setTextureChannel(LLRender::DIFFUSE_MAP);
- }
}
// Set variable values for numeric expressions
diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h
index 42c1f6bd48..b684881225 100755
--- a/indra/newview/llpanelface.h
+++ b/indra/newview/llpanelface.h
@@ -100,6 +100,19 @@ public:
void setMediaURL(const std::string& url);
void setMediaType(const std::string& mime_type);
+ LLMaterialPtr createDefaultMaterial(LLMaterialPtr current_material)
+ {
+ LLMaterialPtr new_material(!current_material.isNull() ? new LLMaterial(current_material->asLLSD()) : new LLMaterial());
+ llassert_always(new_material);
+
+ // Preserve old diffuse alpha mode or assert correct default blend mode as appropriate for the alpha channel content of the diffuse texture
+ //
+ new_material->setDiffuseAlphaMode(current_material.isNull() ? (isAlpha() ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE) : current_material->getDiffuseAlphaMode());
+ return new_material;
+ }
+
+ LLRender::eTexIndex getTextureChannelToEdit();
+
protected:
void getState();
@@ -178,6 +191,8 @@ protected:
static F32 valueGlow(LLViewerObject* object, S32 face);
+
+
private:
bool isAlpha() { return mIsAlpha; }
@@ -234,17 +249,32 @@ private:
{
if (_edit)
{
- LLMaterialPtr new_material(!current_material.isNull() ? new LLMaterial(current_material->asLLSD()) : new LLMaterial());
+ LLMaterialPtr new_material = _panel->createDefaultMaterial(current_material);
llassert_always(new_material);
// Determine correct alpha mode for current diffuse texture
// (i.e. does it have an alpha channel that makes alpha mode useful)
//
- U8 default_alpha_mode = (_panel->isAlpha() ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
+ // _panel->isAlpha() "lies" when one face has alpha and the rest do not (NORSPEC-329)
+ // need to get per-face answer to this question for sane alpha mode retention on updates.
+ //
+ bool is_alpha_face = object->isImageAlphaBlended(face);
- // Default to matching expected state of UI
+ // need to keep this original answer for valid comparisons in logic below
//
- new_material->setDiffuseAlphaMode(current_material.isNull() ? default_alpha_mode : current_material->getDiffuseAlphaMode());
+ U8 original_default_alpha_mode = is_alpha_face ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+
+ U8 default_alpha_mode = original_default_alpha_mode;
+
+ if (!current_material.isNull())
+ {
+ default_alpha_mode = current_material->getDiffuseAlphaMode();
+ }
+
+ // Insure we don't inherit the default of blend by accident...
+ // this will be stomped by a legit request to change the alpha mode by the apply() below
+ //
+ new_material->setDiffuseAlphaMode(default_alpha_mode);
// Do "It"!
//
@@ -254,7 +284,13 @@ private:
LLUUID new_normal_map_id = new_material->getNormalID();
LLUUID new_spec_map_id = new_material->getSpecularID();
- bool is_default_blend_mode = (new_alpha_mode == default_alpha_mode);
+ if ((new_alpha_mode == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND) && !is_alpha_face)
+ {
+ new_alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+ new_material->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
+ }
+
+ bool is_default_blend_mode = (new_alpha_mode == original_default_alpha_mode);
bool is_need_material = !is_default_blend_mode || !new_normal_map_id.isNull() || !new_spec_map_id.isNull();
if (!is_need_material)
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index 02d363d795..a1d60b5b16 100755
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -710,9 +710,19 @@ void LLPanelVolume::onLightCancelColor(const LLSD& data)
void LLPanelVolume::onLightCancelTexture(const LLSD& data)
{
LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control");
+
if (LightTextureCtrl)
{
- LightTextureCtrl->setImageAssetID(mLightSavedTexture);
+ LightTextureCtrl->setImageAssetID(LLUUID::null);
+ }
+
+ LLVOVolume *volobjp = (LLVOVolume *) mObject.get();
+ if(volobjp)
+ {
+ // Cancel the light texture as requested
+ // NORSPEC-292
+ //
+ volobjp->setLightTextureID(LLUUID::null);
}
}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 0cbdbe16a3..7b397d46f3 100755
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -91,7 +91,7 @@
#include "llvovolume.h"
#include "pipeline.h"
#include "llviewershadermgr.h"
-
+#include "llpanelface.h"
#include "llglheaders.h"
LLViewerObject* getSelectedParentObject(LLViewerObject *object) ;
@@ -2534,7 +2534,7 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)
if (tep && !tep->getMaterialParams().isNull())
{
LLMaterialPtr orig = tep->getMaterialParams();
- LLMaterialPtr p = new LLMaterial(orig->asLLSD());
+ LLMaterialPtr p = gFloaterTools->getPanelFace()->createDefaultMaterial(orig);
p->setNormalRepeat(normal_scale_s, normal_scale_t);
p->setSpecularRepeat(specular_scale_s, specular_scale_t);
@@ -2560,8 +2560,8 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)
if (tep && !tep->getMaterialParams().isNull())
{
LLMaterialPtr orig = tep->getMaterialParams();
+ LLMaterialPtr p = gFloaterTools->getPanelFace()->createDefaultMaterial(orig);
- LLMaterialPtr p = new LLMaterial(orig->asLLSD());
p->setNormalRepeat(normal_scale_s, normal_scale_t);
p->setSpecularRepeat(specular_scale_s, specular_scale_t);
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 9e97790df8..d7ae897604 100755
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -1404,7 +1404,9 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node)
if (bridge->mAvatar.notNull())
{
bridge->mAvatar->mAttachmentGeometryBytes -= mGeometryBytes;
+ bridge->mAvatar->mAttachmentGeometryBytes = llmax(bridge->mAvatar->mAttachmentGeometryBytes, 0);
bridge->mAvatar->mAttachmentSurfaceArea -= mSurfaceArea;
+ bridge->mAvatar->mAttachmentSurfaceArea = llmax(bridge->mAvatar->mAttachmentSurfaceArea, 0.f);
}
}
@@ -2240,6 +2242,18 @@ void drawBox(const LLVector4a& c, const LLVector4a& r)
void drawBoxOutline(const LLVector3& pos, const LLVector3& size)
{
+
+ llassert(pos.isFinite());
+ llassert(size.isFinite());
+
+ llassert(!llisnan(pos.mV[0]));
+ llassert(!llisnan(pos.mV[1]));
+ llassert(!llisnan(pos.mV[2]));
+
+ llassert(!llisnan(size.mV[0]));
+ llassert(!llisnan(size.mV[1]));
+ llassert(!llisnan(size.mV[2]));
+
LLVector3 v1 = size.scaledVec(LLVector3( 1, 1,1));
LLVector3 v2 = size.scaledVec(LLVector3(-1, 1,1));
LLVector3 v3 = size.scaledVec(LLVector3(-1,-1,1));
@@ -3064,20 +3078,23 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE)
const LLVector4a* ext;
LLVector4a pos, size;
- //render face bounding boxes
- for (S32 i = 0; i < drawable->getNumFaces(); i++)
+ if (drawable->getVOVolume())
{
- LLFace* facep = drawable->getFace(i);
- if (facep)
+ //render face bounding boxes
+ for (S32 i = 0; i < drawable->getNumFaces(); i++)
{
- ext = facep->mExtents;
+ LLFace* facep = drawable->getFace(i);
+ if (facep)
+ {
+ ext = facep->mExtents;
- pos.setAdd(ext[0], ext[1]);
- pos.mul(0.5f);
- size.setSub(ext[1], ext[0]);
- size.mul(0.5f);
+ pos.setAdd(ext[0], ext[1]);
+ pos.mul(0.5f);
+ size.setSub(ext[1], ext[0]);
+ size.mul(0.5f);
- drawBoxOutline(pos,size);
+ drawBoxOutline(pos,size);
+ }
}
}
@@ -4195,6 +4212,10 @@ public:
if (!group->isEmpty())
{
gGL.diffuseColor3f(0,0,1);
+
+ llassert(group->mObjectBounds[0].isFinite3());
+ llassert(group->mObjectBounds[1].isFinite3());
+
drawBoxOutline(group->mObjectBounds[0],
group->mObjectBounds[1]);
}
@@ -4824,6 +4845,9 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,
mMaterial(NULL),
mShaderMask(0),
mSpecColor(1.0f, 1.0f, 1.0f, 0.5f),
+ mBlendFuncSrc(LLRender::BF_SOURCE_ALPHA),
+ mBlendFuncDst(LLRender::BF_ONE_MINUS_SOURCE_ALPHA),
+ mHasGlow(FALSE),
mEnvIntensity(0.0f),
mAlphaMaskCutoff(0.5f),
mDiffuseAlphaMode(0)
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 9732be90af..f26defd5e1 100755
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -70,12 +70,12 @@ protected:
public:
void* operator new(size_t size)
{
- return ll_aligned_malloc_16(size);
+ return ll_aligned_malloc(size,64);
}
void operator delete(void* ptr)
{
- ll_aligned_free_16(ptr);
+ ll_aligned_free(ptr);
}
@@ -123,6 +123,9 @@ public:
LLMaterialPtr mMaterial; // If this is null, the following parameters are unused.
LLMaterialID mMaterialID;
U32 mShaderMask;
+ U32 mBlendFuncSrc;
+ U32 mBlendFuncDst;
+ BOOL mHasGlow;
LLPointer<LLViewerTexture> mSpecularMap;
const LLMatrix4* mSpecularMapMatrix;
LLPointer<LLViewerTexture> mNormalMap;
@@ -752,7 +755,7 @@ class LLVolumeGeometryManager: public LLGeometryManager
virtual void rebuildGeom(LLSpatialGroup* group);
virtual void rebuildMesh(LLSpatialGroup* group);
virtual void getGeometry(LLSpatialGroup* group);
- void genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort = FALSE, BOOL batch_textures = FALSE, BOOL no_materials = FALSE);
+ void genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace** faces, U32 face_count, BOOL distance_sort = FALSE, BOOL batch_textures = FALSE, BOOL no_materials = FALSE);
void registerFace(LLSpatialGroup* group, LLFace* facep, U32 type);
};
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 4676f7b251..4300cafb6b 100755
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -133,6 +133,7 @@ public:
PermissionMask getFilterPermMask();
void updateFilterPermMask();
void commitIfImmediateSet();
+ void commitCancel();
void onFilterEdit(const std::string& search_string );
@@ -706,6 +707,14 @@ void LLFloaterTexturePicker::commitIfImmediateSet()
}
}
+void LLFloaterTexturePicker::commitCancel()
+{
+ if (!mNoCopyTextureSelected && mOwner && mCanApply)
+ {
+ mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_CANCEL);
+ }
+}
+
// static
void LLFloaterTexturePicker::onBtnSetToDefault(void* userdata)
{
@@ -733,7 +742,7 @@ void LLFloaterTexturePicker::onBtnNone(void* userdata)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
self->setImageID( LLUUID::null );
- self->commitIfImmediateSet();
+ self->commitCancel();
}
/*
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 9dfb29b905..d876c9a3f4 100755
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -173,8 +173,20 @@ void LLToast::setHideButtonEnabled(bool enabled)
//--------------------------------------------------------------------------
LLToast::~LLToast()
-{
- mOnToastDestroyedSignal(this);
+{
+ if(LLApp::isQuitting())
+ {
+ mOnFadeSignal.disconnect_all_slots();
+ mOnDeleteToastSignal.disconnect_all_slots();
+ mOnToastDestroyedSignal.disconnect_all_slots();
+ mOnToastHoverSignal.disconnect_all_slots();
+ mToastMouseEnterSignal.disconnect_all_slots();
+ mToastMouseLeaveSignal.disconnect_all_slots();
+ }
+ else
+ {
+ mOnToastDestroyedSignal(this);
+ }
}
//--------------------------------------------------------------------------
@@ -572,10 +584,34 @@ S32 LLToast::notifyParent(const LLSD& info)
//static
void LLToast::updateClass()
{
- for (LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances(); iter != LLInstanceTracker<LLToast>::endInstances(); )
+ for (LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances();
+ iter != LLInstanceTracker<LLToast>::endInstances(); )
{
LLToast& toast = *iter++;
toast.updateHoveredState();
}
}
+
+// static
+void LLToast::cleanupToasts()
+{
+ LLToast * toastp = NULL;
+
+ while (LLInstanceTracker<LLToast>::instanceCount() > 0)
+ {
+ { // Need to scope iter to allow deletion
+ LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances();
+ toastp = &(*iter);
+ }
+
+ //llinfos << "Cleaning up toast id " << toastp->getNotificationID() << llendl;
+
+ // LLToast destructor will remove it from the LLInstanceTracker.
+ if (!toastp)
+ break; // Don't get stuck in the loop if a null pointer somehow got on the list
+
+ delete toastp;
+ }
+}
+
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index ea62f758f8..f02d7c2a1a 100755
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -73,6 +73,7 @@ class LLToast : public LLModalDialog, public LLInstanceTracker<LLToast>
{
friend class LLToastLifeTimer;
public:
+
typedef boost::function<void (LLToast* toast)> toast_callback_t;
typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t;
typedef boost::signals2::signal<void (LLToast* toast, bool mouse_enter)> toast_hover_check_signal_t;
@@ -105,6 +106,7 @@ public:
};
static void updateClass();
+ static void cleanupToasts();
LLToast(const LLToast::Params& p);
virtual ~LLToast();
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 8bfde2bcf1..94d07b37ef 100755
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -60,7 +60,7 @@ LLToastNotifyPanel::LLToastNotifyPanel(const LLNotificationPtr& notification, co
LLInstanceTracker<LLToastNotifyPanel, LLUUID>(notification->getID())
{
init(rect, show_images);
- }
+}
void LLToastNotifyPanel::addDefaultButton()
{
LLSD form_element;
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index e085834326..ef7d0cd81b 100755
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -58,6 +58,7 @@
#include "llviewerwindow.h"
#include "llvoavatarself.h"
#include "llworld.h"
+#include "llpanelface.h"
// syntactic sugar
#define callMemberFunction(object,ptrToMember) ((object).*(ptrToMember))
@@ -1163,7 +1164,51 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj,
// update viewer side image in anticipation of update from simulator
LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(asset_id);
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT );
- hit_obj->setTEImage(hit_face, image);
+
+ LLTextureEntry* tep = hit_obj ? (hit_obj->getTE(hit_face)) : NULL;
+
+ LLPanelFace* panel_face = gFloaterTools->getPanelFace();
+
+ if (gFloaterTools->getVisible() && panel_face)
+ {
+ switch (LLSelectMgr::getInstance()->getTextureChannel())
+ {
+
+ case 0:
+ default:
+ {
+ hit_obj->setTEImage(hit_face, image);
+ }
+ break;
+
+ case 1:
+ {
+ LLMaterialPtr old_mat = tep->getMaterialParams();
+ LLMaterialPtr new_mat = panel_face->createDefaultMaterial(old_mat);
+ new_mat->setNormalID(asset_id);
+ tep->setMaterialParams(new_mat);
+ hit_obj->setTENormalMap(hit_face, asset_id);
+ LLMaterialMgr::getInstance()->put(hit_obj->getID(), hit_face, *new_mat);
+ }
+ break;
+
+ case 2:
+ {
+ LLMaterialPtr old_mat = tep->getMaterialParams();
+ LLMaterialPtr new_mat = panel_face->createDefaultMaterial(old_mat);
+ new_mat->setSpecularID(asset_id);
+ tep->setMaterialParams(new_mat);
+ hit_obj->setTESpecularMap(hit_face, asset_id);
+ LLMaterialMgr::getInstance()->put(hit_obj->getID(), hit_face, *new_mat);
+ }
+ break;
+ }
+ }
+ else
+ {
+ hit_obj->setTEImage(hit_face, image);
+ }
+
dialog_refresh_all();
// send the update to the simulator
diff --git a/indra/newview/lltoolselect.h b/indra/newview/lltoolselect.h
index baa27f6071..74dababe8c 100755
--- a/indra/newview/lltoolselect.h
+++ b/indra/newview/lltoolselect.h
@@ -34,7 +34,7 @@
class LLObjectSelection;
-class LLToolSelect : public LLTool, public LLSingleton<LLToolSelect>
+class LLToolSelect : public LLTool
{
public:
LLToolSelect( LLToolComposite* composite );
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index f90b35a7bd..bbebeea3e0 100755
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -890,7 +890,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
{
gGL.setColorMask(true, true);
- if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sRenderDeferred)
{
gPipeline.mDeferredScreen.bindTarget();
glClearColor(1,0,1,1);
@@ -939,7 +939,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gGL.setColorMask(true, false);
- if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sRenderDeferred)
{
gPipeline.renderGeomDeferred(*LLViewerCamera::getInstance());
}
@@ -976,7 +976,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (to_texture)
{
- if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sRenderDeferred)
{
gPipeline.mDeferredScreen.flush();
if(LLRenderTarget::sUseFBO)
@@ -1002,7 +1002,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
}
}
- if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sRenderDeferred)
{
gPipeline.renderDeferredLighting();
}
@@ -1623,3 +1623,4 @@ void display_cleanup()
{
gDisconnectedImagep = NULL;
}
+
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index 4e028d2163..4e028d2163 100755..100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index 47a8a04b63..2fbb3bf868 100755
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -534,6 +534,11 @@ void stop_moving( EKeystate s )
void start_chat( EKeystate s )
{
+ if (LLAppViewer::instance()->quitRequested())
+ {
+ return; // can't talk, gotta go, kthxbye!
+ }
+
// start chat
LLFloaterIMNearbyChat::startChat(NULL);
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index e1faf3b29b..dc8a27c5c8 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1073,8 +1073,6 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t
U32 info_display = info_display_from_string( userdata.asString() );
bool new_value = false;
- LL_INFOS("ViewerMenu") << "check " << userdata.asString() << LL_ENDL;
-
if ( info_display != 0 )
{
new_value = LLPipeline::toggleRenderDebugControl( (void*)info_display );
@@ -2930,6 +2928,67 @@ bool enable_object_unmute()
}
}
+
+// 0 = normal, 1 = always, 2 = never
+class LLAvatarCheckImpostorMode : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ if (!object) return false;
+
+ LLVOAvatar* avatar = find_avatar_from_object(object);
+ if (!avatar) return false;
+
+ U32 mode = userdata.asInteger();
+ switch (mode)
+ {
+ case 0:
+ return (avatar->getVisualMuteSettings() == LLVOAvatar::VISUAL_MUTE_NOT_SET);
+ case 1:
+ return (avatar->getVisualMuteSettings() == LLVOAvatar::ALWAYS_VISUAL_MUTE);
+ case 2:
+ return (avatar->getVisualMuteSettings() == LLVOAvatar::NEVER_VISUAL_MUTE);
+ default:
+ return false;
+ }
+ } // handleEvent()
+};
+
+// 0 = normal, 1 = always, 2 = never
+class LLAvatarSetImpostorMode : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ if (!object) return false;
+
+ LLVOAvatar* avatar = find_avatar_from_object(object);
+ if (!avatar) return false;
+
+ U32 mode = userdata.asInteger();
+ switch (mode)
+ {
+ case 0:
+ avatar->setVisualMuteSettings(LLVOAvatar::VISUAL_MUTE_NOT_SET);
+ break;
+ case 1:
+ avatar->setVisualMuteSettings(LLVOAvatar::ALWAYS_VISUAL_MUTE);
+ break;
+ case 2:
+ avatar->setVisualMuteSettings(LLVOAvatar::NEVER_VISUAL_MUTE);
+ break;
+ default:
+ return false;
+ }
+
+ avatar->forceUpdateVisualMuteSettings();
+ LLVOAvatar::cullAvatarsByPixelArea();
+ return true;
+ } // handleEvent()
+};
+
+
class LLObjectMute : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -8682,6 +8741,8 @@ void initialize_menus()
view_listener_t::addMenu( new LLCheckPanelPeopleTab(), "SideTray.CheckPanelPeopleTab");
// Avatar pie menu
+ view_listener_t::addMenu(new LLAvatarCheckImpostorMode(), "Avatar.CheckImpostorMode");
+ view_listener_t::addMenu(new LLAvatarSetImpostorMode(), "Avatar.SetImpostorMode");
view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute");
view_listener_t::addMenu(new LLAvatarAddFriend(), "Avatar.AddFriend");
view_listener_t::addMenu(new LLAvatarAddContact(), "Avatar.AddContact");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index c7c0e26533..50862a74a0 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2361,7 +2361,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
BOOL is_owned_by_me = FALSE;
BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;
BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("VoiceCallsFriendsOnly");
-
+ BOOL is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT &&
+ LLMuteList::getInstance()->isLinden(name);
+
chat.mMuted = is_muted;
chat.mFromID = from_id;
chat.mFromName = name;
@@ -2461,7 +2463,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
bool mute_im = is_muted;
- if(accept_im_from_only_friend&&!is_friend)
+ if(accept_im_from_only_friend && !is_friend && !is_linden)
{
if (!gIMMgr->isNonFriendSessionNotified(session_id))
{
@@ -4133,7 +4135,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
{
LLTracker::stopTracking(NULL);
}
- else if ( is_teleport && !gAgent.getTeleportKeepsLookAt() )
+ else if ( is_teleport && !gAgent.getTeleportKeepsLookAt() && look_at.isExactlyZero())
{
//look at the beacon
LLVector3 global_agent_pos = agent_pos;
@@ -5954,19 +5956,42 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
}
+static void process_special_alert_messages(const std::string & message)
+{
+ // Do special handling for alert messages. This is a legacy hack, and any actual displayed
+ // text should be altered in the notifications.xml files.
+ if ( message == "You died and have been teleported to your home location")
+ {
+ LLViewerStats::getInstance()->incStat(LLViewerStats::ST_KILLED_COUNT);
+ }
+ else if( message == "Home position set." )
+ {
+ // save the home location image to disk
+ std::string snap_filename = gDirUtilp->getLindenUserDir();
+ snap_filename += gDirUtilp->getDirDelimiter();
+ snap_filename += SCREEN_HOME_FILENAME;
+ gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE);
+ }
+}
+
+
+
void process_agent_alert_message(LLMessageSystem* msgsystem, void** user_data)
{
// make sure the cursor is back to the usual default since the
// alert is probably due to some kind of error.
gViewerWindow->getWindow()->resetBusyCount();
+ std::string message;
+ msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, message);
+
+ process_special_alert_messages(message);
+
if (!attempt_standard_notification(msgsystem))
{
BOOL modal = FALSE;
msgsystem->getBOOL("AlertData", "Modal", modal);
- std::string buffer;
- msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, buffer);
- process_alert_core(buffer, modal);
+ process_alert_core(message, modal);
}
}
@@ -5981,12 +6006,15 @@ void process_alert_message(LLMessageSystem *msgsystem, void **user_data)
// alert is probably due to some kind of error.
gViewerWindow->getWindow()->resetBusyCount();
+ std::string message;
+ msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, message);
+
+ process_special_alert_messages(message);
+
if (!attempt_standard_notification(msgsystem))
{
BOOL modal = FALSE;
- std::string buffer;
- msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, buffer);
- process_alert_core(buffer, modal);
+ process_alert_core(message, modal);
}
}
@@ -6016,12 +6044,6 @@ bool handle_special_alerts(const std::string &pAlertName)
void process_alert_core(const std::string& message, BOOL modal)
{
- // HACK -- handle callbacks for specific alerts. It also is localized in notifications.xml
- if ( message == "You died and have been teleported to your home location")
- {
- LLViewerStats::getInstance()->incStat(LLViewerStats::ST_KILLED_COUNT);
- }
-
const std::string ALERT_PREFIX("ALERT: ");
const std::string NOTIFY_PREFIX("NOTIFY: ");
if (message.find(ALERT_PREFIX) == 0)
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index dc8acc91a9..10b05c9af4 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -1580,6 +1580,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
dp->setPassFlags(value);
dp->unpackUUID(owner_id, "Owner");
+ mOwnerID = owner_id;
+
if (value & 0x80)
{
dp->unpackVector3(new_angv, "Omega");
@@ -1653,13 +1655,13 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
retval |= checkMediaURL(media_url);
//
- // Unpack particle system data
+ // Unpack particle system data (legacy)
//
if (value & 0x8)
{
- unpackParticleSource(*dp, owner_id);
+ unpackParticleSource(*dp, owner_id, true);
}
- else
+ else if (!(value & 0x400))
{
deleteParticleSource();
}
@@ -4412,12 +4414,10 @@ S32 LLViewerObject::setTEMaterialParams(const U8 te, const LLMaterialPtr pMateri
void LLViewerObject::refreshMaterials()
{
- setChanged(ALL_CHANGED);
+ setChanged(TEXTURE);
if (mDrawable.notNull())
{
gPipeline.markTextured(mDrawable);
- gPipeline.markRebuild(mDrawable,LLDrawable::REBUILD_ALL);
- dirtySpatialGroup(TRUE);
}
}
@@ -4521,6 +4521,30 @@ LLViewerTexture *LLViewerObject::getTEImage(const U8 face) const
}
+bool LLViewerObject::isImageAlphaBlended(const U8 te) const
+{
+ LLViewerTexture* image = getTEImage(te);
+ LLGLenum format = image ? image->getPrimaryFormat() : GL_RGB;
+ switch (format)
+ {
+ case GL_RGBA:
+ case GL_ALPHA:
+ {
+ return true;
+ }
+ break;
+
+ case GL_RGB: break;
+ default:
+ {
+ llwarns << "Unexpected tex format in LLViewerObject::isImageAlphaBlended...returning no alpha." << llendl;
+ }
+ break;
+ }
+
+ return false;
+}
+
LLViewerTexture *LLViewerObject::getTENormalMap(const U8 face) const
{
// llassert(mTEImages);
@@ -4840,7 +4864,7 @@ void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& own
}
}
-void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id)
+void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id, bool legacy)
{
if (!mPartSourcep.isNull() && mPartSourcep->isDead())
{
@@ -4849,7 +4873,7 @@ void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_
if (mPartSourcep)
{
// If we've got one already, just update the existing source (or remove it)
- if (!LLViewerPartSourceScript::unpackPSS(this, mPartSourcep, dp))
+ if (!LLViewerPartSourceScript::unpackPSS(this, mPartSourcep, dp, legacy))
{
mPartSourcep->setDead();
mPartSourcep = NULL;
@@ -4857,7 +4881,7 @@ void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_
}
else
{
- LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, dp);
+ LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, dp, legacy);
//If the owner is muted, don't create the system
if(LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagParticles)) return;
// We need to be able to deal with a particle source that hasn't changed, but still got an update!
@@ -5725,6 +5749,11 @@ F32 LLAlphaObject::getPartSize(S32 idx)
return 0.f;
}
+void LLAlphaObject::getBlendFunc(S32 face, U32& src, U32& dst)
+{
+
+}
+
// virtual
void LLStaticViewerObject::updateDrawable(BOOL force_damped)
{
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 0b92af4a93..1a73dc48e6 100755
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -339,6 +339,8 @@ public:
LLViewerTexture *getTENormalMap(const U8 te) const;
LLViewerTexture *getTESpecularMap(const U8 te) const;
+ bool isImageAlphaBlended(const U8 te) const;
+
void fitFaceTexture(const U8 face);
void sendTEUpdate() const; // Sends packed representation of all texture entry information
@@ -601,6 +603,7 @@ public:
} EPhysicsShapeType;
LLUUID mID;
+ LLUUID mOwnerID; //null if unknown
// unique within region, not unique across regions
// Local ID = 0 is not used
@@ -681,7 +684,7 @@ protected:
BOOL isOnMap();
void unpackParticleSource(const S32 block_num, const LLUUID& owner_id);
- void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id);
+ void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id, bool legacy);
void deleteParticleSource();
void setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id);
@@ -846,8 +849,11 @@ public:
LLStrider<LLVector3>& normalsp,
LLStrider<LLVector2>& texcoordsp,
LLStrider<LLColor4U>& colorsp,
+ LLStrider<LLColor4U>& emissivep,
LLStrider<U16>& indicesp) = 0;
+ virtual void getBlendFunc(S32 face, U32& src, U32& dst);
+
F32 mDepth;
};
diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp
index 61cdfd7818..163c90019f 100755
--- a/indra/newview/llviewerpartsim.cpp
+++ b/indra/newview/llviewerpartsim.cpp
@@ -80,12 +80,31 @@ LLViewerPart::LLViewerPart() :
mImagep(NULL)
{
mPartSourcep = NULL;
-
+ mParent = NULL;
+ mChild = NULL;
++LLViewerPartSim::sParticleCount2 ;
}
LLViewerPart::~LLViewerPart()
{
+ if (mPartSourcep.notNull() && mPartSourcep->mLastPart == this)
+ {
+ mPartSourcep->mLastPart = NULL;
+ }
+
+ //patch up holes in the ribbon
+ if (mParent)
+ {
+ llassert(mParent->mChild == this);
+ mParent->mChild = mChild;
+ }
+
+ if (mChild)
+ {
+ llassert (mChild->mParent == this);
+ mChild->mParent = mParent;
+ }
+
mPartSourcep = NULL;
--LLViewerPartSim::sParticleCount2 ;
@@ -141,7 +160,11 @@ LLViewerPartGroup::LLViewerPartGroup(const LLVector3 &center_agent, const F32 bo
}
mVOPartGroupp->setViewerPartGroup(this);
mVOPartGroupp->setPositionAgent(getCenterAgent());
+
+ mBoxSide = box_side;
+
F32 scale = box_side * 0.5f;
+
mVOPartGroupp->setScale(LLVector3(scale,scale,scale));
//gPipeline.addObject(mVOPartGroupp);
@@ -367,6 +390,9 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
part->mScale += frac*part->mEndScale;
}
+ // Do glow interpolation
+ part->mGlow.mV[3] = (U8) llround(lerp(part->mStartGlow, part->mEndGlow, frac)*255.f);
+
// Set the last update time to now.
part->mLastUpdateTime = cur_time;
@@ -623,6 +649,9 @@ void LLViewerPartSim::updateSimulation()
{
static LLFrameTimer update_timer;
+ //reset VBO cursor
+ LLVOPartGroup::sVBSlotCursor = 0;
+
const F32 dt = llmin(update_timer.getElapsedTimeAndResetF32(), 0.1f);
if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES)))
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index c91fcf0691..2daa07ed8c 100755
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -65,15 +65,22 @@ public:
LLVPCallback mVPCallback; // Callback function for more complicated behaviors
LLPointer<LLViewerPartSource> mPartSourcep; // Particle source used for this object
-
+
+ LLViewerPart* mParent; // particle to connect to if this is part of a particle ribbon
+ LLViewerPart* mChild; // child particle for clean reference destruction
// Current particle state (possibly used for rendering)
LLPointer<LLViewerTexture> mImagep;
LLVector3 mPosAgent;
LLVector3 mVelocity;
LLVector3 mAccel;
+ LLVector3 mAxis;
LLColor4 mColor;
LLVector2 mScale;
+ F32 mStartGlow;
+ F32 mEndGlow;
+ LLColor4U mGlow;
+
static U32 sNextPartID;
};
@@ -98,6 +105,9 @@ public:
void shift(const LLVector3 &offset);
+ F32 getBoxRadius() { return mBoxRadius; }
+ F32 getBoxSide() { return mBoxSide; }
+
typedef std::vector<LLViewerPart*> part_list_t;
part_list_t mParticles;
@@ -118,6 +128,7 @@ public:
protected:
LLVector3 mCenterAgent;
F32 mBoxRadius;
+ F32 mBoxSide;
LLVector3 mMinObjPos;
LLVector3 mMaxObjPos;
diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp
index b311f659fb..b6bbd6140d 100755
--- a/indra/newview/llviewerpartsource.cpp
+++ b/indra/newview/llviewerpartsource.cpp
@@ -52,6 +52,8 @@ LLViewerPartSource::LLViewerPartSource(const U32 type) :
static U32 id_seed = 0;
mID = ++id_seed;
+ mLastPart = NULL;
+
mDelay = 0 ;
}
@@ -279,6 +281,22 @@ void LLViewerPartSourceScript::update(const F32 dt)
{
part->mFlags |= LLPartData::LL_PART_HUD;
}
+
+ if (part->mFlags & LLPartData::LL_PART_RIBBON_MASK && mLastPart)
+ { //set previous particle's parent to this particle to chain ribbon together
+ mLastPart->mParent = part;
+ part->mChild = mLastPart;
+ part->mAxis = LLVector3(0,0,1);
+
+ if (mSourceObjectp.notNull())
+ {
+ LLQuaternion rot = mSourceObjectp->getRenderRotation();
+ part->mAxis *= rot;
+ }
+ }
+
+ mLastPart = part;
+
part->mMaxAge = mPartSysData.mPartData.mMaxAge;
part->mStartColor = mPartSysData.mPartData.mStartColor;
part->mEndColor = mPartSysData.mPartData.mEndColor;
@@ -290,6 +308,13 @@ void LLViewerPartSourceScript::update(const F32 dt)
part->mAccel = mPartSysData.mPartAccel;
+ part->mBlendFuncDest = mPartSysData.mPartData.mBlendFuncDest;
+ part->mBlendFuncSource = mPartSysData.mPartData.mBlendFuncSource;
+
+ part->mStartGlow = mPartSysData.mPartData.mStartGlow;
+ part->mEndGlow = mPartSysData.mPartData.mEndGlow;
+ part->mGlow = LLColor4U(0, 0, 0, (U8) llround(part->mStartGlow*255.f));
+
if (mPartSysData.mPattern & LLPartSysData::LL_PART_SRC_PATTERN_DROP)
{
part->mPosAgent = mPosAgent;
@@ -430,28 +455,51 @@ LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewer
}
-LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp)
+LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp, bool legacy)
{
if (!pssp)
{
LLPointer<LLViewerPartSourceScript> new_pssp = new LLViewerPartSourceScript(source_objp);
- if (!new_pssp->mPartSysData.unpack(dp))
+ if (legacy)
{
- return NULL;
+ if (!new_pssp->mPartSysData.unpackLegacy(dp))
+ {
+ return NULL;
+ }
+ }
+ else
+ {
+ if (!new_pssp->mPartSysData.unpack(dp))
+ {
+ return NULL;
+ }
}
+
if (new_pssp->mPartSysData.mTargetUUID.notNull())
{
LLViewerObject *target_objp = gObjectList.findObject(new_pssp->mPartSysData.mTargetUUID);
new_pssp->setTargetObject(target_objp);
}
+
return new_pssp;
}
else
{
- if (!pssp->mPartSysData.unpack(dp))
+ if (legacy)
{
- return NULL;
+ if (!pssp->mPartSysData.unpackLegacy(dp))
+ {
+ return NULL;
+ }
}
+ else
+ {
+ if (!pssp->mPartSysData.unpack(dp))
+ {
+ return NULL;
+ }
+ }
+
if (pssp->mPartSysData.mTargetUUID.notNull())
{
LLViewerObject *target_objp = gObjectList.findObject(pssp->mPartSysData.mTargetUUID);
@@ -569,6 +617,11 @@ void LLViewerPartSourceSpiral::update(const F32 dt)
part->mScale.mV[0] = 0.25f;
part->mScale.mV[1] = 0.25f;
part->mParameter = ll_frand(F_TWO_PI);
+ part->mBlendFuncDest = LLRender::BF_ONE_MINUS_SOURCE_ALPHA;
+ part->mBlendFuncSource = LLRender::BF_SOURCE_ALPHA;
+ part->mStartGlow = 0.f;
+ part->mEndGlow = 0.f;
+ part->mGlow = LLColor4U(0, 0, 0, 0);
LLViewerPartSim::getInstance()->addPart(part);
}
@@ -721,6 +774,12 @@ void LLViewerPartSourceBeam::update(const F32 dt)
part->mPosAgent = mPosAgent;
part->mVelocity = mTargetPosAgent - mPosAgent;
+ part->mBlendFuncDest = LLRender::BF_ONE_MINUS_SOURCE_ALPHA;
+ part->mBlendFuncSource = LLRender::BF_SOURCE_ALPHA;
+ part->mStartGlow = 0.f;
+ part->mEndGlow = 0.f;
+ part->mGlow = LLColor4U(0, 0, 0, 0);
+
LLViewerPartSim::getInstance()->addPart(part);
}
}
@@ -825,6 +884,12 @@ void LLViewerPartSourceChat::update(const F32 dt)
part->mScale.mV[0] = 0.25f;
part->mScale.mV[1] = 0.25f;
part->mParameter = ll_frand(F_TWO_PI);
+ part->mBlendFuncDest = LLRender::BF_ONE_MINUS_SOURCE_ALPHA;
+ part->mBlendFuncSource = LLRender::BF_SOURCE_ALPHA;
+ part->mStartGlow = 0.f;
+ part->mEndGlow = 0.f;
+ part->mGlow = LLColor4U(0, 0, 0, 0);
+
LLViewerPartSim::getInstance()->addPart(part);
}
diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h
index 28702d36a2..12e926173b 100755
--- a/indra/newview/llviewerpartsource.h
+++ b/indra/newview/llviewerpartsource.h
@@ -76,6 +76,7 @@ public:
LLVector3 mLastUpdatePosAgent;
LLPointer<LLViewerObject> mSourceObjectp;
U32 mID;
+ LLViewerPart* mLastPart; //last particle emitted (for making particle ribbons)
protected:
U32 mType;
@@ -85,7 +86,6 @@ protected:
F32 mLastPartTime;
LLUUID mOwnerUUID;
LLPointer<LLViewerTexture> mImagep;
-
// Particle information
U32 mPartFlags; // Flags for the particle
U32 mDelay ; //delay to start particles
@@ -114,7 +114,7 @@ public:
// Returns a new particle source to attach to an object...
static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num);
- static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp);
+ static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp, bool legacy);
static LLPointer<LLViewerPartSourceScript> createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters);
LLViewerTexture *getImage() const { return mImagep; }
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 814b5e2265..e7123b746d 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -45,6 +45,7 @@
#include "llagent.h"
#include "llagentcamera.h"
+#include "llavatarrenderinfoaccountant.h"
#include "llcallingcard.h"
#include "llcaphttpsender.h"
#include "llcapabilitylistener.h"
@@ -440,6 +441,9 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mImpl->mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE
mImpl->mObjectPartition.push_back(new LLHUDParticlePartition());//PARTITION_HUD_PARTICLE
mImpl->mObjectPartition.push_back(NULL); //PARTITION_NONE
+
+ mRenderInfoRequestTimer.resetWithExpiry(0.f); // Set timer to be expired
+ setCapabilitiesReceivedCallback(boost::bind(&LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer, _1));
}
@@ -1266,7 +1270,7 @@ void LLViewerRegion::getInfo(LLSD& info)
info["Region"]["Handle"]["y"] = (LLSD::Integer)y;
}
-void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features)
+void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) const
{
sim_features = mSimulatorFeatures;
@@ -1628,6 +1632,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("AgentState");
capabilityNames.append("AttachmentResources");
capabilityNames.append("AvatarPickerSearch");
+ capabilityNames.append("AvatarRenderInfo");
capabilityNames.append("CharacterProperties");
capabilityNames.append("ChatSessionRequest");
capabilityNames.append("CopyInventoryFromNotecard");
@@ -2018,7 +2023,6 @@ bool LLViewerRegion::dynamicPathfindingEnabled() const
return ( mSimulatorFeatures.has("DynamicPathfindingEnabled") &&
mSimulatorFeatures["DynamicPathfindingEnabled"].asBoolean());
}
-
/* Static Functions */
void log_capabilities(const CapabilityMap &capmap)
@@ -2034,4 +2038,48 @@ void log_capabilities(const CapabilityMap &capmap)
}
llinfos << "log_capabilities: Dumped " << count << " entries." << llendl;
}
+void LLViewerRegion::resetMaterialsCapThrottle()
+{
+ F32 requests_per_sec = 1.0f; // original default;
+ if ( mSimulatorFeatures.has("RenderMaterialsCapability")
+ && mSimulatorFeatures["RenderMaterialsCapability"].isReal() )
+ {
+ requests_per_sec = mSimulatorFeatures["RenderMaterialsCapability"].asReal();
+ if ( requests_per_sec == 0.0f )
+ {
+ requests_per_sec = 1.0f;
+ LL_WARNS("Materials")
+ << "region '" << getName()
+ << "' returned zero for RenderMaterialsCapability; using default "
+ << requests_per_sec << " per second"
+ << LL_ENDL;
+ }
+ LL_DEBUGS("Materials") << "region '" << getName()
+ << "' RenderMaterialsCapability " << requests_per_sec
+ << LL_ENDL;
+ }
+ else
+ {
+ LL_DEBUGS("Materials")
+ << "region '" << getName()
+ << "' did not return RenderMaterialsCapability, using default "
+ << requests_per_sec << " per second"
+ << LL_ENDL;
+ }
+
+ mMaterialsCapThrottleTimer.resetWithExpiry( 1.0f / requests_per_sec );
+}
+
+U32 LLViewerRegion::getMaxMaterialsPerTransaction() const
+{
+ U32 max_entries = 50; // original hard coded default
+ if ( mSimulatorFeatures.has( "MaxMaterialsPerTransaction" )
+ && mSimulatorFeatures[ "MaxMaterialsPerTransaction" ].isInteger())
+ {
+ max_entries = mSimulatorFeatures[ "MaxMaterialsPerTransaction" ].asInteger();
+ }
+ return max_entries;
+}
+
+
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 6beaaf0e7b..17ee524853 100755
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -43,6 +43,7 @@
#include "llcapabilityprovider.h"
#include "m4math.h" // LLMatrix4
#include "llhttpclient.h"
+#include "llframetimer.h"
// Surface id's
#define LAND 1
@@ -296,7 +297,7 @@ public:
bool meshRezEnabled() const;
bool meshUploadEnabled() const;
- void getSimulatorFeatures(LLSD& info);
+ void getSimulatorFeatures(LLSD& info) const;
void setSimulatorFeatures(const LLSD& info);
@@ -346,6 +347,11 @@ public:
const LLViewerRegionImpl * getRegionImpl() const { return mImpl; }
LLViewerRegionImpl * getRegionImplNC() { return mImpl; }
+ // implements the materials capability throttle
+ bool materialsCapThrottled() const { return !mMaterialsCapThrottleTimer.hasExpired(); }
+ void resetMaterialsCapThrottle();
+
+ U32 getMaxMaterialsPerTransaction() const;
public:
struct CompareDistance
{
@@ -379,6 +385,8 @@ public:
LLDynamicArray<U32> mMapAvatars;
LLDynamicArray<LLUUID> mMapAvatarIDs;
+ LLFrameTimer & getRenderInfoRequestTimer() { return mRenderInfoRequestTimer; };
+
private:
LLViewerRegionImpl * mImpl;
@@ -437,6 +445,10 @@ private:
BOOL mReleaseNotesRequested;
LLSD mSimulatorFeatures;
+
+ // the materials capability throttle
+ LLFrameTimer mMaterialsCapThrottleTimer;
+LLFrameTimer mRenderInfoRequestTimer;
};
inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index e24237522a..50f0a5f1af 100755
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -42,28 +42,19 @@
#include "llvosky.h"
#include "llrender.h"
-#if LL_DARWIN
-#include "OpenGL/OpenGL.h"
-
-// include spec exp clamp to fix older mac rendering artifacts
-//
-#define SINGLE_FP_PERMUTATION(shader) \
- if (gGLManager.mIsMobileGF) \
- { \
- shader.addPermutation("SINGLE_FP_ONLY","1"); \
- }
-
-
-#else
-#define SINGLE_FP_PERMUTATION(shader)
-#endif
-
#ifdef LL_RELEASE_FOR_DOWNLOAD
#define UNIFORM_ERRS LL_WARNS_ONCE("Shader")
#else
#define UNIFORM_ERRS LL_ERRS("Shader")
#endif
+static LLStaticHashedString sTexture0("texture0");
+static LLStaticHashedString sTexture1("texture1");
+static LLStaticHashedString sTex0("tex0");
+static LLStaticHashedString sTex1("tex1");
+static LLStaticHashedString sGlowMap("glowMap");
+static LLStaticHashedString sScreenMap("screenMap");
+
// Lots of STL stuff in here, using namespace std to keep things more readable
using std::vector;
using std::pair;
@@ -99,6 +90,7 @@ LLGLSLShader gAlphaMaskProgram;
//object shaders
LLGLSLShader gObjectSimpleProgram;
+LLGLSLShader gObjectSimpleImpostorProgram;
LLGLSLShader gObjectPreviewProgram;
LLGLSLShader gObjectSimpleWaterProgram;
LLGLSLShader gObjectSimpleAlphaMaskProgram;
@@ -184,6 +176,7 @@ LLGLSLShader gPostNightVisionProgram;
// Deferred rendering shaders
LLGLSLShader gDeferredImpostorProgram;
LLGLSLShader gDeferredWaterProgram;
+LLGLSLShader gDeferredUnderWaterProgram;
LLGLSLShader gDeferredDiffuseProgram;
LLGLSLShader gDeferredDiffuseAlphaMaskProgram;
LLGLSLShader gDeferredNonIndexedDiffuseProgram;
@@ -199,20 +192,26 @@ LLGLSLShader gDeferredTreeShadowProgram;
LLGLSLShader gDeferredAvatarProgram;
LLGLSLShader gDeferredAvatarAlphaProgram;
LLGLSLShader gDeferredLightProgram;
-LLGLSLShader gDeferredMultiLightProgram;
+LLGLSLShader gDeferredMultiLightProgram[16];
LLGLSLShader gDeferredSpotLightProgram;
LLGLSLShader gDeferredMultiSpotLightProgram;
LLGLSLShader gDeferredSunProgram;
LLGLSLShader gDeferredBlurLightProgram;
LLGLSLShader gDeferredSoftenProgram;
+LLGLSLShader gDeferredSoftenWaterProgram;
LLGLSLShader gDeferredShadowProgram;
LLGLSLShader gDeferredShadowCubeProgram;
LLGLSLShader gDeferredShadowAlphaMaskProgram;
LLGLSLShader gDeferredAvatarShadowProgram;
LLGLSLShader gDeferredAttachmentShadowProgram;
LLGLSLShader gDeferredAlphaProgram;
+LLGLSLShader gDeferredAlphaImpostorProgram;
+LLGLSLShader gDeferredAlphaWaterProgram;
LLGLSLShader gDeferredAvatarEyesProgram;
LLGLSLShader gDeferredFullbrightProgram;
+LLGLSLShader gDeferredFullbrightAlphaMaskProgram;
+LLGLSLShader gDeferredFullbrightWaterProgram;
+LLGLSLShader gDeferredFullbrightAlphaMaskWaterProgram;
LLGLSLShader gDeferredEmissiveProgram;
LLGLSLShader gDeferredPostProgram;
LLGLSLShader gDeferredCoFProgram;
@@ -230,6 +229,7 @@ LLGLSLShader gNormalMapGenProgram;
// Deferred materials shaders
LLGLSLShader gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
+LLGLSLShader gDeferredMaterialWaterProgram[LLMaterial::SHADER_COUNT*2];
LLViewerShaderMgr::LLViewerShaderMgr() :
mVertexShaderLevel(SHADER_COUNT, 0),
@@ -245,6 +245,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gWaterProgram);
mShaderList.push_back(&gAvatarEyeballProgram);
mShaderList.push_back(&gObjectSimpleProgram);
+ mShaderList.push_back(&gObjectSimpleImpostorProgram);
mShaderList.push_back(&gObjectPreviewProgram);
mShaderList.push_back(&gImpostorProgram);
mShaderList.push_back(&gObjectFullbrightNoColorProgram);
@@ -295,6 +296,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gUnderWaterProgram);
mShaderList.push_back(&gDeferredSunProgram);
mShaderList.push_back(&gDeferredSoftenProgram);
+ mShaderList.push_back(&gDeferredSoftenWaterProgram);
mShaderList.push_back(&gDeferredMaterialProgram[1]);
mShaderList.push_back(&gDeferredMaterialProgram[5]);
mShaderList.push_back(&gDeferredMaterialProgram[9]);
@@ -303,15 +305,29 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gDeferredMaterialProgram[5+LLMaterial::SHADER_COUNT]);
mShaderList.push_back(&gDeferredMaterialProgram[9+LLMaterial::SHADER_COUNT]);
mShaderList.push_back(&gDeferredMaterialProgram[13+LLMaterial::SHADER_COUNT]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[1]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[5]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[9]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[13]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[1+LLMaterial::SHADER_COUNT]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[5+LLMaterial::SHADER_COUNT]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[9+LLMaterial::SHADER_COUNT]);
+ mShaderList.push_back(&gDeferredMaterialWaterProgram[13+LLMaterial::SHADER_COUNT]);
mShaderList.push_back(&gDeferredAlphaProgram);
+ mShaderList.push_back(&gDeferredAlphaImpostorProgram);
+ mShaderList.push_back(&gDeferredAlphaWaterProgram);
mShaderList.push_back(&gDeferredSkinnedAlphaProgram);
mShaderList.push_back(&gDeferredFullbrightProgram);
+ mShaderList.push_back(&gDeferredFullbrightAlphaMaskProgram);
+ mShaderList.push_back(&gDeferredFullbrightWaterProgram);
+ mShaderList.push_back(&gDeferredFullbrightAlphaMaskWaterProgram);
mShaderList.push_back(&gDeferredFullbrightShinyProgram);
mShaderList.push_back(&gDeferredSkinnedFullbrightShinyProgram);
mShaderList.push_back(&gDeferredSkinnedFullbrightProgram);
mShaderList.push_back(&gDeferredEmissiveProgram);
mShaderList.push_back(&gDeferredAvatarEyesProgram);
mShaderList.push_back(&gDeferredWaterProgram);
+ mShaderList.push_back(&gDeferredUnderWaterProgram);
mShaderList.push_back(&gDeferredAvatarAlphaProgram);
mShaderList.push_back(&gDeferredWLSkyProgram);
mShaderList.push_back(&gDeferredWLCloudProgram);
@@ -339,47 +355,6 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void)
if (mReservedAttribs.empty())
{
LLShaderMgr::initAttribsAndUniforms();
-
- mAvatarUniforms.push_back("matrixPalette");
- mAvatarUniforms.push_back("gWindDir");
- mAvatarUniforms.push_back("gSinWaveParams");
- mAvatarUniforms.push_back("gGravity");
-
- mWLUniforms.push_back("camPosLocal");
-
- mTerrainUniforms.reserve(5);
- mTerrainUniforms.push_back("detail_0");
- mTerrainUniforms.push_back("detail_1");
- mTerrainUniforms.push_back("detail_2");
- mTerrainUniforms.push_back("detail_3");
- mTerrainUniforms.push_back("alpha_ramp");
-
- mGlowUniforms.push_back("glowDelta");
- mGlowUniforms.push_back("glowStrength");
-
- mGlowExtractUniforms.push_back("minLuminance");
- mGlowExtractUniforms.push_back("maxExtractAlpha");
- mGlowExtractUniforms.push_back("lumWeights");
- mGlowExtractUniforms.push_back("warmthWeights");
- mGlowExtractUniforms.push_back("warmthAmount");
-
- mShinyUniforms.push_back("origin");
-
- mWaterUniforms.reserve(12);
- mWaterUniforms.push_back("screenTex");
- mWaterUniforms.push_back("screenDepth");
- mWaterUniforms.push_back("refTex");
- mWaterUniforms.push_back("eyeVec");
- mWaterUniforms.push_back("time");
- mWaterUniforms.push_back("d1");
- mWaterUniforms.push_back("d2");
- mWaterUniforms.push_back("lightDir");
- mWaterUniforms.push_back("specular");
- mWaterUniforms.push_back("lightExp");
- mWaterUniforms.push_back("fogCol");
- mWaterUniforms.push_back("kd");
- mWaterUniforms.push_back("refScale");
- mWaterUniforms.push_back("waterHeight");
}
}
@@ -721,6 +696,7 @@ void LLViewerShaderMgr::unloadShaders()
gObjectFullbrightNoColorProgram.unload();
gObjectFullbrightNoColorWaterProgram.unload();
gObjectSimpleProgram.unload();
+ gObjectSimpleImpostorProgram.unload();
gObjectPreviewProgram.unload();
gImpostorProgram.unload();
gObjectSimpleAlphaMaskProgram.unload();
@@ -966,7 +942,7 @@ BOOL LLViewerShaderMgr::loadShadersEnvironment()
gTerrainProgram.mShaderFiles.push_back(make_pair("environment/terrainV.glsl", GL_VERTEX_SHADER_ARB));
gTerrainProgram.mShaderFiles.push_back(make_pair("environment/terrainF.glsl", GL_FRAGMENT_SHADER_ARB));
gTerrainProgram.mShaderLevel = mVertexShaderLevel[SHADER_ENVIRONMENT];
- success = gTerrainProgram.createShader(NULL, &mTerrainUniforms);
+ success = gTerrainProgram.createShader(NULL, NULL);
}
if (!success)
@@ -1004,7 +980,7 @@ BOOL LLViewerShaderMgr::loadShadersWater()
gWaterProgram.mShaderFiles.push_back(make_pair("environment/waterV.glsl", GL_VERTEX_SHADER_ARB));
gWaterProgram.mShaderFiles.push_back(make_pair("environment/waterF.glsl", GL_FRAGMENT_SHADER_ARB));
gWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_WATER];
- success = gWaterProgram.createShader(NULL, &mWaterUniforms);
+ success = gWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -1018,7 +994,7 @@ BOOL LLViewerShaderMgr::loadShadersWater()
gUnderWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_WATER];
gUnderWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- success = gUnderWaterProgram.createShader(NULL, &mWaterUniforms);
+ success = gUnderWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -1036,7 +1012,7 @@ BOOL LLViewerShaderMgr::loadShadersWater()
gTerrainWaterProgram.mShaderFiles.push_back(make_pair("environment/terrainWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
gTerrainWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_ENVIRONMENT];
gTerrainWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- terrainWaterSuccess = gTerrainWaterProgram.createShader(NULL, &mTerrainUniforms);
+ terrainWaterSuccess = gTerrainWaterProgram.createShader(NULL, NULL);
}
/// Keep track of water shader levels
@@ -1085,7 +1061,7 @@ BOOL LLViewerShaderMgr::loadShadersEffects()
gGlowProgram.mShaderFiles.push_back(make_pair("effects/glowV.glsl", GL_VERTEX_SHADER_ARB));
gGlowProgram.mShaderFiles.push_back(make_pair("effects/glowF.glsl", GL_FRAGMENT_SHADER_ARB));
gGlowProgram.mShaderLevel = mVertexShaderLevel[SHADER_EFFECT];
- success = gGlowProgram.createShader(NULL, &mGlowUniforms);
+ success = gGlowProgram.createShader(NULL, NULL);
if (!success)
{
LLPipeline::sRenderGlow = FALSE;
@@ -1099,7 +1075,7 @@ BOOL LLViewerShaderMgr::loadShadersEffects()
gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractV.glsl", GL_VERTEX_SHADER_ARB));
gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractF.glsl", GL_FRAGMENT_SHADER_ARB));
gGlowExtractProgram.mShaderLevel = mVertexShaderLevel[SHADER_EFFECT];
- success = gGlowExtractProgram.createShader(NULL, &mGlowExtractUniforms);
+ success = gGlowExtractProgram.createShader(NULL, NULL);
if (!success)
{
LLPipeline::sRenderGlow = FALSE;
@@ -1128,12 +1104,16 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredImpostorProgram.unload();
gDeferredTerrainProgram.unload();
gDeferredLightProgram.unload();
- gDeferredMultiLightProgram.unload();
+ for (U32 i = 0; i < LL_DEFERRED_MULTI_LIGHT_COUNT; ++i)
+ {
+ gDeferredMultiLightProgram[i].unload();
+ }
gDeferredSpotLightProgram.unload();
gDeferredMultiSpotLightProgram.unload();
gDeferredSunProgram.unload();
gDeferredBlurLightProgram.unload();
gDeferredSoftenProgram.unload();
+ gDeferredSoftenWaterProgram.unload();
gDeferredShadowProgram.unload();
gDeferredShadowCubeProgram.unload();
gDeferredShadowAlphaMaskProgram.unload();
@@ -1142,7 +1122,11 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAvatarProgram.unload();
gDeferredAvatarAlphaProgram.unload();
gDeferredAlphaProgram.unload();
+ gDeferredAlphaWaterProgram.unload();
gDeferredFullbrightProgram.unload();
+ gDeferredFullbrightAlphaMaskProgram.unload();
+ gDeferredFullbrightWaterProgram.unload();
+ gDeferredFullbrightAlphaMaskWaterProgram.unload();
gDeferredEmissiveProgram.unload();
gDeferredAvatarEyesProgram.unload();
gDeferredPostProgram.unload();
@@ -1151,6 +1135,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredPostGammaCorrectProgram.unload();
gFXAAProgram.unload();
gDeferredWaterProgram.unload();
+ gDeferredUnderWaterProgram.unload();
gDeferredWLSkyProgram.unload();
gDeferredWLCloudProgram.unload();
gDeferredStarProgram.unload();
@@ -1162,6 +1147,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
for (U32 i = 0; i < LLMaterial::SHADER_COUNT*2; ++i)
{
gDeferredMaterialProgram[i].unload();
+ gDeferredMaterialWaterProgram[i].unload();
}
return TRUE;
}
@@ -1246,11 +1232,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
gDeferredSkinnedAlphaProgram.mName = "Deferred Skinned Alpha Shader";
- gDeferredSkinnedAlphaProgram.mFeatures.atmosphericHelpers = true;
gDeferredSkinnedAlphaProgram.mFeatures.hasObjectSkinning = true;
- gDeferredSkinnedAlphaProgram.mFeatures.calculatesAtmospherics = true;
- gDeferredSkinnedAlphaProgram.mFeatures.hasGamma = true;
- gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true;
gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = false;
gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = false;
gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;
@@ -1260,8 +1242,8 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredSkinnedAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
gDeferredSkinnedAlphaProgram.addPermutation("USE_DIFFUSE_TEX", "1");
- gDeferredSkinnedAlphaProgram.addPermutation("USE_VERTEX_COLOR", "1");
gDeferredSkinnedAlphaProgram.addPermutation("HAS_SKIN", "1");
+ gDeferredSkinnedAlphaProgram.addPermutation("USE_VERTEX_COLOR", "1");
gDeferredSkinnedAlphaProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
success = gDeferredSkinnedAlphaProgram.createShader(NULL, NULL);
@@ -1289,6 +1271,15 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredMaterialProgram[9+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
gDeferredMaterialProgram[13+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[1].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[5].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[9].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[13].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[1+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[5+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[9+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+ gDeferredMaterialWaterProgram[13+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+
for (U32 i = 0; i < LLMaterial::SHADER_COUNT*2; ++i)
{
if (success)
@@ -1308,8 +1299,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
bool has_skin = i & 0x10;
gDeferredMaterialProgram[i].addPermutation("HAS_SKIN",has_skin ? "1" : "0");
- SINGLE_FP_PERMUTATION(gDeferredMaterialProgram[i]);
-
if (has_skin)
{
gDeferredMaterialProgram[i].mFeatures.hasObjectSkinning = true;
@@ -1317,6 +1306,34 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
success = gDeferredMaterialProgram[i].createShader(NULL, NULL);
}
+
+ if (success)
+ {
+ gDeferredMaterialWaterProgram[i].mName = llformat("Deferred Underwater Material Shader %d", i);
+
+ U32 alpha_mode = i & 0x3;
+
+ gDeferredMaterialWaterProgram[i].mShaderFiles.clear();
+ gDeferredMaterialWaterProgram[i].mShaderFiles.push_back(make_pair("deferred/materialV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredMaterialWaterProgram[i].mShaderFiles.push_back(make_pair("deferred/materialF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredMaterialWaterProgram[i].mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ gDeferredMaterialWaterProgram[i].mShaderGroup = LLGLSLShader::SG_WATER;
+
+ gDeferredMaterialWaterProgram[i].addPermutation("HAS_NORMAL_MAP", i & 0x8? "1" : "0");
+ gDeferredMaterialWaterProgram[i].addPermutation("HAS_SPECULAR_MAP", i & 0x4 ? "1" : "0");
+ gDeferredMaterialWaterProgram[i].addPermutation("DIFFUSE_ALPHA_MODE", llformat("%d", alpha_mode));
+ gDeferredMaterialWaterProgram[i].addPermutation("HAS_SUN_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
+ bool has_skin = i & 0x10;
+ gDeferredMaterialWaterProgram[i].addPermutation("HAS_SKIN",has_skin ? "1" : "0");
+ gDeferredMaterialWaterProgram[i].addPermutation("WATER_FOG","1");
+
+ if (has_skin)
+ {
+ gDeferredMaterialWaterProgram[i].mFeatures.hasObjectSkinning = true;
+ }
+
+ success = gDeferredMaterialWaterProgram[i].createShader(NULL, NULL);//&mWLUniforms);
+ }
}
gDeferredMaterialProgram[1].mFeatures.hasLighting = true;
@@ -1328,6 +1345,14 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredMaterialProgram[9+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
gDeferredMaterialProgram[13+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[1].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[5].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[9].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[13].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[1+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[5+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[9+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+ gDeferredMaterialWaterProgram[13+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
if (success)
@@ -1368,22 +1393,21 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredLightProgram);
-
success = gDeferredLightProgram.createShader(NULL, NULL);
}
+ for (U32 i = 0; i < LL_DEFERRED_MULTI_LIGHT_COUNT; i++)
+ {
if (success)
{
- gDeferredMultiLightProgram.mName = "Deferred MultiLight Shader";
- gDeferredMultiLightProgram.mShaderFiles.clear();
- gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightV.glsl", GL_VERTEX_SHADER_ARB));
- gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightF.glsl", GL_FRAGMENT_SHADER_ARB));
- gDeferredMultiLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
-
- SINGLE_FP_PERMUTATION(gDeferredMultiLightProgram);
-
- success = gDeferredMultiLightProgram.createShader(NULL, NULL);
+ gDeferredMultiLightProgram[i].mName = llformat("Deferred MultiLight Shader %d", i);
+ gDeferredMultiLightProgram[i].mShaderFiles.clear();
+ gDeferredMultiLightProgram[i].mShaderFiles.push_back(make_pair("deferred/multiPointLightV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredMultiLightProgram[i].mShaderFiles.push_back(make_pair("deferred/multiPointLightF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredMultiLightProgram[i].mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ gDeferredMultiLightProgram[i].addPermutation("LIGHT_COUNT", llformat("%d", i+1));
+ success = gDeferredMultiLightProgram[i].createShader(NULL, NULL);
+ }
}
if (success)
@@ -1394,8 +1418,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/spotLightF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredSpotLightProgram);
-
success = gDeferredSpotLightProgram.createShader(NULL, NULL);
}
@@ -1407,8 +1429,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiSpotLightF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredMultiSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredMultiSpotLightProgram);
-
success = gDeferredMultiSpotLightProgram.createShader(NULL, NULL);
}
@@ -1436,8 +1456,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredSunProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB));
gDeferredSunProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredSunProgram);
-
success = gDeferredSunProgram.createShader(NULL, NULL);
}
@@ -1449,19 +1467,14 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredBlurLightProgram.mShaderFiles.push_back(make_pair("deferred/blurLightF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredBlurLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredBlurLightProgram);
-
success = gDeferredBlurLightProgram.createShader(NULL, NULL);
}
if (success)
{
gDeferredAlphaProgram.mName = "Deferred Alpha Shader";
- gDeferredAlphaProgram.mFeatures.atmosphericHelpers = true;
+
gDeferredAlphaProgram.mFeatures.calculatesLighting = false;
- gDeferredAlphaProgram.mFeatures.calculatesAtmospherics = true;
- gDeferredAlphaProgram.mFeatures.hasGamma = true;
- gDeferredAlphaProgram.mFeatures.hasAtmospherics = true;
gDeferredAlphaProgram.mFeatures.hasLighting = false;
gDeferredAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels
@@ -1478,12 +1491,10 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredAlphaProgram.addPermutation("USE_INDEXED_TEX", "1");
- gDeferredAlphaProgram.addPermutation("USE_VERTEX_COLOR", "1");
gDeferredAlphaProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
+ gDeferredAlphaProgram.addPermutation("USE_VERTEX_COLOR", "1");
gDeferredAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredAlphaProgram);
-
success = gDeferredAlphaProgram.createShader(NULL, NULL);
// Hack
@@ -1493,6 +1504,72 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredAlphaImpostorProgram.mName = "Deferred Alpha Shader";
+
+ gDeferredAlphaImpostorProgram.mFeatures.calculatesLighting = false;
+ gDeferredAlphaImpostorProgram.mFeatures.hasLighting = false;
+ gDeferredAlphaImpostorProgram.mFeatures.isAlphaLighting = true;
+ gDeferredAlphaImpostorProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels
+ if (mVertexShaderLevel[SHADER_DEFERRED] < 1)
+ {
+ gDeferredAlphaImpostorProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;
+ }
+ else
+ { //shave off some texture units for shadow maps
+ gDeferredAlphaImpostorProgram.mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels - 6, 1);
+ }
+
+ gDeferredAlphaImpostorProgram.mShaderFiles.clear();
+ gDeferredAlphaImpostorProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredAlphaImpostorProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredAlphaImpostorProgram.addPermutation("USE_INDEXED_TEX", "1");
+ gDeferredAlphaImpostorProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
+ gDeferredAlphaImpostorProgram.addPermutation("USE_VERTEX_COLOR", "1");
+ gDeferredAlphaImpostorProgram.addPermutation("FOR_IMPOSTOR", "1");
+
+ gDeferredAlphaImpostorProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+ success = gDeferredAlphaImpostorProgram.createShader(NULL, NULL);
+
+ // Hack
+ gDeferredAlphaImpostorProgram.mFeatures.calculatesLighting = true;
+ gDeferredAlphaImpostorProgram.mFeatures.hasLighting = true;
+ }
+
+ if (success)
+ {
+ gDeferredAlphaWaterProgram.mName = "Deferred Alpha Underwater Shader";
+ gDeferredAlphaWaterProgram.mFeatures.calculatesLighting = false;
+ gDeferredAlphaWaterProgram.mFeatures.hasLighting = false;
+ gDeferredAlphaWaterProgram.mFeatures.isAlphaLighting = true;
+ gDeferredAlphaWaterProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels
+ if (mVertexShaderLevel[SHADER_DEFERRED] < 1)
+ {
+ gDeferredAlphaWaterProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;
+ }
+ else
+ { //shave off some texture units for shadow maps
+ gDeferredAlphaWaterProgram.mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels - 6, 1);
+ }
+ gDeferredAlphaWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ gDeferredAlphaWaterProgram.mShaderFiles.clear();
+ gDeferredAlphaWaterProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredAlphaWaterProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredAlphaWaterProgram.addPermutation("USE_INDEXED_TEX", "1");
+ gDeferredAlphaWaterProgram.addPermutation("WATER_FOG", "1");
+ gDeferredAlphaWaterProgram.addPermutation("USE_VERTEX_COLOR", "1");
+ gDeferredAlphaWaterProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
+ gDeferredAlphaWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+ success = gDeferredAlphaWaterProgram.createShader(NULL, NULL);
+
+ // Hack
+ gDeferredAlphaWaterProgram.mFeatures.calculatesLighting = true;
+ gDeferredAlphaWaterProgram.mFeatures.hasLighting = true;
+ }
+
+ if (success)
+ {
gDeferredAvatarEyesProgram.mName = "Deferred Avatar Eyes Shader";
gDeferredAvatarEyesProgram.mFeatures.calculatesAtmospherics = true;
gDeferredAvatarEyesProgram.mFeatures.hasGamma = true;
@@ -1521,6 +1598,54 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredFullbrightAlphaMaskProgram.mName = "Deferred Fullbright Alpha Masking Shader";
+ gDeferredFullbrightAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gDeferredFullbrightAlphaMaskProgram.mFeatures.hasGamma = true;
+ gDeferredFullbrightAlphaMaskProgram.mFeatures.hasTransport = true;
+ gDeferredFullbrightAlphaMaskProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;
+ gDeferredFullbrightAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredFullbrightAlphaMaskProgram.addPermutation("HAS_ALPHA_MASK","1");
+ gDeferredFullbrightAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredFullbrightAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gDeferredFullbrightWaterProgram.mName = "Deferred Fullbright Underwater Shader";
+ gDeferredFullbrightWaterProgram.mFeatures.calculatesAtmospherics = true;
+ gDeferredFullbrightWaterProgram.mFeatures.hasGamma = true;
+ gDeferredFullbrightWaterProgram.mFeatures.hasTransport = true;
+ gDeferredFullbrightWaterProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;
+ gDeferredFullbrightWaterProgram.mShaderFiles.clear();
+ gDeferredFullbrightWaterProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredFullbrightWaterProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredFullbrightWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ gDeferredFullbrightWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ gDeferredFullbrightWaterProgram.addPermutation("WATER_FOG","1");
+ success = gDeferredFullbrightWaterProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gDeferredFullbrightAlphaMaskWaterProgram.mName = "Deferred Fullbright Underwater Alpha Masking Shader";
+ gDeferredFullbrightAlphaMaskWaterProgram.mFeatures.calculatesAtmospherics = true;
+ gDeferredFullbrightAlphaMaskWaterProgram.mFeatures.hasGamma = true;
+ gDeferredFullbrightAlphaMaskWaterProgram.mFeatures.hasTransport = true;
+ gDeferredFullbrightAlphaMaskWaterProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;
+ gDeferredFullbrightAlphaMaskWaterProgram.mShaderFiles.clear();
+ gDeferredFullbrightAlphaMaskWaterProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredFullbrightAlphaMaskWaterProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredFullbrightAlphaMaskWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ gDeferredFullbrightAlphaMaskWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ gDeferredFullbrightAlphaMaskWaterProgram.addPermutation("HAS_ALPHA_MASK","1");
+ gDeferredFullbrightAlphaMaskWaterProgram.addPermutation("WATER_FOG","1");
+ success = gDeferredFullbrightAlphaMaskWaterProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gDeferredFullbrightShinyProgram.mName = "Deferred FullbrightShiny Shader";
gDeferredFullbrightShinyProgram.mFeatures.calculatesAtmospherics = true;
gDeferredFullbrightShinyProgram.mFeatures.hasGamma = true;
@@ -1530,7 +1655,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredFullbrightShinyProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredFullbrightShinyProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- success = gDeferredFullbrightShinyProgram.createShader(NULL, &mShinyUniforms);
+ success = gDeferredFullbrightShinyProgram.createShader(NULL, NULL);
}
if (success)
@@ -1560,7 +1685,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredSkinnedFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredSkinnedFullbrightShinyProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredSkinnedFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gDeferredSkinnedFullbrightShinyProgram.createShader(NULL, &mShinyUniforms);
+ success = gDeferredSkinnedFullbrightShinyProgram.createShader(NULL, NULL);
}
if (success)
@@ -1588,7 +1713,21 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredWaterProgram.mShaderFiles.push_back(make_pair("deferred/waterV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredWaterProgram.mShaderFiles.push_back(make_pair("deferred/waterF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- success = gDeferredWaterProgram.createShader(NULL, &mWaterUniforms);
+ success = gDeferredWaterProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ // load water shader
+ gDeferredUnderWaterProgram.mName = "Deferred Under Water Shader";
+ gDeferredUnderWaterProgram.mFeatures.calculatesAtmospherics = true;
+ gDeferredUnderWaterProgram.mFeatures.hasGamma = true;
+ gDeferredUnderWaterProgram.mFeatures.hasTransport = true;
+ gDeferredUnderWaterProgram.mShaderFiles.clear();
+ gDeferredUnderWaterProgram.mShaderFiles.push_back(make_pair("deferred/waterV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredUnderWaterProgram.mShaderFiles.push_back(make_pair("deferred/underWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredUnderWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredUnderWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -1600,8 +1739,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredSoftenProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- SINGLE_FP_PERMUTATION(gDeferredSoftenProgram);
-
if (gSavedSettings.getBOOL("RenderDeferredSSAO"))
{ //if using SSAO, take screen space light map into account as if shadows are enabled
gDeferredSoftenProgram.mShaderLevel = llmax(gDeferredSoftenProgram.mShaderLevel, 2);
@@ -1612,6 +1749,25 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredSoftenWaterProgram.mName = "Deferred Soften Underwater Shader";
+ gDeferredSoftenWaterProgram.mShaderFiles.clear();
+ gDeferredSoftenWaterProgram.mShaderFiles.push_back(make_pair("deferred/softenLightV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredSoftenWaterProgram.mShaderFiles.push_back(make_pair("deferred/softenLightF.glsl", GL_FRAGMENT_SHADER_ARB));
+
+ gDeferredSoftenWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ gDeferredSoftenWaterProgram.addPermutation("WATER_FOG", "1");
+ gDeferredSoftenWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+
+ if (gSavedSettings.getBOOL("RenderDeferredSSAO"))
+ { //if using SSAO, take screen space light map into account as if shadows are enabled
+ gDeferredSoftenWaterProgram.mShaderLevel = llmax(gDeferredSoftenWaterProgram.mShaderLevel, 2);
+ }
+
+ success = gDeferredSoftenWaterProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gDeferredShadowProgram.mName = "Deferred Shadow Shader";
gDeferredShadowProgram.mShaderFiles.clear();
gDeferredShadowProgram.mShaderFiles.push_back(make_pair("deferred/shadowV.glsl", GL_VERTEX_SHADER_ARB));
@@ -1653,7 +1809,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAvatarShadowProgram.mShaderFiles.push_back(make_pair("deferred/avatarShadowF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredAvatarShadowProgram.addPermutation("DEPTH_CLAMP", gGLManager.mHasDepthClamp ? "1" : "0");
gDeferredAvatarShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- success = gDeferredAvatarShadowProgram.createShader(NULL, &mAvatarUniforms);
+ success = gDeferredAvatarShadowProgram.createShader(NULL, NULL);
}
if (success)
@@ -1675,7 +1831,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredTerrainProgram.mShaderFiles.push_back(make_pair("deferred/terrainV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredTerrainProgram.mShaderFiles.push_back(make_pair("deferred/terrainF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredTerrainProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- success = gDeferredTerrainProgram.createShader(NULL, &mTerrainUniforms);
+ success = gDeferredTerrainProgram.createShader(NULL, NULL);
}
if (success)
@@ -1686,18 +1842,14 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAvatarProgram.mShaderFiles.push_back(make_pair("deferred/avatarV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredAvatarProgram.mShaderFiles.push_back(make_pair("deferred/avatarF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredAvatarProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- success = gDeferredAvatarProgram.createShader(NULL, &mAvatarUniforms);
+ success = gDeferredAvatarProgram.createShader(NULL, NULL);
}
if (success)
{
gDeferredAvatarAlphaProgram.mName = "Avatar Alpha Shader";
- gDeferredAvatarAlphaProgram.mFeatures.atmosphericHelpers = true;
gDeferredAvatarAlphaProgram.mFeatures.hasSkinning = true;
gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = false;
- gDeferredAvatarAlphaProgram.mFeatures.calculatesAtmospherics = true;
- gDeferredAvatarAlphaProgram.mFeatures.hasGamma = true;
- gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true;
gDeferredAvatarAlphaProgram.mFeatures.hasLighting = false;
gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;
@@ -1709,7 +1861,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAvatarAlphaProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
- success = gDeferredAvatarAlphaProgram.createShader(NULL, &mAvatarUniforms);
+ success = gDeferredAvatarAlphaProgram.createShader(NULL, NULL);
gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = true;
gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true;
@@ -1784,7 +1936,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredWLSkyProgram.mShaderFiles.push_back(make_pair("deferred/skyF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredWLSkyProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
gDeferredWLSkyProgram.mShaderGroup = LLGLSLShader::SG_SKY;
- success = gDeferredWLSkyProgram.createShader(NULL, &mWLUniforms);
+ success = gDeferredWLSkyProgram.createShader(NULL, NULL);
}
if (success)
@@ -1795,7 +1947,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredWLCloudProgram.mShaderFiles.push_back(make_pair("deferred/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredWLCloudProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
gDeferredWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY;
- success = gDeferredWLCloudProgram.createShader(NULL, &mWLUniforms);
+ success = gDeferredWLCloudProgram.createShader(NULL, NULL);
}
if (success)
@@ -1806,7 +1958,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredStarProgram.mShaderFiles.push_back(make_pair("deferred/starsF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredStarProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
gDeferredStarProgram.mShaderGroup = LLGLSLShader::SG_SKY;
- success = gDeferredStarProgram.createShader(NULL, &mWLUniforms);
+ success = gDeferredStarProgram.createShader(NULL, NULL);
}
if (success)
@@ -1836,6 +1988,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightNoColorProgram.unload();
gObjectFullbrightNoColorWaterProgram.unload();
gObjectSimpleProgram.unload();
+ gObjectSimpleImpostorProgram.unload();
gObjectPreviewProgram.unload();
gImpostorProgram.unload();
gObjectSimpleAlphaMaskProgram.unload();
@@ -2157,7 +2310,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB));
gObjectShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectShinyNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gObjectShinyNonIndexedProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectShinyNonIndexedProgram.createShader(NULL, NULL);
}
if (success)
@@ -2174,7 +2327,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectShinyNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB));
gObjectShinyNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
gObjectShinyNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- success = gObjectShinyNonIndexedWaterProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectShinyNonIndexedWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -2190,7 +2343,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB));
gObjectFullbrightShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectFullbrightShinyNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gObjectFullbrightShinyNonIndexedProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectFullbrightShinyNonIndexedProgram.createShader(NULL, NULL);
}
if (success)
@@ -2208,7 +2361,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightShinyNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectFullbrightShinyNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
gObjectFullbrightShinyNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- success = gObjectFullbrightShinyNonIndexedWaterProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectFullbrightShinyNonIndexedWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -2258,6 +2411,27 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectSimpleImpostorProgram.mName = "Simple Impostor Shader";
+ gObjectSimpleImpostorProgram.mFeatures.calculatesLighting = true;
+ gObjectSimpleImpostorProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectSimpleImpostorProgram.mFeatures.hasGamma = true;
+ gObjectSimpleImpostorProgram.mFeatures.hasAtmospherics = true;
+ gObjectSimpleImpostorProgram.mFeatures.hasLighting = true;
+ gObjectSimpleImpostorProgram.mFeatures.mIndexedTextureChannels = 0;
+ // force alpha mask version of lighting so we can weed out
+ // transparent pixels from impostor temp buffer
+ //
+ gObjectSimpleImpostorProgram.mFeatures.hasAlphaMask = true;
+ gObjectSimpleImpostorProgram.mShaderFiles.clear();
+ gObjectSimpleImpostorProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectSimpleImpostorProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectSimpleImpostorProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+
+ success = gObjectSimpleImpostorProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectSimpleWaterProgram.mName = "Simple Water Shader";
gObjectSimpleWaterProgram.mFeatures.calculatesLighting = true;
gObjectSimpleWaterProgram.mFeatures.calculatesAtmospherics = true;
@@ -2287,12 +2461,11 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectBumpProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
success = gObjectBumpProgram.createShader(NULL, NULL);
-
if (success)
{ //lldrawpoolbump assumes "texture0" has channel 0 and "texture1" has channel 1
gObjectBumpProgram.bind();
- gObjectBumpProgram.uniform1i("texture0", 0);
- gObjectBumpProgram.uniform1i("texture1", 1);
+ gObjectBumpProgram.uniform1i(sTexture0, 0);
+ gObjectBumpProgram.uniform1i(sTexture1, 1);
gObjectBumpProgram.unbind();
}
}
@@ -2441,7 +2614,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectShinyProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB));
gObjectShinyProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gObjectShinyProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectShinyProgram.createShader(NULL, NULL);
}
if (success)
@@ -2458,7 +2631,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB));
gObjectShinyWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
gObjectShinyWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- success = gObjectShinyWaterProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectShinyWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -2474,7 +2647,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB));
gObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gObjectFullbrightShinyProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectFullbrightShinyProgram.createShader(NULL, NULL);
}
if (success)
@@ -2492,7 +2665,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectFullbrightShinyWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
gObjectFullbrightShinyWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- success = gObjectFullbrightShinyWaterProgram.createShader(NULL, &mShinyUniforms);
+ success = gObjectFullbrightShinyWaterProgram.createShader(NULL, NULL);
}
if (mVertexShaderLevel[SHADER_AVATAR] > 0)
@@ -2580,7 +2753,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB));
gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gSkinnedObjectFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gSkinnedObjectFullbrightShinyProgram.createShader(NULL, &mShinyUniforms);
+ success = gSkinnedObjectFullbrightShinyProgram.createShader(NULL, NULL);
}
if (success)
@@ -2598,7 +2771,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB));
gSkinnedObjectShinySimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gSkinnedObjectShinySimpleProgram.createShader(NULL, &mShinyUniforms);
+ success = gSkinnedObjectShinySimpleProgram.createShader(NULL, NULL);
}
if (success)
@@ -2657,7 +2830,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB));
gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
gSkinnedObjectFullbrightShinyWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gSkinnedObjectFullbrightShinyWaterProgram.createShader(NULL, &mShinyUniforms);
+ success = gSkinnedObjectFullbrightShinyWaterProgram.createShader(NULL, NULL);
}
if (success)
@@ -2677,7 +2850,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
gSkinnedObjectShinySimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
- success = gSkinnedObjectShinySimpleWaterProgram.createShader(NULL, &mShinyUniforms);
+ success = gSkinnedObjectShinySimpleWaterProgram.createShader(NULL, NULL);
}
}
@@ -2718,7 +2891,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB));
gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarF.glsl", GL_FRAGMENT_SHADER_ARB));
gAvatarProgram.mShaderLevel = mVertexShaderLevel[SHADER_AVATAR];
- success = gAvatarProgram.createShader(NULL, &mAvatarUniforms);
+ success = gAvatarProgram.createShader(NULL, NULL);
if (success)
{
@@ -2737,7 +2910,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
// Note: no cloth under water:
gAvatarWaterProgram.mShaderLevel = llmin(mVertexShaderLevel[SHADER_AVATAR], 1);
gAvatarWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
- success = gAvatarWaterProgram.createShader(NULL, &mAvatarUniforms);
+ success = gAvatarWaterProgram.createShader(NULL, NULL);
}
/// Keep track of avatar levels
@@ -2756,7 +2929,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarPickProgram.mShaderFiles.push_back(make_pair("avatar/pickAvatarV.glsl", GL_VERTEX_SHADER_ARB));
gAvatarPickProgram.mShaderFiles.push_back(make_pair("avatar/pickAvatarF.glsl", GL_FRAGMENT_SHADER_ARB));
gAvatarPickProgram.mShaderLevel = mVertexShaderLevel[SHADER_AVATAR];
- success = gAvatarPickProgram.createShader(NULL, &mAvatarUniforms);
+ success = gAvatarPickProgram.createShader(NULL, NULL);
}
if (success)
@@ -2878,7 +3051,7 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
if (success)
{
gSplatTextureRectProgram.bind();
- gSplatTextureRectProgram.uniform1i("screenMap", 0);
+ gSplatTextureRectProgram.uniform1i(sScreenMap, 0);
gSplatTextureRectProgram.unbind();
}
}
@@ -2894,8 +3067,8 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
if (success)
{
gGlowCombineProgram.bind();
- gGlowCombineProgram.uniform1i("glowMap", 0);
- gGlowCombineProgram.uniform1i("screenMap", 1);
+ gGlowCombineProgram.uniform1i(sGlowMap, 0);
+ gGlowCombineProgram.uniform1i(sScreenMap, 1);
gGlowCombineProgram.unbind();
}
}
@@ -2911,8 +3084,8 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
if (success)
{
gGlowCombineFXAAProgram.bind();
- gGlowCombineFXAAProgram.uniform1i("glowMap", 0);
- gGlowCombineFXAAProgram.uniform1i("screenMap", 1);
+ gGlowCombineFXAAProgram.uniform1i(sGlowMap, 0);
+ gGlowCombineFXAAProgram.uniform1i(sScreenMap, 1);
gGlowCombineFXAAProgram.unbind();
}
}
@@ -2929,8 +3102,8 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
if (success)
{
gTwoTextureAddProgram.bind();
- gTwoTextureAddProgram.uniform1i("tex0", 0);
- gTwoTextureAddProgram.uniform1i("tex1", 1);
+ gTwoTextureAddProgram.uniform1i(sTex0, 0);
+ gTwoTextureAddProgram.uniform1i(sTex1, 1);
}
}
@@ -2945,7 +3118,7 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
if (success)
{
gOneTextureNoColorProgram.bind();
- gOneTextureNoColorProgram.uniform1i("tex0", 0);
+ gOneTextureNoColorProgram.uniform1i(sTex0, 0);
}
}
@@ -2960,7 +3133,7 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
if (success)
{
gSolidColorProgram.bind();
- gSolidColorProgram.uniform1i("tex0", 0);
+ gSolidColorProgram.uniform1i(sTex0, 0);
gSolidColorProgram.unbind();
}
}
@@ -3064,7 +3237,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
gWLSkyProgram.mShaderFiles.push_back(make_pair("windlight/skyF.glsl", GL_FRAGMENT_SHADER_ARB));
gWLSkyProgram.mShaderLevel = mVertexShaderLevel[SHADER_WINDLIGHT];
gWLSkyProgram.mShaderGroup = LLGLSLShader::SG_SKY;
- success = gWLSkyProgram.createShader(NULL, &mWLUniforms);
+ success = gWLSkyProgram.createShader(NULL, NULL);
}
if (success)
@@ -3076,7 +3249,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
gWLCloudProgram.mShaderFiles.push_back(make_pair("windlight/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
gWLCloudProgram.mShaderLevel = mVertexShaderLevel[SHADER_WINDLIGHT];
gWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY;
- success = gWLCloudProgram.createShader(NULL, &mWLUniforms);
+ success = gWLCloudProgram.createShader(NULL, NULL);
}
return success;
@@ -3191,3 +3364,4 @@ LLViewerShaderMgr::shader_iter LLViewerShaderMgr::endShaders() const
{
return mShaderList.end();
}
+
diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h
index 438853cd6f..3d89f8d20a 100755
--- a/indra/newview/llviewershadermgr.h
+++ b/indra/newview/llviewershadermgr.h
@@ -30,6 +30,8 @@
#include "llshadermgr.h"
#include "llmaterial.h"
+#define LL_DEFERRED_MULTI_LIGHT_COUNT 16
+
class LLViewerShaderMgr: public LLShaderMgr
{
public:
@@ -75,57 +77,6 @@ public:
SHADER_COUNT
};
- typedef enum
- {
- SHINY_ORIGIN = END_RESERVED_UNIFORMS
- } eShinyUniforms;
-
- typedef enum
- {
- WATER_SCREENTEX = END_RESERVED_UNIFORMS,
- WATER_SCREENDEPTH,
- WATER_REFTEX,
- WATER_EYEVEC,
- WATER_TIME,
- WATER_WAVE_DIR1,
- WATER_WAVE_DIR2,
- WATER_LIGHT_DIR,
- WATER_SPECULAR,
- WATER_SPECULAR_EXP,
- WATER_FOGCOLOR,
- WATER_FOGDENSITY,
- WATER_REFSCALE,
- WATER_WATERHEIGHT,
- } eWaterUniforms;
-
- typedef enum
- {
- WL_CAMPOSLOCAL = END_RESERVED_UNIFORMS,
- WL_WATERHEIGHT
- } eWLUniforms;
-
- typedef enum
- {
- TERRAIN_DETAIL0 = END_RESERVED_UNIFORMS,
- TERRAIN_DETAIL1,
- TERRAIN_DETAIL2,
- TERRAIN_DETAIL3,
- TERRAIN_ALPHARAMP
- } eTerrainUniforms;
-
- typedef enum
- {
- GLOW_DELTA = END_RESERVED_UNIFORMS
- } eGlowUniforms;
-
- typedef enum
- {
- AVATAR_MATRIX = END_RESERVED_UNIFORMS,
- AVATAR_WIND,
- AVATAR_SINWAVE,
- AVATAR_GRAVITY,
- } eAvatarUniforms;
-
// simple model of forward iterator
// http://www.sgi.com/tech/stl/ForwardIterator.html
class shader_iter
@@ -240,6 +191,7 @@ extern LLGLSLShader gOneTextureNoColorProgram;
//object shaders
extern LLGLSLShader gObjectSimpleProgram;
+extern LLGLSLShader gObjectSimpleImpostorProgram;
extern LLGLSLShader gObjectPreviewProgram;
extern LLGLSLShader gObjectSimpleAlphaMaskProgram;
extern LLGLSLShader gObjectSimpleWaterProgram;
@@ -328,6 +280,7 @@ extern LLGLSLShader gPostNightVisionProgram;
// Deferred rendering shaders
extern LLGLSLShader gDeferredImpostorProgram;
extern LLGLSLShader gDeferredWaterProgram;
+extern LLGLSLShader gDeferredUnderWaterProgram;
extern LLGLSLShader gDeferredDiffuseProgram;
extern LLGLSLShader gDeferredDiffuseAlphaMaskProgram;
extern LLGLSLShader gDeferredNonIndexedDiffuseAlphaMaskProgram;
@@ -341,13 +294,14 @@ extern LLGLSLShader gDeferredTerrainProgram;
extern LLGLSLShader gDeferredTreeProgram;
extern LLGLSLShader gDeferredTreeShadowProgram;
extern LLGLSLShader gDeferredLightProgram;
-extern LLGLSLShader gDeferredMultiLightProgram;
+extern LLGLSLShader gDeferredMultiLightProgram[LL_DEFERRED_MULTI_LIGHT_COUNT];
extern LLGLSLShader gDeferredSpotLightProgram;
extern LLGLSLShader gDeferredMultiSpotLightProgram;
extern LLGLSLShader gDeferredSunProgram;
extern LLGLSLShader gDeferredBlurLightProgram;
extern LLGLSLShader gDeferredAvatarProgram;
extern LLGLSLShader gDeferredSoftenProgram;
+extern LLGLSLShader gDeferredSoftenWaterProgram;
extern LLGLSLShader gDeferredShadowProgram;
extern LLGLSLShader gDeferredShadowCubeProgram;
extern LLGLSLShader gDeferredShadowAlphaMaskProgram;
@@ -360,7 +314,12 @@ extern LLGLSLShader gDeferredPostGammaCorrectProgram;
extern LLGLSLShader gDeferredAvatarShadowProgram;
extern LLGLSLShader gDeferredAttachmentShadowProgram;
extern LLGLSLShader gDeferredAlphaProgram;
+extern LLGLSLShader gDeferredAlphaImpostorProgram;
extern LLGLSLShader gDeferredFullbrightProgram;
+extern LLGLSLShader gDeferredFullbrightAlphaMaskProgram;
+extern LLGLSLShader gDeferredAlphaWaterProgram;
+extern LLGLSLShader gDeferredFullbrightWaterProgram;
+extern LLGLSLShader gDeferredFullbrightAlphaMaskWaterProgram;
extern LLGLSLShader gDeferredEmissiveProgram;
extern LLGLSLShader gDeferredAvatarEyesProgram;
extern LLGLSLShader gDeferredAvatarAlphaProgram;
@@ -374,5 +333,5 @@ extern LLGLSLShader gNormalMapGenProgram;
// Deferred materials shaders
extern LLGLSLShader gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
-
+extern LLGLSLShader gDeferredMaterialWaterProgram[LLMaterial::SHADER_COUNT*2];
#endif
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 2de31cae98..2efe4665fa 100755
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -561,38 +561,62 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
llassert_always(mInitialized) ;
llassert(image);
if (image->isInImageList())
- {
- llerrs << "LLViewerTextureList::addImageToList - Image already in list" << llendl;
+ { // Flag is already set?
+ llwarns << "LLViewerTextureList::addImageToList - image " << image->getID() << " already in list" << llendl;
}
+ else
+ {
if((mImageList.insert(image)).second != true)
{
- llerrs << "Error happens when insert image to mImageList!" << llendl ;
+ llwarns << "Error happens when insert image " << image->getID() << " into mImageList!" << llendl ;
}
-
image->setInImageList(TRUE) ;
}
+}
void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
{
assert_main_thread();
llassert_always(mInitialized) ;
llassert(image);
- if (!image->isInImageList())
+
+ S32 count = 0;
+ if (image->isInImageList())
+ {
+ count = mImageList.erase(image) ;
+ if(count != 1)
{
- llinfos << "RefCount: " << image->getNumRefs() << llendl ;
+ llinfos << "Image " << image->getID()
+ << " had mInImageList set but mImageList.erase() returned " << count
+ << llendl;
+ }
+ }
+ else
+ { // Something is wrong, image is expected in list or callers should check first
+ llinfos << "Calling removeImageFromList() for " << image->getID()
+ << " but doesn't have mInImageList set"
+ << " ref count is " << image->getNumRefs()
+ << llendl;
uuid_map_t::iterator iter = mUUIDMap.find(image->getID());
- if(iter == mUUIDMap.end() || iter->second != image)
+ if(iter == mUUIDMap.end())
{
- llinfos << "Image is not in mUUIDMap!" << llendl ;
+ llinfos << "Image " << image->getID() << " is also not in mUUIDMap!" << llendl ;
}
- llerrs << "LLViewerTextureList::removeImageFromList - Image not in list" << llendl;
+ else if (iter->second != image)
+ {
+ llinfos << "Image " << image->getID() << " was in mUUIDMap but with different pointer" << llendl ;
}
-
- S32 count = mImageList.erase(image) ;
- if(count != 1)
+ else
{
- llinfos << image->getID() << llendl ;
- llerrs << "Error happens when remove image from mImageList: " << count << llendl ;
+ llinfos << "Image " << image->getID() << " was in mUUIDMap with same pointer" << llendl ;
+ }
+ count = mImageList.erase(image) ;
+ if(count != 0)
+ { // it was in the list already?
+ llwarns << "Image " << image->getID()
+ << " had mInImageList false but mImageList.erase() returned " << count
+ << llendl;
+ }
}
image->setInImageList(FALSE) ;
@@ -602,15 +626,15 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image)
{
if (!new_image)
{
- llwarning("No image to add to image list", 0);
return;
}
+ llassert(new_image);
LLUUID image_id = new_image->getID();
LLViewerFetchedTexture *image = findImage(image_id);
if (image)
{
- llwarns << "Image with ID " << image_id << " already in list" << llendl;
+ llinfos << "Image with ID " << image_id << " already in list" << llendl;
}
sNumImages++;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index f8e2a27f63..427ec361ec 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -151,6 +151,7 @@
#include "lltexturecache.h"
#include "lltexturefetch.h"
#include "lltextureview.h"
+#include "lltoast.h"
#include "lltool.h"
#include "lltoolbarview.h"
#include "lltoolcomp.h"
@@ -333,9 +334,10 @@ public:
mTextColor = LLColor4( 0.86f, 0.86f, 0.86f, 1.f );
// Draw stuff growing up from right lower corner of screen
- U32 xpos = mWindow->getWorldViewWidthScaled() - 350;
- U32 ypos = 64;
- const U32 y_inc = 20;
+ S32 xpos = mWindow->getWorldViewWidthScaled() - 400;
+ xpos = llmax(xpos, 0);
+ S32 ypos = 64;
+ const S32 y_inc = 20;
clearText();
@@ -635,6 +637,42 @@ public:
LLVertexBuffer::sSetCount = LLImageGL::sUniqueCount =
gPipeline.mNumVisibleNodes = LLPipeline::sVisibleLightCount = 0;
}
+ if (gSavedSettings.getBOOL("DebugShowAvatarRenderInfo"))
+ {
+ std::map<std::string, LLVOAvatar*> sorted_avs;
+
+ std::vector<LLCharacter*>::iterator sort_iter = LLCharacter::sInstances.begin();
+ while (sort_iter != LLCharacter::sInstances.end())
+ {
+ LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(*sort_iter);
+ if (avatar &&
+ !avatar->isDead()) // Not dead yet
+ {
+ // Stuff into a sorted map so the display is ordered
+ sorted_avs[avatar->getFullname()] = avatar;
+ }
+ sort_iter++;
+ }
+
+ std::string trunc_name;
+ std::map<std::string, LLVOAvatar*>::reverse_iterator av_iter = sorted_avs.rbegin(); // Put "A" at the top
+ while (av_iter != sorted_avs.rend())
+ {
+ LLVOAvatar* avatar = av_iter->second;
+
+ avatar->calculateUpdateRenderCost(); // Make sure the numbers are up-to-date
+
+ trunc_name = utf8str_truncate(avatar->getFullname(), 16);
+ addText(xpos, ypos, llformat("%s : rez %d, weight %d, bytes %d area %.2f",
+ trunc_name.c_str(),
+ avatar->getRezzedStatus(),
+ avatar->getVisualComplexity(),
+ avatar->getAttachmentGeometryBytes(),
+ avatar->getAttachmentSurfaceArea()));
+ ypos += y_inc;
+ av_iter++;
+ }
+ }
if (gSavedSettings.getBOOL("DebugShowRenderMatrices"))
{
addText(xpos, ypos, llformat("%.4f .%4f %.4f %.4f", gGLProjection[12], gGLProjection[13], gGLProjection[14], gGLProjection[15]));
@@ -1998,6 +2036,9 @@ void LLViewerWindow::shutdownViews()
}
llinfos << "Global views cleaned." << llendl ;
+ LLNotificationsUI::LLToast::cleanupToasts();
+ llinfos << "Leftover toast cleaned up." << llendl;
+
// DEV-40930: Clear sModalStack. Otherwise, any LLModalDialog left open
// will crump with LL_ERRS.
LLModalDialog::shutdownModals();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 3d268a1bcb..e528b57c5f 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -58,6 +58,7 @@
#include "llhudmanager.h"
#include "llhudnametag.h"
#include "llhudtext.h" // for mText/mDebugText
+#include "llimview.h"
#include "llinitparam.h"
#include "llkeyframefallmotion.h"
#include "llkeyframestandmotion.h"
@@ -666,8 +667,9 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
LLAvatarAppearance(&gAgentWearables),
LLViewerObject(id, pcode, regionp),
mSpecialRenderMode(0),
- mAttachmentGeometryBytes(0),
- mAttachmentSurfaceArea(0.f),
+ mAttachmentGeometryBytes(-1),
+ mAttachmentSurfaceArea(-1.f),
+ mReportedVisualComplexity(-1),
mTurning(FALSE),
mLastSkeletonSerialNum( 0 ),
mIsSitting(FALSE),
@@ -701,6 +703,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mFullyLoaded(FALSE),
mPreviousFullyLoaded(FALSE),
mFullyLoadedInitialized(FALSE),
+ mVisualComplexity(0),
+ mVisualComplexityStale(TRUE),
mLoadedCallbacksPaused(FALSE),
mHasPelvisOffset( FALSE ),
mRenderUnloadedAvatar(LLCachedControl<bool>(gSavedSettings, "RenderUnloadedAvatar")),
@@ -768,6 +772,13 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mLastPelvisToFoot = 0.0f;
mPelvisFixup = 0.0f;
mLastPelvisFixup = 0.0f;
+
+ mCachedVisualMute = !isSelf();
+ mCachedVisualMuteUpdateTime = LLFrameTimer::getTotalSeconds() + 5.0;
+ mVisuallyMuteSetting = VISUAL_MUTE_NOT_SET;
+
+ F32 color_value = (F32) (getID().mData[0]);
+ mMutedAVColor = calcMutedAVColor(color_value, 0, 256);
}
std::string LLVOAvatar::avString() const
@@ -2973,16 +2984,94 @@ void LLVOAvatar::slamPosition()
mRoot->updateWorldMatrixChildren();
}
-bool LLVOAvatar::isVisuallyMuted() const
+bool LLVOAvatar::isVisuallyMuted()
{
- static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit");
- static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit");
-
- return LLMuteList::getInstance()->isMuted(getID())
- || (mAttachmentGeometryBytes > max_attachment_bytes && max_attachment_bytes > 0)
- || (mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f);
+ bool muted = false;
+
+ if (!isSelf())
+ {
+ static LLCachedControl<U32> render_auto_mute_functions(gSavedSettings, "RenderAutoMuteFunctions");
+ if (render_auto_mute_functions) // Hacky debug switch for developing feature
+ {
+ // Priority order (highest priority first)
+ // * own avatar is never visually muted
+ // * if on the "always draw normally" list, draw them normally
+ // * if on the "always visually mute" list, mute them
+ // * draw them normally if they meet the following criteria:
+ // - within the closest N avatars OR on friends list OR in an IM chat
+ // - AND aren't over the thresholds
+ // * otherwise visually mute all other avatars
+
+ static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit");
+ static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit");
+ static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit");
+
+ if (mVisuallyMuteSetting == ALWAYS_VISUAL_MUTE)
+ { // Always want to see this AV as an impostor
+ muted = true;
+ }
+ else if (mVisuallyMuteSetting == NEVER_VISUAL_MUTE)
+ { // Never show as impostor
+ muted = false;
+ }
+ else
+ {
+ F64 now = LLFrameTimer::getTotalSeconds();
+
+ if (now < mCachedVisualMuteUpdateTime)
+ { // Use cached mute value
+ muted = mCachedVisualMute;
+ }
+ else
+ { // Determine if visually muted or not
+
+ U32 max_cost = (U32) (max_render_cost*(LLVOAvatar::sLODFactor+0.5));
+
+ muted = LLMuteList::getInstance()->isMuted(getID()) ||
+ (mAttachmentGeometryBytes > max_attachment_bytes && max_attachment_bytes > 0) ||
+ (mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f) ||
+ (mVisualComplexity > max_cost && max_render_cost > 0);
+
+ // Could be part of the grand || collection above, but yanked out to make the logic visible
+ if (!muted)
+ {
+ if (sMaxVisible > 0)
+ { // They are above the visibilty rank - mute them
+ muted = (mVisibilityRank > sMaxVisible);
+ }
+
+ // Always draw friends or those in IMs. Needs UI?
+ if ((render_auto_mute_functions & 0x02) &&
+ (muted || sMaxVisible == 0)) // Don't mute friends or IMs
+ {
+ muted = !(LLAvatarTracker::instance().isBuddy(getID()));
+ if (muted)
+ { // Not a friend, so they are muted ... are they in an IM?
+ LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL,getID());
+ muted = !gIMMgr->hasSession(session_id);
+ }
+ }
+ }
+
+ // Save visual mute state and set interval for updating
+ const F64 SECONDS_BETWEEN_RENDER_AUTO_MUTE_UPDATES = 1.5;
+ mCachedVisualMuteUpdateTime = now + SECONDS_BETWEEN_RENDER_AUTO_MUTE_UPDATES;
+ mCachedVisualMute = muted;
+ }
+ }
+ }
+ }
+
+ return muted;
}
+void LLVOAvatar::forceUpdateVisualMuteSettings()
+{
+ // Set the cache time so it's updated ASAP
+ mCachedVisualMuteUpdateTime = LLFrameTimer::getTotalSeconds() - 1.0;
+}
+
+
//------------------------------------------------------------------------
// updateCharacter()
// called on both your avatar and other avatars
@@ -3078,7 +3167,8 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
// the rest should only be done occasionally for far away avatars
//--------------------------------------------------------------------
- if (visible && (!isSelf() || isVisuallyMuted()) && !mIsDummy && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
+ bool visually_muted = isVisuallyMuted();
+ if (visible && (!isSelf() || visually_muted) && !mIsDummy && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
{
const LLVector4a* ext = mDrawable->getSpatialExtents();
LLVector4a size;
@@ -3087,8 +3177,8 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
F32 impostor_area = 256.f*512.f*(8.125f - LLVOAvatar::sLODFactor*8.f);
- if (isVisuallyMuted())
- { // muted avatars update at 16 hz
+ if (visually_muted)
+ { // visually muted avatars update at 16 hz
mUpdatePeriod = 16;
}
else if (mVisibilityRank <= LLVOAvatar::sMaxVisible ||
@@ -3727,11 +3817,11 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
{ //LOD changed or new mesh created, allocate new vertex buffer if needed
if (needs_rebuild || mDirtyMesh >= 2 || mVisibilityRank <= 4)
{
- updateMeshData();
+ updateMeshData();
mDirtyMesh = 0;
- mNeedsSkin = TRUE;
- mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
- }
+ mNeedsSkin = TRUE;
+ mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
+ }
}
if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) <= 0)
@@ -3889,9 +3979,11 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
BOOL first_pass = TRUE;
if (!LLDrawPoolAvatar::sSkipOpaque)
{
+ bool visually_muted = isVisuallyMuted();
+
if (!isSelf() || gAgent.needsRenderHead() || LLPipeline::sShadowRender)
{
- if (isTextureVisible(TEX_HEAD_BAKED) || mIsDummy)
+ if (isTextureVisible(TEX_HEAD_BAKED) || mIsDummy || visually_muted)
{
LLViewerJoint* head_mesh = getViewerJoint(MESH_ID_HEAD);
if (head_mesh)
@@ -3901,7 +3993,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
first_pass = FALSE;
}
}
- if (isTextureVisible(TEX_UPPER_BAKED) || mIsDummy)
+ if (isTextureVisible(TEX_UPPER_BAKED) || mIsDummy || visually_muted)
{
LLViewerJoint* upper_mesh = getViewerJoint(MESH_ID_UPPER_BODY);
if (upper_mesh)
@@ -3911,7 +4003,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
first_pass = FALSE;
}
- if (isTextureVisible(TEX_LOWER_BAKED) || mIsDummy)
+ if (isTextureVisible(TEX_LOWER_BAKED) || mIsDummy || visually_muted)
{
LLViewerJoint* lower_mesh = getViewerJoint(MESH_ID_LOWER_BODY);
if (lower_mesh)
@@ -5407,6 +5499,8 @@ const LLViewerJointAttachment *LLVOAvatar::attachObject(LLViewerObject *viewer_o
return 0;
}
+ mVisualComplexityStale = TRUE;
+
if (viewer_object->isSelected())
{
LLSelectMgr::getInstance()->updateSelectionCenter();
@@ -5556,7 +5650,7 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)
if (attachment->isObjectAttached(viewer_object))
{
-
+ mVisualComplexityStale = TRUE;
cleanupAttachedMesh( viewer_object );
attachment->removeObject(viewer_object);
@@ -7662,9 +7756,9 @@ void LLVOAvatar::updateImpostors()
LLCharacter::sAllowInstancesChange = TRUE ;
}
-BOOL LLVOAvatar::isImpostor() const
+BOOL LLVOAvatar::isImpostor()
{
- return (isVisuallyMuted() || (sUseImpostors && mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
+ return sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
}
@@ -7707,135 +7801,181 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d
angle.mV[2] = da;
}
+
void LLVOAvatar::idleUpdateRenderCost()
{
- static const U32 ARC_BODY_PART_COST = 200;
+ static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit");
static const U32 ARC_LIMIT = 20000;
- static std::set<LLUUID> all_textures;
-
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_ATTACHMENT_BYTES))
{ //set debug text to attachment geometry bytes here so render cost will override
setDebugText(llformat("%.1f KB, %.2f m^2", mAttachmentGeometryBytes/1024.f, mAttachmentSurfaceArea));
}
- if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHAME))
+ if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHAME) && max_render_cost == 0)
{
return;
}
- U32 cost = 0;
- LLVOVolume::texture_cost_t textures;
+ calculateUpdateRenderCost(); // Update mVisualComplexity if needed
+
+ if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHAME))
+ {
+ std::string viz_string = LLVOAvatar::rezStatusToString(getRezzedStatus());
+ setDebugText(llformat("%s %d", viz_string.c_str(), mVisualComplexity));
+ F32 green = 1.f-llclamp(((F32) mVisualComplexity-(F32)ARC_LIMIT)/(F32)ARC_LIMIT, 0.f, 1.f);
+ F32 red = llmin((F32) mVisualComplexity/(F32)ARC_LIMIT, 1.f);
+ mText->setColor(LLColor4(red,green,0,1));
+ }
+}
- for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
+
+// Calculations for mVisualComplexity value
+void LLVOAvatar::calculateUpdateRenderCost()
+{
+ static const U32 ARC_BODY_PART_COST = 200;
+
+ // Diagnostic list of all textures on our avatar
+ static std::set<LLUUID> all_textures;
+
+ if (mVisualComplexityStale)
{
- const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = LLAvatarAppearanceDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index);
- ETextureIndex tex_index = baked_dict->mTextureIndex;
- if ((tex_index != TEX_SKIRT_BAKED) || (isWearingWearableType(LLWearableType::WT_SKIRT)))
+ mVisualComplexityStale = FALSE;
+ U32 cost = 0;
+ LLVOVolume::texture_cost_t textures;
+
+ for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
{
- if (isTextureVisible(tex_index))
+ const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = LLAvatarAppearanceDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index);
+ ETextureIndex tex_index = baked_dict->mTextureIndex;
+ if ((tex_index != TEX_SKIRT_BAKED) || (isWearingWearableType(LLWearableType::WT_SKIRT)))
{
- cost +=ARC_BODY_PART_COST;
+ if (isTextureVisible(tex_index))
+ {
+ cost +=ARC_BODY_PART_COST;
+ }
}
}
- }
- for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();
- iter != mAttachmentPoints.end();
- ++iter)
- {
- LLViewerJointAttachment* attachment = iter->second;
- for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
- attachment_iter != attachment->mAttachedObjects.end();
- ++attachment_iter)
+ for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();
+ iter != mAttachmentPoints.end();
+ ++iter)
{
- const LLViewerObject* attached_object = (*attachment_iter);
- if (attached_object && !attached_object->isHUDAttachment())
+ LLViewerJointAttachment* attachment = iter->second;
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+ attachment_iter != attachment->mAttachedObjects.end();
+ ++attachment_iter)
{
- textures.clear();
- const LLDrawable* drawable = attached_object->mDrawable;
- if (drawable)
+ const LLViewerObject* attached_object = (*attachment_iter);
+ if (attached_object && !attached_object->isHUDAttachment())
{
- const LLVOVolume* volume = drawable->getVOVolume();
- if (volume)
+ textures.clear();
+ const LLDrawable* drawable = attached_object->mDrawable;
+ if (drawable)
{
- cost += volume->getRenderCost(textures);
-
- const_child_list_t children = volume->getChildren();
- for (const_child_list_t::const_iterator child_iter = children.begin();
- child_iter != children.end();
- ++child_iter)
+ const LLVOVolume* volume = drawable->getVOVolume();
+ if (volume)
{
- LLViewerObject* child_obj = *child_iter;
- LLVOVolume *child = dynamic_cast<LLVOVolume*>( child_obj );
- if (child)
+ cost += volume->getRenderCost(textures);
+
+ const_child_list_t children = volume->getChildren();
+ for (const_child_list_t::const_iterator child_iter = children.begin();
+ child_iter != children.end();
+ ++child_iter)
{
- cost += child->getRenderCost(textures);
+ LLViewerObject* child_obj = *child_iter;
+ LLVOVolume *child = dynamic_cast<LLVOVolume*>( child_obj );
+ if (child)
+ {
+ cost += child->getRenderCost(textures);
+ }
}
- }
- for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter)
- {
- // add the cost of each individual texture in the linkset
- cost += iter->second;
+ for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter)
+ {
+ // add the cost of each individual texture in the linkset
+ cost += iter->second;
+ }
}
}
}
}
- }
-
- }
-
+ }
- // Diagnostic output to identify all avatar-related textures.
- // Does not affect rendering cost calculation.
- // Could be wrapped in a debug option if output becomes problematic.
- if (isSelf())
- {
- // print any attachment textures we didn't already know about.
- for (LLVOVolume::texture_cost_t::iterator it = textures.begin(); it != textures.end(); ++it)
+ // Diagnostic output to identify all avatar-related textures.
+ // Does not affect rendering cost calculation.
+ // Could be wrapped in a debug option if output becomes problematic.
+ if (isSelf())
{
- LLUUID image_id = it->first;
- if( image_id.isNull() || image_id == IMG_DEFAULT || image_id == IMG_DEFAULT_AVATAR)
- continue;
- if (all_textures.find(image_id) == all_textures.end())
+ // print any attachment textures we didn't already know about.
+ for (LLVOVolume::texture_cost_t::iterator it = textures.begin(); it != textures.end(); ++it)
{
- // attachment texture not previously seen.
- llinfos << "attachment_texture: " << image_id.asString() << llendl;
- all_textures.insert(image_id);
+ LLUUID image_id = it->first;
+ if( image_id.isNull() || image_id == IMG_DEFAULT || image_id == IMG_DEFAULT_AVATAR)
+ continue;
+ if (all_textures.find(image_id) == all_textures.end())
+ {
+ // attachment texture not previously seen.
+ llinfos << "attachment_texture: " << image_id.asString() << llendl;
+ all_textures.insert(image_id);
+ }
}
- }
- // print any avatar textures we didn't already know about
- for (LLAvatarAppearanceDictionary::Textures::const_iterator iter = LLAvatarAppearanceDictionary::getInstance()->getTextures().begin();
+ // print any avatar textures we didn't already know about
+ for (LLAvatarAppearanceDictionary::Textures::const_iterator iter = LLAvatarAppearanceDictionary::getInstance()->getTextures().begin();
iter != LLAvatarAppearanceDictionary::getInstance()->getTextures().end();
- ++iter)
- {
- const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = iter->second;
- // TODO: MULTI-WEARABLE: handle multiple textures for self
- const LLViewerTexture* te_image = getImage(iter->first,0);
- if (!te_image)
- continue;
- LLUUID image_id = te_image->getID();
- if( image_id.isNull() || image_id == IMG_DEFAULT || image_id == IMG_DEFAULT_AVATAR)
- continue;
- if (all_textures.find(image_id) == all_textures.end())
+ ++iter)
{
- llinfos << "local_texture: " << texture_dict->mName << ": " << image_id << llendl;
- all_textures.insert(image_id);
+ const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = iter->second;
+ // TODO: MULTI-WEARABLE: handle multiple textures for self
+ const LLViewerTexture* te_image = getImage(iter->first,0);
+ if (!te_image)
+ continue;
+ LLUUID image_id = te_image->getID();
+ if( image_id.isNull() || image_id == IMG_DEFAULT || image_id == IMG_DEFAULT_AVATAR)
+ continue;
+ if (all_textures.find(image_id) == all_textures.end())
+ {
+ llinfos << "local_texture: " << texture_dict->mName << ": " << image_id << llendl;
+ all_textures.insert(image_id);
+ }
}
}
+
+ mVisualComplexity = cost;
}
+}
-
- std::string viz_string = LLVOAvatar::rezStatusToString(getRezzedStatus());
- setDebugText(llformat("%s %d", viz_string.c_str(), cost));
- mVisualComplexity = cost;
- F32 green = 1.f-llclamp(((F32) cost-(F32)ARC_LIMIT)/(F32)ARC_LIMIT, 0.f, 1.f);
- F32 red = llmin((F32) cost/(F32)ARC_LIMIT, 1.f);
- mText->setColor(LLColor4(red,green,0,1));
+
+// static
+LLColor4 LLVOAvatar::calcMutedAVColor(F32 value, S32 range_low, S32 range_high)
+{
+ F32 clamped_value = llmin(value, (F32) range_high);
+ clamped_value = llmax(value, (F32) range_low);
+ F32 spectrum = (clamped_value / range_high); // spectrum is between 0 and 1.f
+
+ // Array of colors. These are arranged so only one RGB color changes between each step,
+ // and it loops back to red so there is an even distribution. It is not a heat map
+ const S32 NUM_SPECTRUM_COLORS = 7;
+ static LLColor4 * spectrum_color[NUM_SPECTRUM_COLORS] = { &LLColor4::red, &LLColor4::magenta, &LLColor4::blue, &LLColor4::cyan, &LLColor4::green, &LLColor4::yellow, &LLColor4::red };
+
+ spectrum = spectrum * (NUM_SPECTRUM_COLORS - 1); // Scale to range of number of colors
+ S32 spectrum_index_1 = floor(spectrum); // Desired color will be after this index
+ S32 spectrum_index_2 = spectrum_index_1 + 1; // and before this index (inclusive)
+ F32 fractBetween = spectrum - (F32)(spectrum_index_1); // distance between the two indexes (0-1)
+
+ LLColor4 new_color = lerp(*spectrum_color[spectrum_index_1], *spectrum_color[spectrum_index_2], fractBetween);
+ new_color.normalize();
+ new_color *= 0.7f; // Tone it down a bit
+
+ //llinfos << "From value " << std::setprecision(3) << value << " returning color " << new_color
+ // << " using indexes " << spectrum_index_1 << ", " << spectrum_index_2
+ // << " and fractBetween " << fractBetween
+ // << llendl;
+
+ return new_color;
}
// static
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index d297ce2b91..b838bec7dc 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -246,6 +246,20 @@ public:
static void invalidateNameTags();
void addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font);
void idleUpdateRenderCost();
+ void calculateUpdateRenderCost();
+ void updateVisualComplexity() { mVisualComplexityStale = TRUE; }
+
+ S32 getVisualComplexity() { return mVisualComplexity; }; // Numbers calculated here by rendering AV
+ S32 getAttachmentGeometryBytes() { return mAttachmentGeometryBytes; }; // number of bytes in attached geometry
+ F32 getAttachmentSurfaceArea() { return mAttachmentSurfaceArea; }; // estimated surface area of attachments
+
+ S32 getReportedVisualComplexity() { return mReportedVisualComplexity; }; // Numbers as reported by the SL server
+ void setReportedVisualComplexity(S32 value) { mReportedVisualComplexity = value; };
+
+ S32 getUpdatePeriod() { return mUpdatePeriod; };
+ const LLColor4 & getMutedAVColor() { return mMutedAVColor; };
+
+
void idleUpdateBelowWater();
//--------------------------------------------------------------------
@@ -299,12 +313,15 @@ public:
static void logPendingPhasesAllAvatars();
void logMetricsTimerRecord(const std::string& phase_name, F32 elapsed, bool completed);
+ static LLColor4 calcMutedAVColor(F32 value, S32 range_low, S32 range_high);
+
protected:
LLViewerStats::PhaseMap& getPhases() { return mPhases; }
BOOL updateIsFullyLoaded();
BOOL processFullyLoadedChange(bool loading);
void updateRuthTimer(bool loading);
F32 calcMorphAmount();
+
private:
BOOL mFirstFullyVisible;
BOOL mFullyLoaded;
@@ -312,6 +329,8 @@ private:
BOOL mFullyLoadedInitialized;
S32 mFullyLoadedFrameCounter;
S32 mVisualComplexity;
+ BOOL mVisualComplexityStale;
+ LLColor4 mMutedAVColor;
LLFrameTimer mFullyLoadedTimer;
LLFrameTimer mRuthTimer;
@@ -365,7 +384,18 @@ public:
public:
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
- bool isVisuallyMuted() const;
+ bool isVisuallyMuted();
+ void setCachedVisualMute(bool muted) { mCachedVisualMute = muted; };
+ void forceUpdateVisualMuteSettings();
+
+ enum VisualMuteSettings
+ {
+ VISUAL_MUTE_NOT_SET = 0,
+ ALWAYS_VISUAL_MUTE = 1,
+ NEVER_VISUAL_MUTE = 2
+ };
+ void setVisualMuteSettings(VisualMuteSettings set) { mVisuallyMuteSetting = set; };
+ VisualMuteSettings getVisualMuteSettings() { return mVisuallyMuteSetting; };
U32 renderRigid();
U32 renderSkinned(EAvatarRenderPass pass);
@@ -376,9 +406,11 @@ public:
static void destroyGL();
static void restoreGL();
S32 mSpecialRenderMode; // special lighting
- U32 mAttachmentGeometryBytes; //number of bytes in attached geometry
+ S32 mAttachmentGeometryBytes; //number of bytes in attached geometry
F32 mAttachmentSurfaceArea; //estimated surface area of attachments
+ S32 mReportedVisualComplexity; // Numbers as reported by the SL server
+
private:
bool shouldAlphaMask();
@@ -388,6 +420,11 @@ private:
S32 mUpdatePeriod;
S32 mNumInitFaces; //number of faces generated when creating the avatar drawable, does not inculde splitted faces due to long vertex buffer.
+ bool mCachedVisualMute; // cached return value for isVisuallyMuted()
+ F64 mCachedVisualMuteUpdateTime; // Time to update mCachedVisualMute
+
+ VisualMuteSettings mVisuallyMuteSetting; // Always or never visually mute this AV
+
//--------------------------------------------------------------------
// Morph masks
//--------------------------------------------------------------------
@@ -426,7 +463,7 @@ private:
// Impostors
//--------------------------------------------------------------------
public:
- BOOL isImpostor() const;
+ BOOL isImpostor();
BOOL needsImpostorUpdate() const;
const LLVector3& getImpostorOffset() const;
const LLVector2& getImpostorDim() const;
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index cab5c4bc1d..591d5cae0b 100755
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -476,6 +476,7 @@ void LLVOGrass::getGeometry(S32 idx,
LLStrider<LLVector3>& normalsp,
LLStrider<LLVector2>& texcoordsp,
LLStrider<LLColor4U>& colorsp,
+ LLStrider<LLColor4U>& emissivep,
LLStrider<U16>& indicesp)
{
if(!mNumBlades)//stop rendering grass
@@ -708,7 +709,11 @@ void LLGrassPartition::getGeometry(LLSpatialGroup* group)
facep->setIndicesIndex(index_count);
facep->setVertexBuffer(buffer);
facep->setPoolType(LLDrawPool::POOL_ALPHA);
- object->getGeometry(facep->getTEOffset(), verticesp, normalsp, texcoordsp, colorsp, indicesp);
+
+ //dummy parameter (unused by this implementation)
+ LLStrider<LLColor4U> emissivep;
+
+ object->getGeometry(facep->getTEOffset(), verticesp, normalsp, texcoordsp, colorsp, emissivep, indicesp);
vertex_count += facep->getGeomCount();
index_count += facep->getIndicesCount();
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 122806766d..e54de85412 100755
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -63,6 +63,7 @@ public:
LLStrider<LLVector3>& normalsp,
LLStrider<LLVector2>& texcoordsp,
LLStrider<LLColor4U>& colorsp,
+ LLStrider<LLColor4U>& emissivep,
LLStrider<U16>& indicesp);
void updateFaceSize(S32 idx) { }
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index d30fd5677d..1e02237f6b 100755
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -531,25 +531,25 @@ void LLVivoxVoiceClient::requestVoiceAccountProvision(S32 retries)
{
LLViewerRegion *region = gAgent.getRegion();
- if ( region && (mVoiceEnabled || !mIsInitialized))
+ // If we've not received the capability yet, return.
+ // the password will remain empty, so we'll remain in
+ // stateIdle
+ if ( region &&
+ region->capabilitiesReceived() &&
+ (mVoiceEnabled || !mIsInitialized))
{
std::string url =
region->getCapability("ProvisionVoiceAccountRequest");
- if ( url.empty() )
+ if ( !url.empty() )
{
- // we've not received the capability yet, so return.
- // the password will remain empty, so we'll remain in
- // stateIdle
- return;
- }
-
- LLHTTPClient::post(
- url,
- LLSD(),
- new LLVivoxVoiceAccountProvisionResponder(retries));
+ LLHTTPClient::post(
+ url,
+ LLSD(),
+ new LLVivoxVoiceAccountProvisionResponder(retries));
- setState(stateConnectorStart);
+ setState(stateConnectorStart);
+ }
}
}
@@ -6900,6 +6900,9 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
*/
// We don't need to process this, but we also shouldn't warn on it, since that confuses people.
}
+ else if (!stricmp(eventTypeCstr, "VoiceServiceConnectionStateChangedEvent"))
+ { // Yet another ignored event
+ }
else
{
LL_WARNS("VivoxProtocolParser") << "Unknown event type " << eventTypeString << LL_ENDL;
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 8ed86b4fd5..9f4f11b317 100755
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -49,17 +49,11 @@ const F32 MAX_PART_LIFETIME = 120.f;
extern U64 gFrameTime;
LLPointer<LLVertexBuffer> LLVOPartGroup::sVB = NULL;
-S32 LLVOPartGroup::sVBSlotFree[];
-S32* LLVOPartGroup::sVBSlotCursor = NULL;
+S32 LLVOPartGroup::sVBSlotCursor = 0;
void LLVOPartGroup::initClass()
{
- for (S32 i = 0; i < LL_MAX_PARTICLE_COUNT; ++i)
- {
- sVBSlotFree[i] = i;
- }
-
- sVBSlotCursor = sVBSlotFree;
+
}
//static
@@ -124,36 +118,33 @@ void LLVOPartGroup::destroyGL()
//static
S32 LLVOPartGroup::findAvailableVBSlot()
{
- if (sVBSlotCursor >= sVBSlotFree+LL_MAX_PARTICLE_COUNT)
+ if (sVBSlotCursor >= LL_MAX_PARTICLE_COUNT)
{ //no more available slots
return -1;
}
- S32 ret = *sVBSlotCursor;
- sVBSlotCursor++;
-
- return ret;
+ return sVBSlotCursor++;
}
bool ll_is_part_idx_allocated(S32 idx, S32* start, S32* end)
{
- while (start < end)
+ /*while (start < end)
{
if (*start == idx)
{ //not allocated (in free list)
return false;
}
++start;
- }
+ }*/
//allocated (not in free list)
- return true;
+ return false;
}
//static
void LLVOPartGroup::freeVBSlot(S32 idx)
{
- llassert(idx < LL_MAX_PARTICLE_COUNT && idx >= 0);
+ /*llassert(idx < LL_MAX_PARTICLE_COUNT && idx >= 0);
//llassert(sVBSlotCursor > sVBSlotFree);
//llassert(ll_is_part_idx_allocated(idx, sVBSlotCursor, sVBSlotFree+LL_MAX_PARTICLE_COUNT));
@@ -161,7 +152,7 @@ void LLVOPartGroup::freeVBSlot(S32 idx)
{
sVBSlotCursor--;
*sVBSlotCursor = idx;
- }
+ }*/
}
LLVOPartGroup::LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
@@ -185,23 +176,28 @@ BOOL LLVOPartGroup::isActive() const
F32 LLVOPartGroup::getBinRadius()
{
- return mScale.mV[0]*2.f;
+ return mViewerPartGroupp->getBoxSide();
}
void LLVOPartGroup::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
{
const LLVector3& pos_agent = getPositionAgent();
- newMin.load3( (pos_agent - mScale).mV);
- newMax.load3( (pos_agent + mScale).mV);
+
+ LLVector4a scale;
+ LLVector4a p;
+
+ p.load3(pos_agent.mV);
+
+ scale.splat(mScale.mV[0]+mViewerPartGroupp->getBoxSide()*0.5f);
+
+ newMin.setSub(p, scale);
+ newMax.setAdd(p,scale);
llassert(newMin.isFinite3());
llassert(newMax.isFinite3());
- LLVector4a pos;
- pos.load3(pos_agent.mV);
-
- llassert(pos.isFinite3());
- mDrawable->setPositionGroup(pos);
+ llassert(p.isFinite3());
+ mDrawable->setPositionGroup(p);
}
void LLVOPartGroup::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
@@ -281,6 +277,16 @@ F32 LLVOPartGroup::getPartSize(S32 idx)
return 0.f;
}
+void LLVOPartGroup::getBlendFunc(S32 idx, U32& src, U32& dst)
+{
+ if (idx < (S32) mViewerPartGroupp->mParticles.size())
+ {
+ LLViewerPart* part = mViewerPartGroupp->mParticles[idx];
+ src = part->mBlendFuncSource;
+ dst = part->mBlendFuncDest;
+ }
+}
+
LLVector3 LLVOPartGroup::getCameraPosition() const
{
return gAgentCamera.getCameraPositionAgent();
@@ -340,13 +346,42 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
mDepth = 0.f;
S32 i = 0 ;
LLVector3 camera_agent = getCameraPosition();
+
+ F32 max_scale = 0.f;
+
+
for (i = 0 ; i < (S32)mViewerPartGroupp->mParticles.size(); i++)
{
const LLViewerPart *part = mViewerPartGroupp->mParticles[i];
+
+ //remember the largest particle
+ max_scale = llmax(max_scale, part->mScale.mV[0], part->mScale.mV[1]);
+
+ if (part->mFlags & LLPartData::LL_PART_RIBBON_MASK)
+ { //include ribbon segment length in scale
+ const LLVector3* pos_agent = NULL;
+ if (part->mParent)
+ {
+ pos_agent = &(part->mParent->mPosAgent);
+ }
+ else if (part->mPartSourcep.notNull())
+ {
+ pos_agent = &(part->mPartSourcep->mPosAgent);
+ }
+
+ if (pos_agent)
+ {
+ F32 dist = (*pos_agent-part->mPosAgent).length();
+
+ max_scale = llmax(max_scale, dist);
+ }
+ }
+
LLVector3 part_pos_agent(part->mPosAgent);
LLVector3 at(part_pos_agent - camera_agent);
+
F32 camera_dist_squared = at.lengthSquared();
F32 inv_camera_dist_squared;
if (camera_dist_squared > 1.f)
@@ -423,6 +458,10 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
facep->setSize(0, 0);
}
+ //record max scale (used to stretch bounding box for visibility culling)
+
+ mScale.set(max_scale, max_scale, max_scale);
+
mDrawable->movePartition();
LLPipeline::sCompiles++;
return TRUE;
@@ -485,75 +524,130 @@ BOOL LLVOPartGroup::lineSegmentIntersect(const LLVector4a& start, const LLVector
void LLVOPartGroup::getGeometry(const LLViewerPart& part,
LLStrider<LLVector4a>& verticesp)
{
- LLVector4a part_pos_agent;
- part_pos_agent.load3(part.mPosAgent.mV);
- LLVector4a camera_agent;
- camera_agent.load3(getCameraPosition().mV);
- LLVector4a at;
- at.setSub(part_pos_agent, camera_agent);
- LLVector4a up(0, 0, 1);
- LLVector4a right;
-
- right.setCross3(at, up);
- right.normalize3fast();
-
- up.setCross3(right, at);
- up.normalize3fast();
-
- if (part.mFlags & LLPartData::LL_PART_FOLLOW_VELOCITY_MASK)
+ if (part.mFlags & LLPartData::LL_PART_RIBBON_MASK)
{
- LLVector4a normvel;
- normvel.load3(part.mVelocity.mV);
- normvel.normalize3fast();
- LLVector2 up_fracs;
- up_fracs.mV[0] = normvel.dot3(right).getF32();
- up_fracs.mV[1] = normvel.dot3(up).getF32();
- up_fracs.normalize();
- LLVector4a new_up;
- LLVector4a new_right;
-
- //new_up = up_fracs.mV[0] * right + up_fracs.mV[1]*up;
- LLVector4a t = right;
- t.mul(up_fracs.mV[0]);
- new_up = up;
- new_up.mul(up_fracs.mV[1]);
- new_up.add(t);
-
- //new_right = up_fracs.mV[1] * right - up_fracs.mV[0]*up;
- t = right;
- t.mul(up_fracs.mV[1]);
- new_right = up;
- new_right.mul(up_fracs.mV[0]);
- t.sub(new_right);
-
- up = new_up;
- right = t;
- up.normalize3fast();
- right.normalize3fast();
+ LLVector4a axis, pos, paxis, ppos;
+ F32 scale, pscale;
+
+ pos.load3(part.mPosAgent.mV);
+ axis.load3(part.mAxis.mV);
+ scale = part.mScale.mV[0];
+
+ if (part.mParent)
+ {
+ ppos.load3(part.mParent->mPosAgent.mV);
+ paxis.load3(part.mParent->mAxis.mV);
+ pscale = part.mParent->mScale.mV[0];
+ }
+ else
+ { //use source object as position
+
+ if (part.mPartSourcep->mSourceObjectp.notNull())
+ {
+ LLVector3 v = LLVector3(0,0,1);
+ v *= part.mPartSourcep->mSourceObjectp->getRenderRotation();
+ paxis.load3(v.mV);
+ ppos.load3(part.mPartSourcep->mPosAgent.mV);
+ pscale = part.mStartScale.mV[0];
+ }
+ else
+ { //no source object, no parent, nothing to draw
+ ppos = pos;
+ pscale = scale;
+ paxis = axis;
+ }
+ }
+
+ LLVector4a p0, p1, p2, p3;
+
+ scale *= 0.5f;
+ pscale *= 0.5f;
+
+ axis.mul(scale);
+ paxis.mul(pscale);
+
+ p0.setAdd(pos, axis);
+ p1.setSub(pos,axis);
+ p2.setAdd(ppos, paxis);
+ p3.setSub(ppos, paxis);
+
+ (*verticesp++) = p2;
+ (*verticesp++) = p3;
+ (*verticesp++) = p0;
+ (*verticesp++) = p1;
}
+ else
+ {
+ LLVector4a part_pos_agent;
+ part_pos_agent.load3(part.mPosAgent.mV);
+ LLVector4a camera_agent;
+ camera_agent.load3(getCameraPosition().mV);
+ LLVector4a at;
+ at.setSub(part_pos_agent, camera_agent);
+ LLVector4a up(0, 0, 1);
+ LLVector4a right;
+
+ right.setCross3(at, up);
+ right.normalize3fast();
- right.mul(0.5f*part.mScale.mV[0]);
- up.mul(0.5f*part.mScale.mV[1]);
+ up.setCross3(right, at);
+ up.normalize3fast();
+ if (part.mFlags & LLPartData::LL_PART_FOLLOW_VELOCITY_MASK)
+ {
+ LLVector4a normvel;
+ normvel.load3(part.mVelocity.mV);
+ normvel.normalize3fast();
+ LLVector2 up_fracs;
+ up_fracs.mV[0] = normvel.dot3(right).getF32();
+ up_fracs.mV[1] = normvel.dot3(up).getF32();
+ up_fracs.normalize();
+ LLVector4a new_up;
+ LLVector4a new_right;
+
+ //new_up = up_fracs.mV[0] * right + up_fracs.mV[1]*up;
+ LLVector4a t = right;
+ t.mul(up_fracs.mV[0]);
+ new_up = up;
+ new_up.mul(up_fracs.mV[1]);
+ new_up.add(t);
+
+ //new_right = up_fracs.mV[1] * right - up_fracs.mV[0]*up;
+ t = right;
+ t.mul(up_fracs.mV[1]);
+ new_right = up;
+ new_right.mul(up_fracs.mV[0]);
+ t.sub(new_right);
+
+ up = new_up;
+ right = t;
+ up.normalize3fast();
+ right.normalize3fast();
+ }
+
+ right.mul(0.5f*part.mScale.mV[0]);
+ up.mul(0.5f*part.mScale.mV[1]);
- //HACK -- the verticesp->mV[3] = 0.f here are to set the texture index to 0 (particles don't use texture batching, maybe they should)
- // this works because there is actually a 4th float stored after the vertex position which is used as a texture index
- // also, somebody please VECTORIZE THIS
- LLVector4a ppapu;
- LLVector4a ppamu;
+ //HACK -- the verticesp->mV[3] = 0.f here are to set the texture index to 0 (particles don't use texture batching, maybe they should)
+ // this works because there is actually a 4th float stored after the vertex position which is used as a texture index
+ // also, somebody please VECTORIZE THIS
- ppapu.setAdd(part_pos_agent, up);
- ppamu.setSub(part_pos_agent, up);
+ LLVector4a ppapu;
+ LLVector4a ppamu;
- verticesp->setSub(ppapu, right);
- (*verticesp++).getF32ptr()[3] = 0.f;
- verticesp->setSub(ppamu, right);
- (*verticesp++).getF32ptr()[3] = 0.f;
- verticesp->setAdd(ppapu, right);
- (*verticesp++).getF32ptr()[3] = 0.f;
- verticesp->setAdd(ppamu, right);
- (*verticesp++).getF32ptr()[3] = 0.f;
+ ppapu.setAdd(part_pos_agent, up);
+ ppamu.setSub(part_pos_agent, up);
+
+ verticesp->setSub(ppapu, right);
+ (*verticesp++).getF32ptr()[3] = 0.f;
+ verticesp->setSub(ppamu, right);
+ (*verticesp++).getF32ptr()[3] = 0.f;
+ verticesp->setAdd(ppapu, right);
+ (*verticesp++).getF32ptr()[3] = 0.f;
+ verticesp->setAdd(ppamu, right);
+ (*verticesp++).getF32ptr()[3] = 0.f;
+ }
}
@@ -563,6 +657,7 @@ void LLVOPartGroup::getGeometry(S32 idx,
LLStrider<LLVector3>& normalsp,
LLStrider<LLVector2>& texcoordsp,
LLStrider<LLColor4U>& colorsp,
+ LLStrider<LLColor4U>& emissivep,
LLStrider<U16>& indicesp)
{
if (idx >= (S32) mViewerPartGroupp->mParticles.size())
@@ -574,10 +669,43 @@ void LLVOPartGroup::getGeometry(S32 idx,
getGeometry(part, verticesp);
- *colorsp++ = part.mColor;
- *colorsp++ = part.mColor;
- *colorsp++ = part.mColor;
- *colorsp++ = part.mColor;
+ LLColor4U pcolor;
+ LLColor4U color = part.mColor;
+
+ LLColor4U pglow;
+
+ if (part.mFlags & LLPartData::LL_PART_RIBBON_MASK)
+ { //make sure color blends properly
+ if (part.mParent)
+ {
+ pglow = part.mParent->mGlow;
+ pcolor = part.mParent->mColor;
+ }
+ else
+ {
+ pglow = LLColor4U(0, 0, 0, (U8) llround(255.f*part.mStartGlow));
+ pcolor = part.mStartColor;
+ }
+ }
+ else
+ {
+ pglow = part.mGlow;
+ pcolor = color;
+ }
+
+ *colorsp++ = pcolor;
+ *colorsp++ = pcolor;
+ *colorsp++ = color;
+ *colorsp++ = color;
+
+ //if (pglow.mV[3] || part.mGlow.mV[3])
+ { //only write glow if it is not zero
+ *emissivep++ = pglow;
+ *emissivep++ = pglow;
+ *emissivep++ = part.mGlow;
+ *emissivep++ = part.mGlow;
+ }
+
if (!(part.mFlags & LLPartData::LL_PART_EMISSIVE_MASK))
{ //not fullbright, needs normal
@@ -720,10 +848,13 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
LLStrider<LLVector3> normalsp;
LLStrider<LLVector2> texcoordsp;
LLStrider<LLColor4U> colorsp;
+ LLStrider<LLColor4U> emissivep;
buffer->getVertexStrider(verticesp);
buffer->getNormalStrider(normalsp);
buffer->getColorStrider(colorsp);
+ buffer->getEmissiveStrider(emissivep);
+
LLSpatialGroup::drawmap_elem_t& draw_vec = group->mDrawMap[mRenderPass];
@@ -732,7 +863,7 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
LLFace* facep = *i;
LLAlphaObject* object = (LLAlphaObject*) facep->getViewerObject();
- if (!facep->isState(LLFace::PARTICLE))
+ //if (!facep->isState(LLFace::PARTICLE))
{ //set the indices of this face
S32 idx = LLVOPartGroup::findAvailableVBSlot();
if (idx >= 0)
@@ -741,7 +872,7 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
facep->setIndicesIndex(idx*6);
facep->setVertexBuffer(LLVOPartGroup::sVB);
facep->setPoolType(LLDrawPool::POOL_ALPHA);
- facep->setState(LLFace::PARTICLE);
+ //facep->setState(LLFace::PARTICLE);
}
else
{
@@ -756,9 +887,19 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
LLStrider<LLVector3> cur_norm = normalsp + geom_idx;
LLStrider<LLVector2> cur_tc = texcoordsp + geom_idx;
LLStrider<LLColor4U> cur_col = colorsp + geom_idx;
+ LLStrider<LLColor4U> cur_glow = emissivep + geom_idx;
+
+ LLColor4U* start_glow = cur_glow.get();
- object->getGeometry(facep->getTEOffset(), cur_vert, cur_norm, cur_tc, cur_col, cur_idx);
+ object->getGeometry(facep->getTEOffset(), cur_vert, cur_norm, cur_tc, cur_col, cur_glow, cur_idx);
+ BOOL has_glow = FALSE;
+
+ if (cur_glow.get() != start_glow)
+ {
+ has_glow = TRUE;
+ }
+
llassert(facep->getGeomCount() == 4);
llassert(facep->getIndicesCount() == 6);
@@ -773,24 +914,37 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
bool batched = false;
- if (idx >= 0 &&
- draw_vec[idx]->mTexture == facep->getTexture() &&
- draw_vec[idx]->mFullbright == fullbright)
+ U32 bf_src = LLRender::BF_SOURCE_ALPHA;
+ U32 bf_dst = LLRender::BF_ONE_MINUS_SOURCE_ALPHA;
+
+ object->getBlendFunc(facep->getTEOffset(), bf_src, bf_dst);
+
+
+ if (idx >= 0)
{
- if (draw_vec[idx]->mEnd == facep->getGeomIndex()-1)
- {
- batched = true;
- draw_vec[idx]->mCount += facep->getIndicesCount();
- draw_vec[idx]->mEnd += facep->getGeomCount();
- draw_vec[idx]->mVSize = llmax(draw_vec[idx]->mVSize, vsize);
- }
- else if (draw_vec[idx]->mStart == facep->getGeomIndex()+facep->getGeomCount()+1)
+ LLDrawInfo* info = draw_vec[idx];
+
+ if (info->mTexture == facep->getTexture() &&
+ info->mHasGlow == has_glow &&
+ info->mFullbright == fullbright &&
+ info->mBlendFuncDst == bf_dst &&
+ info->mBlendFuncSrc == bf_src)
{
- batched = true;
- draw_vec[idx]->mCount += facep->getIndicesCount();
- draw_vec[idx]->mStart -= facep->getGeomCount();
- draw_vec[idx]->mOffset = facep->getIndicesStart();
- draw_vec[idx]->mVSize = llmax(draw_vec[idx]->mVSize, vsize);
+ if (draw_vec[idx]->mEnd == facep->getGeomIndex()-1)
+ {
+ batched = true;
+ info->mCount += facep->getIndicesCount();
+ info->mEnd += facep->getGeomCount();
+ info->mVSize = llmax(draw_vec[idx]->mVSize, vsize);
+ }
+ else if (draw_vec[idx]->mStart == facep->getGeomIndex()+facep->getGeomCount()+1)
+ {
+ batched = true;
+ info->mCount += facep->getIndicesCount();
+ info->mStart -= facep->getGeomCount();
+ info->mOffset = facep->getIndicesStart();
+ info->mVSize = llmax(draw_vec[idx]->mVSize, vsize);
+ }
}
}
@@ -807,6 +961,10 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
info->mExtents[0] = group->mObjectExtents[0];
info->mExtents[1] = group->mObjectExtents[1];
info->mVSize = vsize;
+ info->mBlendFuncDst = bf_dst;
+ info->mBlendFuncSrc = bf_src;
+ info->mHasGlow = has_glow;
+ info->mParticle = TRUE;
draw_vec.push_back(info);
//for alpha sorting
facep->setDrawInfo(info);
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
index 2befb01823..724e915d02 100755
--- a/indra/newview/llvopartgroup.h
+++ b/indra/newview/llvopartgroup.h
@@ -42,8 +42,7 @@ public:
//vertex buffer for holding all particles
static LLPointer<LLVertexBuffer> sVB;
- static S32 sVBSlotFree[LL_MAX_PARTICLE_COUNT];
- static S32* sVBSlotCursor;
+ static S32 sVBSlotCursor;
static void initClass();
static void restoreGL();
@@ -57,6 +56,7 @@ public:
LLVertexBuffer::MAP_NORMAL |
LLVertexBuffer::MAP_TEXCOORD0 |
LLVertexBuffer::MAP_COLOR |
+ LLVertexBuffer::MAP_EMISSIVE |
LLVertexBuffer::MAP_TEXTURE_INDEX
};
@@ -91,10 +91,12 @@ public:
LLStrider<LLVector3>& normalsp,
LLStrider<LLVector2>& texcoordsp,
LLStrider<LLColor4U>& colorsp,
+ LLStrider<LLColor4U>& emissivep,
LLStrider<U16>& indicesp);
void updateFaceSize(S32 idx) { }
F32 getPartSize(S32 idx);
+ void getBlendFunc(S32 idx, U32& src, U32& dst);
LLUUID getPartOwner(S32 idx);
LLUUID getPartSource(S32 idx);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index fab900cc74..5fdd2894a6 100755
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -101,6 +101,8 @@ static LLFastTimer::DeclareTimer FTM_GEN_TRIANGLES("Generate Triangles");
static LLFastTimer::DeclareTimer FTM_GEN_VOLUME("Generate Volumes");
static LLFastTimer::DeclareTimer FTM_VOLUME_TEXTURES("Volume Textures");
+extern BOOL gGLDebugLoggingEnabled;
+
// Implementation class of LLMediaDataClientObject. See llmediadataclient.h
class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
{
@@ -384,7 +386,6 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
}
else
{
- // CORY TO DO: Figure out how to get the value here
if (update_type != OUT_TERSE_IMPROVED)
{
LLVolumeParams volume_params;
@@ -453,6 +454,11 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
mFaceMappingChanged = TRUE;
mTexAnimMode = 0;
}
+
+ if (value & 0x400)
+ { //particle system (new)
+ unpackParticleSource(*dp, mOwnerID, false);
+ }
}
else
{
@@ -1096,6 +1102,12 @@ void LLVOVolume::notifyMeshLoaded()
{
mSculptChanged = TRUE;
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_GEOMETRY, TRUE);
+
+ LLVOAvatar* avatar = getAvatar();
+ if (avatar)
+ {
+ avatar->updateVisualComplexity();
+ }
}
// sculpt replaces generate() for sculpted surfaces
@@ -1124,28 +1136,38 @@ void LLVOVolume::sculpt()
S32 current_discard = getVolume()->getSculptLevel() ;
if(current_discard < -2)
{
- static S32 low_sculpty_discard_warning_count = 100;
- if (++low_sculpty_discard_warning_count >= 100)
- { // Log first time, then every 100 afterwards otherwise this can flood the logs
+ static S32 low_sculpty_discard_warning_count = 1;
+ S32 exponent = llmax(1, llfloor( log10((F64) low_sculpty_discard_warning_count) ));
+ S32 interval = pow(10.0, exponent);
+ if ( low_sculpty_discard_warning_count < 10 ||
+ (low_sculpty_discard_warning_count % interval) == 0)
+ { // Log first 10 time, then decreasing intervals afterwards otherwise this can flood the logs
llwarns << "WARNING!!: Current discard for sculpty " << mSculptTexture->getID()
<< " at " << current_discard
- << " is less than -2." << llendl;
- low_sculpty_discard_warning_count = 0;
+ << " is less than -2."
+ << " Hit this " << low_sculpty_discard_warning_count << " times"
+ << llendl;
}
+ low_sculpty_discard_warning_count++;
// corrupted volume... don't update the sculpty
return;
}
else if (current_discard > MAX_DISCARD_LEVEL)
{
- static S32 high_sculpty_discard_warning_count = 100;
- if (++high_sculpty_discard_warning_count >= 100)
- { // Log first time, then every 100 afterwards otherwise this can flood the logs
+ static S32 high_sculpty_discard_warning_count = 1;
+ S32 exponent = llmax(1, llfloor( log10((F64) high_sculpty_discard_warning_count) ));
+ S32 interval = pow(10.0, exponent);
+ if ( high_sculpty_discard_warning_count < 10 ||
+ (high_sculpty_discard_warning_count % interval) == 0)
+ { // Log first 10 time, then decreasing intervals afterwards otherwise this can flood the logs
llwarns << "WARNING!!: Current discard for sculpty " << mSculptTexture->getID()
<< " at " << current_discard
- << " is more than than allowed max of " << MAX_DISCARD_LEVEL << llendl;
- high_sculpty_discard_warning_count = 0;
+ << " is more than than allowed max of " << MAX_DISCARD_LEVEL
+ << ". Hit this " << high_sculpty_discard_warning_count << " times"
+ << llendl;
}
+ high_sculpty_discard_warning_count++;
// corrupted volume... don't update the sculpty
return;
@@ -1238,7 +1260,7 @@ BOOL LLVOVolume::calcLOD()
else
{
distance = mDrawable->mDistanceWRTCamera;
- radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length();
+ radius = getVolume() ? getVolume()->mLODScaleBias.scaledVec(getScale()).length() : getScale().length();
}
//hold onto unmodified distance for debugging
@@ -1268,7 +1290,7 @@ BOOL LLVOVolume::calcLOD()
{
//setDebugText(llformat("%.2f:%.2f, %d", debug_distance, radius, cur_detail));
- setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex()));
+ //setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex()));
}
if (cur_detail != mLOD)
@@ -2596,6 +2618,7 @@ void LLVOVolume::setLightTextureID(LLUUID id)
if (hasLightTexture())
{
setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE, FALSE, true);
+ parameterChanged(LLNetworkData::PARAMS_LIGHT_IMAGE, true);
mLightTexture = NULL;
}
}
@@ -2613,7 +2636,8 @@ void LLVOVolume::setSpotLightParams(LLVector3 params)
void LLVOVolume::setIsLight(BOOL is_light)
{
- if (is_light != getIsLight())
+ BOOL was_light = getIsLight();
+ if (is_light != was_light)
{
if (is_light)
{
@@ -2798,7 +2822,7 @@ void LLVOVolume::updateSpotLightPriority()
bool LLVOVolume::isLightSpotlight() const
{
LLLightImageParams* params = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE);
- if (params)
+ if (params && getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE))
{
return params->isLightSpotlight();
}
@@ -3021,7 +3045,7 @@ void LLVOVolume::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_p
//transform view vector into volume space
view_vector -= getRenderPosition();
- mDrawable->mDistanceWRTCamera = view_vector.length();
+ //mDrawable->mDistanceWRTCamera = view_vector.length();
LLQuaternion worldRot = getRenderRotation();
view_vector = view_vector * ~worldRot;
if (!isVolumeGlobal())
@@ -3728,8 +3752,30 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a&
{
LLFace* face = mDrawable->getFace(face_hit);
+ bool ignore_alpha = false;
+
+ const LLTextureEntry* te = face->getTextureEntry();
+ if (te)
+ {
+ LLMaterial* mat = te->getMaterialParams();
+ if (mat)
+ {
+ U8 mode = mat->getDiffuseAlphaMode();
+
+ if (mode == LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE ||
+ mode == LLMaterial::DIFFUSE_ALPHA_MODE_NONE)
+ {
+ ignore_alpha = true;
+ }
+ }
+ }
+
if (face &&
- (pick_transparent || !face->getTexture() || !face->getTexture()->hasGLTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))))
+ (ignore_alpha ||
+ pick_transparent ||
+ !face->getTexture() ||
+ !face->getTexture()->hasGLTexture() ||
+ face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))))
{
local_end = p;
if (face_hitp != NULL)
@@ -3895,10 +3941,13 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
}
//build matrix palette
- LLMatrix4a mp[64];
+ static const size_t kMaxJoints = 64;
+
+ LLMatrix4a mp[kMaxJoints];
LLMatrix4* mat = (LLMatrix4*) mp;
- for (U32 j = 0; j < skin->mJointNames.size(); ++j)
+ U32 maxJoints = llmin(skin->mJointNames.size(), kMaxJoints);
+ for (U32 j = 0; j < maxJoints; ++j)
{
LLJoint* joint = avatar->getJoint(skin->mJointNames[j]);
if (joint)
@@ -3953,8 +4002,10 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
F32 w = wght[k];
LLMatrix4a src;
- src.setMul(mp[idx[k]], w);
-
+ // Insure ref'd bone is in our clamped array of mats
+ llassert(idx[k] < kMaxJoints);
+ // clamp k to kMaxJoints to avoid reading garbage off stack in release
+ src.setMul(mp[idx[(k < kMaxJoints) ? k : 0]], w);
final_mat.add(src);
}
@@ -4365,7 +4416,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
if (pAvatarVO)
{
pAvatarVO->mAttachmentGeometryBytes -= group->mGeometryBytes;
+ pAvatarVO->mAttachmentGeometryBytes = llmax(pAvatarVO->mAttachmentGeometryBytes, 0);
pAvatarVO->mAttachmentSurfaceArea -= group->mSurfaceArea;
+ pAvatarVO->mAttachmentSurfaceArea = llmax(pAvatarVO->mAttachmentSurfaceArea, 0.f);
}
group->mGeometryBytes = 0;
@@ -4378,14 +4431,25 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
mFaceList.clear();
- std::vector<LLFace*> fullbright_faces;
- std::vector<LLFace*> bump_faces;
- std::vector<LLFace*> norm_faces;
- std::vector<LLFace*> spec_faces;
- std::vector<LLFace*> normspec_faces;
- std::vector<LLFace*> simple_faces;
+ const U32 MAX_FACE_COUNT = 4096;
+
+ static LLFace** fullbright_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*),64);
+ static LLFace** bump_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*),64);
+ static LLFace** simple_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*),64);
+ static LLFace** norm_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*), 64);
+ static LLFace** spec_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*), 64);
+ static LLFace** normspec_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*), 64);
+ static LLFace** alpha_faces = (LLFace**) ll_aligned_malloc(MAX_FACE_COUNT*sizeof(LLFace*),64);
+
+ U32 fullbright_count = 0;
+ U32 bump_count = 0;
+ U32 simple_count = 0;
+ U32 alpha_count = 0;
+ U32 norm_count = 0;
+ U32 spec_count = 0;
+ U32 normspec_count = 0;
+
- std::vector<LLFace*> alpha_faces;
U32 useage = group->mSpatialPartition->mBufferUsage;
U32 max_vertices = (gSavedSettings.getS32("RenderMaxVBOSize")*1024)/LLVertexBuffer::calcVertexSize(group->mSpatialPartition->mVertexDataMask);
@@ -4752,7 +4816,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
if (facep->canRenderAsMask())
{ //can be treated as alpha mask
- simple_faces.push_back(facep);
+ if (simple_count < MAX_FACE_COUNT)
+ {
+ simple_faces[simple_count++] = facep;
+ }
}
else
{
@@ -4760,7 +4827,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{ //only treat as alpha in the pipeline if < 100% transparent
drawablep->setState(LLDrawable::HAS_ALPHA);
}
- alpha_faces.push_back(facep);
+ if (alpha_count < MAX_FACE_COUNT)
+ {
+ alpha_faces[alpha_count++] = facep;
+ }
}
}
else
@@ -4780,51 +4850,81 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
if (mat->getSpecularID().notNull())
{ //has normal and specular maps (needs texcoord1, texcoord2, and tangent)
- normspec_faces.push_back(facep);
+ if (normspec_count < MAX_FACE_COUNT)
+ {
+ normspec_faces[normspec_count++] = facep;
+ }
}
else
{ //has normal map (needs texcoord1 and tangent)
- norm_faces.push_back(facep);
+ if (norm_count < MAX_FACE_COUNT)
+ {
+ norm_faces[norm_count++] = facep;
+ }
}
}
else if (mat->getSpecularID().notNull())
{ //has specular map but no normal map, needs texcoord2
- spec_faces.push_back(facep);
+ if (spec_count < MAX_FACE_COUNT)
+ {
+ spec_faces[spec_count++] = facep;
+ }
}
else
{ //has neither specular map nor normal map, only needs texcoord0
- simple_faces.push_back(facep);
+ if (simple_count < MAX_FACE_COUNT)
+ {
+ simple_faces[simple_count++] = facep;
+ }
}
}
else if (te->getBumpmap())
{ //needs normal + tangent
- bump_faces.push_back(facep);
+ if (bump_count < MAX_FACE_COUNT)
+ {
+ bump_faces[bump_count++] = facep;
+ }
}
else if (te->getShiny() || !te->getFullbright())
{ //needs normal
- simple_faces.push_back(facep);
+ if (simple_count < MAX_FACE_COUNT)
+ {
+ simple_faces[simple_count++] = facep;
+ }
}
else
{ //doesn't need normal
facep->setState(LLFace::FULLBRIGHT);
- fullbright_faces.push_back(facep);
+ if (fullbright_count < MAX_FACE_COUNT)
+ {
+ fullbright_faces[fullbright_count++] = facep;
+ }
}
}
else
{
if (te->getBumpmap() && LLPipeline::sRenderBump)
{ //needs normal + tangent
- bump_faces.push_back(facep);
+ if (bump_count < MAX_FACE_COUNT)
+ {
+ bump_faces[bump_count++] = facep;
+ }
}
else if ((te->getShiny() && LLPipeline::sRenderBump) ||
!(te->getFullbright() || bake_sunlight))
{ //needs normal
- simple_faces.push_back(facep);
+ if (simple_count < MAX_FACE_COUNT)
+ {
+ simple_faces[simple_count++] = facep;
+ }
}
else
{ //doesn't need normal
facep->setState(LLFace::FULLBRIGHT);
- fullbright_faces.push_back(facep);
+ if (fullbright_count < MAX_FACE_COUNT)
+ {
+ fullbright_faces[fullbright_count++] = facep;
+ }
}
}
}
@@ -4895,13 +4995,13 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
fullbright_mask = fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX;
}
- genDrawInfo(group, simple_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, simple_faces, FALSE, batch_textures, FALSE);
- genDrawInfo(group, fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, fullbright_faces, FALSE, batch_textures);
- genDrawInfo(group, alpha_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, alpha_faces, TRUE, batch_textures);
- genDrawInfo(group, bump_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, bump_faces, FALSE, FALSE);
- genDrawInfo(group, norm_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, norm_faces, FALSE, FALSE);
- genDrawInfo(group, spec_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, spec_faces, FALSE, FALSE);
- genDrawInfo(group, normspec_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, normspec_faces, FALSE, FALSE);
+ genDrawInfo(group, simple_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, simple_faces, simple_count, FALSE, batch_textures, FALSE);
+ genDrawInfo(group, fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, fullbright_faces, fullbright_count, FALSE, batch_textures);
+ genDrawInfo(group, alpha_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, alpha_faces, alpha_count, TRUE, batch_textures);
+ genDrawInfo(group, bump_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, bump_faces, bump_count, FALSE, FALSE);
+ genDrawInfo(group, norm_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, norm_faces, norm_count, FALSE, FALSE);
+ genDrawInfo(group, spec_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, spec_faces, spec_count, FALSE, FALSE);
+ genDrawInfo(group, normspec_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, normspec_faces, normspec_count, FALSE, FALSE);
if (!LLPipeline::sDelayVBUpdate)
{
@@ -4926,11 +5026,26 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
if (pAvatarVO)
{
+ if (pAvatarVO->mAttachmentGeometryBytes < 0)
+ { // First time through value is -1
+ pAvatarVO->mAttachmentGeometryBytes = group->mGeometryBytes;
+ }
+ else
+ {
pAvatarVO->mAttachmentGeometryBytes += group->mGeometryBytes;
+ }
+ if (pAvatarVO->mAttachmentSurfaceArea < 0.f)
+ { // First time through value is -1
+ pAvatarVO->mAttachmentSurfaceArea = group->mSurfaceArea;
+ }
+ else
+ {
pAvatarVO->mAttachmentSurfaceArea += group->mSurfaceArea;
}
}
+}
+static LLFastTimer::DeclareTimer FTM_REBUILD_MESH_FLUSH("Flush Mesh");
void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
{
@@ -4940,11 +5055,14 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
LLFastTimer ftm(FTM_REBUILD_VOLUME_VB);
LLFastTimer t(FTM_REBUILD_VOLUME_GEN_DRAW_INFO); //make sure getgeometryvolume shows up in the right place in timers
- S32 num_mapped_veretx_buffer = LLVertexBuffer::sMappedCount ;
-
group->mBuilt = 1.f;
- std::set<LLVertexBuffer*> mapped_buffers;
+ S32 num_mapped_vertex_buffer = LLVertexBuffer::sMappedCount ;
+
+ const U32 MAX_BUFFER_COUNT = 4096;
+ LLVertexBuffer* locked_buffer[MAX_BUFFER_COUNT];
+
+ U32 buffer_count = 0;
for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter)
{
@@ -4979,9 +5097,9 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
}
- if (buff->isLocked())
+ if (buff->isLocked() && buffer_count < MAX_BUFFER_COUNT)
{
- mapped_buffers.insert(buff);
+ locked_buffer[buffer_count++] = buff;
}
}
}
@@ -4997,7 +5115,9 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
}
}
- for (std::set<LLVertexBuffer*>::iterator iter = mapped_buffers.begin(); iter != mapped_buffers.end(); ++iter)
+ {
+ LLFastTimer t(FTM_REBUILD_MESH_FLUSH);
+ for (LLVertexBuffer** iter = locked_buffer, ** end_iter = locked_buffer+buffer_count; iter != end_iter; ++iter)
{
(*iter)->flush();
}
@@ -5009,9 +5129,10 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
{
group->mVertexBuffer->flush();
}
+ }
//if not all buffers are unmapped
- if(num_mapped_veretx_buffer != LLVertexBuffer::sMappedCount)
+ if(num_mapped_vertex_buffer != LLVertexBuffer::sMappedCount)
{
llwarns << "Not all mapped vertex buffers are unmapped!" << llendl ;
for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter)
@@ -5078,12 +5199,22 @@ static LLFastTimer::DeclareTimer FTM_GEN_DRAW_INFO_RESIZE_VB("Resize VB");
-void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures, BOOL no_materials)
+void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace** faces, U32 face_count, BOOL distance_sort, BOOL batch_textures, BOOL no_materials)
{
LLFastTimer t(FTM_REBUILD_VOLUME_GEN_DRAW_INFO);
U32 buffer_usage = group->mBufferUsage;
+ static LLCachedControl<bool> use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback");
+
+ if (use_transform_feedback &&
+ gTransformPositionProgram.mProgramObject && //transform shaders are loaded
+ buffer_usage == GL_DYNAMIC_DRAW_ARB && //target buffer is in VRAM
+ !(mask & LLVertexBuffer::MAP_WEIGHT4)) //TODO: add support for weights
+ {
+ buffer_usage = GL_DYNAMIC_COPY_ARB;
+ }
+
#if LL_DARWIN
// HACK from Leslie:
// Disable VBO usage for alpha on Mac OS X because it kills the framerate
@@ -5104,17 +5235,18 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
if (!distance_sort)
{
//sort faces by things that break batches
- std::sort(faces.begin(), faces.end(), CompareBatchBreakerModified());
+ std::sort(faces, faces+face_count, CompareBatchBreakerModified());
}
else
{
//sort faces by distance
- std::sort(faces.begin(), faces.end(), LLFace::CompareDistanceGreater());
+ std::sort(faces, faces+face_count, LLFace::CompareDistanceGreater());
}
}
bool hud_group = group->isHUDGroup() ;
- std::vector<LLFace*>::iterator face_iter = faces.begin();
+ LLFace** face_iter = faces;
+ LLFace** end_faces = faces+face_count;
LLSpatialGroup::buffer_map_t buffer_map;
@@ -5143,7 +5275,9 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
//NEVER use more than 16 texture index channels (workaround for prevalent driver bug)
texture_index_channels = llmin(texture_index_channels, 16);
- while (face_iter != faces.end())
+ bool flexi = false;
+
+ while (face_iter != end_faces)
{
//pull off next face
LLFace* facep = *face_iter;
@@ -5170,11 +5304,16 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
U32 index_count = facep->getIndicesCount();
U32 geom_count = facep->getGeomCount();
+ flexi = flexi || facep->getViewerObject()->getVolume()->isUnique();
+
//sum up vertices needed for this render batch
- std::vector<LLFace*>::iterator i = face_iter;
+ LLFace** i = face_iter;
++i;
- std::vector<LLViewerTexture*> texture_list;
+ const U32 MAX_TEXTURE_COUNT = 32;
+ LLViewerTexture* texture_list[MAX_TEXTURE_COUNT];
+
+ U32 texture_count = 0;
{
LLFastTimer t(FTM_GEN_DRAW_INFO_FACE_SIZE);
@@ -5182,12 +5321,15 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
{
U8 cur_tex = 0;
facep->setTextureIndex(cur_tex);
- texture_list.push_back(tex);
+ if (texture_count < MAX_TEXTURE_COUNT)
+ {
+ texture_list[texture_count++] = tex;
+ }
if (can_batch_texture(facep))
{ //populate texture_list with any textures that can be batched
//move i to the next unbatchable face
- while (i != faces.end())
+ while (i != end_faces)
{
facep = *i;
@@ -5203,7 +5345,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
if (distance_sort)
{ //textures might be out of order, see if texture exists in current batch
bool found = false;
- for (U32 tex_idx = 0; tex_idx < texture_list.size(); ++tex_idx)
+ for (U32 tex_idx = 0; tex_idx < texture_count; ++tex_idx)
{
if (facep->getTexture() == texture_list[tex_idx])
{
@@ -5215,7 +5357,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
if (!found)
{
- cur_tex = texture_list.size();
+ cur_tex = texture_count;
}
}
else
@@ -5230,7 +5372,10 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
tex = facep->getTexture();
- texture_list.push_back(tex);
+ if (texture_count < MAX_TEXTURE_COUNT)
+ {
+ texture_list[texture_count++] = tex;
+ }
}
if (geom_count + facep->getGeomCount() > max_vertices)
@@ -5239,6 +5384,9 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
}
++i;
+
+ flexi = flexi || facep->getViewerObject()->getVolume()->isUnique();
+
index_count += facep->getIndicesCount();
geom_count += facep->getGeomCount();
@@ -5254,7 +5402,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
}
else
{
- while (i != faces.end() &&
+ while (i != end_faces &&
(LLPipeline::sTextureBindTest ||
(distance_sort ||
((*i)->getTexture() == tex &&
@@ -5275,8 +5423,16 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
++i;
index_count += facep->getIndicesCount();
geom_count += facep->getGeomCount();
+
+ flexi = flexi || facep->getViewerObject()->getVolume()->isUnique();
+ }
}
}
+
+
+ if (flexi && buffer_usage && buffer_usage != GL_STREAM_DRAW_ARB)
+ {
+ buffer_usage = GL_STREAM_DRAW_ARB;
}
//create vertex buffer
@@ -5374,19 +5530,24 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
mode == LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE;
}
- bool use_legacy_bump = te->getBumpmap() && (!mat || mat->getNormalID().isNull());
+ bool use_legacy_bump = te->getBumpmap() && (te->getBumpmap() < 18) && (!mat || mat->getNormalID().isNull());
+ bool opaque = te->getColor().mV[3] >= 0.999f;
if (mat && LLPipeline::sRenderDeferred && !hud_group)
{
bool material_pass = false;
- if (fullbright)
+ // do NOT use 'fullbright' for this logic or you risk sending
+ // things without normals down the materials pipeline and will
+ // render poorly if not crash NORSPEC-240,314
+ //
+ if (te->getFullbright())
{
if (mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
{
- if (te->getColor().mV[3] >= 0.999f)
+ if (opaque)
{
- material_pass = true;
+ registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK);
}
else
{
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 4f52ff9778..72d628fb88 100755
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -188,13 +188,12 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
if (shader->mShaderGroup == LLGLSLShader::SG_WATER)
{
shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, LLWLParamManager::getInstance()->getRotatedLightDir().mV);
- shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
- shader->uniform4fv("waterFogColor", 1, LLDrawPoolWater::sWaterFogColor.mV);
- shader->uniform1f("waterFogEnd", LLDrawPoolWater::sWaterFogEnd);
- shader->uniform4fv("waterPlane", 1, mWaterPlane.mV);
- shader->uniform1f("waterFogDensity", getFogDensity());
- shader->uniform1f("waterFogKS", mWaterFogKS);
- shader->uniform1f("distance_multiplier", 0);
+shader->uniform3fv(LLShaderMgr::WL_CAMPOSLOCAL, 1, LLViewerCamera::getInstance()->getOrigin().mV);
+ shader->uniform4fv(LLShaderMgr::WATER_FOGCOLOR, 1, LLDrawPoolWater::sWaterFogColor.mV);
+ shader->uniform4fv(LLShaderMgr::WATER_WATERPLANE, 1, mWaterPlane.mV);
+ shader->uniform1f(LLShaderMgr::WATER_FOGDENSITY, getFogDensity());
+ shader->uniform1f(LLShaderMgr::WATER_FOGKS, mWaterFogKS);
+ shader->uniform1f(LLViewerShaderMgr::DISTANCE_MULTIPLIER, 0);
}
}
diff --git a/indra/newview/llwaterparamset.h b/indra/newview/llwaterparamset.h
index b28585af59..368cb0ccba 100755
--- a/indra/newview/llwaterparamset.h
+++ b/indra/newview/llwaterparamset.h
@@ -33,6 +33,7 @@
#include "v4math.h"
#include "v4color.h"
#include "llviewershadermgr.h"
+#include "llstringtable.h"
class LLWaterParamSet;
@@ -47,6 +48,9 @@ public:
private:
LLSD mParamValues;
+ std::vector<LLStaticHashedString> mParamHashedNames;
+
+ void updateHashedNames();
public:
@@ -140,6 +144,17 @@ inline void LLWaterParamSet::setAll(const LLSD& val)
mParamValues[mIt->first] = mIt->second;
}
}
+ updateHashedNames();
+}
+
+inline void LLWaterParamSet::updateHashedNames()
+{
+ mParamHashedNames.clear();
+ // Iterate through values
+ for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
+ {
+ mParamHashedNames.push_back(LLStaticHashedString(iter->first));
+ }
}
inline const LLSD& LLWaterParamSet::getAll()
diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h
index 5223b45343..810f4cf7e5 100755
--- a/indra/newview/llwlanimator.h
+++ b/indra/newview/llwlanimator.h
@@ -137,3 +137,4 @@ private:
};
#endif // LL_WL_ANIMATOR_H
+
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 6077208799..ce9f61c0af 100755
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -351,8 +351,8 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
if (shader->mShaderGroup == LLGLSLShader::SG_DEFAULT)
{
- shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV);
- shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
+ shader->uniform4fv(LLShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV);
+ shader->uniform3fv(LLShaderMgr::WL_CAMPOSLOCAL, 1, LLViewerCamera::getInstance()->getOrigin().mV);
}
else if (shader->mShaderGroup == LLGLSLShader::SG_SKY)
@@ -360,7 +360,7 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, mClampedLightDir.mV);
}
- shader->uniform1f("scene_light_strength", mSceneLightStrength);
+ shader->uniform1f(LLShaderMgr::SCENE_LIGHT_STRENGTH, mSceneLightStrength);
}
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
index 72422500fc..e13aed98ed 100755
--- a/indra/newview/llwlparammanager.h
+++ b/indra/newview/llwlparammanager.h
@@ -412,3 +412,4 @@ inline LLVector4 LLWLParamManager::getRotatedLightDir(void) const
}
#endif
+
diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp
index dba3970635..8529a4614b 100755
--- a/indra/newview/llwlparamset.cpp
+++ b/indra/newview/llwlparamset.cpp
@@ -39,6 +39,22 @@
#include <sstream>
+static LLStaticHashedString sStarBrightness("star_brightness");
+static LLStaticHashedString sPresetNum("preset_num");
+static LLStaticHashedString sSunAngle("sun_angle");
+static LLStaticHashedString sEastAngle("east_angle");
+static LLStaticHashedString sEnableCloudScroll("enable_cloud_scroll");
+static LLStaticHashedString sCloudScrollRate("cloud_scroll_rate");
+static LLStaticHashedString sLightNorm("lightnorm");
+static LLStaticHashedString sCloudDensity("cloud_pos_density1");
+static LLStaticHashedString sCloudScale("cloud_scale");
+static LLStaticHashedString sCloudShadow("cloud_shadow");
+static LLStaticHashedString sDensityMultiplier("density_multiplier");
+static LLStaticHashedString sDistanceMultiplier("distance_multiplier");
+static LLStaticHashedString sHazeDensity("haze_density");
+static LLStaticHashedString sHazeHorizon("haze_horizon");
+static LLStaticHashedString sMaxY("max_y");
+
LLWLParamSet::LLWLParamSet(void) :
mName("Unnamed Preset"),
mCloudScrollXOffset(0.f), mCloudScrollYOffset(0.f)
@@ -49,21 +65,24 @@ static LLFastTimer::DeclareTimer FTM_WL_PARAM_UPDATE("WL Param Update");
void LLWLParamSet::update(LLGLSLShader * shader) const
{
LLFastTimer t(FTM_WL_PARAM_UPDATE);
-
- for(LLSD::map_const_iterator i = mParamValues.beginMap();
- i != mParamValues.endMap();
- ++i)
+ LLSD::map_const_iterator i = mParamValues.beginMap();
+ std::vector<LLStaticHashedString>::const_iterator n = mParamHashedNames.begin();
+ for(;(i != mParamValues.endMap()) && (n != mParamHashedNames.end());++i, n++)
{
- const std::string& param = i->first;
+ const LLStaticHashedString& param = *n;
- if (param == "star_brightness" || param == "preset_num" || param == "sun_angle" ||
- param == "east_angle" || param == "enable_cloud_scroll" ||
- param == "cloud_scroll_rate" || param == "lightnorm" )
+ // check that our pre-hashed names are still tracking the mParamValues map correctly
+ //
+ llassert(param.String() == i->first);
+
+ if (param == sStarBrightness || param == sPresetNum || param == sSunAngle ||
+ param == sEastAngle || param == sEnableCloudScroll ||
+ param == sCloudScrollRate || param == sLightNorm )
{
continue;
}
- if (param == "cloud_pos_density1")
+ if (param == sCloudDensity)
{
LLVector4 val;
val.mV[0] = F32(i->second[0].asReal()) + mCloudScrollXOffset;
@@ -75,10 +94,10 @@ void LLWLParamSet::update(LLGLSLShader * shader) const
shader->uniform4fv(param, 1, val.mV);
stop_glerror();
}
- else if (param == "cloud_scale" || param == "cloud_shadow" ||
- param == "density_multiplier" || param == "distance_multiplier" ||
- param == "haze_density" || param == "haze_horizon" ||
- param == "max_y" )
+ else if (param == sCloudScale || param == sCloudShadow ||
+ param == sDensityMultiplier || param == sDistanceMultiplier ||
+ param == sHazeDensity || param == sHazeHorizon ||
+ param == sMaxY )
{
F32 val = (F32) i->second[0].asReal();
@@ -386,3 +405,14 @@ void LLWLParamSet::updateCloudScrolling(void)
mCloudScrollYOffset += F32(delta_t * (getCloudScrollY() - 10.f) / 100.f);
}
}
+
+void LLWLParamSet::updateHashedNames()
+{
+ mParamHashedNames.clear();
+ // Iterate through values
+ for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
+ {
+ mParamHashedNames.push_back(LLStaticHashedString(iter->first));
+ }
+}
+
diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h
index b087119dd5..6e5f1d3a4b 100755
--- a/indra/newview/llwlparamset.h
+++ b/indra/newview/llwlparamset.h
@@ -29,9 +29,11 @@
#include <string>
#include <map>
+#include <vector>
#include "v4math.h"
#include "v4color.h"
+#include "llstaticstringtable.h"
class LLWLParamSet;
class LLGLSLShader;
@@ -47,9 +49,12 @@ public:
private:
LLSD mParamValues;
-
+ std::vector<LLStaticHashedString> mParamHashedNames;
+
float mCloudScrollXOffset, mCloudScrollYOffset;
+ void updateHashedNames();
+
public:
LLWLParamSet();
@@ -177,6 +182,8 @@ inline void LLWLParamSet::setAll(const LLSD& val)
if(val.isMap()) {
mParamValues = val;
}
+
+ updateHashedNames();
}
inline const LLSD& LLWLParamSet::getAll()
@@ -236,3 +243,4 @@ inline F32 LLWLParamSet::getCloudScrollY() {
#endif // LL_WLPARAM_SET_H
+
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 1940cf541e..ae334d4bd2 100755
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1792,3 +1792,5 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
}
return FALSE;
}
+
+
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index f49395da34..b0c73d0304 100755
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -111,6 +111,8 @@
#include "llpathinglib.h"
#include "llfloaterpathfindingconsole.h"
#include "llfloaterpathfindingcharacters.h"
+#include "llfloatertools.h"
+#include "llpanelface.h"
#include "llpathfindingpathtool.h"
#ifdef _DEBUG
@@ -120,6 +122,10 @@
//#define DEBUG_INDICES
#endif
+// Expensive and currently broken
+//
+#define MATERIALS_IN_REFLECTIONS 0
+
bool gShiftFrame = false;
//cached settings
@@ -255,6 +261,17 @@ LLFastTimer::DeclareTimer FTM_RENDER_DEFERRED("Deferred Shading");
static LLFastTimer::DeclareTimer FTM_STATESORT_DRAWABLE("Sort Drawables");
static LLFastTimer::DeclareTimer FTM_STATESORT_POSTSORT("Post Sort");
+static LLStaticHashedString sTint("tint");
+static LLStaticHashedString sAmbiance("ambiance");
+static LLStaticHashedString sAlphaScale("alpha_scale");
+static LLStaticHashedString sNormMat("norm_mat");
+static LLStaticHashedString sOffset("offset");
+static LLStaticHashedString sScreenRes("screenRes");
+static LLStaticHashedString sDelta("delta");
+static LLStaticHashedString sDistFactor("dist_factor");
+static LLStaticHashedString sKern("kern");
+static LLStaticHashedString sKernScale("kern_scale");
+
//----------------------------------------
std::string gPoolNames[] =
{
@@ -374,6 +391,7 @@ BOOL LLPipeline::sWaterReflections = FALSE;
BOOL LLPipeline::sRenderGlow = FALSE;
BOOL LLPipeline::sReflectionRender = FALSE;
BOOL LLPipeline::sImpostorRender = FALSE;
+BOOL LLPipeline::sImpostorRenderAlphaDepthPass = FALSE;
BOOL LLPipeline::sUnderWaterRender = FALSE;
BOOL LLPipeline::sTextureBindTest = FALSE;
BOOL LLPipeline::sRenderFrameTest = FALSE;
@@ -789,14 +807,22 @@ void LLPipeline::resizeScreenTexture()
GLuint resX = gViewerWindow->getWorldViewWidthRaw();
GLuint resY = gViewerWindow->getWorldViewHeightRaw();
+ if ((resX != mScreen.getWidth()) || (resY != mScreen.getHeight()))
+ {
+ releaseScreenBuffers();
if (!allocateScreenBuffer(resX,resY))
- { //FAILSAFE: screen buffer allocation failed, disable deferred rendering if it's enabled
+ {
+#if PROBABLE_FALSE_DISABLES_OF_ALM_HERE
+ //FAILSAFE: screen buffer allocation failed, disable deferred rendering if it's enabled
//NOTE: if the session closes successfully after this call, deferred rendering will be
// disabled on future sessions
if (LLPipeline::sRenderDeferred)
{
gSavedSettings.setBOOL("RenderDeferred", FALSE);
LLPipeline::refreshCachedSettings();
+
+ }
+#endif
}
}
}
@@ -949,7 +975,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
{
screenFormat = GL_RGBA16F_ARB;
}
-
+
if (!mScreen.allocate(resX, resY, screenFormat, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
if (samples > 0)
{
@@ -1186,6 +1212,7 @@ void LLPipeline::releaseGLBuffers()
mWaterRef.release();
mWaterDis.release();
+ mHighlight.release();
for (U32 i = 0; i < 3; i++)
{
@@ -1216,12 +1243,12 @@ void LLPipeline::releaseScreenBuffers()
mDeferredScreen.release();
mDeferredDepth.release();
mDeferredLight.release();
-
- mHighlight.release();
+ mOcclusionDepth.release();
for (U32 i = 0; i < 6; i++)
{
mShadow[i].release();
+ mShadowOcclusion[i].release();
}
}
@@ -1233,14 +1260,31 @@ void LLPipeline::createGLBuffers()
updateRenderDeferred();
+ bool materials_in_water = false;
+
+#if MATERIALS_IN_REFLECTIONS
+ materials_in_water = gSavedSettings.getS32("RenderWaterMaterials");
+#endif
+
if (LLPipeline::sWaterReflections)
{ //water reflection texture
U32 res = (U32) llmax(gSavedSettings.getS32("RenderWaterRefResolution"), 512);
+ // Set up SRGB targets if we're doing deferred-path reflection rendering
+ //
+ if (LLPipeline::sRenderDeferred && materials_in_water)
+ {
+ mWaterRef.allocate(res,res,GL_SRGB8_ALPHA8,TRUE,FALSE);
+ //always use FBO for mWaterDis so it can be used for avatar texture bakes
+ mWaterDis.allocate(res,res,GL_SRGB8_ALPHA8,TRUE,FALSE,LLTexUnit::TT_TEXTURE, true);
+ }
+ else
+ {
mWaterRef.allocate(res,res,GL_RGBA,TRUE,FALSE);
//always use FBO for mWaterDis so it can be used for avatar texture bakes
mWaterDis.allocate(res,res,GL_RGBA,TRUE,FALSE,LLTexUnit::TT_TEXTURE, true);
}
+ }
mHighlight.allocate(256,256,GL_RGBA, FALSE, FALSE);
@@ -1402,9 +1446,15 @@ void LLPipeline::createLUTBuffers()
}
}
- LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_R16F, 1, &mLightFunc);
+ U32 pix_format = GL_R16F;
+#if LL_DARWIN
+ // Need to work around limited precision with 10.6.8 and older drivers
+ //
+ pix_format = GL_R32F;
+#endif
+ LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, pix_format, 1, &mLightFunc);
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
- LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R16F, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
+ LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, pix_format, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
//LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_UNSIGNED_BYTE, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls, false);
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
@@ -2443,7 +2493,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
if (to_texture)
{
- if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sRenderDeferred)
{
mOcclusionDepth.bindTarget();
}
@@ -2588,7 +2638,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
if (to_texture)
{
- if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+ if (LLPipeline::sRenderDeferred)
{
mOcclusionDepth.flush();
}
@@ -2691,14 +2741,14 @@ void LLPipeline::downsampleDepthBuffer(LLRenderTarget& source, LLRenderTarget& d
{
shader = &gDownsampleDepthRectProgram;
shader->bind();
- shader->uniform2f("delta", 1.f, 1.f);
+ shader->uniform2f(sDelta, 1.f, 1.f);
shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, source.getWidth(), source.getHeight());
}
else
{
shader = &gDownsampleDepthProgram;
shader->bind();
- shader->uniform2f("delta", 1.f/source.getWidth(), 1.f/source.getHeight());
+ shader->uniform2f(sDelta, 1.f/source.getWidth(), 1.f/source.getHeight());
shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, 1.f, 1.f);
}
@@ -3073,7 +3123,7 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
llassert(vobj); // trying to catch a bad assumption
if (vobj) // this test may not be needed, see above
{
- const LLVOAvatar* av = vobj->asAvatar();
+ LLVOAvatar* av = vobj->asAvatar();
if (av && av->isImpostor())
{
return;
@@ -3959,7 +4009,7 @@ void LLPipeline::postSort(LLCamera& camera)
{
mSelectedFaces.clear();
- LLPipeline::setRenderHighlightTextureChannel(LLSelectMgr::getInstance()->getTextureChannel());
+ LLPipeline::setRenderHighlightTextureChannel(gFloaterTools->getPanelFace()->getTextureChannelToEdit());
// Draw face highlights for selected faces.
if (LLSelectMgr::getInstance()->getTEMode())
@@ -4903,9 +4953,9 @@ void LLPipeline::renderDebug()
if (LLGLSLShader::sNoFixedFunction)
{
gPathfindingProgram.bind();
- gPathfindingProgram.uniform1f("tint", 1.f);
- gPathfindingProgram.uniform1f("ambiance", 1.f);
- gPathfindingProgram.uniform1f("alpha_scale", 1.f);
+ gPathfindingProgram.uniform1f(sTint, 1.f);
+ gPathfindingProgram.uniform1f(sAmbiance, 1.f);
+ gPathfindingProgram.uniform1f(sAlphaScale, 1.f);
}
//Requried character physics capsule render parameters
@@ -4922,7 +4972,7 @@ void LLPipeline::renderDebug()
llPathingLibInstance->renderSimpleShapeCapsuleID( gGL, id, pos, rot );
gGL.setColorMask(true, false);
LLGLEnable blend(GL_BLEND);
- gPathfindingProgram.uniform1f("alpha_scale", 0.90f);
+ gPathfindingProgram.uniform1f(sAlphaScale, 0.90f);
llPathingLibInstance->renderSimpleShapeCapsuleID( gGL, id, pos, rot );
gPathfindingProgram.bind();
}
@@ -4949,9 +4999,9 @@ void LLPipeline::renderDebug()
{
gPathfindingProgram.bind();
- gPathfindingProgram.uniform1f("tint", 1.f);
- gPathfindingProgram.uniform1f("ambiance", ambiance);
- gPathfindingProgram.uniform1f("alpha_scale", 1.f);
+ gPathfindingProgram.uniform1f(sTint, 1.f);
+ gPathfindingProgram.uniform1f(sAmbiance, ambiance);
+ gPathfindingProgram.uniform1f(sAlphaScale, 1.f);
}
if ( !pathfindingConsole->isRenderWorld() )
@@ -4975,7 +5025,7 @@ void LLPipeline::renderDebug()
if ( pathfindingConsole->isRenderWorld() )
{
LLGLEnable blend(GL_BLEND);
- gPathfindingProgram.uniform1f("alpha_scale", 0.66f);
+ gPathfindingProgram.uniform1f(sAlphaScale, 0.66f);
llPathingLibInstance->renderNavMesh();
}
else
@@ -4987,8 +5037,8 @@ void LLPipeline::renderDebug()
if (LLGLSLShader::sNoFixedFunction)
{
gPathfindingNoNormalsProgram.bind();
- gPathfindingNoNormalsProgram.uniform1f("tint", 1.f);
- gPathfindingNoNormalsProgram.uniform1f("alpha_scale", 1.f);
+ gPathfindingNoNormalsProgram.uniform1f(sTint, 1.f);
+ gPathfindingNoNormalsProgram.uniform1f(sAlphaScale, 1.f);
llPathingLibInstance->renderNavMeshEdges();
gPathfindingProgram.bind();
}
@@ -5028,7 +5078,7 @@ void LLPipeline::renderDebug()
gGL.setColorMask(true, false);
//render the bookends
LLGLEnable blend(GL_BLEND);
- gPathfindingProgram.uniform1f("alpha_scale", 0.90f);
+ gPathfindingProgram.uniform1f(sAlphaScale, 0.90f);
llPathingLibInstance->renderPathBookend( gGL, LLPathingLib::LLPL_START );
llPathingLibInstance->renderPathBookend( gGL, LLPathingLib::LLPL_END );
gPathfindingProgram.bind();
@@ -5046,7 +5096,7 @@ void LLPipeline::renderDebug()
if (LLGLSLShader::sNoFixedFunction)
{
LLGLEnable blend(GL_BLEND);
- gPathfindingProgram.uniform1f("alpha_scale", 0.90f);
+ gPathfindingProgram.uniform1f(sAlphaScale, 0.90f);
llPathingLibInstance->renderSimpleShapes( gGL, gAgent.getRegion()->getWaterHeight() );
}
else
@@ -5094,7 +5144,7 @@ void LLPipeline::renderDebug()
LLGLEnable blend(GL_BLEND);
{
- gPathfindingProgram.uniform1f("ambiance", ambiance);
+ gPathfindingProgram.uniform1f(sAmbiance, ambiance);
{ //draw solid overlay
LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_LEQUAL);
@@ -5109,8 +5159,8 @@ void LLPipeline::renderDebug()
if (pathfindingConsole->isRenderXRay())
{
- gPathfindingProgram.uniform1f("tint", gSavedSettings.getF32("PathfindingXRayTint"));
- gPathfindingProgram.uniform1f("alpha_scale", gSavedSettings.getF32("PathfindingXRayOpacity"));
+ gPathfindingProgram.uniform1f(sTint, gSavedSettings.getF32("PathfindingXRayTint"));
+ gPathfindingProgram.uniform1f(sAlphaScale, gSavedSettings.getF32("PathfindingXRayOpacity"));
LLGLEnable blend(GL_BLEND);
LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER);
@@ -5118,13 +5168,13 @@ void LLPipeline::renderDebug()
if (gSavedSettings.getBOOL("PathfindingXRayWireframe"))
{ //draw hidden wireframe as darker and less opaque
- gPathfindingProgram.uniform1f("ambiance", 1.f);
+ gPathfindingProgram.uniform1f(sAmbiance, 1.f);
llPathingLibInstance->renderNavMeshShapesVBO( render_order[i] );
}
else
{
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
- gPathfindingProgram.uniform1f("ambiance", ambiance);
+ gPathfindingProgram.uniform1f(sAmbiance, ambiance);
llPathingLibInstance->renderNavMeshShapesVBO( render_order[i] );
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}
@@ -5132,9 +5182,9 @@ void LLPipeline::renderDebug()
{ //draw visible wireframe as brighter, thicker and more opaque
glPolygonOffset(offset, offset);
- gPathfindingProgram.uniform1f("ambiance", 1.f);
- gPathfindingProgram.uniform1f("tint", 1.f);
- gPathfindingProgram.uniform1f("alpha_scale", 1.f);
+ gPathfindingProgram.uniform1f(sAmbiance, 1.f);
+ gPathfindingProgram.uniform1f(sTint, 1.f);
+ gPathfindingProgram.uniform1f(sAlphaScale, 1.f);
glLineWidth(gSavedSettings.getF32("PathfindingLineWidth"));
LLGLDisable blendOut(GL_BLEND);
@@ -5166,19 +5216,19 @@ void LLPipeline::renderDebug()
glLineWidth(2.0f);
LLGLEnable cull(GL_CULL_FACE);
- gPathfindingProgram.uniform1f("tint", gSavedSettings.getF32("PathfindingXRayTint"));
- gPathfindingProgram.uniform1f("alpha_scale", gSavedSettings.getF32("PathfindingXRayOpacity"));
+ gPathfindingProgram.uniform1f(sTint, gSavedSettings.getF32("PathfindingXRayTint"));
+ gPathfindingProgram.uniform1f(sAlphaScale, gSavedSettings.getF32("PathfindingXRayOpacity"));
if (gSavedSettings.getBOOL("PathfindingXRayWireframe"))
{ //draw hidden wireframe as darker and less opaque
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
- gPathfindingProgram.uniform1f("ambiance", 1.f);
+ gPathfindingProgram.uniform1f(sAmbiance, 1.f);
llPathingLibInstance->renderNavMesh();
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
}
else
{
- gPathfindingProgram.uniform1f("ambiance", ambiance);
+ gPathfindingProgram.uniform1f(sAmbiance, ambiance);
llPathingLibInstance->renderNavMesh();
}
@@ -5186,8 +5236,8 @@ void LLPipeline::renderDebug()
if (LLGLSLShader::sNoFixedFunction)
{
gPathfindingNoNormalsProgram.bind();
- gPathfindingNoNormalsProgram.uniform1f("tint", gSavedSettings.getF32("PathfindingXRayTint"));
- gPathfindingNoNormalsProgram.uniform1f("alpha_scale", gSavedSettings.getF32("PathfindingXRayOpacity"));
+ gPathfindingNoNormalsProgram.uniform1f(sTint, gSavedSettings.getF32("PathfindingXRayTint"));
+ gPathfindingNoNormalsProgram.uniform1f(sAlphaScale, gSavedSettings.getF32("PathfindingXRayOpacity"));
llPathingLibInstance->renderNavMeshEdges();
gPathfindingProgram.bind();
}
@@ -6297,13 +6347,6 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
F32 x = (3.f * (1.f + light->getLightFalloff())); // why this magic? probably trying to match a historic behavior.
float linatten = x / (light_radius); // % of brightness at radius
- if (LLPipeline::sRenderDeferred)
- {
- /*light_color.mV[0] = powf(light_color.mV[0], 2.2f);
- light_color.mV[1] = powf(light_color.mV[1], 2.2f);
- light_color.mV[2] = powf(light_color.mV[2], 2.2f);*/
- }
-
mHWLightColors[cur_light] = light_color;
LLLightState* light_state = gGL.getLight(cur_light);
@@ -7685,7 +7728,11 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
else
{
//focus on alt-zoom target
- focus_point = LLVector3(gAgentCamera.getFocusGlobal()-gAgent.getRegion()->getOriginGlobal());
+ LLViewerRegion* region = gAgent.getRegion();
+ if (region)
+ {
+ focus_point = LLVector3(gAgentCamera.getFocusGlobal()-region->getOriginGlobal());
+ }
}
}
@@ -8308,10 +8355,10 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, U32 n
shader.uniform1f(LLShaderMgr::DEFERRED_NORM_CUTOFF, RenderEdgeNormCutoff);
- if (shader.getUniformLocation("norm_mat") >= 0)
+ if (shader.getUniformLocation(LLShaderMgr::DEFERRED_NORM_MATRIX) >= 0)
{
glh::matrix4f norm_mat = glh_get_current_modelview().inverse().transpose();
- shader.uniformMatrix4fv("norm_mat", 1, FALSE, norm_mat.m);
+ shader.uniformMatrix4fv(LLShaderMgr::DEFERRED_NORM_MATRIX, 1, FALSE, norm_mat.m);
}
}
@@ -8433,8 +8480,8 @@ void LLPipeline::renderDeferredLighting()
}
}
- gDeferredSunProgram.uniform3fv("offset", slice, offset);
- gDeferredSunProgram.uniform2f("screenRes", mDeferredLight.getWidth(), mDeferredLight.getHeight());
+ gDeferredSunProgram.uniform3fv(sOffset, slice, offset);
+ gDeferredSunProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, mDeferredLight.getWidth(), mDeferredLight.getHeight());
{
LLGLDisable blend(GL_BLEND);
@@ -8478,10 +8525,10 @@ void LLPipeline::renderDeferredLighting()
x += 1.f;
}
- gDeferredBlurLightProgram.uniform2f("delta", 1.f, 0.f);
- gDeferredBlurLightProgram.uniform1f("dist_factor", dist_factor);
- gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV);
- gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f));
+ gDeferredBlurLightProgram.uniform2f(sDelta, 1.f, 0.f);
+ gDeferredBlurLightProgram.uniform1f(sDistFactor, dist_factor);
+ gDeferredBlurLightProgram.uniform3fv(sKern, kern_length, gauss[0].mV);
+ gDeferredBlurLightProgram.uniform1f(sKernScale, blur_size * (kern_length/2.f - 0.5f));
{
LLGLDisable blend(GL_BLEND);
@@ -8498,7 +8545,7 @@ void LLPipeline::renderDeferredLighting()
mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
mDeferredLight.bindTarget();
- gDeferredBlurLightProgram.uniform2f("delta", 0.f, 1.f);
+ gDeferredBlurLightProgram.uniform2f(sDelta, 0.f, 1.f);
{
LLGLDisable blend(GL_BLEND);
@@ -8527,7 +8574,7 @@ void LLPipeline::renderDeferredLighting()
if (RenderDeferredAtmospheric)
{ //apply sunlight contribution
LLFastTimer ftm(FTM_ATMOSPHERICS);
- bindDeferredShader(gDeferredSoftenProgram);
+ bindDeferredShader(LLPipeline::sUnderWaterRender ? gDeferredSoftenWaterProgram : gDeferredSoftenProgram);
{
LLGLDepthTest depth(GL_FALSE);
LLGLDisable blend(GL_BLEND);
@@ -8549,7 +8596,7 @@ void LLPipeline::renderDeferredLighting()
gGL.popMatrix();
}
- unbindDeferredShader(gDeferredSoftenProgram);
+ unbindDeferredShader(LLPipeline::sUnderWaterRender ? gDeferredSoftenWaterProgram : gDeferredSoftenProgram);
}
{ //render non-deferred geometry (fullbright, alpha, etc)
@@ -8742,10 +8789,6 @@ void LLPipeline::renderDeferredLighting()
vert[2].set(3,1,0);
{
- bindDeferredShader(gDeferredMultiLightProgram);
-
- mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
-
LLGLDepthTest depth(GL_FALSE);
//full screen blit
@@ -8757,7 +8800,7 @@ void LLPipeline::renderDeferredLighting()
U32 count = 0;
- const U32 max_count = 8;
+ const U32 max_count = LL_DEFERRED_MULTI_LIGHT_COUNT;
LLVector4 light[max_count];
LLVector4 col[max_count];
@@ -8780,18 +8823,20 @@ void LLPipeline::renderDeferredLighting()
count++;
if (count == max_count || fullscreen_lights.empty())
{
- gDeferredMultiLightProgram.uniform1i(LLShaderMgr::MULTI_LIGHT_COUNT, count);
- gDeferredMultiLightProgram.uniform4fv(LLShaderMgr::MULTI_LIGHT, count, (GLfloat*) light);
- gDeferredMultiLightProgram.uniform4fv(LLShaderMgr::MULTI_LIGHT_COL, count, (GLfloat*) col);
- gDeferredMultiLightProgram.uniform1f(LLShaderMgr::MULTI_LIGHT_FAR_Z, far_z);
+ U32 idx = count-1;
+ bindDeferredShader(gDeferredMultiLightProgram[idx]);
+ gDeferredMultiLightProgram[idx].uniform1i(LLShaderMgr::MULTI_LIGHT_COUNT, count);
+ gDeferredMultiLightProgram[idx].uniform4fv(LLShaderMgr::MULTI_LIGHT, count, (GLfloat*) light);
+ gDeferredMultiLightProgram[idx].uniform4fv(LLShaderMgr::MULTI_LIGHT_COL, count, (GLfloat*) col);
+ gDeferredMultiLightProgram[idx].uniform1f(LLShaderMgr::MULTI_LIGHT_FAR_Z, far_z);
far_z = 0.f;
count = 0;
+ mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+ unbindDeferredShader(gDeferredMultiLightProgram[idx]);
}
}
- unbindDeferredShader(gDeferredMultiLightProgram);
-
bindDeferredShader(gDeferredMultiSpotLightProgram);
gDeferredMultiSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION);
@@ -8872,9 +8917,9 @@ void LLPipeline::renderDeferredLighting()
gDeferredPostGammaCorrectProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, mScreen.getWidth(), mScreen.getHeight());
- F32 gamma = 1.0/2.2;
+ F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
- gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, gamma);
+ gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
@@ -8953,6 +8998,537 @@ void LLPipeline::renderDeferredLighting()
}
+void LLPipeline::renderDeferredLightingToRT(LLRenderTarget* target)
+{
+ if (!sCull)
+ {
+ return;
+ }
+
+ {
+ LLFastTimer ftm(FTM_RENDER_DEFERRED);
+
+ LLViewerCamera* camera = LLViewerCamera::getInstance();
+
+ {
+ LLGLDepthTest depth(GL_TRUE);
+ mDeferredDepth.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(),
+ 0, 0, mDeferredDepth.getWidth(), mDeferredDepth.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST);
+ }
+
+ LLGLEnable multisample(RenderFSAASamples > 0 ? GL_MULTISAMPLE_ARB : 0);
+
+ if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
+ {
+ gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD);
+ }
+
+ //ati doesn't seem to love actually using the stencil buffer on FBO's
+ LLGLDisable stencil(GL_STENCIL_TEST);
+ //glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
+ //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
+
+ gGL.setColorMask(true, true);
+
+ //draw a cube around every light
+ LLVertexBuffer::unbind();
+
+ LLGLEnable cull(GL_CULL_FACE);
+ LLGLEnable blend(GL_BLEND);
+
+ glh::matrix4f mat = glh_copy_matrix(gGLModelView);
+
+ LLStrider<LLVector3> vert;
+ mDeferredVB->getVertexStrider(vert);
+
+ vert[0].set(-1,1,0);
+ vert[1].set(-1,-3,0);
+ vert[2].set(3,1,0);
+
+ {
+ setupHWLights(NULL); //to set mSunDir;
+ LLVector4 dir(mSunDir, 0.f);
+ glh::vec4f tc(dir.mV);
+ mat.mult_matrix_vec(tc);
+ mTransformedSunDir.set(tc.v);
+ }
+
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+
+ if (RenderDeferredSSAO || RenderShadowDetail > 0)
+ {
+ mDeferredLight.bindTarget();
+ { //paint shadow/SSAO light map (direct lighting lightmap)
+ LLFastTimer ftm(FTM_SUN_SHADOW);
+ bindDeferredShader(gDeferredSunProgram);
+ mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+ glClearColor(1,1,1,1);
+ mDeferredLight.clear(GL_COLOR_BUFFER_BIT);
+ glClearColor(0,0,0,0);
+
+ glh::matrix4f inv_trans = glh_get_current_modelview().inverse().transpose();
+
+ const U32 slice = 32;
+ F32 offset[slice*3];
+ for (U32 i = 0; i < 4; i++)
+ {
+ for (U32 j = 0; j < 8; j++)
+ {
+ glh::vec3f v;
+ v.set_value(sinf(6.284f/8*j), cosf(6.284f/8*j), -(F32) i);
+ v.normalize();
+ inv_trans.mult_matrix_vec(v);
+ v.normalize();
+ offset[(i*8+j)*3+0] = v.v[0];
+ offset[(i*8+j)*3+1] = v.v[2];
+ offset[(i*8+j)*3+2] = v.v[1];
+ }
+ }
+
+ gDeferredSunProgram.uniform3fv(LLShaderMgr::DEFERRED_SHADOW_OFFSET, slice, offset);
+ gDeferredSunProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, mDeferredLight.getWidth(), mDeferredLight.getHeight());
+
+ {
+ LLGLDisable blend(GL_BLEND);
+ LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS);
+ stop_glerror();
+ mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+ stop_glerror();
+ }
+
+ unbindDeferredShader(gDeferredSunProgram);
+ }
+ mDeferredLight.flush();
+ }
+
+ stop_glerror();
+ gGL.popMatrix();
+ stop_glerror();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ stop_glerror();
+ gGL.popMatrix();
+ stop_glerror();
+
+ target->bindTarget();
+
+ //clear color buffer here - zeroing alpha (glow) is important or it will accumulate against sky
+ glClearColor(0,0,0,0);
+ target->clear(GL_COLOR_BUFFER_BIT);
+
+ if (RenderDeferredAtmospheric)
+ { //apply sunlight contribution
+ LLFastTimer ftm(FTM_ATMOSPHERICS);
+ bindDeferredShader(gDeferredSoftenProgram);
+ {
+ LLGLDepthTest depth(GL_FALSE);
+ LLGLDisable blend(GL_BLEND);
+ LLGLDisable test(GL_ALPHA_TEST);
+
+ //full screen blit
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+
+ mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+
+ mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+
+ gGL.popMatrix();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.popMatrix();
+ }
+
+ unbindDeferredShader(gDeferredSoftenProgram);
+ }
+
+ { //render non-deferred geometry (fullbright, alpha, etc)
+ LLGLDisable blend(GL_BLEND);
+ LLGLDisable stencil(GL_STENCIL_TEST);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
+
+ gPipeline.pushRenderTypeMask();
+
+ gPipeline.andRenderTypeMask(LLPipeline::RENDER_TYPE_SKY,
+ LLPipeline::RENDER_TYPE_CLOUDS,
+ LLPipeline::RENDER_TYPE_WL_SKY,
+ LLPipeline::END_RENDER_TYPES);
+
+
+ renderGeomPostDeferred(*LLViewerCamera::getInstance(), false);
+ gPipeline.popRenderTypeMask();
+ }
+
+ BOOL render_local = RenderLocalLights;
+
+ if (render_local)
+ {
+ gGL.setSceneBlendType(LLRender::BT_ADD);
+ std::list<LLVector4> fullscreen_lights;
+ LLDrawable::drawable_list_t spot_lights;
+ LLDrawable::drawable_list_t fullscreen_spot_lights;
+
+ for (U32 i = 0; i < 2; i++)
+ {
+ mTargetShadowSpotLight[i] = NULL;
+ }
+
+ std::list<LLVector4> light_colors;
+
+ LLVertexBuffer::unbind();
+
+ {
+ bindDeferredShader(gDeferredLightProgram);
+
+ if (mCubeVB.isNull())
+ {
+ mCubeVB = ll_create_cube_vb(LLVertexBuffer::MAP_VERTEX, GL_STATIC_DRAW_ARB);
+ }
+
+ mCubeVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+
+ LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+ for (LLDrawable::drawable_set_t::iterator iter = mLights.begin(); iter != mLights.end(); ++iter)
+ {
+ LLDrawable* drawablep = *iter;
+
+ LLVOVolume* volume = drawablep->getVOVolume();
+ if (!volume)
+ {
+ continue;
+ }
+
+ if (volume->isAttachment())
+ {
+ if (!sRenderAttachedLights)
+ {
+ continue;
+ }
+ }
+
+
+ LLVector4a center;
+ center.load3(drawablep->getPositionAgent().mV);
+ const F32* c = center.getF32ptr();
+ F32 s = volume->getLightRadius()*1.5f;
+
+ LLColor3 col = volume->getLightColor();
+
+ if (col.magVecSquared() < 0.001f)
+ {
+ continue;
+ }
+
+ if (s <= 0.001f)
+ {
+ continue;
+ }
+
+ LLVector4a sa;
+ sa.splat(s);
+ if (camera->AABBInFrustumNoFarClip(center, sa) == 0)
+ {
+ continue;
+ }
+
+ sVisibleLightCount++;
+
+ if (camera->getOrigin().mV[0] > c[0] + s + 0.2f ||
+ camera->getOrigin().mV[0] < c[0] - s - 0.2f ||
+ camera->getOrigin().mV[1] > c[1] + s + 0.2f ||
+ camera->getOrigin().mV[1] < c[1] - s - 0.2f ||
+ camera->getOrigin().mV[2] > c[2] + s + 0.2f ||
+ camera->getOrigin().mV[2] < c[2] - s - 0.2f)
+ { //draw box if camera is outside box
+ if (render_local)
+ {
+ if (volume->isLightSpotlight())
+ {
+ drawablep->getVOVolume()->updateSpotLightPriority();
+ spot_lights.push_back(drawablep);
+ continue;
+ }
+
+ /*col.mV[0] = powf(col.mV[0], 2.2f);
+ col.mV[1] = powf(col.mV[1], 2.2f);
+ col.mV[2] = powf(col.mV[2], 2.2f);*/
+
+ LLFastTimer ftm(FTM_LOCAL_LIGHTS);
+ gDeferredLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
+ gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
+ gDeferredLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
+ gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
+ gGL.syncMatrices();
+
+ mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, center));
+ stop_glerror();
+ }
+ }
+ else
+ {
+ if (volume->isLightSpotlight())
+ {
+ drawablep->getVOVolume()->updateSpotLightPriority();
+ fullscreen_spot_lights.push_back(drawablep);
+ continue;
+ }
+
+ glh::vec3f tc(c);
+ mat.mult_matrix_vec(tc);
+
+ fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s));
+ light_colors.push_back(LLVector4(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f));
+ }
+ }
+ unbindDeferredShader(gDeferredLightProgram);
+ }
+
+ if (!spot_lights.empty())
+ {
+ LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+ bindDeferredShader(gDeferredSpotLightProgram);
+
+ mCubeVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+
+ gDeferredSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION);
+
+ for (LLDrawable::drawable_list_t::iterator iter = spot_lights.begin(); iter != spot_lights.end(); ++iter)
+ {
+ LLFastTimer ftm(FTM_PROJECTORS);
+ LLDrawable* drawablep = *iter;
+
+ LLVOVolume* volume = drawablep->getVOVolume();
+
+ LLVector4a center;
+ center.load3(drawablep->getPositionAgent().mV);
+ const F32* c = center.getF32ptr();
+ F32 s = volume->getLightRadius()*1.5f;
+
+ sVisibleLightCount++;
+
+ setupSpotLight(gDeferredSpotLightProgram, drawablep);
+
+ LLColor3 col = volume->getLightColor();
+ /*col.mV[0] = powf(col.mV[0], 2.2f);
+ col.mV[1] = powf(col.mV[1], 2.2f);
+ col.mV[2] = powf(col.mV[2], 2.2f);*/
+
+ gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
+ gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
+ gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
+ gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
+ gGL.syncMatrices();
+
+ mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, center));
+ }
+ gDeferredSpotLightProgram.disableTexture(LLShaderMgr::DEFERRED_PROJECTION);
+ unbindDeferredShader(gDeferredSpotLightProgram);
+ }
+
+ //reset mDeferredVB to fullscreen triangle
+ mDeferredVB->getVertexStrider(vert);
+ vert[0].set(-1,1,0);
+ vert[1].set(-1,-3,0);
+ vert[2].set(3,1,0);
+
+ {
+ LLGLDepthTest depth(GL_FALSE);
+
+ //full screen blit
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+
+ U32 count = 0;
+
+ const U32 max_count = LL_DEFERRED_MULTI_LIGHT_COUNT;
+ LLVector4 light[max_count];
+ LLVector4 col[max_count];
+
+ F32 far_z = 0.f;
+
+ while (!fullscreen_lights.empty())
+ {
+ LLFastTimer ftm(FTM_FULLSCREEN_LIGHTS);
+ light[count] = fullscreen_lights.front();
+ fullscreen_lights.pop_front();
+ col[count] = light_colors.front();
+ light_colors.pop_front();
+
+ /*col[count].mV[0] = powf(col[count].mV[0], 2.2f);
+ col[count].mV[1] = powf(col[count].mV[1], 2.2f);
+ col[count].mV[2] = powf(col[count].mV[2], 2.2f);*/
+
+ far_z = llmin(light[count].mV[2]-light[count].mV[3], far_z);
+ //col[count] = pow4fsrgb(col[count], 2.2f);
+ count++;
+ if (count == max_count || fullscreen_lights.empty())
+ {
+ U32 idx = count-1;
+ bindDeferredShader(gDeferredMultiLightProgram[idx]);
+ gDeferredMultiLightProgram[idx].uniform1i(LLShaderMgr::MULTI_LIGHT_COUNT, count);
+ gDeferredMultiLightProgram[idx].uniform4fv(LLShaderMgr::MULTI_LIGHT, count, (GLfloat*) light);
+ gDeferredMultiLightProgram[idx].uniform4fv(LLShaderMgr::MULTI_LIGHT_COL, count, (GLfloat*) col);
+ gDeferredMultiLightProgram[idx].uniform1f(LLShaderMgr::MULTI_LIGHT_FAR_Z, far_z);
+ far_z = 0.f;
+ count = 0;
+ mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+ mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+ }
+ }
+
+ unbindDeferredShader(gDeferredMultiLightProgram[0]);
+
+ bindDeferredShader(gDeferredMultiSpotLightProgram);
+
+ gDeferredMultiSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION);
+
+ mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+
+ for (LLDrawable::drawable_list_t::iterator iter = fullscreen_spot_lights.begin(); iter != fullscreen_spot_lights.end(); ++iter)
+ {
+ LLFastTimer ftm(FTM_PROJECTORS);
+ LLDrawable* drawablep = *iter;
+
+ LLVOVolume* volume = drawablep->getVOVolume();
+
+ LLVector3 center = drawablep->getPositionAgent();
+ F32* c = center.mV;
+ F32 s = volume->getLightRadius()*1.5f;
+
+ sVisibleLightCount++;
+
+ glh::vec3f tc(c);
+ mat.mult_matrix_vec(tc);
+
+ setupSpotLight(gDeferredMultiSpotLightProgram, drawablep);
+
+ LLColor3 col = volume->getLightColor();
+
+ /*col.mV[0] = powf(col.mV[0], 2.2f);
+ col.mV[1] = powf(col.mV[1], 2.2f);
+ col.mV[2] = powf(col.mV[2], 2.2f);*/
+
+ gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, tc.v);
+ gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
+ gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
+ gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
+ mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+ }
+
+ gDeferredMultiSpotLightProgram.disableTexture(LLShaderMgr::DEFERRED_PROJECTION);
+ unbindDeferredShader(gDeferredMultiSpotLightProgram);
+
+ gGL.popMatrix();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.popMatrix();
+ }
+ }
+
+ gGL.setColorMask(true, true);
+ }
+
+ /*target->flush();
+
+ //gamma correct lighting
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+
+ {
+ LLGLDepthTest depth(GL_FALSE, GL_FALSE);
+
+ LLVector2 tc1(0,0);
+ LLVector2 tc2((F32) target->getWidth()*2,
+ (F32) target->getHeight()*2);
+
+ target->bindTarget();
+ // Apply gamma correction to the frame here.
+ gDeferredPostGammaCorrectProgram.bind();
+ //mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+ S32 channel = 0;
+ channel = gDeferredPostGammaCorrectProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, target->getUsage());
+ if (channel > -1)
+ {
+ target->bindTexture(0,channel);
+ gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
+ }
+
+ gDeferredPostGammaCorrectProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, target->getWidth(), target->getHeight());
+
+ F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
+
+ gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));
+
+ gGL.begin(LLRender::TRIANGLE_STRIP);
+ gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
+ gGL.vertex2f(-1,-1);
+
+ gGL.texCoord2f(tc1.mV[0], tc2.mV[1]);
+ gGL.vertex2f(-1,3);
+
+ gGL.texCoord2f(tc2.mV[0], tc1.mV[1]);
+ gGL.vertex2f(3,-1);
+
+ gGL.end();
+
+ gGL.getTexUnit(channel)->unbind(target->getUsage());
+ gDeferredPostGammaCorrectProgram.unbind();
+ target->flush();
+ }
+
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.popMatrix();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.popMatrix();
+
+ target->bindTarget();*/
+
+ { //render non-deferred geometry (alpha, fullbright, glow)
+ LLGLDisable blend(GL_BLEND);
+ LLGLDisable stencil(GL_STENCIL_TEST);
+
+ pushRenderTypeMask();
+ andRenderTypeMask(LLPipeline::RENDER_TYPE_ALPHA,
+ LLPipeline::RENDER_TYPE_FULLBRIGHT,
+ LLPipeline::RENDER_TYPE_VOLUME,
+ LLPipeline::RENDER_TYPE_GLOW,
+ LLPipeline::RENDER_TYPE_BUMP,
+ LLPipeline::RENDER_TYPE_PASS_SIMPLE,
+ LLPipeline::RENDER_TYPE_PASS_ALPHA,
+ LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK,
+ LLPipeline::RENDER_TYPE_PASS_BUMP,
+ LLPipeline::RENDER_TYPE_PASS_POST_BUMP,
+ LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
+ LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK,
+ LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
+ LLPipeline::RENDER_TYPE_PASS_GLOW,
+ LLPipeline::RENDER_TYPE_PASS_GRASS,
+ LLPipeline::RENDER_TYPE_PASS_SHINY,
+ LLPipeline::RENDER_TYPE_PASS_INVISIBLE,
+ LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY,
+ LLPipeline::RENDER_TYPE_AVATAR,
+ LLPipeline::RENDER_TYPE_ALPHA_MASK,
+ LLPipeline::RENDER_TYPE_FULLBRIGHT_ALPHA_MASK,
+ END_RENDER_TYPES);
+
+ renderGeomPostDeferred(*LLViewerCamera::getInstance());
+ popRenderTypeMask();
+ }
+
+ //target->flush();
+}
+
void LLPipeline::setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep)
{
//construct frustum
@@ -9199,6 +9775,12 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
water_clip = 1;
}
+ bool materials_in_water = false;
+
+#if MATERIALS_IN_REFLECTIONS
+ materials_in_water = gSavedSettings.getS32("RenderWaterMaterials");
+#endif
+
if (!LLViewerCamera::getInstance()->cameraUnderWater())
{ //generate planar reflection map
@@ -9207,7 +9789,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLPipeline::sUseOcclusion = 0;
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glClearColor(0,0,0,0);
+
mWaterRef.bindTarget();
+
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WATER0;
gGL.setColorMask(true, true);
mWaterRef.clear();
@@ -9256,11 +9840,27 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
updateCull(camera, result);
stateSort(camera, result);
+ if (LLPipeline::sRenderDeferred && materials_in_water)
+ {
+ mWaterRef.flush();
+
+ gPipeline.grabReferences(result);
+ gPipeline.mDeferredScreen.bindTarget();
+ gGL.setColorMask(true, true);
+ glClearColor(0,0,0,0);
+ gPipeline.mDeferredScreen.clear();
+
+ renderGeomDeferred(camera);
+ }
+ else
+ {
renderGeom(camera, TRUE);
+ }
gPipeline.popRenderTypeMask();
}
+ gGL.setColorMask(true, false);
gPipeline.pushRenderTypeMask();
clearRenderTypeMask(LLPipeline::RENDER_TYPE_WATER,
@@ -9298,9 +9898,23 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
{
gPipeline.grabReferences(ref_result);
LLGLUserClipPlane clip_plane(plane, mat, projection);
+
+ if (LLPipeline::sRenderDeferred && materials_in_water)
+ {
+ renderGeomDeferred(camera);
+ }
+ else
+ {
renderGeom(camera);
}
}
+ }
+
+ if (LLPipeline::sRenderDeferred && materials_in_water)
+ {
+ gPipeline.mDeferredScreen.flush();
+ renderDeferredLightingToRT(&mWaterRef);
+ }
gPipeline.popRenderTypeMask();
}
@@ -9336,10 +9950,12 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLViewerCamera::updateFrustumPlanes(camera);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+
LLColor4& col = LLDrawPoolWater::sWaterFogColor;
glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
mWaterDis.bindTarget();
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WATER1;
+
mWaterDis.getViewport(gGLViewport);
if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate)
@@ -9355,14 +9971,36 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
gGL.setColorMask(true, true);
mWaterDis.clear();
+
+
gGL.setColorMask(true, false);
+
+ if (LLPipeline::sRenderDeferred && materials_in_water)
+ {
+ mWaterDis.flush();
+ gPipeline.mDeferredScreen.bindTarget();
+ gGL.setColorMask(true, true);
+ glClearColor(0,0,0,0);
+ gPipeline.mDeferredScreen.clear();
+ gPipeline.grabReferences(result);
+ renderGeomDeferred(camera);
+ }
+ else
+ {
renderGeom(camera);
+ }
+ if (LLPipeline::sRenderDeferred && materials_in_water)
+ {
+ gPipeline.mDeferredScreen.flush();
+ renderDeferredLightingToRT(&mWaterDis);
+ }
}
- LLPipeline::sUnderWaterRender = FALSE;
mWaterDis.flush();
+ LLPipeline::sUnderWaterRender = FALSE;
+
}
last_update = LLDrawPoolWater::sNeedsReflectionUpdate && LLDrawPoolWater::sNeedsDistortionUpdate;
@@ -10678,39 +11316,47 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
assertInitialized();
- bool muted = avatar->isVisuallyMuted();
+ bool visually_muted = avatar->isVisuallyMuted();
pushRenderTypeMask();
- if (muted)
+ if (visually_muted)
{
andRenderTypeMask(LLPipeline::RENDER_TYPE_AVATAR, END_RENDER_TYPES);
}
else
{
- andRenderTypeMask(LLPipeline::RENDER_TYPE_VOLUME,
- LLPipeline::RENDER_TYPE_AVATAR,
+ andRenderTypeMask(LLPipeline::RENDER_TYPE_ALPHA,
+ LLPipeline::RENDER_TYPE_FULLBRIGHT,
+ LLPipeline::RENDER_TYPE_VOLUME,
+ LLPipeline::RENDER_TYPE_GLOW,
LLPipeline::RENDER_TYPE_BUMP,
- LLPipeline::RENDER_TYPE_GRASS,
- LLPipeline::RENDER_TYPE_SIMPLE,
- LLPipeline::RENDER_TYPE_FULLBRIGHT,
- LLPipeline::RENDER_TYPE_ALPHA,
- LLPipeline::RENDER_TYPE_INVISIBLE,
LLPipeline::RENDER_TYPE_PASS_SIMPLE,
LLPipeline::RENDER_TYPE_PASS_ALPHA,
LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK,
+ LLPipeline::RENDER_TYPE_PASS_BUMP,
+ LLPipeline::RENDER_TYPE_PASS_POST_BUMP,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
+ LLPipeline::RENDER_TYPE_PASS_GLOW,
+ LLPipeline::RENDER_TYPE_PASS_GRASS,
LLPipeline::RENDER_TYPE_PASS_SHINY,
LLPipeline::RENDER_TYPE_PASS_INVISIBLE,
LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY,
+ LLPipeline::RENDER_TYPE_AVATAR,
+ LLPipeline::RENDER_TYPE_ALPHA_MASK,
+ LLPipeline::RENDER_TYPE_FULLBRIGHT_ALPHA_MASK,
+ LLPipeline::RENDER_TYPE_INVISIBLE,
+ LLPipeline::RENDER_TYPE_SIMPLE,
END_RENDER_TYPES);
}
S32 occlusion = sUseOcclusion;
sUseOcclusion = 0;
+
sReflectionRender = sRenderDeferred ? FALSE : TRUE;
+
sShadowRender = TRUE;
sImpostorRender = TRUE;
@@ -10805,32 +11451,59 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
if (!avatar->mImpostor.isComplete())
{
LLFastTimer t(FTM_IMPOSTOR_ALLOCATE);
- avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE,FALSE);
+
if (LLPipeline::sRenderDeferred)
{
+ avatar->mImpostor.allocate(resX,resY,GL_SRGB8_ALPHA8,TRUE,FALSE);
addDeferredAttachments(avatar->mImpostor);
}
+ else
+ {
+ avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE,FALSE);
+ }
gGL.getTexUnit(0)->bind(&avatar->mImpostor);
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
- else if(resX != avatar->mImpostor.getWidth() ||
- resY != avatar->mImpostor.getHeight())
+ else if(resX != avatar->mImpostor.getWidth() || resY != avatar->mImpostor.getHeight())
{
LLFastTimer t(FTM_IMPOSTOR_RESIZE);
- avatar->mImpostor.resize(resX,resY,GL_RGBA);
+ avatar->mImpostor.resize(resX,resY);
}
avatar->mImpostor.bindTarget();
}
+ F32 old_alpha = LLDrawPoolAvatar::sMinimumAlpha;
+
+ if (visually_muted)
+ { //disable alpha masking for muted avatars (get whole skin silhouette)
+ LLDrawPoolAvatar::sMinimumAlpha = 0.f;
+ }
+
if (LLPipeline::sRenderDeferred)
{
avatar->mImpostor.clear();
renderGeomDeferred(camera);
+
+ renderGeomPostDeferred(camera);
+
+ // Shameless hack time: render it all again,
+ // this time writing the depth
+ // values we need to generate the alpha mask below
+ // while preserving the alpha-sorted color rendering
+ // from the previous pass
+ //
+ sImpostorRenderAlphaDepthPass = true;
+ // depth-only here...
+ //
+ gGL.setColorMask(false,false);
renderGeomPostDeferred(camera);
+
+ sImpostorRenderAlphaDepthPass = false;
+
}
else
{
@@ -10838,10 +11511,28 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
glScissor(0, 0, resX, resY);
avatar->mImpostor.clear();
renderGeom(camera);
+
+ // Shameless hack time: render it all again,
+ // this time writing the depth
+ // values we need to generate the alpha mask below
+ // while preserving the alpha-sorted color rendering
+ // from the previous pass
+ //
+ sImpostorRenderAlphaDepthPass = true;
+
+ // depth-only here...
+ //
+ gGL.setColorMask(false,false);
+ renderGeom(camera);
+
+ sImpostorRenderAlphaDepthPass = false;
}
-
+
+ LLDrawPoolAvatar::sMinimumAlpha = old_alpha;
+
{ //create alpha mask based on depth buffer (grey out if muted)
LLFastTimer t(FTM_IMPOSTOR_BACKGROUND);
+
if (LLPipeline::sRenderDeferred)
{
GLuint buff = GL_COLOR_ATTACHMENT0;
@@ -10850,7 +11541,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
LLGLDisable blend(GL_BLEND);
- if (muted)
+ if (visually_muted)
{
gGL.setColorMask(true, true);
}
@@ -10875,10 +11566,20 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
if (LLGLSLShader::sNoFixedFunction)
{
- gUIProgram.bind();
+ gDebugProgram.bind();
+ }
+
+
+ if (LLMuteList::getInstance()->isMuted(avatar->getID()))
+ { //grey muted avatar
+ gGL.diffuseColor4ub(64,64,64,255);
+ }
+ else
+ { // Visually muted avatar
+ gGL.diffuseColor4fv( avatar->getMutedAVColor().mV );
}
- gGL.color4ub(64,64,64,255);
+ {
gGL.begin(LLRender::QUADS);
gGL.vertex3f(-1, -1, clip_plane);
gGL.vertex3f(1, -1, clip_plane);
@@ -10886,10 +11587,11 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
gGL.vertex3f(-1, 1, clip_plane);
gGL.end();
gGL.flush();
+ }
if (LLGLSLShader::sNoFixedFunction)
{
- gUIProgram.unbind();
+ gDebugProgram.unbind();
}
gGL.popMatrix();
@@ -11226,6 +11928,3 @@ void LLPipeline::restoreHiddenObject( const LLUUID& id )
}
}
-
-
-
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index f0bebbe20d..9aeb2d4978 100755
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -295,6 +295,7 @@ public:
void unbindDeferredShader(LLGLSLShader& shader);
void renderDeferredLighting();
+ void renderDeferredLightingToRT(LLRenderTarget* target);
void generateWaterReflection(LLCamera& camera);
void generateSunShadow(LLCamera& camera);
@@ -594,6 +595,7 @@ public:
static BOOL sPickAvatar;
static BOOL sReflectionRender;
static BOOL sImpostorRender;
+ static BOOL sImpostorRenderAlphaDepthPass;
static BOOL sUnderWaterRender;
static BOOL sRenderGlow;
static BOOL sTextureBindTest;
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_add_person.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_add_person.png
index 0631f16f3b..0631f16f3b 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_add_person.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_add_person.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_ne.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_ne.png
index 578482f5ed..578482f5ed 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_ne.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_ne.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_sw.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_sw.png
index 7676131790..7676131790 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_sw.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_arrow_sw.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_call_log.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_call_log.png
index 2880eb766a..2880eb766a 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_call_log.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_call_log.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_close.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_close.png
index d009c8f446..d009c8f446 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_close.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_close.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_collapse.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_collapse.png
index 8d82960e28..8d82960e28 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_collapse.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_collapse.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_expand.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_expand.png
index f718d3fc60..f718d3fc60 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_expand.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_expand.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_hang_up.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_hang_up.png
index 315e2c581a..315e2c581a 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_hang_up.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_hang_up.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_open_call.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_open_call.png
index 732ab02a20..732ab02a20 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_open_call.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_open_call.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_plus.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_plus.png
index 25a32cb2ba..25a32cb2ba 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_plus.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_plus.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Conv_toolbar_sort.png b/indra/newview/skins/default/textures/icons/Conv_toolbar_sort.png
index 08debeb91f..08debeb91f 100755..100644
--- a/indra/newview/skins/default/textures/icons/Conv_toolbar_sort.png
+++ b/indra/newview/skins/default/textures/icons/Conv_toolbar_sort.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index 5245467183..bc0eae7c5d 100755
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -8,7 +8,9 @@
Kompiliert mit [COMPILER] version [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Sie befinden sich in [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] auf &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+ Sie befinden sich an [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] auf &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(globale Koordinaten [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index 8f99fc933c..27a74c874e 100755
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="BERECHTIGUNGEN BEARBEITEN">
+<floater name="floaterbulkperms" title="INHALTSBERECHTIGUNGEN ÄNDERN">
<floater.string name="nothing_to_modify_text">
Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
</floater.string>
@@ -33,7 +33,7 @@
<button label="√ Alle" label_selected="Alle" name="check_all"/>
<button label="Löschen" label_selected="Keine" name="check_none"/>
<text name="newperms">
- Neue Inhalts-Berechtigungen
+ Inhaltsberechtigungen ändern in
</text>
<text name="GroupLabel">
Gruppe:
@@ -49,6 +49,7 @@
<check_box label="Bearbeiten" name="next_owner_modify"/>
<check_box label="Kopieren" name="next_owner_copy"/>
<check_box initial_value="true" label="Transferieren" name="next_owner_transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
- <button label="OK" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="Anwenden" name="apply"/>
<button label="Abbrechen" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_goto_line.xml b/indra/newview/skins/default/xui/de/floater_goto_line.xml
new file mode 100644
index 0000000000..02550ec398
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="GEHE ZU ZEILE">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ Gehe zu Zeile
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml
index f96eb72cb1..b07b74bf4a 100755
--- a/indra/newview/skins/default/xui/de/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/de/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
index 88e9f53a4c..ebf8f01632 100755
--- a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Anzeigen:
</text>
- <check_box label="Test" name="show_world"/>
+ <check_box label="Welt" name="show_world"/>
<check_box label="Nur bewegliche Objekte" name="show_world_movables_only"/>
<check_box label="Navmesh" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_other.xml b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
index 237c92f7d2..4c125c8b5d 100755
--- a/indra/newview/skins/default/xui/de/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Einfrieren" name="Freeze..."/>
<menu_item_call label="Hinauswerfen" name="Eject..."/>
<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+ <menu_item_call label="XML ausgeben" name="Dump XML"/>
<menu_item_call label="Hineinzoomen" name="Zoom In"/>
<menu_item_call label="Bezahlen" name="Pay..."/>
<menu_item_call label="Objektprofil" name="Object Inspect"/>
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
index 325d52a22e..7888c7b0a1 100755
--- a/indra/newview/skins/default/xui/de/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="Meine Gruppen" name="Groups..."/>
<menu_item_call label="Mein Profil" name="Profile..."/>
<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+ <menu_item_call label="XML ausgeben" name="Dump XML"/>
<menu_item_call label="Fallen lassen" name="Drop"/>
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_other.xml b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
index 8aee0be3d2..65dc054ed5 100755
--- a/indra/newview/skins/default/xui/de/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Einfrieren" name="Freeze..."/>
<menu_item_call label="Hinauswerfen" name="Eject..."/>
<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+ <menu_item_call label="XML ausgeben" name="Dump XML"/>
<menu_item_call label="Hineinzoomen" name="Zoom In"/>
<menu_item_call label="Bezahlen" name="Pay..."/>
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
index c49f4b198b..022cd8c3ca 100755
--- a/indra/newview/skins/default/xui/de/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="Meine Gruppen" name="Groups..."/>
<menu_item_call label="Mein Profil" name="Profile..."/>
<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+ <menu_item_call label="XML ausgeben" name="Dump XML"/>
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_conversation.xml b/indra/newview/skins/default/xui/de/menu_conversation.xml
index 30d3ab79e1..bdfa66c23b 100644
--- a/indra/newview/skins/default/xui/de/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/de/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Unterhaltung schließen" name="close_conversation"/>
<menu_item_call label="Unterhaltung öffnen" name="open_voice_conversation"/>
<menu_item_call label="Voice-Verbindung trennen" name="disconnect_from_voice"/>
+ <menu_item_call label="Ausgewählte schließen" name="close_selected_conversations"/>
<menu_item_call label="Profil anzeigen" name="view_profile"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="Teleport anbieten" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/de/menu_land.xml b/indra/newview/skins/default/xui/de/menu_land.xml
index de679da3d8..0bbf8c666e 100755
--- a/indra/newview/skins/default/xui/de/menu_land.xml
+++ b/indra/newview/skins/default/xui/de/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Pass kaufen" name="Land Buy Pass"/>
<menu_item_call label="Bauen" name="Create"/>
<menu_item_call label="Land bearbeiten" name="Edit Terrain"/>
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml
index b43b41a5dc..62358cc5a8 100755
--- a/indra/newview/skins/default/xui/de/menu_login.xml
+++ b/indra/newview/skins/default/xui/de/menu_login.xml
@@ -18,7 +18,13 @@
<menu_item_call label="Servicebedingungen anzeigen" name="TOS"/>
<menu_item_call label="Wichtige Meldung anzeigen" name="Critical"/>
<menu_item_call label="Web Content Floater Debug Test" name="Web Content Floater Debug Test"/>
- <menu label="Protokollierungsstufe festlegen" name="Set Logging Level"/>
+ <menu label="Protokollierungsstufe festlegen" name="Set Logging Level">
+ <menu_item_check label="Debug" name="Debug"/>
+ <menu_item_check label="Info" name="Info"/>
+ <menu_item_check label="Warnung" name="Warning"/>
+ <menu_item_check label="Fehler" name="Error"/>
+ <menu_item_check label="Keine" name="None"/>
+ </menu>
<menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/>
<menu_item_call label="Benachrichtigungs-Konsole anzeigen" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_mute_particle.xml b/indra/newview/skins/default/xui/de/menu_mute_particle.xml
new file mode 100644
index 0000000000..ea8ae03ee0
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
index 9f44ced928..de2b409678 100755
--- a/indra/newview/skins/default/xui/de/menu_object.xml
+++ b/indra/newview/skins/default/xui/de/menu_object.xml
@@ -5,13 +5,13 @@
</menu_item_call>
<menu_item_call label="Bearbeiten" name="Edit..."/>
<menu_item_call label="Bauen" name="Build"/>
- <menu_item_call label="In Linksets anzeigen" name="show_in_linksets"/>
- <menu_item_call label="In Figuren anzeigen" name="show_in_characters"/>
<menu_item_call label="Öffnen" name="Open"/>
<menu_item_call label="Hier sitzen" name="Object Sit"/>
<menu_item_call label="Aufstehen" name="Object Stand Up"/>
<menu_item_call label="Objektprofil" name="Object Inspect"/>
<menu_item_call label="Hineinzoomen" name="Zoom In"/>
+ <menu_item_call label="In Linksets anzeigen" name="show_in_linksets"/>
+ <menu_item_call label="In Figuren anzeigen" name="show_in_characters"/>
<context_menu label="Anziehen" name="Put On">
<menu_item_call label="Anziehen" name="Wear"/>
<menu_item_call label="Hinzufügen" name="Add"/>
@@ -28,4 +28,5 @@
<menu_item_call label="Bezahlen" name="Pay..."/>
<menu_item_call label="Kaufen" name="Buy..."/>
<menu_item_call label="Löschen" name="Delete"/>
+ <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml
index c61ebb0eae..ddb072ba8f 100755
--- a/indra/newview/skins/default/xui/de/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Profil anzeigen" name="show_agent"/>
<menu_item_call label="IM senden..." name="send_im"/>
<menu_item_call label="Freund hinzufügen..." name="add_friend"/>
+ <menu_item_call label="Freund entfernen..." name="remove_friend"/>
<menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
index 77b7004e44..fc01ea8444 100755
--- a/indra/newview/skins/default/xui/de/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Objektprofil..." name="show_object"/>
+ <menu_item_call label="Blockieren..." name="block_object"/>
<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
<menu_item_call label="Zu Objekt-Position teleportieren" name="teleport_to_object"/>
<menu_item_call label="Objektname in Zwischenablage kopieren" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 47d9fec352..be5d4891d7 100755
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
<menu_item_call label="Gehen/Rennen/Fliegen..." name="Walk / run / fly"/>
</menu>
- <menu label="Status" name="Status"/>
+ <menu label="Status" name="Status">
+ <menu_item_check label="Abwesend" name="Away"/>
+ <menu_item_check label="Nicht stören" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/>
<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>
<menu_item_call label="Kontoübersicht..." name="Manage My Account">
@@ -32,6 +35,7 @@
<menu_item_check label="Unterhaltungen..." name="Conversations"/>
<menu_item_check label="Chat in der Nähe..." name="Nearby Chat"/>
<menu_item_check label="Sprechen" name="Speak"/>
+ <menu_item_check label="Unterhaltungsprotokoll..." name="Conversation Log..."/>
<menu label="Voice-Morphing" name="VoiceMorphing">
<menu_item_check label="Kein Voice-Morphing" name="NoVoiceMorphing"/>
<menu_item_check label="Vorschau..." name="Preview"/>
@@ -42,6 +46,7 @@
<menu_item_check label="Gruppen" name="My Groups"/>
<menu_item_check label="Leute in der Nähe" name="Active Speakers"/>
<menu_item_call label="Blockierliste" name="Block List"/>
+ <menu_item_check label="Nicht stören" name="Do Not Disturb"/>
</menu>
<menu label="Welt" name="World">
<menu_item_call label="Landmarke für diesen Ort setzen" name="Create Landmark Here"/>
@@ -110,6 +115,7 @@
<menu_item_call label="Nächsten Teil mit einsschließen" name="Include Next Part"/>
<menu_item_call label="Vorherige Teile mit einschließen" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Linksets..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Fokus auf Auswahl" name="Focus on Selection"/>
<menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection"/>
<menu label="Objekt" name="Object">
@@ -279,6 +285,7 @@
<menu_item_check label="Framerate randomisieren" name="Randomize Framerate"/>
<menu_item_check label="Periodic Slow Frame" name="Periodic Slow Frame"/>
<menu_item_check label="Frame-Test" name="Frame Test"/>
+ <menu_item_call label="Rahmenprofil" name="Frame Profile"/>
</menu>
<menu label="Metadaten darstellen" name="Render Metadata">
<menu_item_check label="Bonding Boxes" name="Bounding Boxes"/>
@@ -313,9 +320,10 @@
<menu_item_check label="Achsen" name="Axes"/>
<menu_item_check label="Tangentenbasis" name="Tangent Basis"/>
<menu_item_call label="Texturinfo für ausgewähltes Objekt" name="Selected Texture Info Basis"/>
+ <menu_item_call label="Ausgewählte Materialinfos" name="Selected Material Info"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
<menu_item_check label="Objekt-Objekt Okklusion" name="Object-Object Occlusion"/>
- <menu_item_check label="Uber Licht Modell" name="Advanced Lighting Model"/>
+ <menu_item_check label="Erweitertes Beleuchtungsmodell" name="Advanced Lighting Model"/>
<menu_item_check label="Schatten von Sonne-/Mond-Projektoren" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO und Schattenglättung" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Fehler in GL beseitigen" name="Debug GL"/>
@@ -325,7 +333,6 @@
<menu_item_check label="Animationstexturen" name="Animation Textures"/>
<menu_item_check label="Texturen deaktivieren" name="Disable Textures"/>
<menu_item_check label="Voll-Res-Texturen" name="Rull Res Textures"/>
- <menu_item_check label="Textur-Atlas (experimentell)" name="Texture Atlas"/>
<menu_item_check label="Angehängte Lichter rendern" name="Render Attached Lights"/>
<menu_item_check label="Angehängte Partikel rendern" name="Render Attached Particles"/>
<menu_item_check label="Leucht-Objekte schweben lassen" name="Hover Glow Objects"/>
@@ -361,7 +368,6 @@
<menu_item_call label="Fokus ausgeben" name="Dump Focus Holder"/>
<menu_item_call label="Ausgewählte Objektinfo drucken" name="Print Selected Object Info"/>
<menu_item_call label="Agent-Info drucken" name="Print Agent Info"/>
- <menu_item_call label="Speicher-Stats" name="Memory Stats"/>
<menu_item_check label="Regions-Debug-Konsole" name="Region Debug Console"/>
<menu_item_check label="Fehler in SelectMgr beseitigen" name="Debug SelectMgr"/>
<menu_item_check label="Fehler in Klicks beseitigen" name="Debug Clicks"/>
@@ -395,7 +401,6 @@
</menu>
<menu_item_call label="Param auf Standard erzwingen" name="Force Params to Default"/>
<menu_item_check label="Animations-Info" name="Animation Info"/>
- <menu_item_check label="Zeitlupen-Animationen" name="Slow Motion Animations"/>
<menu_item_check label="Kamerafokus anzeigen" name="Show Look At"/>
<menu_item_check label="Klickpunkt anzeigen??" name="Show Point At"/>
<menu_item_check label="Fehler in Landaktualisierung beseitigen" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index dc0d7dc6b4..b3ae98f633 100755
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -146,7 +146,7 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/>
</notification>
<notification name="FriendsAndGroupsOnly">
- Leute, die nicht auf Ihrer Freundesliste stehen, werden nicht wissen, dass Sie deren Anrufe oder Sofortnachrichten ignoriert haben.
+ Personen, die nicht auf Ihrer Freundesliste stehen, werden nicht informiert, dass Sie ihre Anrufe und Instant Messages ignorieren.
<usetemplate name="okbutton" yestext="Ja"/>
</notification>
<notification name="FavoritesOnLogin">
@@ -216,6 +216,14 @@ Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Sie sind dabei, [AVATAR_NAME] aus der Gruppe hinauszuwerfen.
+ <usetemplate ignoretext="Hinauswerfen eines einzelnen Gruppenmitglieds bestätigen" name="okcancelignore" notext="Abbrechen" yestext="Hinauswerfen"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Sie sind dabei, [COUNT] Mitglieder aus der Gruppe hinauszuwerfen.
+ <usetemplate ignoretext="Hinauswerfen mehrerer Gruppenmitglieder bestätigen" name="okcancelignore" notext="Abbrechen" yestext="Hinauswerfen"/>
+ </notification>
<notification name="AttachmentDrop">
Sie möchten Ihren Anhang wirklich fallen lassen?
Möchten Sie fortfahren?
@@ -1124,7 +1132,7 @@ auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
Geben sie einen höheren Betrag ein.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- Mindestens eines Ihrer ausgewählten Objekte verfügt über verknüpfte Objekte. Wenn Sie dieses Objekt löschen, funktionieren die Verknüpfungen nicht mehr. Wir empfehlen Ihnen daher, diese Verknüpfungen zuerst zu löschen.
+ Auf mindestens eines der Objekte wird über Verknüpfungen Bezug genommen. Wenn Sie dieses Objekt löschen, funktionieren die Verknüpfungen nicht mehr. Wir empfehlen daher, diese Verknüpfungen zuerst zu löschen.
Möchten Sie diese Objekte wirklich löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@@ -1142,9 +1150,9 @@ Möchten Sie diese Objekte löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoOwn">
- Mindestens eines der ausgewählten Objekt gehört nicht Ihnen.
+ Mindestens eines der ausgewählten Objekte gehört nicht Ihnen.
-Möchten Sie diese Objekte löschen?
+Möchten Sie diese Objekte wirklich löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
@@ -1158,14 +1166,14 @@ Möchten Sie diese Objekte löschen?
Mindestens ein Objekt ist gesperrt.
Mindestens ein Objekt gehört nicht Ihnen.
-Möchten Sie diese Objekte löschen?
+Möchten Sie diese Objekte wirklich löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
Mindestens ein Objekt kann nicht kopiert werden.
Mindestens ein Objekt gehört nicht Ihnen.
-Möchten Sie diese Objekte löschen?
+Möchten Sie diese Objekte wirklich löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
@@ -1173,7 +1181,7 @@ Möchten Sie diese Objekte löschen?
Mindestens ein Objekt kann nicht kopiert werden.
Mindestens ein Objekt gehört nicht Ihnen.
-Möchten Sie diese Objekte löschen?
+Möchten Sie diese Objekte wirklich löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
@@ -1492,13 +1500,43 @@ Version [VERSION] [[RELEASE_NOTES_FULL_URL] Informationen zu diesem Update]
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
Ein erforderliches Softwareupdate wurde heruntergeladen.
-Version [VERSION]
+Version [VERSION] [[INFO_URL] Infos zu diesem Update]
Zur Installation des Updates muss [APP_NAME] neu gestartet werden.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
Zur Installation des Updates muss [APP_NAME] neu gestartet werden.
+[[INFO_URL] Infos zu diesem Update]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ Für Ihre [APP_NAME]-Installation wurde ein Update heruntergeladen.
+Version [VERSION]
+Dieser experimentelle Viewer wurde durch einen [NEW_CHANNEL] Viewer ersetzt;
+weitere Details zu diesem Update finden Sie [[INFO_URL] hier].
+ <usetemplate name="okcancelbuttons" notext="Später..." yestext="Jetzt installieren und [APP_NAME] neu starten"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ Für Ihre [APP_NAME]-Installation wurde ein Update heruntergeladen.
+Version [VERSION]
+Dieser experimentelle Viewer wurde durch einen [NEW_CHANNEL] Viewer ersetzt;
+weitere Infos zu diesem Update finden Sie [[INFO_URL] hier].
+ <usetemplate name="okcancelbuttons" notext="Später..." yestext="Jetzt installieren und [APP_NAME] neu starten"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ Ein erforderliches Softwareupdate wurde heruntergeladen.
+Version [VERSION]
+Dieser experimentelle Viewer wurde durch einen [NEW_CHANNEL] Viewer ersetzt;
+weitere Infos zu diesem Update finden Sie [[INFO_URL] hier].
+
+Zur Installation des Updates muss [APP_NAME] neu gestartet werden.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ Zur Installation des Updates muss [APP_NAME] neu gestartet werden.
+Dieser experimentelle Viewer wurde durch einen [NEW_CHANNEL] Viewer ersetzt;
+weitere Infos zu diesem Update finden Sie [[INFO_URL] hier].
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1549,6 +1587,10 @@ Zur Installation des Updates muss [APP_NAME] neu gestartet werden.
Diese Gruppe verlassen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ Sie können die Gruppe nicht verlassen, da Sie der letzte Besitzer der Gruppe sind. Weisen Sie die Besitzerrolle zuerst einem anderen Mitglied zu.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
@@ -2410,9 +2452,7 @@ Wählen Sie ein einzelnes Objekt aus.
„Teleportieren“ wählen.)
</notification>
<notification name="TeleportToPerson">
- Um Einwohner wie „[NAME]“ zu kontaktieren, klicken Sie auf die Schaltfläche „Leute“, wählen Sie eingeblendeten Fenster einen Einwohner aus
- und klicken Sie unten im Fenster auf „IM“.
- (Sie können auch auf den Namen doppelklicken bzw. ihn mit der rechten Maustaste anklicken und dann „IM“ wählen.)
+ Um eine private Unterhaltung zu beginnen, klicken Sie mit der rechten Maustaste auf den gewünschten Avatar und wählen Sie im Menü „IM“ aus.
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Land kann nicht über Servergrenzen hinweg ausgewählt werden.
@@ -2786,6 +2826,15 @@ Gewähren Sie dem Objekt nur dann Zugriff, wenn Sie genau verstehen, wieso ein s
<button name="Deny" text="Verweigern"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ Die Runtime-Skript-Berechtigung, die von „&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;“ (Besitzer: „[NAME]“) angefordert wurde, wird vom Viewer nicht erkannt und kann nicht gewährt werden.
+
+Um diese Berechtigung zu gewähren, laden Sie die neueste Version des Viewers von [DOWNLOADURL] herunter.
+ <form name="form">
+ <button name="Deny" text="OK"/>
+ <button name="Mute" text="Blockieren"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
„&lt;nolink&gt;[TITLE]&lt;/nolink&gt;“ von [NAME]
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index 8c05ca2c24..2d56d6b7d2 100755
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -49,6 +49,9 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
<menu_button name="plus_btn" tool_tip="Gruppe beitreten/Neue Gruppe erstellen"/>
<dnd_button name="minus_btn" tool_tip="Ausgewählte Gruppe verlassen"/>
</panel>
+ <text name="groupcount">
+ Sie gehören [COUNT] Gruppen an und können [REMAINING] weiteren beitreten.
+ </text>
</panel>
<panel label="AKTUELL" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index 8193fd42c1..8eb815fd1b 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Text-Chat" name="chat">
- <panel>
+ <panel name="general_chat_settings">
<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
- <check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
+ <check_box label="IMs per E-Mail zustellen, wenn ich offline bin" name="send_im_to_email"/>
<check_box label="Nur IMs und Anrufe von Freunden oder Gruppen durchstellen" name="voice_call_friends_only_check"/>
<text name="font_size">
Schriftgröße:
@@ -14,10 +14,7 @@
</combo_box>
<check_box label="Blasen-Chat" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- Benachrichtigungen
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
IMs von Freunden:
</text>
@@ -25,8 +22,9 @@
<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
- <item label="None" name="None" value="none"/>
+ <item label="Keine Aktion" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sound abspielen" name="play_sound_friend_im"/>
<text name="non_friend_ims">
IMs von anderen:
</text>
@@ -34,8 +32,9 @@
<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
- <item label="None" name="None" value="none"/>
+ <item label="Keine Aktion" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sound abspielen" name="play_sound_non_friend_im"/>
<text name="conference_ims">
Konferenz-IMs:
</text>
@@ -43,8 +42,9 @@
<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
- <item label="None" name="None" value="none"/>
+ <item label="Keine Aktion" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sound abspielen" name="play_sound_conference_im"/>
<text name="group_chat">
Gruppen-Chat:
</text>
@@ -52,8 +52,9 @@
<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
- <item label="None" name="None" value="none"/>
+ <item label="Keine Aktion" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sound abspielen" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
Chat in der Nähe:
</text>
@@ -61,25 +62,36 @@
<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
<item label="Flash-Symbolleistenschaltfläche" name="FlashToolBarButton" value="flash"/>
- <item label="None" name="None" value="none"/>
+ <item label="Keine Aktion" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Sound abspielen" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ IMs von Objekten:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
+ <item label="Flash-Symbolleistenschaltfläche" name="FlashToolBarButton" value="flash"/>
+ <item label="Keine Aktion" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sound abspielen" name="play_sound_object_im"/>
<text name="notifications_alert">
Um vorübergehend alle Benachrichtigungen zu stoppen, wählen Sie „Unterhalten“ &gt; „Nicht stören“.
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Sound abspielen:
</text>
<check_box label="Neue Unterhaltung" name="new_conversation"/>
- <check_box label="Eingehender Anruf..." name="incoming_voice_call"/>
+ <check_box label="Eingehender Anruf" name="incoming_voice_call"/>
<check_box label="Teleport-Angebot" name="teleport_offer"/>
<check_box label="Inventarangebot" name="inventory_offer"/>
</panel>
- <panel>
+ <panel name="log_settings">
<button label="Protokoll löschen..." name="clear_log"/>
- <button label="Protokolle löschen..." name="delete_transcripts"/>
- <button label="Durchsuchen..." label_selected="Durchsuchen" name="log_path_button"/>
+ <button label="Transkripte löschen..." name="delete_transcripts"/>
+ <button label="Durchsuchen..." label_selected="Durchblättern" name="log_path_button"/>
</panel>
<button label="Ãœbersetzen..." name="ok_btn"/>
<button label="Automatisch ersetzen..." name="autoreplace_showgui"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index 9175ea0bae..f3746a7c82 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="true" label="Lokale Lichtquellen" name="LocalLights"/>
<check_box initial_value="true" label="Einfache Shader" name="BasicShaders" tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht"/>
<check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="true" label="Licht und Schatten" name="UseLightShaders"/>
+ <check_box initial_value="true" label="Erweitertes Beleuchtungsmodell" name="UseLightShaders"/>
<check_box initial_value="true" label="Ambient Occlusion" name="UseSSAO"/>
<check_box initial_value="true" label="Schärfentiefe" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 8c7ea688d7..24e5033bfc 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="Automatisch installieren" name="Install_automatically"/>
<combo_box.item label="Updates manuell herunterladen und installieren" name="Install_manual"/>
</combo_box>
+ <check_box label="Bereit, Release-Kandidaten zu verwenden" name="update_willing_to_test"/>
<text name="Proxy Settings:">
Proxy-Einstellungen:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
index 7e03aeff15..d688bedd5c 100755
--- a/indra/newview/skins/default/xui/de/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Alle auswählen" name="Select All"/>
<menu_item_call label="Auswahl aufheben" name="Deselect"/>
<menu_item_call label="Suchen / Ersetzen..." name="Search / Replace..."/>
+ <menu_item_call label="Gehe zu Zeile..." name="Go to line..."/>
</menu>
<menu label="Hilfe" name="Help">
<menu_item_call label="Hilfe..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/de/panel_tools_texture.xml b/indra/newview/skins/default/xui/de/panel_tools_texture.xml
new file mode 100644
index 0000000000..18517d7a7d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Textur" name="Texture">
+ <panel.string name="string repeats per meter">
+ Wiederholungen pro Meter
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Wiederholungen pro Fläche
+ </panel.string>
+ <text name="color label">
+ Farbe
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
+ <text name="color trans">
+ Transparenz %
+ </text>
+ <text name="glow label">
+ Leuchten
+ </text>
+ <check_box label="Ganz hell" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Material" name="Materials"/>
+ <combo_box.item label="Medien" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="Textur (diffus)" name="Texture (diffuse)"/>
+ <combo_box.item label="Unebenheit (normal)" name="Bumpiness (normal)"/>
+ <combo_box.item label="Glanzlicht (Spiegel)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/>
+ <text name="label alphamode">
+ Alpha-Modus
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Keiner" name="None"/>
+ <combo_box.item label="Alpha-Mischung" name="Alpha blending"/>
+ <combo_box.item label="Alpha-Maske" name="Alpha masking"/>
+ <combo_box.item label="Selbststrahlende Maske" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ Maskenabgrenzung
+ </text>
+ <texture_picker label="Textur" name="bumpytexture control" tool_tip="Klicken, um ein Bild auszuwählen"/>
+ <text name="label bumpiness">
+ Unebenheit
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Keine" name="None"/>
+ <combo_box.item label="Helligkeit" name="Brightness"/>
+ <combo_box.item label="Dunkelheit" name="Darkness"/>
+ <combo_box.item label="Holzmaserung" name="woodgrain"/>
+ <combo_box.item label="Rinde" name="bark"/>
+ <combo_box.item label="Backsteine" name="bricks"/>
+ <combo_box.item label="Schachbrett" name="checker"/>
+ <combo_box.item label="Beton" name="concrete"/>
+ <combo_box.item label="Rostkachel" name="crustytile"/>
+ <combo_box.item label="Steinfliesen" name="cutstone"/>
+ <combo_box.item label="Scheiben" name="discs"/>
+ <combo_box.item label="Kies" name="gravel"/>
+ <combo_box.item label="Petrischale" name="petridish"/>
+ <combo_box.item label="Verkleidung" name="siding"/>
+ <combo_box.item label="Steinkachel" name="stonetile"/>
+ <combo_box.item label="Stuck" name="stucco"/>
+ <combo_box.item label="Saugkraft" name="suction"/>
+ <combo_box.item label="Gewebe" name="weave"/>
+ </combo_box>
+ <texture_picker label="Textur" name="shinytexture control" tool_tip="Klicken, um ein Bild auszuwählen"/>
+ <text name="label shininess">
+ Glanz
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Keiner" name="None"/>
+ <combo_box.item label="Niedrig" name="Low"/>
+ <combo_box.item label="Mittel" name="Medium"/>
+ <combo_box.item label="Hoch" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ Glanz
+ </text>
+ <text name="label environment">
+ Umgebung
+ </text>
+ <text name="label shinycolor">
+ Farbe
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
+ <text name="media_info">
+ URL der ausgewählten Medien ggf. hier angeben
+ </text>
+ <button label="Auswählen..." name="add_media" tool_tip="Medien hinzufügen"/>
+ <button label="Entfernen" name="delete_media" tool_tip="Diese Medientextur löschen"/>
+ <button label="Ausrichten" label_selected="Medien ausrichten" name="button align" tool_tip="Medientextur ausrichten (muss zuerst geladen werden)"/>
+ <text name="tex gen">
+ Zuordnung
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Standard" name="Default"/>
+ <combo_box.item label="Planar" name="Planar"/>
+ </combo_box>
+ <spinner label="Horizontale Skalierung" name="TexScaleU"/>
+ <spinner label="Vertikale Skalierung" name="TexScaleV"/>
+ <spinner label="Wiederholungen pro Meter" name="rptctrl"/>
+ <spinner label="Drehung (Grad)" name="TexRot"/>
+ <spinner label="Horizontaler Versatz" name="TexOffsetU"/>
+ <spinner label="Vertikaler Versatz" name="TexOffsetV"/>
+ <spinner label="Horizontale Skalierung" name="bumpyScaleU"/>
+ <spinner label="Vertikale Skalierung" name="bumpyScaleV"/>
+ <spinner label="Drehung (Grad)" name="bumpyRot"/>
+ <spinner label="Horizontaler Versatz" name="bumpyOffsetU"/>
+ <spinner label="Vertikaler Versatz" name="bumpyOffsetV"/>
+ <spinner label="Horizontale Skalierung" name="shinyScaleU"/>
+ <spinner label="Vertikale Skalierung" name="shinyScaleV"/>
+ <spinner label="Drehung (Grad)" name="shinyRot"/>
+ <spinner label="Horizontaler Versatz" name="shinyOffsetU"/>
+ <spinner label="Vertikaler Versatz" name="shinyOffsetV"/>
+ <check_box initial_value="false" label="Planare Flächen ausrichten" name="checkbox planar align" tool_tip="Texturen auf allen ausgewählten Flächen an der zuletzt ausgewählten Fläche ausrichten. Erfordert planares Texture Mapping."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml
index 5d9dcacd51..3e9d406e5f 100755
--- a/indra/newview/skins/default/xui/de/role_actions.xml
+++ b/indra/newview/skins/default/xui/de/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, den Parzellennamen und die Veröffentlichungseinstellungen sowie die Anzeige des Suchverzeichnisses, den Landepunkt und die TP-Routenoptionen festzulegen." name="Parcel Identity">
<action description="„Ort in Suche anzeigen&quot; ein-/ausschalten und Kategorie festlegen." longdescription="Auf der Registerkarte „Optionen“ unter „Land-Info“ können Sie „Ort in Suche anzeigen“ ein- und ausschalten und die Parzellenkategorie festlegen." name="land find places" value="17"/>
- <action description="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern" longdescription="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern Diese Einstellungen finden Sie unter „Land-Info“ &gt; Registerkarte „Optionen“." name="land change identity" value="18"/>
+ <action description="Parzellenname, Beschreibung und Einstelllungen für „Moderater Inhalt“ ändern" longdescription="Parzellenname, Beschreibung und Einstelllungen für „Moderater Inhalt“ ändern. Diese Einstellungen finden Sie unter „Land-Info“ &gt; Registerkarte „Optionen“." name="land change identity" value="18"/>
<action description="Landepunkt und Teleport-Route festlegen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle einen Landepunkt für ankommende Teleports und Teleport-Routen festlegen. Diese Einstellungen finden Sie unter „Land-Info“ &gt; „Optionen“." name="land set landing point" value="19"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Parzellenoptionen wie „Objekte erstellen“, „Terrain bearbeiten“ sowie Musik- und Medieneinstellungen zu ändern." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index e142cb8029..c8c20424e1 100755
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -139,6 +139,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
Mit dem von Ihnen verwendeten Viewer ist der Zugriff auf Second Life nicht mehr möglich. Laden Sie von den folgenden Seite einen neuen Viewer herunter:
http://secondlife.com/download
@@ -448,6 +451,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="SLappAgentRequestFriend">
Freundschaftsangebot
</string>
+ <string name="SLappAgentRemoveFriend">
+ Entfernen von Freunden
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Schließen (⌘W)
</string>
@@ -838,6 +844,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="multiple_textures">
Mehrfach
</string>
+ <string name="use_texture">
+ Textur verwenden
+ </string>
<string name="texture_loading">
Wird geladen...
</string>
@@ -937,6 +946,21 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="TeleportYourAgent">
Sie teleportieren
</string>
+ <string name="JoinAnExperience">
+ Bei einem Erlebnis mitmachen
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Beim Verwalten von Grundbesitzzugangslisten Warnhinweise unterdrücken
+ </string>
+ <string name="OverrideYourAnimations">
+ Ihre Standardanimationen ersetzen
+ </string>
+ <string name="ScriptReturnObjects">
+ Objekte in Ihrem Namen zurückgeben
+ </string>
+ <string name="UnknownScriptPermission">
+ (unbekannt)
+ </string>
<string name="SIM_ACCESS_PG">
Generell
</string>
@@ -1968,6 +1992,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="ATTACH_HUD_BOTTOM_RIGHT">
HUD unten rechts
</string>
+ <string name="ATTACH_NECK">
+ Hals
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Avatar-Mitte
+ </string>
<string name="CursorPos">
Zeile [LINE], Spalte [COLUMN]
</string>
@@ -2997,6 +3027,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="Hip Width">
Breite der Hüfte
</string>
+ <string name="Hover">
+ Schweben
+ </string>
<string name="In">
In
</string>
@@ -5081,4 +5114,7 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="logging_calls_enabled_log_empty">
Keine protokollierten Unterhaltungen verfügbar. Hier erscheint ein Protokolleintrag, wenn Sie eine Person kontaktieren oder von einer Person kontaktiert werden.
</string>
+ <string name="loading_chat_logs">
+ Laden...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
index 0a8beec7de..ba91b0b5d9 100755
--- a/indra/newview/skins/default/xui/en/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
@@ -112,8 +112,43 @@
<menu_item_call.on_enable
function="Object.EnableInspect" />
</menu_item_call>
+
+ <menu_item_separator />
+
+ <menu_item_check
+ name="Normal"
+ label="Normal Rendering">
+ <menu_item_check.on_check
+ function="Avatar.CheckImpostorMode"
+ parameter="0" />
+ <menu_item_check.on_click
+ function="Avatar.SetImpostorMode"
+ parameter="0" />
+ </menu_item_check>
+ <menu_item_check
+ name="Always use impostor"
+ label="Always use impostor">
+ <menu_item_check.on_check
+ function="Avatar.CheckImpostorMode"
+ parameter="1" />
+ <menu_item_check.on_click
+ function="Avatar.SetImpostorMode"
+ parameter="1" />
+ </menu_item_check>
+ <menu_item_check
+ name="Never use impostor"
+ label="Never use impostor">
+ <menu_item_check.on_check
+ function="Avatar.CheckImpostorMode"
+ parameter="2" />
+ <menu_item_check.on_click
+ function="Avatar.SetImpostorMode"
+ parameter="2" />
+ </menu_item_check>
+
<menu_item_separator
- layout="topleft" />
+ layout="topleft" name="Impostor seperator"/>
+
<menu_item_call
enabled="false"
label="Block Particle Owner"
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
index 8be2683680..8bd013f14b 100755
--- a/indra/newview/skins/default/xui/en/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
@@ -39,8 +39,10 @@
<menu_item_call.on_click
function="Avatar.InviteToGroup" />
</menu_item_call>
+
<menu_item_separator />
- <menu_item_call
+
+ <menu_item_call
enabled="false"
label="Block"
name="Avatar Mute">
@@ -103,8 +105,43 @@
<menu_item_call.on_enable
function="EnablePayAvatar" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+
+ <menu_item_separator />
+
+ <menu_item_check
+ name="Normal"
+ label="Normal Rendering">
+ <menu_item_check.on_check
+ function="Avatar.CheckImpostorMode"
+ parameter="0" />
+ <menu_item_check.on_click
+ function="Avatar.SetImpostorMode"
+ parameter="0" />
+ </menu_item_check>
+ <menu_item_check
+ name="Always use impostor"
+ label="Always use impostor">
+ <menu_item_check.on_check
+ function="Avatar.CheckImpostorMode"
+ parameter="1" />
+ <menu_item_check.on_click
+ function="Avatar.SetImpostorMode"
+ parameter="1" />
+ </menu_item_check>
+ <menu_item_check
+ name="Never use impostor"
+ label="Never use impostor">
+ <menu_item_check.on_check
+ function="Avatar.CheckImpostorMode"
+ parameter="2" />
+ <menu_item_check.on_click
+ function="Avatar.SetImpostorMode"
+ parameter="2" />
+ </menu_item_check>
+
+ <menu_item_separator
+ layout="topleft" name="Impostor seperator"/>
+
<menu_item_call
enabled="false"
label="Block Particle Owner"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index f253ed3e06..2d65052def 100755
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -93,7 +93,7 @@
<menu_item_check
label="Fly"
name="Fly"
- shortcut="Home">
+ shortcut="HOME">
<menu_item_check.on_check
function="Agent.getFlying" />
<menu_item_check.on_click
@@ -101,6 +101,15 @@
<menu_item_check.on_enable
function="Agent.enableFlying" />
</menu_item_check>
+ <menu_item_call
+ label="Stop flying"
+ name="Stop flying"
+ shortcut="HOME">
+ <menu_item_call.on_click
+ function="Agent.toggleFlying" />
+ <menu_item_call.on_enable
+ function="Agent.getFlying" />
+ </menu_item_call>
<menu_item_check
label="Always Run"
name="Always Run"
@@ -2206,6 +2215,16 @@
function="ToggleControl"
parameter="DebugShowRenderInfo" />
</menu_item_check>
+ <menu_item_check
+ label="Show Avatar Render Info"
+ name="Show Avatar Render Info">
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="DebugShowAvatarRenderInfo" />
+ <menu_item_check.on_click
+ function="ToggleControl"
+ parameter="DebugShowAvatarRenderInfo" />
+ </menu_item_check>
<menu_item_check
label="Show Texture Info"
name="Show Texture Info">
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 6b95a0cb61..ed7c862433 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -10109,7 +10109,7 @@ An internal error prevented us from properly updating your viewer. The L$ balan
<tag>fail</tag>
Cannot create large prims that intersect other players. Please re-try when other players have moved.
</notification>
-
+
<notification
icon="alertmodal.tga"
name="PreferenceChatClearLog"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 3c4d288037..6c485c0595 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -177,10 +177,86 @@
width="80">
Ultra
</text>
+ <slider
+ control_name="RenderAvatarLODFactor"
+ invisiblity_control="ShowAdvancedGraphicsSettings"
+ follows="left|top"
+ height="16"
+ increment="0.125"
+ initial_value="160"
+ label="Avatar detail:"
+ label_width="90"
+ layout="topleft"
+ left="30"
+ name="AvatarMeshDetail2"
+ show_text="false"
+ top="72"
+ width="300">
+ <slider.commit_callback
+ function="Pref.UpdateSliderText"
+ parameter="AvatarMeshDetailText2" />
+ </slider>
+ <text
+ type="string"
+ invisiblity_control="ShowAdvancedGraphicsSettings"
+ length="1"
+ follows="left|top"
+ height="12"
+ layout="topleft"
+ name="AvatarMeshDetailText2"
+ top_delta="0"
+ left_delta="304"
+ width="128">
+ Low
+ </text>
+ <slider
+ control_name="RenderFarClip"
+ invisiblity_control="ShowAdvancedGraphicsSettings"
+ decimal_digits="0"
+ follows="left|top"
+ height="16"
+ increment="8"
+ initial_value="160"
+ label="Draw distance:"
+ label_width="90"
+ layout="topleft"
+ left="30"
+ max_val="512"
+ min_val="64"
+ name="DrawDistance"
+ top="110"
+ width="330" />
+ <text
+ type="string"
+ invisiblity_control="ShowAdvancedGraphicsSettings"
+ length="1"
+ follows="left|top"
+ height="12"
+ layout="topleft"
+ left_delta="330"
+ name="DrawDistanceMeterText2"
+ top_delta="0"
+ width="128">
+ m
+ </text>
+ <check_box
+ control_name="RenderDeferred"
+ invisiblity_control="ShowAdvancedGraphicsSettings"
+ height="16"
+ initial_value="true"
+ label="Advanced Lighting Model"
+ layout="topleft"
+ left="30"
+ name="UseLightShaders2"
+ top="148"
+ width="256">
+ <check_box.commit_callback
+ function="Pref.VertexShaderEnable" />
+ </check_box>
<panel
- visiblity_control="ShowAdvancedGraphicsSettings"
+ visiblity_control="ShowAdvancedGraphicsSettings"
border="false"
- follows="top|left"
+ follows="top|left"
height="300"
label="CustomGraphics"
layout="topleft"
@@ -224,13 +300,13 @@
function="Pref.VertexShaderEnable" />
</check_box>
<check_box
- control_name="RenderLocalLights"
- height="16"
- initial_value="true"
- label="Local Lights"
- layout="topleft"
- left_delta="0"
- name="LocalLights"
+ control_name="RenderLocalLights"
+ height="16"
+ initial_value="true"
+ label="Local Lights"
+ layout="topleft"
+ left_delta="0"
+ name="LocalLights"
top_pad="1"
width="256" />
<check_box
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
index 5ac2ec2b20..426c0c4915 100644
--- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -663,7 +663,7 @@
label_width="205"
layout="topleft"
left="10"
- min_val="-1"
+ min_val="0"
name="bumpyOffsetU"
width="265" />
<spinner
@@ -674,7 +674,7 @@
label_width="205"
layout="topleft"
left="10"
- min_val="-1"
+ min_val="0"
name="bumpyOffsetV"
width="265" />
<spinner
@@ -726,7 +726,7 @@
label_width="205"
layout="topleft"
left="10"
- min_val="-1"
+ min_val="0"
name="shinyOffsetU"
width="265" />
<spinner
@@ -737,7 +737,7 @@
label_width="205"
layout="topleft"
left="10"
- min_val="-1"
+ min_val="0"
name="shinyOffsetV"
width="265" />
<check_box
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 73601ecb9f..1c46cec479 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -410,10 +410,13 @@ Please try logging in again in a minute.</string>
<string name="AddAndRemoveJoints">Add and remove joints with other objects</string>
<string name="ChangePermissions">Change its permissions</string>
<string name="TrackYourCamera">Track your camera</string>
- <string name="ControlYourCamera">Control your camera</string>
+ <string name="ControlYourCamera">Control your camera</string>
+ <string name="TeleportYourAgent">Teleport you</string>
+ <string name="ManageEstateSilently">Manage your estates silently</string>
+ <string name="ChangeYourDefaultAnimations">Change your default animations</string>
+
<string name="NotConnected">Not Connected</string>
<string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name -->
- <string name="TeleportYourAgent">Teleport you</string>
<string name="JoinAnExperience">Join an experience</string> <!-- not used -->
<string name="SilentlyManageEstateAccess">Suppress alerts when managing estate access lists</string>
<string name="OverrideYourAnimations">Replace your default animations</string>
@@ -644,11 +647,11 @@ Returns the wind velocity at the object position + offset
</string>
<string name="LSLTipText_llSetStatus" translate="false">
llSetStatus(integer status, integer value)
-Sets status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) to value
+Sets status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_BLOCK_GRAB_OBJECT, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) to value
</string>
<string name="LSLTipText_llGetStatus" translate="false">
integer llGetStatus(integer status)
-Returns value of status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z)
+Returns the boolean value of status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_BLOCK_GRAB_OBJECT, STATUS_ROTATE_X, STATUS_ROTATE_Y, or STATUS_ROTATE_Z)
</string>
<string name="LSLTipText_llSetScale" translate="false">
llSetScale(vector scale)
diff --git a/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml b/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml
index b83d9122f7..b83d9122f7 100755..100644
--- a/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml
+++ b/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index 7ca1e3721f..e0a2375067 100755
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -8,7 +8,9 @@
Compilado con [COMPILER], versión [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Estás en la posición [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1], de [REGION], alojada en &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+ Estás en la posición [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] de [REGION], alojada en &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(coordenadas globales [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
index f1948220b4..5cd8b3c01f 100755
--- a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="EDITAR LOS PERMISOS DEL CONTENIDO">
+<floater name="floaterbulkperms" title="AJUSTAR LOS PERMISOS DEL CONTENIDO">
<floater.string name="nothing_to_modify_text">
Lo seleccionado tiene contenidos no editables.
</floater.string>
@@ -33,7 +33,7 @@
<button label="√ Todos" label_selected="Todo" name="check_all"/>
<button label="Limpiar" label_selected="Ninguno" name="check_none"/>
<text name="newperms">
- Permisos nuevos del contenido
+ Ajustar los permisos del contenido a
</text>
<text name="GroupLabel">
Grupo:
@@ -49,6 +49,7 @@
<check_box label="Modificarlo" name="next_owner_modify"/>
<check_box label="Copiarlo" name="next_owner_copy"/>
<check_box initial_value="true" label="Transferirlo" name="next_owner_transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
- <button label="OK" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="Aplicar" name="apply"/>
<button label="Cancelar" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_goto_line.xml b/indra/newview/skins/default/xui/es/floater_goto_line.xml
new file mode 100644
index 0000000000..ef3ed80fcb
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="IR A LA LÃNEA">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ Ir a la línea
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml
index 5f38fbd615..e5f48e3fd5 100755
--- a/indra/newview/skins/default/xui/es/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/es/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Traducir el chat" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traducir el chat" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
index 3602270e5a..e93ecc9e10 100755
--- a/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Mostrar:
</text>
- <check_box label="Prueba" name="show_world"/>
+ <check_box label="Mundo virtual" name="show_world"/>
<check_box label="Solamente los objetos movibles" name="show_world_movables_only"/>
<check_box label="Navmesh" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_other.xml b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
index 00bdb74881..7698348c00 100755
--- a/indra/newview/skins/default/xui/es/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Congelar" name="Freeze..."/>
<menu_item_call label="Expulsar" name="Eject..."/>
<menu_item_call label="Depurar las texturas" name="Debug..."/>
+ <menu_item_call label="Volcar XML" name="Dump XML"/>
<menu_item_call label="Acercar el zoom" name="Zoom In"/>
<menu_item_call label="Pagar" name="Pay..."/>
<menu_item_call label="Perfil del objeto" name="Object Inspect"/>
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
index 0ba39378bb..5acd0c327a 100755
--- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="Mis grupos" name="Groups..."/>
<menu_item_call label="Mi perfil" name="Profile..."/>
<menu_item_call label="Depurar las texturas" name="Debug..."/>
+ <menu_item_call label="Volcar XML" name="Dump XML"/>
<menu_item_call label="Soltar" name="Drop"/>
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_other.xml b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
index 7df2d7c4e0..244099214a 100755
--- a/indra/newview/skins/default/xui/es/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Congelar" name="Freeze..."/>
<menu_item_call label="Expulsar" name="Eject..."/>
<menu_item_call label="Depurar las texturas" name="Debug..."/>
+ <menu_item_call label="Volcar XML" name="Dump XML"/>
<menu_item_call label="Acercar el zoom" name="Zoom In"/>
<menu_item_call label="Pagar" name="Pay..."/>
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index 268d6f70ab..717b46ac74 100755
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="Mis grupos" name="Groups..."/>
<menu_item_call label="Mi perfil" name="Profile..."/>
<menu_item_call label="Depurar las texturas" name="Debug..."/>
+ <menu_item_call label="Volcar XML" name="Dump XML"/>
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_conversation.xml b/indra/newview/skins/default/xui/es/menu_conversation.xml
index e4e9a0bf63..b63711589d 100644
--- a/indra/newview/skins/default/xui/es/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/es/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Cerrar conversación" name="close_conversation"/>
<menu_item_call label="Abrir conversación de voz" name="open_voice_conversation"/>
<menu_item_call label="Desconectar de voz" name="disconnect_from_voice"/>
+ <menu_item_call label="Cerrar seleccionados" name="close_selected_conversations"/>
<menu_item_call label="Ver el perfil" name="view_profile"/>
<menu_item_call label="MI" name="im"/>
<menu_item_call label="Ofrecer teleporte" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/es/menu_land.xml b/indra/newview/skins/default/xui/es/menu_land.xml
index b0f15be1b6..2097628356 100755
--- a/indra/newview/skins/default/xui/es/menu_land.xml
+++ b/indra/newview/skins/default/xui/es/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Comprar un pase" name="Land Buy Pass"/>
<menu_item_call label="Construir" name="Create"/>
<menu_item_call label="Modificar el terreno" name="Edit Terrain"/>
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
index 289ac3f075..2286d0527a 100755
--- a/indra/newview/skins/default/xui/es/menu_login.xml
+++ b/indra/newview/skins/default/xui/es/menu_login.xml
@@ -17,7 +17,13 @@
<menu_item_call label="Mostrar los &apos;TOS&apos;" name="TOS"/>
<menu_item_call label="Mostrar mensaje crítico" name="Critical"/>
<menu_item_call label="Prueba de depuración de ventanas de contenido web" name="Web Content Floater Debug Test"/>
- <menu label="Configurar el nivel de registro" name="Set Logging Level"/>
+ <menu label="Configurar el nivel de registro" name="Set Logging Level">
+ <menu_item_check label="Depurar" name="Debug"/>
+ <menu_item_check label="Información" name="Info"/>
+ <menu_item_check label="¡Atención!" name="Warning"/>
+ <menu_item_check label="Error" name="Error"/>
+ <menu_item_check label="Ninguno" name="None"/>
+ </menu>
<menu_item_check label="Mostrar el selector de Grid" name="Show Grid Picker"/>
<menu_item_call label="Mostrar la consola de notificaciones" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_mute_particle.xml b/indra/newview/skins/default/xui/es/menu_mute_particle.xml
new file mode 100644
index 0000000000..daddf982de
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
index 33ea8c88d8..e75c7283af 100755
--- a/indra/newview/skins/default/xui/es/menu_object.xml
+++ b/indra/newview/skins/default/xui/es/menu_object.xml
@@ -5,13 +5,13 @@
</menu_item_call>
<menu_item_call label="Editar" name="Edit..."/>
<menu_item_call label="Construir" name="Build"/>
- <menu_item_call label="Mostrar en linksets" name="show_in_linksets"/>
- <menu_item_call label="Mostrar en personajes" name="show_in_characters"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Sentarme aquí" name="Object Sit"/>
<menu_item_call label="Levantarme" name="Object Stand Up"/>
<menu_item_call label="Perfil del objeto" name="Object Inspect"/>
<menu_item_call label="Acercar el zoom" name="Zoom In"/>
+ <menu_item_call label="Mostrar en linksets" name="show_in_linksets"/>
+ <menu_item_call label="Mostrar en personajes" name="show_in_characters"/>
<context_menu label="Ponerme" name="Put On">
<menu_item_call label="Ponerme" name="Wear"/>
<menu_item_call label="Añadir" name="Add"/>
@@ -28,4 +28,5 @@
<menu_item_call label="Pagar" name="Pay..."/>
<menu_item_call label="Comprar" name="Buy..."/>
<menu_item_call label="Borrar" name="Delete"/>
+ <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_url_agent.xml b/indra/newview/skins/default/xui/es/menu_url_agent.xml
index 69a03671ab..610d65465d 100755
--- a/indra/newview/skins/default/xui/es/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/es/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Ver el perfil" name="show_agent"/>
<menu_item_call label="Enviar un MI..." name="send_im"/>
<menu_item_call label="Añadir como amigo..." name="add_friend"/>
+ <menu_item_call label="Quitar de los amigos..." name="remove_friend"/>
<menu_item_call label="Copiar el nombre al portapapeles" name="url_copy_label"/>
<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_url_objectim.xml b/indra/newview/skins/default/xui/es/menu_url_objectim.xml
index e78fdec558..c3c8439ea2 100755
--- a/indra/newview/skins/default/xui/es/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/es/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Perfil del objeto..." name="show_object"/>
+ <menu_item_call label="Ignorar..." name="block_object"/>
<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
<menu_item_call label="Teleportarse a la posición del objeto" name="teleport_to_object"/>
<menu_item_call label="Copiar el nombre del objeto al portapapeles" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 1e0ceb2220..e4fe871683 100755
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
<menu_item_call label="Caminar / Correr / Volar..." name="Walk / run / fly"/>
</menu>
- <menu label="Estado" name="Status"/>
+ <menu label="Estado" name="Status">
+ <menu_item_check label="Ausente" name="Away"/>
+ <menu_item_check label="No molestar" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="Comprar L$..." name="Buy and Sell L$"/>
<menu_item_call label="Panel de control de la cuenta..." name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=es"/>
@@ -31,6 +34,7 @@
<menu_item_check label="Conversaciones..." name="Conversations"/>
<menu_item_check label="Chat..." name="Nearby Chat"/>
<menu_item_check label="Hablar" name="Speak"/>
+ <menu_item_check label="Registro de conversación..." name="Conversation Log..."/>
<menu label="Transformación de voz" name="VoiceMorphing">
<menu_item_check label="Sin transformación de voz" name="NoVoiceMorphing"/>
<menu_item_check label="Probar..." name="Preview"/>
@@ -41,6 +45,7 @@
<menu_item_check label="Grupos" name="My Groups"/>
<menu_item_check label="Gente cerca" name="Active Speakers"/>
<menu_item_call label="Lista de ignorados" name="Block List"/>
+ <menu_item_check label="No molestar" name="Do Not Disturb"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_call label="Crear un hito de este sitio" name="Create Landmark Here"/>
@@ -109,6 +114,7 @@
<menu_item_call label="Incluir la parte siguiente" name="Include Next Part"/>
<menu_item_call label="Incluir la parte previa" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Linksets..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Visión en lo seleccionado" name="Focus on Selection"/>
<menu_item_call label="Zoom en lo seleccionado" name="Zoom to Selection"/>
<menu label="Objeto" name="Object">
@@ -272,6 +278,7 @@
<menu_item_check label="Camera Offset" name="Camera Offset"/>
<menu_item_check label="Randomize Framerate" name="Randomize Framerate"/>
<menu_item_check label="Frame Test" name="Frame Test"/>
+ <menu_item_call label="Perfil del fotograma" name="Frame Profile"/>
</menu>
<menu label="Render Metadata" name="Render Metadata">
<menu_item_check label="Normales" name="Normals"/>
@@ -292,15 +299,15 @@
</menu>
<menu label="Rendering" name="Rendering">
<menu_item_check label="Axes" name="Axes"/>
+ <menu_item_call label="Información sobre el material seleccionado" name="Selected Material Info"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
- <menu_item_check label="Luces y sombras" name="Advanced Lighting Model"/>
+ <menu_item_check label="Modelo de iluminación avanzado" name="Advanced Lighting Model"/>
<menu_item_check label="Sombras del sol/la luna/proyectores" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO y sombras suavizadas" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Capas alfa automáticas (deferidas)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Capas alfa automáticas (no deferidas)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Animation Textures" name="Animation Textures"/>
<menu_item_check label="Disable Textures" name="Disable Textures"/>
- <menu_item_check label="Atlas de texturas (experimental)" name="Texture Atlas"/>
<menu_item_check label="Render Attached Lights" name="Render Attached Lights"/>
<menu_item_check label="Render Attached Particles" name="Render Attached Particles"/>
<menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/>
@@ -319,7 +326,6 @@
<menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/>
<menu_item_call label="Navegador de contenido web" name="Web Content Browser"/>
<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
- <menu_item_call label="Memory Stats" name="Memory Stats"/>
<menu_item_check label="Consola de depuración de región" name="Region Debug Console"/>
<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 05455f54c3..d4451ad251 100755
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -206,6 +206,14 @@ No podrás removérseles de ese rol, sino que deberán renunciar a él por sí m
¿Añadir esta capacidad a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Estás a punto de expulsar a [AVATAR_NAME] del grupo.
+ <usetemplate ignoretext="Confirmar la expulsión de un miembro del grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Estás a punto de expulsar a [COUNT] miembros del grupo.
+ <usetemplate ignoretext="Confirmar la expulsión de varios miembros del grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/>
+ </notification>
<notification name="AttachmentDrop">
Vas a soltar tu anexado.
¿Estás seguro de que quieres continuar?
@@ -1113,7 +1121,7 @@ en TODO EL TERRENO de este sim?
Por favor, elige un pago mayor.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- Por lo menos uno de los elementos seleccionados contiene vínculos que le señalan. Si eliminas este elemento, los vínculos dejarán de funcionar permanentemente. Lo más recomendable es eliminar primero los vínculos.
+ Por lo menos uno de los elementos contiene vínculos que lo señalan. Si eliminas este elemento, los vínculos dejarán de funcionar permanentemente. Lo más recomendable es eliminar primero los vínculos.
¿Estás seguro de que quieres eliminar los elementos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -1131,9 +1139,9 @@ Por favor, elige un pago mayor.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoOwn">
- No eres el propietario de, al menos, uno de los ítems que has seleccionado.
+ Uno o más de los elementos seleccionados no son tuyos.
-¿Estás seguro de que quieres borrar estos ítems?
+¿Estás seguro de que quieres eliminar los elementos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
@@ -1144,25 +1152,25 @@ Al menos un objeto no es copiable.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoOwn">
- Al menos un objeto está bloqueado.
-No eres propietario de, al menos, un objeto.
+ Hay un objeto bloqueado como mínimo.
+No eres propietario de al menos un objeto.
-¿Estás seguro de que quieres borrar estos ítems?
+¿Estás seguro de que quieres eliminar los elementos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
- Al menos un objeto no es copiable.
-No eres propietario de, al menos, un objeto.
+ No se puede copiar un objeto como mínimo.
+No eres propietario de al menos un objeto.
-¿Estás seguro de que quieres borrar estos ítems?
+¿Estás seguro de que quieres eliminar los elementos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
- Al menos un objeto está bloqueado.
-Al menos un objeto no es copiable.
-No eres propietario de, al menos, un objeto.
+ Hay un objeto bloqueado como mínimo.
+No se puede copiar un objeto como mínimo.
+No eres propietario de al menos un objeto.
-¿Estás seguro de que quieres borrar estos ítems?
+¿Estás seguro de que quieres eliminar los elementos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
@@ -1486,13 +1494,43 @@ Versión [VERSION] [[RELEASE_NOTES_FULL_URL]; información acerca de esta actual
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
Hemos descargado una actualización de software necesaria.
-Versión [VERSION]
+Versión [VERSION] [[INFO_URL] Información sobre esta actualización]
-Debemos reiniciar [APP_NAME] para instalar la actualización.
+Para instalar la actualización, hay que reiniciar [APP_NAME].
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
- Debemos reiniciar [APP_NAME] para instalar la actualización.
+ Para instalar la actualización, hay que reiniciar [APP_NAME].
+[[INFO_URL] Información sobre esta actualización]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ Hemos descargado una actualización aplicable a tu instalación de [APP_NAME].
+Versión [VERSION]
+Este visor experimental se ha sustituido por un visor de [NEW_CHANNEL].
+Consulta [[INFO_URL] para informarte sobre esta actualización.]
+ <usetemplate name="okcancelbuttons" notext="Más tarde..." yestext="Instalar ahora y reiniciar [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ Hemos descargado una actualización aplicable a tu instalación de [APP_NAME].
+Versión [VERSION]
+Este visor experimental se ha sustituido por un visor de [NEW_CHANNEL].
+Consulta [[INFO_URL] Información sobre esta actualización].
+ <usetemplate name="okcancelbuttons" notext="Más tarde..." yestext="Instalar ahora y reiniciar [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ Hemos descargado una actualización de software necesaria.
+Versión [VERSION]
+Este visor experimental se ha sustituido por un visor de [NEW_CHANNEL].
+Consulta [[INFO_URL] Información sobre esta actualización].
+
+Para instalar la actualización, hay que reiniciar [APP_NAME].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ Para instalar la actualización, hay que reiniciar [APP_NAME].
+Este visor experimental se ha sustituido por un visor de [NEW_CHANNEL].
+Consulta [[INFO_URL] Información sobre esta actualización].
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1543,6 +1581,10 @@ Debemos reiniciar [APP_NAME] para instalar la actualización.
¿Deseas abandonar el grupo?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ No es posible abandonar el grupo. No puedes abandonarlo porque eres su último propietario. Antes tienes que asignar el papel de propietario a otro miembro.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
¿Quieres realmente expulsar a todos los residentes de la cuadrícula?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/>
@@ -2404,9 +2446,7 @@ Por favor, selecciona un sólo objeto.
elegir &apos;Teleportar&apos;.)
</notification>
<notification name="TeleportToPerson">
- Para ponerte en contacto con Residentes como &apos;[NAME]&apos;, pulsa el botón &quot;Gente&quot;, selecciona un Residente en la ventana que se abre y después pulsa en &apos;MI&apos; en
- la parte inferior de la ventana.
- (También puedes pulsar dos veces en su nombre o pulsarlo con el botón derecho y elegir &apos;MI&apos;).
+ Para abrir una conversación privada con alguien, pulsa con el botón derecho en su avatar y selecciona &apos;MI&apos; en el menú.
</notification>
<notification name="CantSelectLandFromMultipleRegions">
No puedes seleccionar un terreno que cruce las fronteras entre servidores.
@@ -2780,6 +2820,15 @@ No autorices el acceso a tu cuenta si no conoces cuál es la razón exacta.
<button name="Deny" text="Denegar"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, un objeto propiedad de &apos;[NAME]&apos;, ha solicitado un permiso de script en tiempo de ejecución que el visor no reconoce ni puede conceder.
+
+Para obtener el permiso, descárgate aquí la última versión: [DOWNLOADURL].
+ <form name="form">
+ <button name="Deny" text="Aceptar"/>
+ <button name="Mute" text="Ignorar"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [NAME]
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 7a7dfca0b8..06150f7619 100755
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -49,6 +49,9 @@
<menu_button name="plus_btn" tool_tip="Entrar en un grupo o crear uno"/>
<dnd_button name="minus_btn" tool_tip="Dejar el grupo seleccionado"/>
</panel>
+ <text name="groupcount">
+ Formas parte de [COUNT] grupos y puedes unirte a [REMAINING] más.
+ </text>
</panel>
<panel label="RECIENTE" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index 28bc98f988..7feff9005c 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Chat de texto" name="chat">
- <panel>
+ <panel name="general_chat_settings">
<check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/>
<check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/>
<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>
@@ -8,66 +8,78 @@
Tamaño de la fuente:
</text>
<combo_box name="chat_font_size">
- <item label="Pequeña" name="Small" value="0"/>
- <item label="Mediana" name="Medium" value="1"/>
+ <item label="Pequeño" name="Small" value="0"/>
+ <item label="Medio" name="Medium" value="1"/>
<item label="Grande" name="Large" value="2"/>
</combo_box>
<check_box label="Bocadillos del chat" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- Notificaciones
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
MI de amigos:
</text>
<combo_box name="FriendIMOptions">
- <item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+ <item label="Abrir ventana de conversaciones" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir el mensaje en una ventana emergente" name="PopUpMessage" value="toast"/>
<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Ninguno" name="None" value="ninguno"/>
+ <item label="Ninguna acción" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Reproducir sonido" name="play_sound_friend_im"/>
<text name="non_friend_ims">
MI de no amigos:
</text>
<combo_box name="NonFriendIMOptions">
- <item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+ <item label="Abrir ventana de conversaciones" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir el mensaje en una ventana emergente" name="PopUpMessage" value="toast"/>
<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Ninguno" name="None" value="ninguno"/>
+ <item label="Ninguna acción" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Reproducir sonido" name="play_sound_non_friend_im"/>
<text name="conference_ims">
- MI de conferencia:
+ MI de conferencias:
</text>
<combo_box name="ConferenceIMOptions">
- <item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+ <item label="Abrir ventana de conversaciones" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir el mensaje en una ventana emergente" name="PopUpMessage" value="toast"/>
<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Ninguno" name="None" value="ninguno"/>
+ <item label="Ninguna acción" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Reproducir sonido" name="play_sound_conference_im"/>
<text name="group_chat">
Chat de grupo:
</text>
<combo_box name="GroupChatOptions">
- <item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+ <item label="Abrir ventana de conversaciones" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir el mensaje en una ventana emergente" name="PopUpMessage" value="toast"/>
<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Ninguno" name="None" value="ninguno"/>
+ <item label="Ninguna acción" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Reproducir sonido" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
- Chat:
+ Chat con gente cercana:
</text>
<combo_box name="NearbyChatOptions">
- <item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+ <item label="Abrir ventana de conversaciones" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir el mensaje en una ventana emergente" name="PopUpMessage" value="toast"/>
+ <item label="Botón de la barra de herramientas de Flash" name="FlashToolBarButton" value="flash"/>
+ <item label="Ninguna acción" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Reproducir sonido" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ MI de objetos:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Abrir ventana de conversaciones" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir el mensaje en una ventana emergente" name="PopUpMessage" value="toast"/>
<item label="Botón de la barra de herramientas de Flash" name="FlashToolBarButton" value="flash"/>
- <item label="Ninguno" name="None" value="ninguno"/>
+ <item label="Ninguna acción" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Reproducir sonido" name="play_sound_object_im"/>
<text name="notifications_alert">
- Para suspender provisionalmente todas las notificaciones, usa Comunicarme &gt; No molestar.
+ Para dejar de recibir avisos durante un tiempo, usa Comunicarme &gt; No molestar.
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Reproducir sonido:
</text>
@@ -76,9 +88,9 @@
<check_box label="Oferta de teleporte" name="teleport_offer"/>
<check_box label="Oferta de inventario" name="inventory_offer"/>
</panel>
- <panel>
- <button label="Limpiar el registro..." name="clear_log"/>
- <button label="Eliminar transcripciones..." name="delete_transcripts"/>
+ <panel name="log_settings">
+ <button label="Borrar registro..." name="clear_log"/>
+ <button label="Borrar grabaciones..." name="delete_transcripts"/>
<button label="Examinar..." label_selected="Examinar" name="log_path_button"/>
</panel>
<button label="Traducción…" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
index 281b871fed..9362f76708 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="verdadero" label="Luces locales" name="LocalLights"/>
<check_box initial_value="true" label="Shaders básicos" name="BasicShaders" tool_tip="Desactivando esta opción puede prevenir fallos en algunos controladores de la tarjeta gráfica."/>
<check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="verdadero" label="Luces y sombras" name="UseLightShaders"/>
+ <check_box initial_value="verdadero" label="Modelo de iluminación avanzado" name="UseLightShaders"/>
<check_box initial_value="verdadero" label="Oclusión del ambiente" name="UseSSAO"/>
<check_box initial_value="verdadero" label="Profundidad del campo" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
index 81a29dae5a..f7eaa03d63 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="Instalar automáticamente" name="Install_automatically"/>
<combo_box.item label="Descargar e instalar actualizaciones manualmente" name="Install_manual"/>
</combo_box>
+ <check_box label="Admitir candidatos a la versión comercial a la hora de realizar actualizaciones" name="update_willing_to_test"/>
<text name="Proxy Settings:">
Configuración de proxy:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml
index 4c4077b96f..87314820a6 100755
--- a/indra/newview/skins/default/xui/es/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/es/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Seleccionar todo" name="Select All"/>
<menu_item_call label="Deseleccionar" name="Deselect"/>
<menu_item_call label="Buscar / Reemplazar..." name="Search / Replace..."/>
+ <menu_item_call label="Ir a la línea..." name="Go to line..."/>
</menu>
<menu label="Ayuda" name="Help">
<menu_item_call label="Ayuda..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/es/panel_tools_texture.xml b/indra/newview/skins/default/xui/es/panel_tools_texture.xml
new file mode 100644
index 0000000000..7199905a1c
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Textura" name="Texture">
+ <panel.string name="string repeats per meter">
+ Repeticiones por metro
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Repeticiones por cara
+ </panel.string>
+ <text name="color label">
+ Color
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Pulsa para abrir el selector de color"/>
+ <text name="color trans">
+ Porcentaje de transparencia
+ </text>
+ <text name="glow label">
+ Resplandor
+ </text>
+ <check_box label="Brillo total" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Materiales" name="Materials"/>
+ <combo_box.item label="Media" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="Textura (difuminar)" name="Texture (diffuse)"/>
+ <combo_box.item label="Rugosidad (normal)" name="Bumpiness (normal)"/>
+ <combo_box.item label="Brillo (efecto espejo)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="Textura" name="texture control" tool_tip="Pulsa para elegir una imagen"/>
+ <text name="label alphamode">
+ Modo alfa
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Ninguno" name="None"/>
+ <combo_box.item label="Mezclado alfa" name="Alpha blending"/>
+ <combo_box.item label="Máscara alfa" name="Alpha masking"/>
+ <combo_box.item label="Máscara de emisión lumínica" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ Límite de máscara
+ </text>
+ <texture_picker label="Textura" name="bumpytexture control" tool_tip="Pulsa para elegir una imagen"/>
+ <text name="label bumpiness">
+ Rugosidad
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Ninguna" name="None"/>
+ <combo_box.item label="Claridad" name="Brightness"/>
+ <combo_box.item label="Oscuridad" name="Darkness"/>
+ <combo_box.item label="madera" name="woodgrain"/>
+ <combo_box.item label="corteza" name="bark"/>
+ <combo_box.item label="ladrillos" name="bricks"/>
+ <combo_box.item label="cuadrícula" name="checker"/>
+ <combo_box.item label="hormigón" name="concrete"/>
+ <combo_box.item label="azulejo" name="crustytile"/>
+ <combo_box.item label="piedralabrada" name="cutstone"/>
+ <combo_box.item label="discos" name="discs"/>
+ <combo_box.item label="gravilla" name="gravel"/>
+ <combo_box.item label="placadepetri" name="petridish"/>
+ <combo_box.item label="revestimiento" name="siding"/>
+ <combo_box.item label="baldosa" name="stonetile"/>
+ <combo_box.item label="estuco" name="stucco"/>
+ <combo_box.item label="succión" name="suction"/>
+ <combo_box.item label="tejido" name="weave"/>
+ </combo_box>
+ <texture_picker label="Textura" name="shinytexture control" tool_tip="Pulsa para elegir una imagen"/>
+ <text name="label shininess">
+ Brillo
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Ninguno" name="None"/>
+ <combo_box.item label="Bajo" name="Low"/>
+ <combo_box.item label="Medio" name="Medium"/>
+ <combo_box.item label="Alto" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ Efecto pulido
+ </text>
+ <text name="label environment">
+ Entorno
+ </text>
+ <text name="label shinycolor">
+ Color
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Pulsa para abrir el selector de color"/>
+ <text name="media_info">
+ Espacio para la URL del media elegido, si procede
+ </text>
+ <button label="Elegir..." name="add_media" tool_tip="Añadir un media"/>
+ <button label="Eliminar" name="delete_media" tool_tip="Borrar esta textura para media"/>
+ <button label="Centrar" label_selected="Centrar los media" name="button align" tool_tip="Centrar esta textura para media (primero debe cargarse)"/>
+ <text name="tex gen">
+ Representación
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Por defecto" name="Default"/>
+ <combo_box.item label="En el plano" name="Planar"/>
+ </combo_box>
+ <spinner label="Escala horizontal" name="TexScaleU"/>
+ <spinner label="Escala vertical" name="TexScaleV"/>
+ <spinner label="Repeticiones por metro" name="rptctrl"/>
+ <spinner label="Grados de rotación" name="TexRot"/>
+ <spinner label="Desplazamiento horizontal" name="TexOffsetU"/>
+ <spinner label="Desplazamiento vertical" name="TexOffsetV"/>
+ <spinner label="Escala horizontal" name="bumpyScaleU"/>
+ <spinner label="Escala vertical" name="bumpyScaleV"/>
+ <spinner label="Grados de rotación" name="bumpyRot"/>
+ <spinner label="Desplazamiento horizontal" name="bumpyOffsetU"/>
+ <spinner label="Desplazamiento vertical" name="bumpyOffsetV"/>
+ <spinner label="Escala horizontal" name="shinyScaleU"/>
+ <spinner label="Escala vertical" name="shinyScaleV"/>
+ <spinner label="Grados de rotación" name="shinyRot"/>
+ <spinner label="Desplazamiento horizontal" name="shinyOffsetU"/>
+ <spinner label="Desplazamiento vertical" name="shinyOffsetV"/>
+ <check_box initial_value="falso" label="Alinear caras del plano" name="checkbox planar align" tool_tip="Alinear texturas en todas las caras seleccionadas con la última cara seleccionada. Requiere la representación de texturas en el plano."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml
index 660293b02c..902ed4df52 100755
--- a/indra/newview/skins/default/xui/es/role_actions.xml
+++ b/indra/newview/skins/default/xui/es/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="Estas capacidades incluyen poder cambiar el nombre de la parcela y su configuración, así como si se muestra en Buscar y las opciones del punto de llegada y el de teleporte." name="Parcel Identity">
<action description="Cambiar &apos;Mostrar el sitio en Buscar&apos; y configurar la categoría" longdescription="Cambia &apos;Mostrar el sitio en Buscar&apos; y el configurar la categoría de una parcela en Acerca del terreno &gt; pestaña Opciones." name="land find places" value="17"/>
- <action description="Cambiar el nombre de la parcela, su descripción, y la configuración de &apos;Mostrar el sitio en Buscar&apos;" longdescription="Cambia el nombre de la parcela, su descripción, y la configuración de &apos;Mostrar el sitio en Buscar&apos;. Se hace en Acerca del terreno &gt; pestaña Opciones." name="land change identity" value="18"/>
+ <action description="Cambia el nombre de la parcela, su descripción y la configuración de &apos;Contenido moderado&apos;." longdescription="Cambia el nombre de la parcela, su descripción y la configuración de &apos;Contenido moderado&apos;. Se hace en Acerca del terreno &gt; pestaña Opciones." name="land change identity" value="18"/>
<action description="Definir los puntos de llegada y teleporte" longdescription="En una parcela perteneciente al grupo, los miembros con un rol que tenga esta capacidad pueden precisar el punto de llegada o el de teleporte. Se hace en Acerca del terreno &gt; pestaña Opciones." name="land set landing point" value="19"/>
</action_set>
<action_set description="Estas capacidades incluyen poderes que afectan a las opciones de la parcela, como &apos;Crear objetos&apos;, &apos;Editar el terreno&apos; y las configuraciones de la música y los media." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 937433e210..4686d1ed3a 100755
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -130,6 +130,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download.
+ </string>
<string name="LoginFailedViewerNotPermitted">
Ya no puedes acceder a Second Life con el visor que estás utilizando. Visita la siguiente página para descargar un nuevo visor:
http://secondlife.com/download.
@@ -439,6 +442,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="SLappAgentRequestFriend">
Petición de amistad
</string>
+ <string name="SLappAgentRemoveFriend">
+ Eliminación de amigos
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Cerrar (⌘W)
</string>
@@ -823,6 +829,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="anim_yes_head">
Sí
</string>
+ <string name="use_texture">
+ Usar textura
+ </string>
<string name="texture_loading">
Cargando...
</string>
@@ -919,6 +928,21 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="TeleportYourAgent">
Teleportarte
</string>
+ <string name="JoinAnExperience">
+ Únete a una experiencia
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Suprimir alertas al gestionar las listas de acceso a un estado
+ </string>
+ <string name="OverrideYourAnimations">
+ Reemplazar tus animaciones predeterminadas
+ </string>
+ <string name="ScriptReturnObjects">
+ Devolver objetos en tu nombre
+ </string>
+ <string name="UnknownScriptPermission">
+ (desconocido)
+ </string>
<string name="SIM_ACCESS_PG">
General
</string>
@@ -1944,6 +1968,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="ATTACH_HUD_BOTTOM_RIGHT">
HUD: abajo der.
</string>
+ <string name="ATTACH_NECK">
+ Cuello
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Centro del avatar
+ </string>
<string name="CursorPos">
Línea [LINE], Columna [COLUMN]
</string>
@@ -2931,6 +2961,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Hip Width">
Cadera: ancho
</string>
+ <string name="Hover">
+ Pasa el cursor
+ </string>
<string name="In">
Pegadas
</string>
@@ -4991,4 +5024,7 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="logging_calls_enabled_log_empty">
No hay conversaciones grabadas. Después de contactar con una persona, o de que alguien contacte contigo, aquí se mostrará una entrada de registro.
</string>
+ <string name="loading_chat_logs">
+ Cargando...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index d45bdccf3e..384966354e 100755
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -9,6 +9,8 @@
</floater.string>
<floater.string name="AboutPosition">
Vous êtes à [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] dans [REGION], se trouvant à &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+SLURL : &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(coordonnées globales [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
index ab68ce166b..7ee4441758 100755
--- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="MODIFIER LES DROITS">
+<floater name="floaterbulkperms" title="MODIFIER LES DROITS RELATIFS AU CONTENU">
<floater.string name="nothing_to_modify_text">
Certains contenus sont non modifiables.
</floater.string>
@@ -33,7 +33,7 @@
<button label="√ Tout" label_selected="Tout" name="check_all"/>
<button label="Effacer" label_selected="Aucun" name="check_none"/>
<text name="newperms">
- Nouveaux droits
+ Modifier les droits relatifs au contenu et remplacer par
</text>
<text name="GroupLabel">
Groupe :
@@ -49,6 +49,7 @@
<check_box label="Modifier" name="next_owner_modify"/>
<check_box label="Copier" name="next_owner_copy"/>
<check_box initial_value="true" label="Transférer" name="next_owner_transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
- <button label="OK" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="Appliquer" name="apply"/>
<button label="Annuler" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_goto_line.xml b/indra/newview/skins/default/xui/fr/floater_goto_line.xml
new file mode 100644
index 0000000000..fdc800b40b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="ALLER À LA LIGNE">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ Aller à la ligne
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml
index 8ab98b8e4e..6d98f0a846 100755
--- a/indra/newview/skins/default/xui/fr/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Traduire le chat" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traduire le chat" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
index 0bcf55aba5..02d969dc08 100755
--- a/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Afficher :
</text>
- <check_box label="Test" name="show_world"/>
+ <check_box label="Monde" name="show_world"/>
<check_box label="Mobiles uniquement" name="show_world_movables_only"/>
<check_box label="Maillage de navigation" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
index f48513eb2b..0450be28e0 100755
--- a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Figer" name="Freeze..."/>
<menu_item_call label="Expulser" name="Eject..."/>
<menu_item_call label="Déboguer les textures" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
<menu_item_call label="Payer" name="Pay..."/>
<menu_item_call label="Profil de l&apos;objet" name="Object Inspect"/>
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
index 6af2064e44..f2e7928c24 100755
--- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="Mes groupes" name="Groups..."/>
<menu_item_call label="Mon profil" name="Profile..."/>
<menu_item_call label="Déboguer les textures" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Lâcher" name="Drop"/>
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
index 08d1a20361..1f5c1724f8 100755
--- a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Figer" name="Freeze..."/>
<menu_item_call label="Expulser" name="Eject..."/>
<menu_item_call label="Déboguer les textures" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
<menu_item_call label="Payer" name="Pay..."/>
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
index 6310a2177a..4815ad0676 100755
--- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="Mes groupes" name="Groups..."/>
<menu_item_call label="Mon profil" name="Profile..."/>
<menu_item_call label="Déboguer les textures" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_conversation.xml b/indra/newview/skins/default/xui/fr/menu_conversation.xml
index 857ead603b..09109f4555 100644
--- a/indra/newview/skins/default/xui/fr/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/fr/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Fermer la conversation" name="close_conversation"/>
<menu_item_call label="Ouvrir une conversation vocale" name="open_voice_conversation"/>
<menu_item_call label="Se déconnecter de la conversation et du canal vocal" name="disconnect_from_voice"/>
+ <menu_item_call label="Fermer la sélection" name="close_selected_conversations"/>
<menu_item_call label="Voir le profil" name="view_profile"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="Proposer une téléportation." name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_land.xml b/indra/newview/skins/default/xui/fr/menu_land.xml
index b84daee3ae..7beaf00c58 100755
--- a/indra/newview/skins/default/xui/fr/menu_land.xml
+++ b/indra/newview/skins/default/xui/fr/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Acheter un pass" name="Land Buy Pass"/>
<menu_item_call label="Construire" name="Create"/>
<menu_item_call label="Modifier le terrain" name="Edit Terrain"/>
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml
index dc6b2793ca..7b1e106474 100755
--- a/indra/newview/skins/default/xui/fr/menu_login.xml
+++ b/indra/newview/skins/default/xui/fr/menu_login.xml
@@ -18,7 +18,13 @@
<menu_item_call label="Afficher les conditions d&apos;utilisation" name="TOS"/>
<menu_item_call label="Afficher le message critique" name="Critical"/>
<menu_item_call label="Test de débogage de la fenêtre flottante du contenu Web" name="Web Content Floater Debug Test"/>
- <menu label="Définir le niveau de connexion" name="Set Logging Level"/>
+ <menu label="Définir le niveau de connexion" name="Set Logging Level">
+ <menu_item_check label="Débogage" name="Debug"/>
+ <menu_item_check label="Infos" name="Info"/>
+ <menu_item_check label="Avertissement" name="Warning"/>
+ <menu_item_check label="Erreur" name="Error"/>
+ <menu_item_check label="Aucun" name="None"/>
+ </menu>
<menu_item_check label="Afficher le sélecteur de grille" name="Show Grid Picker"/>
<menu_item_call label="Afficher la console des notifications" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_mute_particle.xml b/indra/newview/skins/default/xui/fr/menu_mute_particle.xml
new file mode 100644
index 0000000000..5f5e4c8b08
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index 573b6da582..d7b69e495a 100755
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -5,13 +5,13 @@
</menu_item_call>
<menu_item_call label="Modifier" name="Edit..."/>
<menu_item_call label="Construire" name="Build"/>
- <menu_item_call label="Voir parmi les groupes de liens" name="show_in_linksets"/>
- <menu_item_call label="Voir parmi les personnages" name="show_in_characters"/>
<menu_item_call label="Ouvrir" name="Open"/>
<menu_item_call label="M&apos;asseoir ici" name="Object Sit"/>
<menu_item_call label="Me lever" name="Object Stand Up"/>
<menu_item_call label="Profil de l&apos;objet" name="Object Inspect"/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
+ <menu_item_call label="Voir parmi les groupes de liens" name="show_in_linksets"/>
+ <menu_item_call label="Voir parmi les personnages" name="show_in_characters"/>
<context_menu label="Porter" name="Put On">
<menu_item_call label="Porter" name="Wear"/>
<menu_item_call label="Ajouter" name="Add"/>
@@ -28,4 +28,5 @@
<menu_item_call label="Payer" name="Pay..."/>
<menu_item_call label="Acheter" name="Buy..."/>
<menu_item_call label="Supprimer" name="Delete"/>
+ <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
index d701b3a414..2c7443c6ca 100755
--- a/indra/newview/skins/default/xui/fr/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Voir le profil" name="show_agent"/>
<menu_item_call label="Envoyer IM..." name="send_im"/>
<menu_item_call label="Devenir amis..." name="add_friend"/>
+ <menu_item_call label="Supprimer cet ami..." name="remove_friend"/>
<menu_item_call label="Copier le nom dans le presse-papiers" name="url_copy_label"/>
<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
index 0a934d3e69..5d745ef5f8 100755
--- a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Profil de l&apos;objet…" name="show_object"/>
+ <menu_item_call label="Ignorer…" name="block_object"/>
<menu_item_call label="Voir sur la carte" name="show_on_map"/>
<menu_item_call label="Me téléporter à l&apos;emplacement de l&apos;objet" name="teleport_to_object"/>
<menu_item_call label="Copier le nom de l&apos;objet dans le presse-papiers" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 548f144742..5d0026ace0 100755
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/>
<menu_item_call label="Marcher / Courir / Voler..." name="Walk / run / fly"/>
</menu>
- <menu label="Statut" name="Status"/>
+ <menu label="Statut" name="Status">
+ <menu_item_check label="Absent" name="Away"/>
+ <menu_item_check label="Ne pas déranger" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="Acheter des L$..." name="Buy and Sell L$"/>
<menu_item_call label="Boîte d&apos;envoi vendeur..." name="MerchantOutbox"/>
<menu_item_call label="Page d&apos;accueil du compte..." name="Manage My Account">
@@ -32,6 +35,7 @@
<menu_item_check label="Conversations..." name="Conversations"/>
<menu_item_check label="Chat près de moi..." name="Nearby Chat"/>
<menu_item_check label="Parler" name="Speak"/>
+ <menu_item_check label="Journal des conversations..." name="Conversation Log..."/>
<menu label="Effet de voix" name="VoiceMorphing">
<menu_item_check label="Aucun effet de voix" name="NoVoiceMorphing"/>
<menu_item_check label="Aperçu..." name="Preview"/>
@@ -42,6 +46,7 @@
<menu_item_check label="Groupes" name="My Groups"/>
<menu_item_check label="Personnes près de vous" name="Active Speakers"/>
<menu_item_call label="Liste des ignorés" name="Block List"/>
+ <menu_item_check label="Ne pas déranger" name="Do Not Disturb"/>
</menu>
<menu label="Monde" name="World">
<menu_item_call label="Créer un repère pour ce lieu" name="Create Landmark Here"/>
@@ -110,6 +115,7 @@
<menu_item_call label="Inclure la partie suivante" name="Include Next Part"/>
<menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Groupes de liens..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Point central sur la sélection" name="Focus on Selection"/>
<menu_item_call label="Zoomer sur la sélection" name="Zoom to Selection"/>
<menu label="Objet" name="Object">
@@ -279,6 +285,7 @@
<menu_item_check label="Taux de défilement aléatoire" name="Randomize Framerate"/>
<menu_item_check label="Cadre lent périodique" name="Periodic Slow Frame"/>
<menu_item_check label="Test cadre" name="Frame Test"/>
+ <menu_item_call label="Profil du cadre" name="Frame Profile"/>
</menu>
<menu label="Métadonnées de rendu" name="Render Metadata">
<menu_item_check label="Cadres" name="Bounding Boxes"/>
@@ -313,9 +320,10 @@
<menu_item_check label="Axes" name="Axes"/>
<menu_item_check label="Tangente" name="Tangent Basis"/>
<menu_item_call label="Base des infos de la texture sélectionnée" name="Selected Texture Info Basis"/>
+ <menu_item_call label="Infos sur les matériaux sélectionnés" name="Selected Material Info"/>
<menu_item_check label="Filaire" name="Wireframe"/>
<menu_item_check label="Occlusion objet-objet" name="Object-Object Occlusion"/>
- <menu_item_check label="Éclairage et ombres" name="Advanced Lighting Model"/>
+ <menu_item_check label="Modèle d&apos;éclairage avancé" name="Advanced Lighting Model"/>
<menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Débogage GL" name="Debug GL"/>
@@ -325,7 +333,6 @@
<menu_item_check label="Textures d&apos;animation" name="Animation Textures"/>
<menu_item_check label="Désactiver les textures" name="Disable Textures"/>
<menu_item_check label="Textures pleine résolution" name="Rull Res Textures"/>
- <menu_item_check label="Atlas des textures (expérimental)" name="Texture Atlas"/>
<menu_item_check label="Rendu des lumières jointes" name="Render Attached Lights"/>
<menu_item_check label="Rendu des particules jointes" name="Render Attached Particles"/>
<menu_item_check label="Objets en surbrillance avec le pointeur" name="Hover Glow Objects"/>
@@ -361,7 +368,6 @@
<menu_item_call label="Dump Focus Holder" name="Dump Focus Holder"/>
<menu_item_call label="Imprimer les infos sur l&apos;objet sélectionné" name="Print Selected Object Info"/>
<menu_item_call label="Imprimer les infos sur l&apos;avatar" name="Print Agent Info"/>
- <menu_item_call label="Statistiques de mémoire" name="Memory Stats"/>
<menu_item_check label="Console de débogage de région" name="Region Debug Console"/>
<menu_item_check label="Débogage SelectMgr" name="Debug SelectMgr"/>
<menu_item_check label="Débogage clics" name="Debug Clicks"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index e73cc6e6e0..c295a6f5a7 100755
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -209,6 +209,14 @@ Ajouter ce pouvoir à « [ROLE_NAME] » ?
Ajouter ce pouvoir à « [ROLE_NAME] » ?
<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Vous allez expulser [AVATAR_NAME] du groupe.
+ <usetemplate ignoretext="Confirmer l&apos;expulsion d&apos;un membre du groupe" name="okcancelignore" notext="Annuler" yestext="Expulser"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Vous allez expulser [COUNT] membres du groupe.
+ <usetemplate ignoretext="Confirmer l&apos;expulsion de plusieurs membres du groupe" name="okcancelignore" notext="Annuler" yestext="Expulser"/>
+ </notification>
<notification name="AttachmentDrop">
Vous êtes sur le point d&apos;abandonner l&apos;élément joint.
Voulez-vous vraiment continuer ?
@@ -1106,7 +1114,7 @@ Voir https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries
Veuillez saisir un montant plus élevé.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- Des articles liés pointent vers au moins un article sélectionné. Les liens arrêteront définitivement de fonctionner si vous supprimez cet article. Il est vivement conseillé de supprimer d&apos;abord ces liens.
+ Des liens pointent vers au moins un article sélectionné. Les liens arrêteront définitivement de fonctionner si vous supprimez cet article. Il est vivement conseillé de supprimer d&apos;abord ces liens.
Voulez-vous vraiment supprimer ces articles ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -1126,7 +1134,7 @@ Voulez-vous vraiment supprimer ces articles ?
<notification name="ConfirmObjectDeleteNoOwn">
Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
-Êtes-vous certain de vouloir supprimer ces objets ?
+Voulez-vous vraiment supprimer ces articles ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
@@ -1140,23 +1148,23 @@ Au moins un des objets n&apos;est pas copiable.
Au moins un des objets est verrouillé.
Au moins un des objets ne vous appartient pas.
-Êtes-vous certain de vouloir supprimer ces objets ?
+Voulez-vous vraiment supprimer ces articles ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
- Au moins un des objets n&apos;est pas copiable.
+ Au moins un des objets n&apos;est pas reproductible.
Au moins un des objets ne vous appartient pas.
-Êtes-vous certain de vouloir supprimer ces objets ?
+Voulez-vous vraiment supprimer ces articles ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
Au moins un des objets est verrouillé.
-Au moins un des objets n&apos;est pas copiable.
+Au moins un des objets n&apos;est pas reproductible.
Au moins un des objets ne vous appartient pas.
-Êtes-vous certain de vouloir supprimer ces objets ?
- <usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/>
+Voulez-vous vraiment supprimer ces articles ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
Au moins un des objets est verrouillé.
@@ -1477,13 +1485,43 @@ Version [VERSION] [[RELEASE_NOTES_FULL_URL] Informations relatives à cette mise
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
Nous avons téléchargé une mise à jour logicielle requise.
-Version [VERSION]
+Version [VERSION] [Informations au sujet de cette mise à jour [INFO_URL]]
[APP_NAME] doit être redémarré pour que la mise à jour soit installée.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
[APP_NAME] doit être redémarré pour que la mise à jour soit installée.
+[Informations au sujet de cette mise à jour [INFO_URL]]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ Nous avons téléchargé une mise à jour de votre installation [APP_NAME].
+Version [VERSION]
+Le client expérimental a été remplacé par un nouveau client [NEW_CHANNEL] ;
+consultez [[INFO_URL] pour en savoir plus sur cette mise à jour]
+ <usetemplate name="okcancelbuttons" notext="Ultérieurement..." yestext="Installer maintenant et redémarrer [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ Nous avons téléchargé une mise à jour de votre installation [APP_NAME].
+Version [VERSION]
+Le client expérimental a été remplacé par un nouveau client [NEW_CHANNEL] ;
+consultez [Informations au sujet de cette mise à jour [INFO_URL]]
+ <usetemplate name="okcancelbuttons" notext="Ultérieurement..." yestext="Installer maintenant et redémarrer [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ Nous avons téléchargé une mise à jour logicielle requise.
+Version [VERSION]
+Le client expérimental a été remplacé par un nouveau client [NEW_CHANNEL] ;
+consultez [Informations au sujet de cette mise à jour [INFO_URL]]
+
+[APP_NAME] doit être redémarré pour que la mise à jour soit installée.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ [APP_NAME] doit être redémarré pour que la mise à jour soit installée.
+Le client expérimental a été remplacé par un nouveau client [NEW_CHANNEL] ;
+consultez [Informations au sujet de cette mise à jour [INFO_URL]]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1534,6 +1572,10 @@ Version [VERSION]
Quitter le groupe ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ Impossible de quitter le groupe. Vous ne pouvez pas quitter le groupe car vous en êtes le dernier propriétaire. Vous devez d&apos;abord affecter le rôle de propriétaire à un autre membre.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Souhaitez-vous vraiment éjecter tous les résidents de la grille ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/>
@@ -2396,9 +2438,7 @@ Veuillez sélectionner un seul objet.
choisir Téléportation).
</notification>
<notification name="TeleportToPerson">
- Pour contacter un résident tel que [NAME], cliquez sur le bouton Personnes, sélectionnez le résident dans la fenêtre qui s&apos;ouvre, puis cliquez sur IM en
- bas de la fenêtre.
- (Vous pouvez aussi double-cliquer sur le nom du résident dans la liste ou cliquer-droit dessus et choisir IM.)
+ Pour ouvrir une conversation privée avec une autre personne, cliquez-droit sur son avatar et choisissez IM dans le menu.
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
@@ -2772,6 +2812,15 @@ N&apos;autorisez pas cet accès si vous ne comprenez pas entièrement pourquoi l
<button name="Deny" text="Refuser"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ Le client ne reconnaît pas le droit de script à l&apos;exécution demandé par &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, objet appartenant à [NAME], et ne peut donc pas l&apos;accorder.
+
+Pour accorder ce droit, mettez votre client à jour pour passer à la version la plus récente, à partir de [DOWNLOADURL].
+ <form name="form">
+ <button name="Deny" text="OK"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
&lt;nolink&gt;[TITLE]&lt;/nolink&gt; de [NAME]
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index 227ce26df7..e306a00183 100755
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -49,6 +49,9 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
<menu_button name="plus_btn" tool_tip="Rejoindre/créer un nouveau groupe"/>
<dnd_button name="minus_btn" tool_tip="Quitter le groupe sélectionné"/>
</panel>
+ <text name="groupcount">
+ Vous appartenez à [COUNT] groupes, et pouvez en rejoindre [REMAINING] autres.
+ </text>
</panel>
<panel label="RÉCENT" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index 972190dc15..52c6ed24b9 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Chat écrit" name="chat">
- <panel>
+ <panel name="general_chat_settings">
<check_box initial_value="true" label="Exécuter l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
<check_box label="M&apos;envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
<check_box label="Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM" name="voice_call_friends_only_check"/>
@@ -14,60 +14,72 @@
</combo_box>
<check_box label="Bulles de chat" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- Notifications
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
IM amis :
</text>
<combo_box name="FriendIMOptions">
<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
- <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
- <item label="Aucun(e)" name="None" value="aucun(e)"/>
+ <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="flash"/>
+ <item label="Aucune action" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Écouter le son" name="play_sound_friend_im"/>
<text name="non_friend_ims">
IM non amis :
</text>
<combo_box name="NonFriendIMOptions">
<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
- <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
- <item label="Aucun(e)" name="None" value="aucun(e)"/>
+ <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="flash"/>
+ <item label="Aucune action" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Écouter le son" name="play_sound_non_friend_im"/>
<text name="conference_ims">
IM conférence :
</text>
<combo_box name="ConferenceIMOptions">
<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
- <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
- <item label="Aucun(e)" name="None" value="aucun(e)"/>
+ <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="flash"/>
+ <item label="Aucune action" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Écouter le son" name="play_sound_conference_im"/>
<text name="group_chat">
Chat de groupe :
</text>
<combo_box name="GroupChatOptions">
<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
- <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
- <item label="Aucun(e)" name="None" value="aucun(e)"/>
+ <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="flash"/>
+ <item label="Aucune action" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Écouter le son" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
Chat près de moi :
</text>
<combo_box name="NearbyChatOptions">
<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
- <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolBarButton" value="clignote"/>
- <item label="Aucun(e)" name="None" value="aucun(e)"/>
+ <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolBarButton" value="flash"/>
+ <item label="Aucune action" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Écouter le son" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ IM objet :
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
+ <item label="Bouton de la barre d&apos;outils Flash" name="FlashToolBarButton" value="flash"/>
+ <item label="Aucune action" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Écouter le son" name="play_sound_object_im"/>
<text name="notifications_alert">
Pour suspendre temporairement toutes les notifications, utilisez Communication &gt; Ne pas déranger.
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Écouter le son :
</text>
@@ -76,7 +88,7 @@
<check_box label="Offre de téléportation" name="teleport_offer"/>
<check_box label="Offre d&apos;inventaire" name="inventory_offer"/>
</panel>
- <panel>
+ <panel name="log_settings">
<button label="Effacer le journal..." name="clear_log"/>
<button label="Supprimer les transcriptions..." name="delete_transcripts"/>
<button label="Parcourir..." label_selected="Parcourir" name="log_path_button"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index a738b2d43f..4946b09814 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="true" label="Lumières locales" name="LocalLights"/>
<check_box initial_value="true" label="Effets de base" name="BasicShaders" tool_tip="La désactivation de cette option peut éviter le plantage de certains pilotes de cartes graphiques"/>
<check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="true" label="Éclairage et ombres" name="UseLightShaders"/>
+ <check_box initial_value="true" label="Modèle d&apos;éclairage avancé" name="UseLightShaders"/>
<check_box initial_value="true" label="Occlusion ambiante" name="UseSSAO"/>
<check_box initial_value="true" label="Profondeur de champ" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
index 83303950dc..50f4a49bd0 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="Installation automatique" name="Install_automatically"/>
<combo_box.item label="Téléchargement et installation manuels" name="Install_manual"/>
</combo_box>
+ <check_box label="Accepte de passer aux versions avant sortie officielle" name="update_willing_to_test"/>
<text name="Proxy Settings:">
Paramètres de proxy :
</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
index 29fbe3c7e7..38e5cbe1f1 100755
--- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Tout sélectionner" name="Select All"/>
<menu_item_call label="Désélectionner" name="Deselect"/>
<menu_item_call label="Rechercher / Remplacer..." name="Search / Replace..."/>
+ <menu_item_call label="Aller à la ligne..." name="Go to line..."/>
</menu>
<menu label="Aide" name="Help">
<menu_item_call label="Aide..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/fr/panel_tools_texture.xml b/indra/newview/skins/default/xui/fr/panel_tools_texture.xml
new file mode 100644
index 0000000000..c69cb61a92
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Texture" name="Texture">
+ <panel.string name="string repeats per meter">
+ Répétitions au mètre
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Répétitions par face
+ </panel.string>
+ <text name="color label">
+ Couleur
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <text name="color trans">
+ % de transparence
+ </text>
+ <text name="glow label">
+ Rayonnement
+ </text>
+ <check_box label="Lumineux" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Matériaux" name="Materials"/>
+ <combo_box.item label="Médias" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="Texture (diffuse)" name="Texture (diffuse)"/>
+ <combo_box.item label="Relief (normal)" name="Bumpiness (normal)"/>
+ <combo_box.item label="Brillance (spéculaire)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="Texture" name="texture control" tool_tip="Cliquer pour sélectionner une image."/>
+ <text name="label alphamode">
+ Mode alpha
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Aucun" name="None"/>
+ <combo_box.item label="Fusion alpha" name="Alpha blending"/>
+ <combo_box.item label="Masquage alpha" name="Alpha masking"/>
+ <combo_box.item label="Masque émissif" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ Coupe du masque
+ </text>
+ <texture_picker label="Texture" name="bumpytexture control" tool_tip="Cliquer pour sélectionner une image."/>
+ <text name="label bumpiness">
+ Relief
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Aucun" name="None"/>
+ <combo_box.item label="Luminosité" name="Brightness"/>
+ <combo_box.item label="Obscurité" name="Darkness"/>
+ <combo_box.item label="aggloméré" name="woodgrain"/>
+ <combo_box.item label="écorce" name="bark"/>
+ <combo_box.item label="briques" name="bricks"/>
+ <combo_box.item label="damier" name="checker"/>
+ <combo_box.item label="béton" name="concrete"/>
+ <combo_box.item label="carrelage" name="crustytile"/>
+ <combo_box.item label="pierre de taille" name="cutstone"/>
+ <combo_box.item label="disques" name="discs"/>
+ <combo_box.item label="gravier" name="gravel"/>
+ <combo_box.item label="boîte de Petri" name="petridish"/>
+ <combo_box.item label="lattes" name="siding"/>
+ <combo_box.item label="carreaux" name="stonetile"/>
+ <combo_box.item label="stuc" name="stucco"/>
+ <combo_box.item label="ventouses" name="suction"/>
+ <combo_box.item label="tissage" name="weave"/>
+ </combo_box>
+ <texture_picker label="Texture" name="shinytexture control" tool_tip="Cliquer pour sélectionner une image."/>
+ <text name="label shininess">
+ Brillance
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Aucune" name="None"/>
+ <combo_box.item label="Faible" name="Low"/>
+ <combo_box.item label="Moyenne" name="Medium"/>
+ <combo_box.item label="Élevée" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ Lustrage
+ </text>
+ <text name="label environment">
+ Environnement
+ </text>
+ <text name="label shinycolor">
+ Couleur
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <text name="media_info">
+ L&apos;URL du média choisi, le cas échéant, se place ici.
+ </text>
+ <button label="Choisir..." name="add_media" tool_tip="Ajouter un média"/>
+ <button label="Supprimer" name="delete_media" tool_tip="Supprimer cette texture de média"/>
+ <button label="Aligner" label_selected="Aligner le média" name="button align" tool_tip="Ajuster la texture du média (le chargement doit d’abord se terminer)"/>
+ <text name="tex gen">
+ Application
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Valeur par défaut" name="Default"/>
+ <combo_box.item label="Plan" name="Planar"/>
+ </combo_box>
+ <spinner label="Échelle horizontale" name="TexScaleU"/>
+ <spinner label="Échelle verticale" name="TexScaleV"/>
+ <spinner label="Répétitions au mètre" name="rptctrl"/>
+ <spinner label="Degrés de rotation" name="TexRot"/>
+ <spinner label="Décalage horizontal" name="TexOffsetU"/>
+ <spinner label="Décalage vertical" name="TexOffsetV"/>
+ <spinner label="Échelle horizontale" name="bumpyScaleU"/>
+ <spinner label="Échelle verticale" name="bumpyScaleV"/>
+ <spinner label="Degrés de rotation" name="bumpyRot"/>
+ <spinner label="Décalage horizontal" name="bumpyOffsetU"/>
+ <spinner label="Décalage vertical" name="bumpyOffsetV"/>
+ <spinner label="Échelle horizontale" name="shinyScaleU"/>
+ <spinner label="Échelle verticale" name="shinyScaleV"/>
+ <spinner label="Degrés de rotation" name="shinyRot"/>
+ <spinner label="Décalage horizontal" name="shinyOffsetU"/>
+ <spinner label="Décalage vertical" name="shinyOffsetV"/>
+ <check_box initial_value="false" label="Aligner les faces Plan" name="checkbox planar align" tool_tip="Aligner les textures sur toutes les faces sélectionnées avec la dernière face sélectionnée. Application de la texture Plan requise."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
index 7187de8760..2a68ca0ddb 100755
--- a/indra/newview/skins/default/xui/fr/role_actions.xml
+++ b/indra/newview/skins/default/xui/fr/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="Ces pouvoirs permettent de modifier le nom de la parcelle, son référencement dans la recherche et le lieu de téléportation." name="Parcel Identity">
<action description="Activer Afficher le lieu dans la recherche et définir la catégorie" longdescription="Activez Afficher le lieu dans la recherche et définissez la catégorie d&apos;une parcelle dans l&apos;onglet À propos du terrain &gt; Options." name="land find places" value="17"/>
- <action description="Modifier le nom et la description de la parcelle, ainsi que les paramètres d&apos;affichage du lieu dans la recherche" longdescription="Modifiez le nom et la description de la parcelle, ainsi que les paramètres d&apos;affichage du lieu dans la recherche. Pour ce faire, utilisez l&apos;onglet À propos du terrain &gt; Options." name="land change identity" value="18"/>
+ <action description="Changer le nom de la parcelle, la description et les paramètres de contenu modéré" longdescription="Changez le nom de la parcelle, la description et les paramètres de contenu modéré. Pour ce faire, utilisez l&apos;onglet À propos du terrain &gt; Options." name="land change identity" value="18"/>
<action description="Définir le lieu d&apos;arrivée et le routage des téléportations" longdescription="Définissez le lieu d&apos;arrivée des téléportations et le routage à partir du menu À propos du terrain &gt; Options." name="land set landing point" value="19"/>
</action_set>
<action_set description="Ces pouvoirs permettent de définir les options de la parcelle concernant la musique, les médias, la création d&apos;objets et le relief." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 69ed20f376..346fa62351 100755
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -139,6 +139,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
Le client que vous utilisez ne permet plus d&apos;accéder à Second Life. Téléchargez un nouveau client à la page suivante :
http://secondlife.com/download
@@ -448,6 +451,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="SLappAgentRequestFriend">
Demande d&apos;amitié
</string>
+ <string name="SLappAgentRemoveFriend">
+ Suppression d&apos;un ami
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Fermer (⌘W)
</string>
@@ -838,6 +844,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="multiple_textures">
Multiples
</string>
+ <string name="use_texture">
+ Utiliser la texture
+ </string>
<string name="texture_loading">
Chargement...
</string>
@@ -937,6 +946,21 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="TeleportYourAgent">
Vous téléporter
</string>
+ <string name="JoinAnExperience">
+ Rejoindre une expérience
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Supprimer les alertes lors de la gestion des listes d&apos;accès aux domaines
+ </string>
+ <string name="OverrideYourAnimations">
+ Remplacer vos animations par défaut
+ </string>
+ <string name="ScriptReturnObjects">
+ Renvoyer les objets de votre part
+ </string>
+ <string name="UnknownScriptPermission">
+ (inconnu)
+ </string>
<string name="SIM_ACCESS_PG">
Général
</string>
@@ -1968,6 +1992,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="ATTACH_HUD_BOTTOM_RIGHT">
HUD en bas à droite
</string>
+ <string name="ATTACH_NECK">
+ Cou
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Centre de l&apos;avatar
+ </string>
<string name="CursorPos">
Ligne [LINE], colonne [COLUMN]
</string>
@@ -2997,6 +3027,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="Hip Width">
Largeur hanche
</string>
+ <string name="Hover">
+ Survol
+ </string>
<string name="In">
Rentré
</string>
@@ -5081,4 +5114,7 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="logging_calls_enabled_log_empty">
Il n&apos;y a aucune conversation enregistrée. Quand quelqu&apos;un vous contacte ou quand vous contactez quelqu&apos;un, une entrée de journal s&apos;affiche ici.
</string>
+ <string name="loading_chat_logs">
+ Chargement...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
index b0fb585fa2..6f09eca90c 100755
--- a/indra/newview/skins/default/xui/it/floater_about.xml
+++ b/indra/newview/skins/default/xui/it/floater_about.xml
@@ -8,7 +8,9 @@
Generato con [COMPILER] versione [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Tu sei [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] che si trova a &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+ Tu sei a [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] che si trova a &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(coordinate globali [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
index 89f4a0cb71..399eb15802 100755
--- a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="MODIFICA PERMESSI DEL CONTENUTO">
+<floater name="floaterbulkperms" title="CAMBIA I PERMESSI DEL CONTENUTO">
<floater.string name="nothing_to_modify_text">
La selezione non contiene nessun contenuto modificabile.
</floater.string>
@@ -33,7 +33,7 @@
<button label="√ Tutti" label_selected="Tutti" name="check_all"/>
<button label="Cancella" label_selected="Nessuno" name="check_none"/>
<text name="newperms">
- Nuovi permessi del contenuto
+ Cambia i permessi del contenuto a
</text>
<text name="GroupLabel">
Gruppo:
@@ -49,6 +49,7 @@
<check_box label="Modificare" name="next_owner_modify"/>
<check_box label="Copiare" name="next_owner_copy"/>
<check_box initial_value="true" label="Trasferisci" name="next_owner_transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
- <button label="OK" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="Applica" name="apply"/>
<button label="Annulla" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_goto_line.xml b/indra/newview/skins/default/xui/it/floater_goto_line.xml
new file mode 100644
index 0000000000..29a4aabb99
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="PASSA ALLA RIGA">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ Passa alla riga
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml
index d38ec7a5fe..71f90accde 100755
--- a/indra/newview/skins/default/xui/it/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Traduci chat" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traduci chat" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml
index 7777444161..77be220a2a 100755
--- a/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Mostra:
</text>
- <check_box label="Test" name="show_world"/>
+ <check_box label="Mondo" name="show_world"/>
<check_box label="Solo elementi spostabili" name="show_world_movables_only"/>
<check_box label="Navmesh" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
index d4d6fd68d0..d4ce25e6a5 100755
--- a/indra/newview/skins/default/xui/it/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Congela" name="Freeze..."/>
<menu_item_call label="Espelli" name="Eject..."/>
<menu_item_call label="Debug delle texture" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Zoom avanti" name="Zoom In"/>
<menu_item_call label="Paga" name="Pay..."/>
<menu_item_call label="Profilo dell&apos;oggetto" name="Object Inspect"/>
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
index 0b841d591f..b28137262f 100755
--- a/indra/newview/skins/default/xui/it/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="I miei gruppi" name="Groups..."/>
<menu_item_call label="Il mio profilo" name="Profile..."/>
<menu_item_call label="Debug delle texture" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Lascia" name="Drop"/>
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
index c2edc32a49..a2b864b3e1 100755
--- a/indra/newview/skins/default/xui/it/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Congela" name="Freeze..."/>
<menu_item_call label="Espelli" name="Eject..."/>
<menu_item_call label="Debug delle texture" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Zoom avanti" name="Zoom In"/>
<menu_item_call label="Paga" name="Pay..."/>
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
index a4dafd7b5f..3666571065 100755
--- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="I miei gruppi" name="Groups..."/>
<menu_item_call label="Il mio profilo" name="Profile..."/>
<menu_item_call label="Debug delle texture" name="Debug..."/>
+ <menu_item_call label="Dump XML" name="Dump XML"/>
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_conversation.xml b/indra/newview/skins/default/xui/it/menu_conversation.xml
index 46ced93f1d..24486f2af2 100644
--- a/indra/newview/skins/default/xui/it/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/it/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Chiudi la conversazione" name="close_conversation"/>
<menu_item_call label="Apri conversazione a voce" name="open_voice_conversation"/>
<menu_item_call label="Interrompi collegamento a voce" name="disconnect_from_voice"/>
+ <menu_item_call label="Chiudi selezionato" name="close_selected_conversations"/>
<menu_item_call label="Vedi profilo" name="view_profile"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="Offri teleport" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/it/menu_land.xml b/indra/newview/skins/default/xui/it/menu_land.xml
index f510078e14..816849a7b5 100755
--- a/indra/newview/skins/default/xui/it/menu_land.xml
+++ b/indra/newview/skins/default/xui/it/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Acquista Permesso" name="Land Buy Pass"/>
<menu_item_call label="Costruisci" name="Create"/>
<menu_item_call label="Modifica terreno" name="Edit Terrain"/>
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml
index 7b060e6565..35053ec499 100755
--- a/indra/newview/skins/default/xui/it/menu_login.xml
+++ b/indra/newview/skins/default/xui/it/menu_login.xml
@@ -17,7 +17,13 @@
<menu_item_call label="Mostra i Termini del servizio (TOS)" name="TOS"/>
<menu_item_call label="Mostra messaggio critico" name="Critical"/>
<menu_item_call label="Test debug finestra contenuti Web" name="Web Content Floater Debug Test"/>
- <menu label="Imposta livello di registrazione" name="Set Logging Level"/>
+ <menu label="Imposta livello di registrazione" name="Set Logging Level">
+ <menu_item_check label="Debug" name="Debug"/>
+ <menu_item_check label="Info" name="Info"/>
+ <menu_item_check label="Attenzione" name="Warning"/>
+ <menu_item_check label="Errore" name="Error"/>
+ <menu_item_check label="Nessuno" name="None"/>
+ </menu>
<menu_item_check label="Mostra selettore griglia" name="Show Grid Picker"/>
<menu_item_call label="Mostra Console notifiche" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_mute_particle.xml b/indra/newview/skins/default/xui/it/menu_mute_particle.xml
new file mode 100644
index 0000000000..7eb4b09495
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml
index 7f41e8937f..9bcc0879d2 100755
--- a/indra/newview/skins/default/xui/it/menu_object.xml
+++ b/indra/newview/skins/default/xui/it/menu_object.xml
@@ -5,13 +5,13 @@
</menu_item_call>
<menu_item_call label="Modifica" name="Edit..."/>
<menu_item_call label="Costruisci" name="Build"/>
- <menu_item_call label="Mostra nei set collegati" name="show_in_linksets"/>
- <menu_item_call label="Mostra nei personaggi" name="show_in_characters"/>
<menu_item_call label="Apri" name="Open"/>
<menu_item_call label="Siediti qui" name="Object Sit"/>
<menu_item_call label="Alzati" name="Object Stand Up"/>
<menu_item_call label="Profilo dell&apos;oggetto" name="Object Inspect"/>
<menu_item_call label="Zoom avanti" name="Zoom In"/>
+ <menu_item_call label="Mostra nei set collegati" name="show_in_linksets"/>
+ <menu_item_call label="Mostra nei personaggi" name="show_in_characters"/>
<context_menu label="Metti" name="Put On">
<menu_item_call label="Indossa" name="Wear"/>
<menu_item_call label="Aggiungi" name="Add"/>
@@ -28,4 +28,5 @@
<menu_item_call label="Paga" name="Pay..."/>
<menu_item_call label="Acquista" name="Buy..."/>
<menu_item_call label="Elimina" name="Delete"/>
+ <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_agent.xml b/indra/newview/skins/default/xui/it/menu_url_agent.xml
index abfbab35a3..e5c20fb9e9 100755
--- a/indra/newview/skins/default/xui/it/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Vedi profilo" name="show_agent"/>
<menu_item_call label="Manda IM..." name="send_im"/>
<menu_item_call label="Aggiungi come amico..." name="add_friend"/>
+ <menu_item_call label="Togli amicizia..." name="remove_friend"/>
<menu_item_call label="Copia nome negli Appunti" name="url_copy_label"/>
<menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_objectim.xml b/indra/newview/skins/default/xui/it/menu_url_objectim.xml
index 8456d14b63..116b652172 100755
--- a/indra/newview/skins/default/xui/it/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Profilo oggetto..." name="show_object"/>
+ <menu_item_call label="Blocca..." name="block_object"/>
<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
<menu_item_call label="Teleport sul luogo dell&apos;oggetto" name="teleport_to_object"/>
<menu_item_call label="Copia nome oggetto negli Appunti" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 2b7bc71df7..52247d6c9c 100755
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/>
<menu_item_call label="Cammina / corri / vola..." name="Walk / run / fly"/>
</menu>
- <menu label="Stato" name="Status"/>
+ <menu label="Stato" name="Status">
+ <menu_item_check label="Assente" name="Away"/>
+ <menu_item_check label="Non disturbare" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="Acquista L$..." name="Buy and Sell L$"/>
<menu_item_call label="Casella venditore in uscita..." name="MerchantOutbox"/>
<menu_item_call label="Dashboard dell&apos;account..." name="Manage My Account">
@@ -32,6 +35,7 @@
<menu_item_check label="Conversazioni..." name="Conversations"/>
<menu_item_check label="Chat nei dintorni..." name="Nearby Chat"/>
<menu_item_check label="Parla" name="Speak"/>
+ <menu_item_check label="Registro conversazioni..." name="Conversation Log..."/>
<menu label="Manipolazione voce" name="VoiceMorphing">
<menu_item_check label="Nessuna manipolazione voce" name="NoVoiceMorphing"/>
<menu_item_check label="Anteprima..." name="Preview"/>
@@ -42,6 +46,7 @@
<menu_item_check label="Gruppi" name="My Groups"/>
<menu_item_check label="Persone vicine" name="Active Speakers"/>
<menu_item_call label="Blocca lista" name="Block List"/>
+ <menu_item_check label="Non disturbare" name="Do Not Disturb"/>
</menu>
<menu label="Mondo" name="World">
<menu_item_call label="Crea punto di riferimento per questo luogo" name="Create Landmark Here"/>
@@ -110,6 +115,7 @@
<menu_item_call label="Includi parte successiva" name="Include Next Part"/>
<menu_item_call label="Includi parte precedente" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Set collegati..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Ingrandisci selezione" name="Focus on Selection"/>
<menu_item_call label="Zoom sulla selezione" name="Zoom to Selection"/>
<menu label="Oggetto" name="Object">
@@ -273,6 +279,7 @@
<menu_item_check label="Spostamento fotocamera" name="Camera Offset"/>
<menu_item_check label="Veloc. di visualizzazione casuale" name="Randomize Framerate"/>
<menu_item_check label="Test frame" name="Frame Test"/>
+ <menu_item_call label="Profilo frame" name="Frame Profile"/>
</menu>
<menu label="Render Metadata" name="Render Metadata">
<menu_item_check label="Normali" name="Normals"/>
@@ -293,15 +300,15 @@
</menu>
<menu label="Rendering" name="Rendering">
<menu_item_check label="Assi" name="Axes"/>
+ <menu_item_call label="Info materiale selezionato" name="Selected Material Info"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
- <menu_item_check label="Luci e ombre" name="Advanced Lighting Model"/>
+ <menu_item_check label="Modello illuminazione avanzato" name="Advanced Lighting Model"/>
<menu_item_check label="Ombra dal sole, dalla luna e dai proiettori" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO e ombre fluide" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Maschera alfa automatica (differita)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Maschera alfa automatica (non differita)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Texture delle animazioni" name="Animation Textures"/>
<menu_item_check label="Disabilita texture" name="Disable Textures"/>
- <menu_item_check label="Atlante tessitura (sperimentale)" name="Texture Atlas"/>
<menu_item_check label="Rendering delle luci unite" name="Render Attached Lights"/>
<menu_item_check label="Rendering particelle unite" name="Render Attached Particles"/>
<menu_item_check label="Gli oggetti brillano quando sono sotto il cursore" name="Hover Glow Objects"/>
@@ -320,7 +327,6 @@
<menu_item_call label="Test browser multimedia" name="Web Browser Test"/>
<menu_item_call label="Browser contenuto Web" name="Web Content Browser"/>
<menu_item_call label="Stampa informazioni oggetto selezionato" name="Print Selected Object Info"/>
- <menu_item_call label="Statistiche memoria" name="Memory Stats"/>
<menu_item_check label="Console di debug regione" name="Region Debug Console"/>
<menu_item_check label="Debug clic" name="Debug Clicks"/>
<menu_item_check label="Debug eventi mouse" name="Debug Mouse Events"/>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 8adbebb62a..96b8c96595 100755
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -210,6 +210,14 @@ Aggiungi questo potere a &apos;[ROLE_NAME]&apos;?
Aggiungi questo potere a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Stai per espellere [AVATAR_NAME] dal gruppo.
+ <usetemplate ignoretext="Conferma l&apos;espulsione di un partecipante dal gruppo" name="okcancelignore" notext="Annulla" yestext="Espelli"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Stai per espellere [COUNT] membri dal gruppo.
+ <usetemplate ignoretext="Conferma l&apos;espulsione di vari partecipanti dal gruppo" name="okcancelignore" notext="Annulla" yestext="Espelli"/>
+ </notification>
<notification name="AttachmentDrop">
Stai per abbandonare il tuo accessorio.
Vuoi continuare?
@@ -1110,7 +1118,7 @@ su TUTTI I TERRENI di questa sim?
Introduci un prezzo più alto.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- Almeno uno degli oggetti selezionati è collegato tramite link ad altri oggetti. Se elimini l&apos;oggetto, i relativi link non funzioneranno più. Pertanto si consiglia vivamente di eliminare prima i link.
+ Almeno uno degli oggetti è collegato tramite link ad altri oggetti. Se elimini l&apos;oggetto, i relativi link non funzioneranno più. Si consiglia vivamente di eliminare prima i link.
Sei sicuro di volere eliminare gli oggetti?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
@@ -1128,9 +1136,9 @@ Confermi di voler cancellare questi elementi?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoOwn">
- Non possiedi neanche uno degli oggetti selezionati.
+ Non possiedi almeno uno degli oggetti selezionati.
-Confermi di voler cancellare questi elementi?
+Sei sicuro di volere eliminare gli oggetti?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
@@ -1142,24 +1150,24 @@ Confermi di voler cancellare questi elementi?
</notification>
<notification name="ConfirmObjectDeleteLockNoOwn">
Almeno un oggetto è bloccato.
-Non possiedi neanche un oggetto.
+Non possiedi almeno uno degli oggetti.
-Confermi di voler cancellare questi elementi?
+Sei sicuro di volere eliminare gli oggetti?
<usetemplate name="okcancelbuttons" notext="Cancella" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
- Almeno un oggetto non è copiabile.
-Non possiedi neanche un oggetto.
+ Almeno un oggetto non può essere copiato.
+Non possiedi almeno uno degli oggetti.
-Confermi di voler cancellare questi elementi?
+Sei sicuro di volere eliminare gli oggetti?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
Almeno un oggetto è bloccato.
-Almeno un oggetto è non copiabile.
-Non possiedi neanche un oggetto.
+Almeno un oggetto non può essere copiato.
+Non possiedi almeno uno degli oggetti.
-Confermi di voler cancellare questi elementi?
+Sei sicuro di volere eliminare gli oggetti?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
@@ -1481,13 +1489,43 @@ Versione [VERSION] [[RELEASE_NOTES_FULL_URL] Informazioni su questo aggiornament
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
È stato scaricato un aggiornamento obbligatorio del software.
-Versione [VERSION]
+Versione [VERSION] [[INFO_URL] Informazioni su questo aggiornamento]
Per installare l&apos;aggiornamento è necessario riavviare [APP_NAME].
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
Per installare l&apos;aggiornamento è necessario riavviare [APP_NAME].
+[[INFO_URL] Informazioni su questo aggiornamento]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ È stato scaricato un aggiornamento dell&apos;installazione di [APP_NAME].
+Versione [VERSION]
+Questo viewer sperimentale è stato sostituito con un viewer [NEW_CHANNEL];
+vedi [[INFO_URL] per informazioni su queesto aggiornamento]
+ <usetemplate name="okcancelbuttons" notext="Più tardi..." yestext="Installa ora e riavvia [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ È stato scaricato un aggiornamento dell&apos;installazione di [APP_NAME].
+Versione [VERSION]
+Questo viewer sperimentale è stato sostituito con un viewer [NEW_CHANNEL];
+vedi [[INFO_URL] Informazioni su questo aggiornamento]
+ <usetemplate name="okcancelbuttons" notext="Più tardi..." yestext="Installa ora e riavvia [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ È stato scaricato un aggiornamento obbligatorio del software.
+Versione [VERSION]
+Questo viewer sperimentale è stato sostituito con un viewer [NEW_CHANNEL];
+vedi [[INFO_URL] Informazioni su questo aggiornamento]
+
+Per installare l&apos;aggiornamento è necessario riavviare [APP_NAME].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ Per installare l&apos;aggiornamento è necessario riavviare [APP_NAME].
+Questo viewer sperimentale è stato sostituito con un viewer [NEW_CHANNEL];
+vedi [[INFO_URL] Informazioni su questo aggiornamento]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1538,6 +1576,10 @@ Per installare l&apos;aggiornamento è necessario riavviare [APP_NAME].
Lasciare il gruppo?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ Impossibile abbandonare il gruppo. Non puoi abbandonare il gruppo perché sei l&apos;ultimo proprietario del gruppo. Devi prima assegnare a un altro membro il ruolo di proprietario.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Vuoi veramente espellere tutti i residenti dalla griglia?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/>
@@ -2401,9 +2443,7 @@ Seleziona solo un oggetto.
scegliere Teleport.)
</notification>
<notification name="TeleportToPerson">
- Per contattare Residenti come &apos;[NAME]&apos;, clicca sul pulsante &quot;Persone&quot;, seleziona un Residente nel pannello che viene aperto, quindi clicca su &apos;IM&apos; in
- basso nel pannello.
- (Puoi anche fare doppio clic sul nome nell&apos;elenco oppure fare clic con il pulsante destro del mouse e selezionare &apos;IM&apos;).
+ Per avviare una conversazione privata con un&apos;altra persona, fai clic con il tasto destro sull&apos;avatar e seleziona &apos;IM&apos; dal menu.
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Non è possibile selezionare il terreno attraverso i confini del server.
@@ -2777,6 +2817,15 @@ Non consentire l&apos;accesso se non comprendi perfettamente il motivo per cui d
<button name="Deny" text="Nega"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ L&apos;autorizzazione per script runtime richiesta da &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, un oggetto di proprietà di &apos;[NAME]&apos;, non è stata riconosciuta nel viewer e non può essere concessa.
+
+Per concedere questa autorizzazione è necessario che il viewer venga aggiornato alla versione più recente da [DOWNLOADURL].
+ <form name="form">
+ <button name="Deny" text="Ok"/>
+ <button name="Mute" text="Blocca"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; di [NAME]
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml
index e1468db76e..2f40d4bdc4 100755
--- a/indra/newview/skins/default/xui/it/panel_people.xml
+++ b/indra/newview/skins/default/xui/it/panel_people.xml
@@ -49,6 +49,9 @@ Stai cercando persone da frequentare? Prova la [secondlife:///app/worldmap Mappa
<menu_button name="plus_btn" tool_tip="Aderisci al gruppo/Crea nuovo gruppo"/>
<dnd_button name="minus_btn" tool_tip="Lascia il gruppo selezionato"/>
</panel>
+ <text name="groupcount">
+ Fai parte di [COUNT] gruppi e puoi iscriverti a [REMAINING] altri.
+ </text>
</panel>
<panel label="RECENTE" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
index c2ac6e97a9..09d7c96370 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Text Chat" name="chat">
- <panel>
- <check_box initial_value="true" label="Simula la battitura tasti quando scrivi" name="play_typing_animation"/>
+ <panel name="general_chat_settings">
+ <check_box initial_value="true" label="Simula la battitura tasti quando sei in chat" name="play_typing_animation"/>
<check_box label="Quando sono OFF-LINE, spediscimi gli IM in una e-mail" name="send_im_to_email"/>
<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>
<text name="font_size">
- Dimensioni caratteri:
+ Dimensioni carattere:
</text>
<combo_box name="chat_font_size">
<item label="Piccolo" name="Small" value="0"/>
@@ -14,10 +14,7 @@
</combo_box>
<check_box label="Chat a vignetta" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- Notifiche
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
IM degli amici:
</text>
@@ -25,8 +22,9 @@
<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Nessuno" name="None" value="none"/>
+ <item label="Nessuna azione" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Riproduci suono" name="play_sound_friend_im"/>
<text name="non_friend_ims">
IM non di amici:
</text>
@@ -34,8 +32,9 @@
<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Nessuno" name="None" value="none"/>
+ <item label="Nessuna azione" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Riproduci suono" name="play_sound_non_friend_im"/>
<text name="conference_ims">
IM conferenza:
</text>
@@ -43,8 +42,9 @@
<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Nessuno" name="None" value="none"/>
+ <item label="Nessuna azione" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Riproduci suono" name="play_sound_conference_im"/>
<text name="group_chat">
Chat di gruppo:
</text>
@@ -52,8 +52,9 @@
<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
- <item label="Nessuno" name="None" value="none"/>
+ <item label="Nessuna azione" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Riproduci suono" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
Chat nei dintorni:
</text>
@@ -61,13 +62,24 @@
<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
<item label="Pulsante barra strumenti Flash" name="FlashToolBarButton" value="flash"/>
- <item label="Nessuno" name="None" value="none"/>
+ <item label="Nessuna azione" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Riproduci suono" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ IM di oggetti:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
+ <item label="Pulsante barra strumenti Flash" name="FlashToolBarButton" value="flash"/>
+ <item label="Nessuna azione" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Riproduci suono" name="play_sound_object_im"/>
<text name="notifications_alert">
Per interrompere temporaneamente le notifiche, usa Comunica &gt; Non disturbare.
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Riproduci suono:
</text>
@@ -76,7 +88,7 @@
<check_box label="Offerta di Teleport" name="teleport_offer"/>
<check_box label="Offerta inventario" name="inventory_offer"/>
</panel>
- <panel>
+ <panel name="log_settings">
<button label="Cancella registro..." name="clear_log"/>
<button label="Cancella trascrizioni..." name="delete_transcripts"/>
<button label="Sfoglia..." label_selected="Sfoglia" name="log_path_button"/>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
index 1f2b97af45..e7483b1ba5 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="true" label="Luci locali" name="LocalLights"/>
<check_box initial_value="true" label="Effetti grafici base" name="BasicShaders" tool_tip="Disabilitare questa opzione può evitare che qualche scheda grafica vada in crash."/>
<check_box initial_value="true" label="Effetti grafici atmosferici" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="true" label="Luci e ombre" name="UseLightShaders"/>
+ <check_box initial_value="true" label="Modello illuminazione avanzato" name="UseLightShaders"/>
<check_box initial_value="true" label="Occlusione ambientale" name="UseSSAO"/>
<check_box initial_value="true" label="Profondità di campo" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
index 0189d47f45..4c190197b4 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="Installa automaticamente" name="Install_automatically"/>
<combo_box.item label="Scarica e installa manualmente gli aggiornamenti" name="Install_manual"/>
</combo_box>
+ <check_box label="Disponibile agli aggiornamenti con versioni non rilasciate" name="update_willing_to_test"/>
<text name="Proxy Settings:">
Impostazioni proxy:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml
index d7ee8230b3..feee8b1927 100755
--- a/indra/newview/skins/default/xui/it/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/it/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Seleziona tutto" name="Select All"/>
<menu_item_call label="Deseleziona" name="Deselect"/>
<menu_item_call label="Cerca / Sostituisci..." name="Search / Replace..."/>
+ <menu_item_call label="Passa alla riga..." name="Go to line..."/>
</menu>
<menu label="Guida" name="Help">
<menu_item_call label="Aiuto..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/it/panel_tools_texture.xml b/indra/newview/skins/default/xui/it/panel_tools_texture.xml
new file mode 100644
index 0000000000..4e515563ac
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Texture" name="Texture">
+ <panel.string name="string repeats per meter">
+ Ripetizioni al metro
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Ripetizioni per faccia
+ </panel.string>
+ <text name="color label">
+ Colore
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Clicca per aprire il selettore dei colori"/>
+ <text name="color trans">
+ Trasparenza %
+ </text>
+ <text name="glow label">
+ Bagliore
+ </text>
+ <check_box label="Luminosità massima" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Materiali" name="Materials"/>
+ <combo_box.item label="Multimedia" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="Texture (diffusa)" name="Texture (diffuse)"/>
+ <combo_box.item label="Irregolarità (normale)" name="Bumpiness (normal)"/>
+ <combo_box.item label="Lucentezza (speculare)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="Texture" name="texture control" tool_tip="Clicca per scegliere una fotografia"/>
+ <text name="label alphamode">
+ Modalità Alfa
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Nessuno" name="None"/>
+ <combo_box.item label="Miscelazione Alfa" name="Alpha blending"/>
+ <combo_box.item label="Mascheratura Alfa" name="Alpha masking"/>
+ <combo_box.item label="Mascheratura emissiva" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ Limite mascheratura
+ </text>
+ <texture_picker label="Texture" name="bumpytexture control" tool_tip="Clicca per scegliere una fotografia"/>
+ <text name="label bumpiness">
+ Irregolarità
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Nessuno" name="None"/>
+ <combo_box.item label="Luminosità" name="Brightness"/>
+ <combo_box.item label="Oscurità" name="Darkness"/>
+ <combo_box.item label="venatura" name="woodgrain"/>
+ <combo_box.item label="corteccia" name="bark"/>
+ <combo_box.item label="mattoni" name="bricks"/>
+ <combo_box.item label="scacchiera" name="checker"/>
+ <combo_box.item label="cemento" name="concrete"/>
+ <combo_box.item label="incrostatura" name="crustytile"/>
+ <combo_box.item label="gemma" name="cutstone"/>
+ <combo_box.item label="dischi" name="discs"/>
+ <combo_box.item label="ciottoli" name="gravel"/>
+ <combo_box.item label="batteri" name="petridish"/>
+ <combo_box.item label="rivestimento" name="siding"/>
+ <combo_box.item label="lastricato" name="stonetile"/>
+ <combo_box.item label="stucco" name="stucco"/>
+ <combo_box.item label="suzione" name="suction"/>
+ <combo_box.item label="trama" name="weave"/>
+ </combo_box>
+ <texture_picker label="Texture" name="shinytexture control" tool_tip="Clicca per scegliere una fotografia"/>
+ <text name="label shininess">
+ Lucentezza
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Nessuna" name="None"/>
+ <combo_box.item label="Bassa" name="Low"/>
+ <combo_box.item label="Media" name="Medium"/>
+ <combo_box.item label="Alta" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ Patinatura
+ </text>
+ <text name="label environment">
+ Ambiente
+ </text>
+ <text name="label shinycolor">
+ Colore
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Clicca per aprire il selettore dei colori"/>
+ <text name="media_info">
+ L&apos;URL dell&apos;eventuale elemento multimediale selezionato va qui
+ </text>
+ <button label="Scegli..." name="add_media" tool_tip="Aggiungi elemento multimediale"/>
+ <button label="Rimuovi" name="delete_media" tool_tip="Cancella questa texture dell&apos;elemento multimediale"/>
+ <button label="Alllinea" label_selected="Allinea elmento multimediale" name="button align" tool_tip="Allinea texture dell&apos;elemento multimediale (il caricamento deve prima essere completato)"/>
+ <text name="tex gen">
+ Mappatura
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Predefinita" name="Default"/>
+ <combo_box.item label="Planare" name="Planar"/>
+ </combo_box>
+ <spinner label="Scala orizzontale" name="TexScaleU"/>
+ <spinner label="Scala veritcale" name="TexScaleV"/>
+ <spinner label="Ripetizioni al metro" name="rptctrl"/>
+ <spinner label="Gradi di rotazione" name="TexRot"/>
+ <spinner label="Spostamento orizzontale" name="TexOffsetU"/>
+ <spinner label="Spostamento verticale" name="TexOffsetV"/>
+ <spinner label="Scala orizzontale" name="bumpyScaleU"/>
+ <spinner label="Scala veritcale" name="bumpyScaleV"/>
+ <spinner label="Gradi di rotazione" name="bumpyRot"/>
+ <spinner label="Spostamento orizzontale" name="bumpyOffsetU"/>
+ <spinner label="Spostamento verticale" name="bumpyOffsetV"/>
+ <spinner label="Scala orizzontale" name="shinyScaleU"/>
+ <spinner label="Scala veritcale" name="shinyScaleV"/>
+ <spinner label="Gradi di rotazione" name="shinyRot"/>
+ <spinner label="Spostamento orizzontale" name="shinyOffsetU"/>
+ <spinner label="Spostamento verticale" name="shinyOffsetV"/>
+ <check_box initial_value="falso" label="Allinea facce planari" name="checkbox planar align" tool_tip="Allinea le texture su tutte le facce selezionate con l’ultima faccia selezionata. È richiesta la mappatura planare delle texture."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml
index 300e6cf721..3ccb674ed0 100755
--- a/indra/newview/skins/default/xui/it/role_actions.xml
+++ b/indra/newview/skins/default/xui/it/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="Queste abilità permettono di cambiare il nome del lotto, le impostazioni di pubblicazione, la visibilità negli elenchi e il punto di arrivo, nonché opzioni di indirizzamento del Teleport." name="Parcel Identity">
<action description="Premi Mostra luogo nella ricerca e seleziona una categoria" longdescription="Premi Mostra luogo nella ricerca e seleziona una categoria di lotto in Informazioni sul terreno &gt; scheda Opzioni." name="land find places" value="17"/>
- <action description="Cambia il nome del lotto, la descrizione e le impostazioni di Mostra luogo nella ricerca" longdescription="Cambia il nome del lotto, la descrizione e le impostazioni di Mostra luogo nella ricerca. Ciò viene fatto in Informazioni sul terreno &gt; scheda Opzioni." name="land change identity" value="18"/>
+ <action description="Cambia il nome, la descrizione e le impostazioni &apos;Contenuto Moderato&apos; per il lotto" longdescription="Cambia il nome, la descrizione e le impostazioni &apos;Contenuto Moderato&apos; per il lotto. Ciò viene fatto in Informazioni sul terreno &gt; scheda Opzioni." name="land change identity" value="18"/>
<action description="Impostare il punto di arrivo e l&apos;indirizzamento del Teleport" longdescription="In un lotto di proprietà di un gruppo, i membri con questo ruolo e abilità possono impostare un punto di arrivo per i teleport entranti e impostare anche l&apos;indirizzamento del teleport per ulteriore precisione. Viene fatto in Informazioni sul terreno &gt; Opzioni." name="land set landing point" value="19"/>
</action_set>
<action_set description="Queste abilità hanno poteri relativi alle opzioni dei lotti, come la creazione di oggetti, la modifica del terreno e le impostazioni per la musica e gli elementi multimediali." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index f95318542b..160df911d3 100755
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -136,6 +136,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download.
+ </string>
<string name="LoginFailedViewerNotPermitted">
Il viewer utilizzato non è più in grado di accedere a Second Life. Visita la parina seguente per scaricare un nuovo viewer:
http://secondlife.com/download.
@@ -445,6 +448,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="SLappAgentRequestFriend">
Richiesta di amicizia
</string>
+ <string name="SLappAgentRemoveFriend">
+ Rimozione amico
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Chiudi (⌘W)
</string>
@@ -832,6 +838,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="multiple_textures">
Multiple
</string>
+ <string name="use_texture">
+ Usa texture
+ </string>
<string name="texture_loading">
Caricamento in corso...
</string>
@@ -928,6 +937,21 @@ Prova ad accedere nuovamente tra un minuto.
<string name="TeleportYourAgent">
Teleportarti
</string>
+ <string name="JoinAnExperience">
+ Partecipa a un&apos;esperienza
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Omette gli avvisi durante la gestione degli elenchi di accesso alle proprietà immobiliari
+ </string>
+ <string name="OverrideYourAnimations">
+ Sostituisce le animazioni predefinite
+ </string>
+ <string name="ScriptReturnObjects">
+ Restituisce oggetti per conto tuo
+ </string>
+ <string name="UnknownScriptPermission">
+ (sconosciuto)!
+ </string>
<string name="SIM_ACCESS_PG">
Generale
</string>
@@ -1953,6 +1977,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="ATTACH_HUD_BOTTOM_RIGHT">
HUD basso a destra
</string>
+ <string name="ATTACH_NECK">
+ Collo
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Centro avatar
+ </string>
<string name="CursorPos">
Riga [LINE], Colonna [COLUMN]
</string>
@@ -2940,6 +2970,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Hip Width">
Larghezza bacino
</string>
+ <string name="Hover">
+ Muovi sopra
+ </string>
<string name="In">
Dentro
</string>
@@ -4994,4 +5027,7 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="logging_calls_enabled_log_empty">
Nessuna conversazione in registro. Dopo che hai contattato qualcuno o se qualcuno ti contatta, una voce del registro verrà mostrata qui.
</string>
+ <string name="loading_chat_logs">
+ Caricamento in corso...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index eae52c98ec..63a4e69c10 100755
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -8,7 +8,9 @@
コンパイラー [COMPILER] [COMPILER_VERSION] ãƒãƒ¼ã‚¸ãƒ§ãƒ³
</floater.string>
<floater.string name="AboutPosition">
- ã‚ãªãŸã®ç¾åœ¨åœ°ã¯ã€[POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] ã® [REGION] ã§ã™ã€‚ä½ç½®ã¯ &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ã§ã™ã€‚([HOSTIP])
+ ã‚ãªãŸã®ç¾åœ¨åœ°ã¯ã€[POSITION_LOCAL_0,number,1]ã€[POSITION_LOCAL_1,number,1]ã€[POSITION_LOCAL_2,number,1] ã® [REGION] ã§ã™ã€‚ä½ç½®ã¯ &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ã§ã™ã€‚([HOSTIP])
+SLURL:&lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(グローãƒãƒ«åº§æ¨™ [POSITION_0,number,1]ã€[POSITION_1,number,1]ã€[POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
index d8d0164618..1b5a745cc4 100755
--- a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="中身ã®æ¨©é™ã®ç·¨é›†">
+<floater name="floaterbulkperms" title="コンテンツ権é™ã‚’調整">
<floater.string name="nothing_to_modify_text">
é¸æŠžã—ãŸä¸­ã«ç·¨é›†ã§ããªã„ã‚‚ã®ãŒå«ã¾ã‚Œã¦ã„ã¾ã™
</floater.string>
@@ -33,7 +33,7 @@
<button label="ã™ã¹ã¦ã« √" label_selected="å…¨ã¦" name="check_all"/>
<button label="クリア" label_selected="ãªã—" name="check_none"/>
<text name="newperms">
- æ–°ã—ã„中身ã®æ¨©é™
+ コンテンツ権é™ã‚’以下ã«èª¿æ•´
</text>
<text name="GroupLabel">
グループ:
@@ -49,6 +49,7 @@
<check_box label="修正" name="next_owner_modify"/>
<check_box label="コピー" name="next_owner_copy"/>
<check_box initial_value="true" label="å†è²©ãƒ»ãƒ—レゼント" name="next_owner_transfer" tool_tip="次ã®æ‰€æœ‰è€…ã¯ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"/>
- <button label="OK" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="é©ç”¨" name="apply"/>
<button label="キャンセル" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_goto_line.xml b/indra/newview/skins/default/xui/ja/floater_goto_line.xml
new file mode 100644
index 0000000000..5f2717ace5
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="è¡Œã«ç§»å‹•">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ è¡Œã«ç§»å‹•
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml
index a44c843df7..7ed46f7f01 100755
--- a/indra/newview/skins/default/xui/ja/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="ãƒãƒ£ãƒƒãƒˆã‚’翻訳" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="ãƒãƒ£ãƒƒãƒˆã‚’翻訳" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
index 9733c61918..ec107f3e6b 100755
--- a/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
表示:
</text>
- <check_box label="テスト" name="show_world"/>
+ <check_box label="世界" name="show_world"/>
<check_box label="å¯å‹•ç‰©ã®ã¿" name="show_world_movables_only"/>
<check_box label="ナビメッシュ" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
index 5adf0b3745..930af10692 100755
--- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="フリーズ" name="Freeze..."/>
<menu_item_call label="追放" name="Eject..."/>
<menu_item_call label="テクスãƒãƒ£ã®ãƒ‡ãƒãƒƒã‚°" name="Debug..."/>
+ <menu_item_call label="ダンプ XML" name="Dump XML"/>
<menu_item_call label="ズームイン" name="Zoom In"/>
<menu_item_call label="支払ã†" name="Pay..."/>
<menu_item_call label="オブジェクトã®ãƒ—ロフィール" name="Object Inspect"/>
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
index 6036e1075e..d87ef8e2a0 100755
--- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="グループ" name="Groups..."/>
<menu_item_call label="プロフィール" name="Profile..."/>
<menu_item_call label="テクスãƒãƒ£ã®ãƒ‡ãƒãƒƒã‚°" name="Debug..."/>
+ <menu_item_call label="ダンプ XML" name="Dump XML"/>
<menu_item_call label="下ã«è½ã¨ã™" name="Drop"/>
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
index 54dd96f5ef..f9cadc36ac 100755
--- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="フリーズ" name="Freeze..."/>
<menu_item_call label="追放" name="Eject..."/>
<menu_item_call label="テクスãƒãƒ£ã®ãƒ‡ãƒãƒƒã‚°" name="Debug..."/>
+ <menu_item_call label="ダンプ XML" name="Dump XML"/>
<menu_item_call label="ズームイン" name="Zoom In"/>
<menu_item_call label="支払ã†" name="Pay..."/>
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
index 4709522665..eb8e98059a 100755
--- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="グループ" name="Groups..."/>
<menu_item_call label="プロフィール" name="Profile..."/>
<menu_item_call label="テクスãƒãƒ£ã®ãƒ‡ãƒãƒƒã‚°" name="Debug..."/>
+ <menu_item_call label="ダンプ XML" name="Dump XML"/>
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml
index c7df20d252..66940471da 100644
--- a/indra/newview/skins/default/xui/ja/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="会話を終ãˆã‚‹" name="close_conversation"/>
<menu_item_call label="ボイスãƒãƒ£ãƒƒãƒˆã‚’始ã‚ã‚‹" name="open_voice_conversation"/>
<menu_item_call label="ボイスãƒãƒ£ãƒƒãƒˆã‚’切断ã™ã‚‹" name="disconnect_from_voice"/>
+ <menu_item_call label="é¸æŠžã—ãŸé …目を閉ã˜ã‚‹" name="close_selected_conversations"/>
<menu_item_call label="プロフィールを表示" name="view_profile"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="テレãƒãƒ¼ãƒˆã‚’é€ã‚‹" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_land.xml b/indra/newview/skins/default/xui/ja/menu_land.xml
index 89c122f14f..3754bd7fa4 100755
--- a/indra/newview/skins/default/xui/ja/menu_land.xml
+++ b/indra/newview/skins/default/xui/ja/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="入場許å¯ã‚’購入" name="Land Buy Pass"/>
<menu_item_call label="制作" name="Create"/>
<menu_item_call label="地形を編集" name="Edit Terrain"/>
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml
index ab6d9e3546..3918732fa8 100755
--- a/indra/newview/skins/default/xui/ja/menu_login.xml
+++ b/indra/newview/skins/default/xui/ja/menu_login.xml
@@ -18,7 +18,13 @@
<menu_item_call label="利用è¦ç´„を表示" name="TOS"/>
<menu_item_call label="クリティカルメッセージを表示" name="Critical"/>
<menu_item_call label="Web コンテンツフローターã®ãƒ‡ãƒãƒƒã‚°ãƒ†ã‚¹ãƒˆ" name="Web Content Floater Debug Test"/>
- <menu label="ログレベルを設定" name="Set Logging Level"/>
+ <menu label="ログレベルを設定" name="Set Logging Level">
+ <menu_item_check label="デãƒãƒƒã‚°" name="Debug"/>
+ <menu_item_check label="情報" name="Info"/>
+ <menu_item_check label="警告" name="Warning"/>
+ <menu_item_check label="エラー" name="Error"/>
+ <menu_item_check label="ãªã—" name="None"/>
+ </menu>
<menu_item_check label="グリッドピッカーを表示ã™ã‚‹" name="Show Grid Picker"/>
<menu_item_call label="通知コンソールを表示ã™ã‚‹" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml
new file mode 100644
index 0000000000..8dab025309
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml
index 01436ad12b..39c32bc41e 100755
--- a/indra/newview/skins/default/xui/ja/menu_object.xml
+++ b/indra/newview/skins/default/xui/ja/menu_object.xml
@@ -5,13 +5,13 @@
</menu_item_call>
<menu_item_call label="編集" name="Edit..."/>
<menu_item_call label="制作" name="Build"/>
- <menu_item_call label="リンクセットã§è¡¨ç¤º" name="show_in_linksets"/>
- <menu_item_call label="キャラクターã§è¡¨ç¤º" name="show_in_characters"/>
<menu_item_call label="é–‹ã" name="Open"/>
<menu_item_call label="ã“ã“ã«åº§ã‚‹" name="Object Sit"/>
<menu_item_call label="ç«‹ã¡ä¸ŠãŒã‚‹" name="Object Stand Up"/>
<menu_item_call label="オブジェクトã®ãƒ—ロフィール" name="Object Inspect"/>
<menu_item_call label="ズームイン" name="Zoom In"/>
+ <menu_item_call label="リンクセットã§è¡¨ç¤º" name="show_in_linksets"/>
+ <menu_item_call label="キャラクターã§è¡¨ç¤º" name="show_in_characters"/>
<context_menu label="装ç€" name="Put On">
<menu_item_call label="装ç€" name="Wear"/>
<menu_item_call label="追加" name="Add"/>
@@ -28,4 +28,5 @@
<menu_item_call label="支払ã†" name="Pay..."/>
<menu_item_call label="è²·ã†" name="Buy..."/>
<menu_item_call label="削除" name="Delete"/>
+ <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
index 72722db7cc..639602ce3c 100755
--- a/indra/newview/skins/default/xui/ja/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="プロフィールを表示" name="show_agent"/>
<menu_item_call label="IM ã‚’é€ä¿¡..." name="send_im"/>
<menu_item_call label="フレンドを追加..." name="add_friend"/>
+ <menu_item_call label="フレンドを削除..." name="remove_friend"/>
<menu_item_call label="åå‰ã‚’クリップボードã«ã‚³ãƒ”ー" name="url_copy_label"/>
<menu_item_call label="SLurl をクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
index 9e340e3239..a02ca8415d 100755
--- a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="オブジェクトã®ãƒ—ロフィール..." name="show_object"/>
+ <menu_item_call label="ブロック..." name="block_object"/>
<menu_item_call label="地図ã«è¡¨ç¤º" name="show_on_map"/>
<menu_item_call label="オブジェクトã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="teleport_to_object"/>
<menu_item_call label="オブジェクトåをクリップボードã«ã‚³ãƒ”ー" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 89f58d3bac..b1ec62115c 100755
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="ç§ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åœæ­¢ã™ã‚‹" name="Stop Animating My Avatar"/>
<menu_item_call label="æ­©è¡Œï¼èµ°è¡Œï¼é£›è¡Œ..." name="Walk / run / fly"/>
</menu>
- <menu label="ログイン" name="Status"/>
+ <menu label="ログイン" name="Status">
+ <menu_item_check label="一時退席中" name="Away"/>
+ <menu_item_check label="ç€ä¿¡æ‹’å¦" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="L$ ã®è³¼å…¥..." name="Buy and Sell L$"/>
<menu_item_call label="マーãƒãƒ£ãƒ³ãƒˆã‚¢ã‚¦ãƒˆãƒœãƒƒã‚¯ã‚¹..." name="MerchantOutbox"/>
<menu_item_call label="マイアカウント..." name="Manage My Account">
@@ -32,6 +35,7 @@
<menu_item_check label="会話..." name="Conversations"/>
<menu_item_check label="è¿‘ãã®ãƒãƒ£ãƒƒãƒˆ..." name="Nearby Chat"/>
<menu_item_check label="話ã™" name="Speak"/>
+ <menu_item_check label="会話ログ..." name="Conversation Log..."/>
<menu label="ボイスモーフィング" name="VoiceMorphing">
<menu_item_check label="ボイスモーフィングãªã—" name="NoVoiceMorphing"/>
<menu_item_check label="プレビュー..." name="Preview"/>
@@ -42,6 +46,7 @@
<menu_item_check label="グループ" name="My Groups"/>
<menu_item_check label="è¿‘ãã«ã„る人" name="Active Speakers"/>
<menu_item_call label="リストをブロック" name="Block List"/>
+ <menu_item_check label="ç€ä¿¡æ‹’å¦" name="Do Not Disturb"/>
</menu>
<menu label="世界" name="World">
<menu_item_call label="ç¾åœ¨åœ°ã‚’ランドマーク" name="Create Landmark Here"/>
@@ -110,6 +115,7 @@
<menu_item_call label="次ã®éƒ¨åˆ†ã‚’å«ã‚ã‚‹" name="Include Next Part"/>
<menu_item_call label="å‰å›žã®éƒ¨åˆ†ã‚’å«ã‚ã‚‹" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="リンクセット..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="é¸æŠžã—ãŸã‚‚ã®ã«ç„¦ç‚¹ã‚’åˆã‚ã›ã‚‹" name="Focus on Selection"/>
<menu_item_call label="é¸æŠžã—ãŸã‚‚ã®ã‚’ズームã™ã‚‹" name="Zoom to Selection"/>
<menu label="オブジェクト" name="Object">
@@ -279,6 +285,7 @@
<menu_item_check label="フレームレートをランダム化" name="Randomize Framerate"/>
<menu_item_check label="定期的ã«é…ã„フレームを挿入ã™ã‚‹" name="Periodic Slow Frame"/>
<menu_item_check label="フレームテスト" name="Frame Test"/>
+ <menu_item_call label="フレームプロフィール" name="Frame Profile"/>
</menu>
<menu label="メタデータã®ãƒ¬ãƒ³ãƒ€ãƒ¼" name="Render Metadata">
<menu_item_check label="ãƒã‚¦ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒœãƒƒã‚¯ã‚¹" name="Bounding Boxes"/>
@@ -313,9 +320,10 @@
<menu_item_check label="軸" name="Axes"/>
<menu_item_check label="接線基底" name="Tangent Basis"/>
<menu_item_call label="é¸æŠžã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£æƒ…報基底" name="Selected Texture Info Basis"/>
+ <menu_item_call label="é¸æŠžã—ãŸãƒžãƒ†ãƒªã‚¢ãƒ«æƒ…å ±" name="Selected Material Info"/>
<menu_item_check label="ワイヤーフレーム" name="Wireframe"/>
<menu_item_check label="オブジェクト間オクルージョン" name="Object-Object Occlusion"/>
- <menu_item_check label="å…‰ã¨å½±" name="Advanced Lighting Model"/>
+ <menu_item_check label="高度ãªãƒ©ã‚¤ãƒ†ã‚£ãƒ³ã‚°ãƒ¢ãƒ‡ãƒ«" name="Advanced Lighting Model"/>
<menu_item_check label="太陽・月・プロジェクタã‹ã‚‰ã®å½±" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO ã¨å½±ã®å¹³æ»‘化" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="GL デãƒãƒƒã‚°" name="Debug GL"/>
@@ -325,7 +333,6 @@
<menu_item_check label="アニメーションテクスãƒãƒ£" name="Animation Textures"/>
<menu_item_check label="テクスãƒãƒ£ã‚’無効ã«ã™ã‚‹" name="Disable Textures"/>
<menu_item_check label="フル解åƒåº¦ãƒ†ã‚¯ã‚¹ãƒãƒ£" name="Rull Res Textures"/>
- <menu_item_check label="テクスãƒãƒ£ã‚¢ãƒˆãƒ©ã‚¹ï¼ˆè©¦é¨“段階)" name="Texture Atlas"/>
<menu_item_check label="装ç€ã•ã‚ŒãŸå…‰æºã‚’æç”»ã™ã‚‹" name="Render Attached Lights"/>
<menu_item_check label="å–り付ã‘られãŸãƒ‘ーティクルをæç”»ã™ã‚‹" name="Render Attached Particles"/>
<menu_item_check label="マウスオーãƒãƒ¼ã§å¼·èª¿è¡¨ç¤ºã™ã‚‹" name="Hover Glow Objects"/>
@@ -361,7 +368,6 @@
<menu_item_call label="フォーカスホールダーをダンプ" name="Dump Focus Holder"/>
<menu_item_call label="é¸æŠžã—ãŸã‚ªãƒ–ジェクト情報をプリント" name="Print Selected Object Info"/>
<menu_item_call label="エージェント情報をプリント" name="Print Agent Info"/>
- <menu_item_call label="メモリ使用状æ³" name="Memory Stats"/>
<menu_item_check label="地域デãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«" name="Region Debug Console"/>
<menu_item_check label="SelectMgr ã®ãƒ‡ãƒãƒƒã‚°" name="Debug SelectMgr"/>
<menu_item_check label="ダブルクリック" name="Debug Clicks"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 356506f191..f1c916bf53 100755
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -150,7 +150,7 @@
<usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ä¿å­˜ã—ãªã„" yestext="ã™ã¹ã¦ä¿å­˜"/>
</notification>
<notification name="FriendsAndGroupsOnly">
- フレンド以外ã‹ã‚‰ã®ã‚³ãƒ¼ãƒ«ã‚„インスタントメッセージを無視ã™ã‚‹è¨­å®šã«ã—ãŸã“ã¨ã‚’ã€ç›¸æ‰‹ã«çŸ¥ã‚‰ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。
+ フレンド以外ã®äººã‹ã‚‰ã®ã‚³ãƒ¼ãƒ«ã‚„ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã™ã‚‹è¨­å®šã«ã—ãŸã“ã¨ã‚’ã€ç›¸æ‰‹ã«çŸ¥ã‚‰ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="FavoritesOnLogin">
@@ -221,6 +221,14 @@
ã“ã®èƒ½åŠ›ã‚’ [ROLE_NAME] ã«å‰²ã‚Šå½“ã¦ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ [AVATAR_NAME] をグループã‹ã‚‰è¿½æ”¾ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+ <usetemplate ignoretext="グループã‹ã‚‰ã®å‚加者ã®è¿½æ”¾ã‚’確èªã—ã¾ã™" name="okcancelignore" notext="å–り消ã—" yestext="追放"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ [COUNT] åã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’グループã‹ã‚‰è¿½æ”¾ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+ <usetemplate ignoretext="グループã‹ã‚‰ã®è¤‡æ•°ã®ãƒ¡ãƒ³ãƒãƒ¼ã®è¿½æ”¾ã‚’確èªã—ã¾ã™" name="okcancelignore" notext="å–り消ã—" yestext="追放"/>
+ </notification>
<notification name="AttachmentDrop">
アタッãƒãƒ¡ãƒ³ãƒˆã‚’下ã«ç½®ã“ã†ã¨ã—ã¦ã„ã¾ã™ã€‚
続ã‘ã¾ã™ã‹ï¼Ÿ
@@ -1139,7 +1147,7 @@ https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries ã‚’å‚ç…§ã—ã¦ã
金é¡ã‚’増やã—ã¦ãã ã•ã„。
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- ã“ã“ã«ãƒªãƒ³ã‚¯ã•ã‚ŒãŸã‚¢ã‚¤ãƒ†ãƒ ãŒå°‘ãªãã¨ã‚‚1ã¤ã‚ã‚Šã¾ã™ã€‚ ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã™ã‚‹ã¨ã“ã“ã«ãƒªãƒ³ã‚¯ã•ã‚ŒãŸã‚‚ã®ãŒæ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚ リンクを先ã«å‰Šé™¤ã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚
+ 1 ã¤ä»¥ä¸Šã®ã‚¢ã‚¤ãƒ†ãƒ ã«ãƒã‚¤ãƒ³ãƒˆã™ã‚‹ãƒªãƒ³ã‚¯ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã™ã‚‹å ´åˆã€ãã®ãƒªãƒ³ã‚¯ã¯æ°¸ä¹…ã«æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚ã¾ãšæœ€åˆã«ãƒªãƒ³ã‚¯ã‚’削除ã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚
ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
@@ -1157,9 +1165,9 @@ https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries ã‚’å‚ç…§ã—ã¦ã
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoOwn">
- é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®ã†ã¡ã€å°‘ãªãã¨ã‚‚ 1 ã¤ãŒã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+ é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã® 1 ã¤ä»¥ä¸Šã‚’所有ã—ã¦ã„ã¾ã›ã‚“。
-本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
@@ -1170,26 +1178,26 @@ https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries ã‚’å‚ç…§ã—ã¦ã
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoOwn">
- å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
-å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+ 1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¾ã—ãŸã€‚
+1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトを所有ã—ã¦ã„ã¾ã›ã‚“。
-本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
- å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
-å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+ 1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトを所有ã—ã¦ã„ã¾ã›ã‚“。
-本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
- å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
-å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
-å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+ 1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
+1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトを所有ã—ã¦ã„ã¾ã›ã‚“。
-本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚ªãƒ–ジェクトãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
@@ -1513,13 +1521,43 @@ http://secondlife.com/download ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
å¿…è¦ãªã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ã‚¢ãƒƒãƒ—デートをダウンロードã—ã¾ã—ãŸã€‚
-ãƒãƒ¼ã‚¸ãƒ§ãƒ³ [VERSION]
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³ [VERSION] [[INFO_URL] ã“ã®ã‚¢ãƒƒãƒ—デートã«é–¢ã™ã‚‹æƒ…å ±]
アップデートをインストールã™ã‚‹ã«ã¯ [APP_NAME] ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
アップデートをインストールã™ã‚‹ã«ã¯ [APP_NAME] ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+[[INFO_URL] ã“ã®ã‚¢ãƒƒãƒ—デートã«é–¢ã™ã‚‹æƒ…å ±]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ ãŠä½¿ã„ã® [APP_NAME] ã«å¿…è¦ãªã‚¢ãƒƒãƒ—デートをダウンロードã—ã¾ã—ãŸã€‚
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³ [VERSION]
+ã“ã®è©¦é¨“çš„ãªãƒ“ューア㌠[NEW_CHANNEL] ビューアã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã¾ã™;
+ã“ã®ã‚¢ãƒƒãƒ—デートã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€[[INFO_URL] ã‚’å‚ç…§ã—ã¦ãã ã•ã„]
+ <usetemplate name="okcancelbuttons" notext="後ã§å®Ÿè¡Œ" yestext="今ã™ãインストールã—㦠[APP_NAME] ã‚’å†èµ·å‹•"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ ãŠä½¿ã„ã® [APP_NAME] ã«å¿…è¦ãªã‚¢ãƒƒãƒ—デートをダウンロードã—ã¾ã—ãŸã€‚
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³ [VERSION]
+ã“ã®è©¦é¨“çš„ãªãƒ“ューア㌠[NEW_CHANNEL] ビューアã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã¾ã™;
+[[INFO_URL] ã“ã®ã‚¢ãƒƒãƒ—デートã«é–¢ã™ã‚‹æƒ…å ±] ã‚’å‚ç…§
+ <usetemplate name="okcancelbuttons" notext="後ã§å®Ÿè¡Œ" yestext="今ã™ãインストールã—㦠[APP_NAME] ã‚’å†èµ·å‹•"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ å¿…è¦ãªã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ã‚¢ãƒƒãƒ—デートをダウンロードã—ã¾ã—ãŸã€‚
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³ [VERSION]
+ã“ã®è©¦é¨“çš„ãªãƒ“ューア㌠[NEW_CHANNEL] ビューアã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã¾ã™;
+[[INFO_URL] ã“ã®ã‚¢ãƒƒãƒ—デートã«é–¢ã™ã‚‹æƒ…å ±] ã‚’å‚ç…§
+
+アップデートをインストールã™ã‚‹ã«ã¯ [APP_NAME] ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ アップデートをインストールã™ã‚‹ã«ã¯ [APP_NAME] ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ã“ã®è©¦é¨“çš„ãªãƒ“ューア㌠[NEW_CHANNEL] ビューアã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã¾ã™;
+[[INFO_URL] ã“ã®ã‚¢ãƒƒãƒ—デートã«é–¢ã™ã‚‹æƒ…å ±] ã‚’å‚ç…§
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1572,6 +1610,10 @@ http://secondlife.com/download ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã
グループã‹ã‚‰è„±é€€ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ グループを抜ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。グループã®æœ€å¾Œã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã‚ã‚‹ãŸã‚ã€ã‚°ãƒ«ãƒ¼ãƒ—を抜ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。最åˆã«ã€åˆ¥ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’オーナーã®å½¹å‰²ã«å‰²ã‚Šå½“ã¦ã¦ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
本当ã«ä½äººå…¨å“¡ã‚’グリッドã‹ã‚‰è¿½ã„出ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="ä½äººå…¨å“¡ã‚’追ã„出ã™"/>
@@ -2443,9 +2485,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
「テレãƒãƒ¼ãƒˆã€ã‚’é¸æŠžã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚)
</notification>
<notification name="TeleportToPerson">
- [NAME] ã®ã‚ˆã†ãªä½äººã«é€£çµ¡ã‚’ã¨ã‚‹ã«ã¯ã€ã€Œäººã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã€è¡¨ç¤ºã•ã‚Œã‚‹ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§ã€Œä½äººã€ã‚’é¸æŠžã—ã¦ã‹ã‚‰ã€
-ウィンドウ下部ã«ã‚る「IMã€ã‚’クリックã—ã¾ã™ã€‚
-(リストã®åå‰ã‚’ダブルクリックã€ã¾ãŸã¯å³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã€ŒIMã€ã‚’é¸ã‚“ã§ã‚‚åŒã˜ã§ã™ã€‚)
+ 誰ã‹ã¨ã®ãƒ—ライベートãªä¼šè©±ã‚’é–‹ãã«ã¯ã€ç›¸æ‰‹ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’クリックã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€ŒIMã€ã‚’é¸æŠžã—ã¾ã™ã€‚
</notification>
<notification name="CantSelectLandFromMultipleRegions">
サーãƒãƒ¼ã®å¢ƒç•Œã‚’越ãˆã¦åœŸåœ°ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ãã¾ã›ã‚“。
@@ -2820,6 +2860,15 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<button name="Deny" text="æ‹’å¦"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ &apos;[NAME]&apos; ãŒæ‰€æœ‰ã™ã‚‹ &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; ã«ã‚ˆã£ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã•ã‚ŒãŸãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã‚¹ã‚¯ãƒªãƒ—ト権é™ãŒãƒ“ューアã«ã‚ˆã£ã¦èªè­˜ã•ã‚Œãªã„ãŸã‚ã€è¨±å¯ã§ãã¾ã›ã‚“。
+
+ã“ã®æ¨©é™ã‚’許å¯ã™ã‚‹ã«ã¯ã€ãƒ“ューアを [DOWNLOADURL] ã‹ã‚‰ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ãƒƒãƒ—デートã—ã¦ãã ã•ã„。
+ <form name="form">
+ <button name="Deny" text="Ok"/>
+ <button name="Mute" text="ブロック"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
[NAME] ã®ã€Œ&lt;nolink&gt;[TITLE]&lt;/nolink&gt;ã€
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index 03ce87537a..dd8fd41681 100755
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -49,6 +49,9 @@
<menu_button name="plus_btn" tool_tip="グループã«å‚加 / æ–°è¦ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã—ã¾ã™"/>
<dnd_button name="minus_btn" tool_tip="é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰è„±é€€"/>
</panel>
+ <text name="groupcount">
+ ã‚ãªãŸã¯[COUNT]グループã«å±žã—ã¦ã„ã‚‹ã®ã§ã€ã¾ã [REMAINING]å‚加ã§ãã¾ã™ã€‚
+ </text>
</panel>
<panel label="最新" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index ae5391c7bd..1c3204ea04 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ãƒãƒ£ãƒƒãƒˆ" name="chat">
- <panel>
+ <panel name="general_chat_settings">
<check_box initial_value="true" label="ãƒãƒ£ãƒƒãƒˆä¸­ã«ã‚¿ã‚¤ãƒ”ング動作ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†ç”Ÿ" name="play_typing_animation"/>
<check_box label="オフライン時ã«å—ã‘å–ã£ãŸ IM をメールã§å—ä¿¡" name="send_im_to_email"/>
<check_box label="フレンドã¨ã‚°ãƒ«ãƒ¼ãƒ—以外ã‹ã‚‰ã¯ã‚³ãƒ¼ãƒ«ã¨ IM ã‚’å—ä¿¡ã—ãªã„" name="voice_call_friends_only_check"/>
@@ -14,71 +14,83 @@
</combo_box>
<check_box label="å¹ã出ã—ãƒãƒ£ãƒƒãƒˆ" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- 通知
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
フレンド IM:
</text>
<combo_box name="FriendIMOptions">
- <item label="会話ウィンドウを開ã" name="OpenConversationsWindow" value="openconversations"/>
- <item label="メッセージã®ãƒãƒƒãƒ—アップ" name="PopUpMessage" value="toast"/>
- <item label="Flash ツールãƒãƒ¼ãƒœã‚¿ãƒ³" name="FlashToolbarButton" value="flash"/>
- <item label="フィルターãªã—" name="None" value="none"/>
+ <item label="é–‹ã„ã¦ã„る会話ウィンドウ" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="メッセージをãƒãƒƒãƒ—アップ表示" name="PopUpMessage" value="トースト"/>
+ <item label="フラッシュ ツールãƒãƒ¼ ボタン" name="FlashToolbarButton" value="フラッシュ"/>
+ <item label="動作ãªã—" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="サウンドをå†ç”Ÿ" name="play_sound_friend_im"/>
<text name="non_friend_ims">
- éžãƒ•ãƒ¬ãƒ³ãƒ‰ IM:
+ フレンドã®ã„ãªã„ IM:
</text>
<combo_box name="NonFriendIMOptions">
- <item label="会話ウィンドウを開ã" name="OpenConversationsWindow" value="openconversations"/>
- <item label="メッセージã®ãƒãƒƒãƒ—アップ" name="PopUpMessage" value="toast"/>
- <item label="Flash ツールãƒãƒ¼ãƒœã‚¿ãƒ³" name="FlashToolbarButton" value="flash"/>
- <item label="フィルターãªã—" name="None" value="none"/>
+ <item label="é–‹ã„ã¦ã„る会話ウィンドウ" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="メッセージをãƒãƒƒãƒ—アップ表示" name="PopUpMessage" value="トースト"/>
+ <item label="フラッシュ ツールãƒãƒ¼ ボタン" name="FlashToolbarButton" value="フラッシュ"/>
+ <item label="動作ãªã—" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="サウンドをå†ç”Ÿ" name="play_sound_non_friend_im"/>
<text name="conference_ims">
- コンファレンス IM:
+ 会議 IM:
</text>
<combo_box name="ConferenceIMOptions">
- <item label="会話ウィンドウを開ã" name="OpenConversationsWindow" value="openconversations"/>
- <item label="メッセージã®ãƒãƒƒãƒ—アップ" name="PopUpMessage" value="toast"/>
- <item label="Flashツールãƒãƒ¼ãƒœã‚¿ãƒ³" name="FlashToolbarButton" value="flash"/>
- <item label="フィルターãªã—" name="None" value="none"/>
+ <item label="é–‹ã„ã¦ã„る会話ウィンドウ" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="メッセージをãƒãƒƒãƒ—アップ表示" name="PopUpMessage" value="トースト"/>
+ <item label="フラッシュ ツールãƒãƒ¼ ボタン" name="FlashToolbarButton" value="フラッシュ"/>
+ <item label="動作ãªã—" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="サウンドをå†ç”Ÿ" name="play_sound_conference_im"/>
<text name="group_chat">
グループãƒãƒ£ãƒƒãƒˆ:
</text>
<combo_box name="GroupChatOptions">
- <item label="会話ウィンドウを開ã" name="OpenConversationsWindow" value="openconversations"/>
- <item label="メッセージã®ãƒãƒƒãƒ—アップ" name="PopUpMessage" value="toast"/>
- <item label="Flash ツールãƒãƒ¼ãƒœã‚¿ãƒ³" name="FlashToolbarButton" value="flash"/>
- <item label="ãªã—" name="None" value="none"/>
+ <item label="é–‹ã„ã¦ã„る会話ウィンドウ" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="メッセージをãƒãƒƒãƒ—アップ表示" name="PopUpMessage" value="トースト"/>
+ <item label="フラッシュ ツールãƒãƒ¼ ボタン" name="FlashToolbarButton" value="フラッシュ"/>
+ <item label="動作ãªã—" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="サウンドをå†ç”Ÿ" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
è¿‘ãã®ãƒãƒ£ãƒƒãƒˆ:
</text>
<combo_box name="NearbyChatOptions">
- <item label="会話ウィンドウを開ã" name="OpenConversationsWindow" value="openconversations"/>
- <item label="メッセージã®ãƒãƒƒãƒ—アップ" name="PopUpMessage" value="toast"/>
- <item label="Flash ツールãƒãƒ¼ãƒœã‚¿ãƒ³" name="FlashToolBarButton" value="flash"/>
- <item label="フィルターãªã—" name="None" value="none"/>
+ <item label="é–‹ã„ã¦ã„る会話ウィンドウ" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="メッセージをãƒãƒƒãƒ—アップ表示" name="PopUpMessage" value="トースト"/>
+ <item label="フラッシュ ツールãƒãƒ¼ ボタン" name="FlashToolBarButton" value="フラッシュ"/>
+ <item label="動作ãªã—" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="サウンドをå†ç”Ÿ" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ オブジェクト IM:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="é–‹ã„ã¦ã„る会話ウィンドウ" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="メッセージをãƒãƒƒãƒ—アップ表示" name="PopUpMessage" value="トースト"/>
+ <item label="フラッシュ ツールãƒãƒ¼ ボタン" name="FlashToolBarButton" value="フラッシュ"/>
+ <item label="動作ãªã—" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="サウンドをå†ç”Ÿ" name="play_sound_object_im"/>
<text name="notifications_alert">
- ã™ã¹ã¦ã®é€šçŸ¥ã‚’一時的ã«å—ã‘付ã‘ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€ã€Œã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ãƒˆã€&gt;「通知をå—ã‘ãªã„ã€ã‚’使用ã—ã¾ã™ã€‚
+ 一時的ã«ã™ã¹ã¦ã®é€šçŸ¥ã‚’åœæ­¢ã™ã‚‹ã«ã¯ã€ã€Œã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã€ &gt; 「ç€ä¿¡æ‹’å¦]を使用ã—ã¾ã™ã€‚
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
- 音ã®å†ç”Ÿ:
+ サウンドをå†ç”Ÿ:
</text>
<check_box label="æ–°ã—ã„会話" name="new_conversation"/>
- <check_box label="ボイスコールã®ç€ä¿¡" name="incoming_voice_call"/>
- <check_box label="テレãƒãƒ¼ãƒˆã‚’渡ã™" name="teleport_offer"/>
- <check_box label="アイテムã®ã‚ªãƒ•ã‚¡ãƒ¼" name="inventory_offer"/>
+ <check_box label="å—信音声コール" name="incoming_voice_call"/>
+ <check_box label="テレãƒãƒ¼ãƒˆã‚’é€ã‚‹" name="teleport_offer"/>
+ <check_box label="インベントリをé€ã‚‹" name="inventory_offer"/>
</panel>
- <panel>
- <button label="ログã®ã‚¯ãƒªã‚¢..." name="clear_log"/>
- <button label="テキストã®å‰Šé™¤..." name="delete_transcripts"/>
+ <panel name="log_settings">
+ <button label="ログを消去..." name="clear_log"/>
+ <button label="テキストãƒãƒ£ãƒƒãƒˆã‚’削除..." name="delete_transcripts"/>
<button label="å‚ç…§..." label_selected="å‚ç…§" name="log_path_button"/>
</panel>
<button label="ä»–ã®è¨€èªž..." name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 1786b4befc..15017e330e 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="true" label="è¿‘ãã®å…‰" name="LocalLights"/>
<check_box initial_value="true" label="基本シェーダー" name="BasicShaders" tool_tip="ã“ã®ã‚ªãƒ—ションを無効ã«ã™ã‚‹ã¨ã€ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚«ãƒ¼ãƒ‰ã®ãƒ‰ãƒ©ã‚¤ãƒã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹ã®ã‚’防ãŽã¾ã™ã€‚"/>
<check_box initial_value="true" label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="true" label="å…‰ã¨å½±" name="UseLightShaders"/>
+ <check_box initial_value="true" label="高度ãªãƒ©ã‚¤ãƒ†ã‚£ãƒ³ã‚°ãƒ¢ãƒ‡ãƒ«" name="UseLightShaders"/>
<check_box initial_value="true" label="アンビエントオクルージョン" name="UseSSAO"/>
<check_box initial_value="true" label="フィールドã®é è¿‘æ„Ÿ" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
index d90a1632ab..2c0359cb15 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="自動的ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" name="Install_automatically"/>
<combo_box.item label="手動ã§ã‚¢ãƒƒãƒ—デートをダウンロード&amp;インストール" name="Install_manual"/>
</combo_box>
+ <check_box label="release candidate ã«ã‚¢ãƒƒãƒ—グレードã—ã¾ã™" name="update_willing_to_test"/>
<text name="Proxy Settings:">
プロキシ設定:
</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
index 14d55002a3..b6d51085eb 100755
--- a/indra/newview/skins/default/xui/ja/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="ã™ã¹ã¦é¸æŠž" name="Select All"/>
<menu_item_call label="é¸æŠžè§£é™¤" name="Deselect"/>
<menu_item_call label="検索 / å†é…ç½®..." name="Search / Replace..."/>
+ <menu_item_call label="è¡Œã«ç§»å‹•..." name="Go to line..."/>
</menu>
<menu label="ヘルプ" name="Help">
<menu_item_call label="ヘルプ..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/ja/panel_tools_texture.xml b/indra/newview/skins/default/xui/ja/panel_tools_texture.xml
new file mode 100644
index 0000000000..34763f78c1
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="テクスãƒãƒ£" name="Texture">
+ <panel.string name="string repeats per meter">
+ メーターã”ã¨ã«ç¹°ã‚Šè¿”ã™
+ </panel.string>
+ <panel.string name="string repeats per face">
+ é¢ã”ã¨ã«ç¹°ã‚Šè¿”ã™
+ </panel.string>
+ <text name="color label">
+ 色
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
+ <text name="color trans">
+ é€éŽåº¦ %
+ </text>
+ <text name="glow label">
+ グロー
+ </text>
+ <check_box label="明るã•å…¨é–‹" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="æ質" name="Materials"/>
+ <combo_box.item label="メディア" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="テクスãƒãƒ£ (æ‹¡æ•£)" name="Texture (diffuse)"/>
+ <combo_box.item label="凹凸 (標準)" name="Bumpiness (normal)"/>
+ <combo_box.item label="è¼ã (åå°„)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="テクスãƒãƒ£" name="texture control" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/>
+ <text name="label alphamode">
+ アルファモード
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="ãªã—" name="None"/>
+ <combo_box.item label="アルファブレンディング" name="Alpha blending"/>
+ <combo_box.item label="アルファマスキング" name="Alpha masking"/>
+ <combo_box.item label="放射状マスク" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ マスクカットオフ
+ </text>
+ <texture_picker label="テクスãƒãƒ£" name="bumpytexture control" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/>
+ <text name="label bumpiness">
+ 凹凸
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="ãªã—" name="None"/>
+ <combo_box.item label="明るã•" name="Brightness"/>
+ <combo_box.item label="æš—ã•" name="Darkness"/>
+ <combo_box.item label="木目調" name="woodgrain"/>
+ <combo_box.item label="ãƒãƒ¼ã‚¯" name="bark"/>
+ <combo_box.item label="レンガ" name="bricks"/>
+ <combo_box.item label="市æ¾æ¨¡æ§˜" name="checker"/>
+ <combo_box.item label="コンクリート" name="concrete"/>
+ <combo_box.item label="å …ã„タイル" name="crustytile"/>
+ <combo_box.item label="カットストーン" name="cutstone"/>
+ <combo_box.item label="円æ¿" name="discs"/>
+ <combo_box.item label="å°çŸ³" name="gravel"/>
+ <combo_box.item label="ペトリ皿" name="petridish"/>
+ <combo_box.item label="サイディング" name="siding"/>
+ <combo_box.item label="ストーンタイル" name="stonetile"/>
+ <combo_box.item label="化粧ã—ã£ãã„" name="stucco"/>
+ <combo_box.item label="サクション" name="suction"/>
+ <combo_box.item label="ウィーブ" name="weave"/>
+ </combo_box>
+ <texture_picker label="テクスãƒãƒ£" name="shinytexture control" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/>
+ <text name="label shininess">
+ è¼ã
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="ãªã—" name="None"/>
+ <combo_box.item label="低" name="Low"/>
+ <combo_box.item label="中" name="Medium"/>
+ <combo_box.item label="高" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ 光沢度
+ </text>
+ <text name="label environment">
+ 環境
+ </text>
+ <text name="label shinycolor">
+ 色
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
+ <text name="media_info">
+ é¸æŠžã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã® URL ãŒã‚‚ã—ã‚ã‚Œã°ã€ã“ã“ã«å…¥ã‚Šã¾ã™
+ </text>
+ <button label="é¸æŠž..." name="add_media" tool_tip="メディアを追加ã—ã¾ã™"/>
+ <button label="削除" name="delete_media" tool_tip="ã“ã®ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’削除ã—ã¾ã™"/>
+ <button label="æƒãˆã‚‹" label_selected="メディアを一列ã«æƒãˆã¾ã™" name="button align" tool_tip="メディアテクスãƒãƒ£ã‚’一列ã«æƒãˆã‚‹ï¼ˆæœ€åˆã«èª­ã¿è¾¼ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼‰"/>
+ <text name="tex gen">
+ マッピング
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="デフォルト" name="Default"/>
+ <combo_box.item label="å¹³é¢" name="Planar"/>
+ </combo_box>
+ <spinner label="水平スケール" name="TexScaleU"/>
+ <spinner label="垂直スケール" name="TexScaleV"/>
+ <spinner label="メーターã”ã¨ã«ç¹°ã‚Šè¿”ã™" name="rptctrl"/>
+ <spinner label="回転度" name="TexRot"/>
+ <spinner label="水平オフセット" name="TexOffsetU"/>
+ <spinner label="垂直オフセット" name="TexOffsetV"/>
+ <spinner label="水平スケール" name="bumpyScaleU"/>
+ <spinner label="垂直スケール" name="bumpyScaleV"/>
+ <spinner label="回転度" name="bumpyRot"/>
+ <spinner label="水平オフセット" name="bumpyOffsetU"/>
+ <spinner label="垂直オフセット" name="bumpyOffsetV"/>
+ <spinner label="水平スケール" name="shinyScaleU"/>
+ <spinner label="垂直スケール" name="shinyScaleV"/>
+ <spinner label="回転度" name="shinyRot"/>
+ <spinner label="水平オフセット" name="shinyOffsetU"/>
+ <spinner label="垂直オフセット" name="shinyOffsetV"/>
+ <check_box initial_value="false" label="å¹³é¢ã‚’æƒãˆã‚‹" name="checkbox planar align" tool_tip="é¸æŠžé¢å…¨ã¦ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’ã€æœ€å¾Œã«é¸æŠžã•ã‚ŒãŸé¢ã«æƒãˆã¾ã™ã€‚å¹³é¢ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ãƒžãƒƒãƒ”ングãŒå¿…è¦ã§ã™ã€‚"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml
index 896ed556ae..5c2e18df03 100755
--- a/indra/newview/skins/default/xui/ja/role_actions.xml
+++ b/indra/newview/skins/default/xui/ja/role_actions.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
<action_set description="ã“れらã®èƒ½åŠ›ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’追加ã€æŽ’除ã—ã€æ‹›å¾…状ãªã—ã«æ–°ãƒ¡ãƒ³ãƒãƒ¼ã®å‚加をèªã‚る権é™ãŒå«ã¾ã‚Œã¾ã™ã€‚" name="Membership">
<action description="ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«äººã‚’招待" longdescription="「役割ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã€Œãƒ¡ãƒ³ãƒãƒ¼ã€ã‚¿ãƒ–内ã«ã‚る「招待ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’招待ã—ã¾ã™ã€‚" name="member invite" value="1"/>
@@ -25,7 +25,7 @@
</action_set>
<action_set description="ã“れらã®èƒ½åŠ›ã«ã¯ã€åŒºç”»åã€å…¬é–‹è¨­å®šã€æ¤œç´¢ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¸ã®ç™»éŒ²ã€ç€åœ°ç‚¹ãªã‚‰ã³ã« TP ルートã®ã‚ªãƒ—ションを変更ã™ã‚‹æ¨©é™ãŒå«ã¾ã‚Œã¾ã™ã€‚" name="Parcel Identity">
<action description="「場所検索ã«è¡¨ç¤ºã€ã‚’切り替ãˆã‚«ãƒ†ã‚´ãƒªã‚’設定" longdescription="「場所検索ã«è¡¨ç¤ºã€ã«åˆ‡ã‚Šæ›¿ãˆã€ã€ŒåœŸåœ°æƒ…報〠&gt; 「オプションã€ã‚¿ãƒ–ã§åŒºç”»ã®ã‚«ãƒ†ã‚´ãƒªã‚’設定ã—ã¾ã™ã€‚" name="land find places" value="17"/>
- <action description="区画åã€èª¬æ˜Žã€ã€Œå ´æ‰€æ¤œç´¢ã«è¡¨ç¤ºã€ã®è¨­å®šã‚’変更" longdescription="区画åã€èª¬æ˜Žã€ã€Œå ´æ‰€æ¤œç´¢ã«è¡¨ç¤ºã€ã®è¨­å®šã‚’変更ã—ã¾ã™ã€‚ 「土地情報〠&gt; 「オプションã€ã‚¿ãƒ–ã§è¡Œã„ã¾ã™ã€‚" name="land change identity" value="18"/>
+ <action description="区画åã€èª¬æ˜Žã€ãŠã‚ˆã³ã€ŒModerate コンテンツã€è¨­å®šã‚’変更" longdescription="区画åã€èª¬æ˜Žã€ãŠã‚ˆã³ã€ŒModerate コンテンツã€è¨­å®šã‚’変更ã—ã¾ã™ã€‚「土地情報〠&gt; 「オプションã€ã‚¿ãƒ–ã§è¡Œã„ã¾ã™ã€‚" name="land change identity" value="18"/>
<action description="ç€åœ°ç‚¹ãŠã‚ˆã³ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ«ãƒ¼ãƒˆã‚’設定" longdescription="ã“ã®èƒ½åŠ›ã‚’æŒã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—所有ã®åŒºç”»ä¸Šã§ç€åœ°ç‚¹ã‚’設定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šå¤–部ã‹ã‚‰ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã®åˆ°ç€ä½ç½®ã‚’指定ã§ãã‚‹ã¨å…±ã«ã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ«ãƒ¼ãƒˆã‚’設定ã—ã¦ç´°ã‹ã制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“ã®æ“作ã¯ã€ã€ŒåœŸåœ°æƒ…å ±ã€ï¼žã€Œã‚ªãƒ—ションã€ã‚¿ãƒ–ã§è¡Œã„ã¾ã™ã€‚" name="land set landing point" value="19"/>
</action_set>
<action_set description="ã“れらã®èƒ½åŠ›ã«ã¯ã€ã€Œã‚ªãƒ–ジェクトを作æˆã€ã€ã€Œåœ°å½¢ã‚’編集ã€ã€éŸ³æ¥½ã¨ãƒ¡ãƒ‡ã‚£ã‚¢ã®è¨­å®šãªã©ã€åŒºç”»ã®ã‚ªãƒ—ションã«é–¢é€£ã™ã‚‹æ¨©é™ãŒå«ã¾ã‚Œã¾ã™ã€‚" name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index b27904c4d7..ab2fd461ab 100755
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -139,6 +139,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
ãŠä½¿ã„ã®å¤ã„ビューワã§ã¯ Second Life ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。以下ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰æ–°ã—ã„ビューワをダウンロードã—ã¦ãã ã•ã„:
http://secondlife.com/download
@@ -448,6 +451,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="SLappAgentRequestFriend">
フレンド登録リクエスト
</string>
+ <string name="SLappAgentRemoveFriend">
+ フレンドã®å‰Šé™¤
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
é–‰ã˜ã‚‹ (⌘W)
</string>
@@ -838,6 +844,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="multiple_textures">
複数
</string>
+ <string name="use_texture">
+ テクスãƒãƒ£ã‚’使用
+ </string>
<string name="texture_loading">
ローディング...
</string>
@@ -937,6 +946,21 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="TeleportYourAgent">
ã‚ãªãŸã‚’テレãƒãƒ¼ãƒˆ
</string>
+ <string name="JoinAnExperience">
+ 体験ã«å‚加ã™ã‚‹
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ 土地ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã‚’管ç†ã™ã‚‹ã¨ãã«ã‚¢ãƒ©ãƒ¼ãƒˆã‚’表示ã—ãªã„
+ </string>
+ <string name="OverrideYourAnimations">
+ デフォルトã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç½®ãæ›ãˆ
+ </string>
+ <string name="ScriptReturnObjects">
+ ã‚ãªãŸã®ä»£ã‚ã‚Šã«ã‚ªãƒ–ジェクトを返å´
+ </string>
+ <string name="UnknownScriptPermission">
+ (ä¸æ˜Ž)!
+ </string>
<string name="SIM_ACCESS_PG">
General
</string>
@@ -1968,6 +1992,12 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="ATTACH_HUD_BOTTOM_RIGHT">
HUD(å³ä¸‹ï¼‰
</string>
+ <string name="ATTACH_NECK">
+ 首
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ ã‚¢ãƒã‚¿ãƒ¼ã®ä¸­å¤®
+ </string>
<string name="CursorPos">
[LINE] 行目ã€[COLUMN] 列目
</string>
@@ -2997,6 +3027,9 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="Hip Width">
è…°ã®å¹…
</string>
+ <string name="Hover">
+ ホãƒãƒ¼
+ </string>
<string name="In">
内å‘ã
</string>
@@ -5081,4 +5114,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="logging_calls_enabled_log_empty">
ログイン時ã®ä¼šè©±ã¯ã‚ã‚Šã¾ã›ã‚“。誰ã‹ã«ã”連絡ã—ãŸå¾Œã€ã¾ãŸã¯èª°ã‹ãŒã‚ãªãŸã«é€£çµ¡ã—ãŸå¾Œã€ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªãŒã“ã“ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
</string>
+ <string name="loading_chat_logs">
+ ロード中...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index d089266342..47975a6386 100755
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -7,7 +7,9 @@
Construído com [COMPILER] versão [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Você está em [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] em [REGION] localizado em [HOSTNAME]&lt;/nolink&gt;([HOSTIP])
+ Você está em [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] em [REGION] localizado em &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(coordenadas globais [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
index 8823d04b62..998fa8b2d6 100755
--- a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="EDITAR AUTORIZAÇÕES DE CONTEÚDO">
+<floater name="floaterbulkperms" title="AJUSTAR PERMISSÕES DE CONTEÚDO">
<floater.string name="nothing_to_modify_text">
A seleção não contém nenhum conteúdo editável.
</floater.string>
@@ -33,7 +33,7 @@
<button label="Tudo" label_selected="Todas" name="check_all"/>
<button label="Limpar" label_selected="Nenhuma" name="check_none"/>
<text name="newperms">
- Novas autorizações de conteúdo
+ Ajustar permissões de conteúdo para
</text>
<text name="GroupLabel">
Grupo:
@@ -49,6 +49,7 @@
<check_box label="Modificar" name="next_owner_modify"/>
<check_box label="Copiar" name="next_owner_copy"/>
<check_box initial_value="true" label="Transferir" name="next_owner_transfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
- <button label="OK" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="Aplicar" name="apply"/>
<button label="Cancelar" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_goto_line.xml b/indra/newview/skins/default/xui/pt/floater_goto_line.xml
new file mode 100644
index 0000000000..f2ef825ba0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="IR PARA A LINHA">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ Ir para a linha
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml
index 9f6a7a06ad..e592b14fa7 100755
--- a/indra/newview/skins/default/xui/pt/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Traduzir bate-papo" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traduzir conversa" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml
index d04cf2a173..182f2513e0 100755
--- a/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Exibir:
</text>
- <check_box label="Testar" name="show_world"/>
+ <check_box label="Mundo" name="show_world"/>
<check_box label="Apenas móveis" name="show_world_movables_only"/>
<check_box label="Navmesh" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
index cfd69158bc..61953f9f78 100755
--- a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Congelar" name="Freeze..."/>
<menu_item_call label="Ejetar" name="Eject..."/>
<menu_item_call label="Depurar texturas" name="Debug..."/>
+ <menu_item_call label="Descartar XML" name="Dump XML"/>
<menu_item_call label="Mais zoom" name="Zoom In"/>
<menu_item_call label="Pagar" name="Pay..."/>
<menu_item_call label="Perfil do objeto" name="Object Inspect"/>
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
index 5b32784c32..2d4cd670e6 100755
--- a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="Meus grupos" name="Groups..."/>
<menu_item_call label="Meu perfil" name="Profile..."/>
<menu_item_call label="Depurar texturas" name="Debug..."/>
+ <menu_item_call label="Descartar XML" name="Dump XML"/>
<menu_item_call label="Largar" name="Drop"/>
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
index a4a26144c7..1af8d64438 100755
--- a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Congelar" name="Freeze..."/>
<menu_item_call label="Ejetar" name="Eject..."/>
<menu_item_call label="Depurar texturas" name="Debug..."/>
+ <menu_item_call label="Descartar XML" name="Dump XML"/>
<menu_item_call label="Mais zoom" name="Zoom In"/>
<menu_item_call label="Pagar" name="Pay..."/>
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index e84dcb093d..447b77657b 100755
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="Meus grupos" name="Groups..."/>
<menu_item_call label="Meu perfil" name="Profile..."/>
<menu_item_call label="Depurar texturas" name="Debug..."/>
+ <menu_item_call label="Descartar XML" name="Dump XML"/>
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_conversation.xml b/indra/newview/skins/default/xui/pt/menu_conversation.xml
index 01316b887d..2dd150a61e 100644
--- a/indra/newview/skins/default/xui/pt/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/pt/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Encerrar conversa" name="close_conversation"/>
<menu_item_call label="Abrir conversa de voz" name="open_voice_conversation"/>
<menu_item_call label="Desconectar de voz" name="disconnect_from_voice"/>
+ <menu_item_call label="Fechar selecionados" name="close_selected_conversations"/>
<menu_item_call label="Exibir perfil" name="view_profile"/>
<menu_item_call label="MI" name="im"/>
<menu_item_call label="Oferecer teletransporte" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_land.xml b/indra/newview/skins/default/xui/pt/menu_land.xml
index 9182ce321a..2ebe85df6e 100755
--- a/indra/newview/skins/default/xui/pt/menu_land.xml
+++ b/indra/newview/skins/default/xui/pt/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Comprar passe" name="Land Buy Pass"/>
<menu_item_call label="Construir" name="Create"/>
<menu_item_call label="Editar a topografia" name="Edit Terrain"/>
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
index be94ad49db..cd840f3137 100755
--- a/indra/newview/skins/default/xui/pt/menu_login.xml
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -17,7 +17,13 @@
<menu_item_call label="Mostrar TOS" name="TOS"/>
<menu_item_call label="Mostrar mensagem crítica" name="Critical"/>
<menu_item_call label="Test de Bugs de Conteúdo Web" name="Web Content Floater Debug Test"/>
- <menu label="Configurar nível de registro em log" name="Set Logging Level"/>
+ <menu label="Configurar nível de registro em log" name="Set Logging Level">
+ <menu_item_check label="Depurar" name="Debug"/>
+ <menu_item_check label="Info" name="Info"/>
+ <menu_item_check label="Aviso" name="Warning"/>
+ <menu_item_check label="Erro" name="Error"/>
+ <menu_item_check label="Nenhum" name="None"/>
+ </menu>
<menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/>
<menu_item_call label="Exibir painel de notificações" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_mute_particle.xml b/indra/newview/skins/default/xui/pt/menu_mute_particle.xml
new file mode 100644
index 0000000000..be13c66d7a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml
index 28dd9febe2..a552a5de5a 100755
--- a/indra/newview/skins/default/xui/pt/menu_object.xml
+++ b/indra/newview/skins/default/xui/pt/menu_object.xml
@@ -5,13 +5,13 @@
</menu_item_call>
<menu_item_call label="Editar" name="Edit..."/>
<menu_item_call label="Construir" name="Build"/>
- <menu_item_call label="Exibir em linksets" name="show_in_linksets"/>
- <menu_item_call label="Exibir em personagens" name="show_in_characters"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Sentar aqui" name="Object Sit"/>
<menu_item_call label="Ficar de pé" name="Object Stand Up"/>
<menu_item_call label="Perfil do objeto" name="Object Inspect"/>
<menu_item_call label="Mais zoom" name="Zoom In"/>
+ <menu_item_call label="Exibir em linksets" name="show_in_linksets"/>
+ <menu_item_call label="Exibir em personagens" name="show_in_characters"/>
<context_menu label="Colocar no(a)" name="Put On">
<menu_item_call label="Vestir" name="Wear"/>
<menu_item_call label="Adicionar" name="Add"/>
@@ -28,4 +28,5 @@
<menu_item_call label="Pagar" name="Pay..."/>
<menu_item_call label="Comprar" name="Buy..."/>
<menu_item_call label="Excluir" name="Delete"/>
+ <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_url_agent.xml b/indra/newview/skins/default/xui/pt/menu_url_agent.xml
index aa0a426405..102df18b28 100755
--- a/indra/newview/skins/default/xui/pt/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/pt/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Exibir perfil" name="show_agent"/>
<menu_item_call label="Enviar MI..." name="send_im"/>
<menu_item_call label="Adicionar amigo..." name="add_friend"/>
+ <menu_item_call label="Remover amigo..." name="remove_friend"/>
<menu_item_call label="Copiar nome para área de transferência" name="url_copy_label"/>
<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_url_objectim.xml b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml
index 247a92567a..2cd0f52ef3 100755
--- a/indra/newview/skins/default/xui/pt/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Perfil do objeto..." name="show_object"/>
+ <menu_item_call label="Bloquear..." name="block_object"/>
<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
<menu_item_call label="Teletransportar para lugar do objeto" name="teleport_to_object"/>
<menu_item_call label="Copiar nome do objeto para área de transferência" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 15814fed4c..e6eceb5f2f 100755
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/>
<menu_item_call label="Andar/correr/voar..." name="Walk / run / fly"/>
</menu>
- <menu label="Status" name="Status"/>
+ <menu label="Status" name="Status">
+ <menu_item_check label="Ausente" name="Away"/>
+ <menu_item_check label="Não perturbe" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="Comprar L$..." name="Buy and Sell L$"/>
<menu_item_call label="Caixa de saída do lojista..." name="MerchantOutbox"/>
<menu_item_call label="Painel da conta..." name="Manage My Account">
@@ -32,6 +35,7 @@
<menu_item_check label="Conversas..." name="Conversations"/>
<menu_item_check label="Bate-papo local..." name="Nearby Chat"/>
<menu_item_check label="Falar" name="Speak"/>
+ <menu_item_check label="Registro de conversas..." name="Conversation Log..."/>
<menu label="Distorção de voz" name="VoiceMorphing">
<menu_item_check label="Não distorcer voz" name="NoVoiceMorphing"/>
<menu_item_check label="Visualizar..." name="Preview"/>
@@ -42,6 +46,7 @@
<menu_item_check label="Grupos" name="My Groups"/>
<menu_item_check label="Pessoas próximas" name="Active Speakers"/>
<menu_item_call label="Lista de bloqueados" name="Block List"/>
+ <menu_item_check label="Não perturbe" name="Do Not Disturb"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_call label="Criar marco deste lugar" name="Create Landmark Here"/>
@@ -110,6 +115,7 @@
<menu_item_call label="Incluir próxima parte" name="Include Next Part"/>
<menu_item_call label="Incluir parte anterior" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Linksets..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Enfocar seleção" name="Focus on Selection"/>
<menu_item_call label="Ampliar seleção" name="Zoom to Selection"/>
<menu label="Objeto:" name="Object">
@@ -273,6 +279,7 @@
<menu_item_check label="Camera Offset" name="Camera Offset"/>
<menu_item_check label="Taxa de quadros aleatória" name="Randomize Framerate"/>
<menu_item_check label="Frame Test" name="Frame Test"/>
+ <menu_item_call label="Perfil do quadro" name="Frame Profile"/>
</menu>
<menu label="Render Metadata" name="Render Metadata">
<menu_item_check label="Normais" name="Normals"/>
@@ -293,15 +300,15 @@
</menu>
<menu label="Rendering" name="Rendering">
<menu_item_check label="Axes" name="Axes"/>
+ <menu_item_call label="Informações sobre o material selecionado" name="Selected Material Info"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
- <menu_item_check label="Iluminação e sombras" name="Advanced Lighting Model"/>
+ <menu_item_check label="Modelo avançado de luzes" name="Advanced Lighting Model"/>
<menu_item_check label="Sombras da projeção do sol/lua" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO e sombra suave" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Máscaras alpha automáticas (adiadas)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Máscaras alpha automáticas (sem adiar)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Texturas de animação" name="Animation Textures"/>
<menu_item_check label="Desativar texturas" name="Disable Textures"/>
- <menu_item_check label="Atlas texturizado (fase experimental)" name="Texture Atlas"/>
<menu_item_check label="Render Attached Lights" name="Render Attached Lights"/>
<menu_item_check label="Render Attached Particles" name="Render Attached Particles"/>
<menu_item_check label="Objetos iridescentes" name="Hover Glow Objects"/>
@@ -320,7 +327,6 @@
<menu_item_call label="Teste de mídia do navegador" name="Web Browser Test"/>
<menu_item_call label="Navegador de conteúdo web" name="Web Content Browser"/>
<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
- <menu_item_call label="Dados de memória" name="Memory Stats"/>
<menu_item_check label="Console de depuração de região" name="Region Debug Console"/>
<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index d9f5e48745..d5096ec858 100755
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -209,6 +209,14 @@ Qualquer membro numa função com esta habilidade, pode atribuir a sí mesmo --
Adicionar esta habilidade a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Você está prestes a expulsar [AVATAR_NAME] do grupo.
+ <usetemplate ignoretext="Confirmar expulsão de um participante do grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Você está prestes a expulsar [COUNT] membros do grupo.
+ <usetemplate ignoretext="Confirmar expulsão de diversos membros do grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/>
+ </notification>
<notification name="AttachmentDrop">
Você está prestes a largar seu anexo.
Tem certeza de que quer prosseguir?
@@ -1105,9 +1113,9 @@ em TODOS OS TERRENOS deste sim?
Por favor, insira um valor maior.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- Pelo menos um dos itens possui links que levam a ele. Ao excluir o item, os links não funcionarão mais. Por isso, recomendamos excluir os links primeiro.
+ Pelo menos um dos itens possui links que levam a ele. Ao excluir o item, os links não funcionarão mais. Por isso, recomendamos excluir os links primeiro.
-Tem certeza de que quer excluir estes items?
+Tem certeza de que quer excluir estes itens?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLock">
@@ -1123,9 +1131,9 @@ Tem certeza de que deseja apagar estes itens?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ConfirmObjectDeleteNoOwn">
- Você não é proprietário de pelo menos um dos itens selecionados.
+ Ao menos um dos itens selecionados não é seu.
-Tem certeza de que deseja apagar estes itens?
+Tem certeza de que quer excluir estes itens?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
@@ -1135,22 +1143,26 @@ Tem certeza de que deseja apagar estes itens?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoOwn">
- Pelo menos um dos objetos está trancado ou não é de sua posse.
+ Ao menos um objeto está bloqueado.
+Ao menos um objeto não é seu.
-Tem certeza de que deseja apagar estes itens?
+Tem certeza de que quer excluir estes itens?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
- Pelo menos um dos objetos não é copiável ou não é de sua posse.
+ Ao menos um objeto não é copiável.
+Ao menos um objeto não é seu.
-Tem certeza de que deseja apagar estes itens?
+Tem certeza de que quer excluir estes itens?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
- Pelo menos um dos objetos está trancado, não é copiável ou você não o possui.
+ Ao menos um objeto está bloqueado.
+Ao menos um objeto não é copiável.
+Ao menos um objeto não é seu.
-Tem certeza de que deseja apagar estes itens?
- <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
+Tem certeza de que quer excluir estes itens?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sim"/>
</notification>
<notification name="ConfirmObjectTakeLock">
Pelo menos um dos objetos está trancado.
@@ -1468,13 +1480,43 @@ Versão [VERSION] [[RELEASE_NOTES_FULL_URL] sobre esta atualização]
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
O software requer uma atualização que já foi baixada.
-Versão [VERSION]
+Versão [VERSION] Informação [[INFO_URL] sobre essa atualização]
Para instalar a atualização, será preciso reiniciar o [APP_NAME].
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
Para instalar a atualização, será preciso reiniciar o [APP_NAME].
+Informação [[INFO_URL] sobre essa atualização]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ Baixamos uma atualização para a instalação do [APP_NAME].
+Versão [VERSION]
+O visualizador experimental foi substituído por um visualizador [NEW_CHANNEL];
+consulte [[INFO_URL] para obter mais detalhes sobre essa atualização]
+ <usetemplate name="okcancelbuttons" notext="Depois..." yestext="Instalar agora e reiniciar o [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ Baixamos uma atualização para a instalação do [APP_NAME].
+Versão [VERSION]
+O visualizador experimental foi substituído por um visualizador [NEW_CHANNEL];
+consulte a informação [[INFO_URL] sobre essa atualização]
+ <usetemplate name="okcancelbuttons" notext="Depois..." yestext="Instalar agora e reiniciar o [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ O software requer uma atualização que já foi baixada.
+Versão [VERSION]
+O visualizador experimental foi substituído por um visualizador [NEW_CHANNEL];
+consulte a informação [[INFO_URL] sobre essa atualização]
+
+Para instalar a atualização, será preciso reiniciar o [APP_NAME].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ Para instalar a atualização, será preciso reiniciar o [APP_NAME].
+O visualizador experimental foi substituído por um visualizador [NEW_CHANNEL];
+consulte a informação [[INFO_URL] sobre essa atualização]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1524,6 +1566,10 @@ Para instalar a atualização, será preciso reiniciar o [APP_NAME].
Você é atualmente um membro do grupo
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sair"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ Não foi possível deixar o grupo. Você não pode deixar o grupo pois é o último proprietário dele. Primeiramente, atribua outro membro à função de proprietário.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Tem CERTEZA de que deseja expulsar todos os residentes do grid?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/>
@@ -2384,9 +2430,7 @@ Selecione só um objeto.
e selecionar &apos;Teletransportar&apos;.)
</notification>
<notification name="TeleportToPerson">
- Para entrar em contato com residentes como &apos;[NAME]&apos;, clique no botão &quot;Pessoas&quot;, selecione um residente na janela que é exibida e clique em &apos;MI&apos; na
- parte inferior da janela.
- (Também é possível clicar duas vezes no nome, ou clicar no nome com o botão direito e selecionar &apos;MI&apos;.)
+ Para iniciar uma conversa particular com alguém, clique com o botão direito no avatar e selecione &quot;MI&quot; no menu.
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Impossível selecionar terra nas fronteiras do servidor. Tente selecionar um pedaço menor de terra.
@@ -2757,6 +2801,15 @@ Não conceda acesso se você não entender completamente por que ele deseja aces
<button name="Deny" text="Negar"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ A permissão de script de tempo de execução solicitada por &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, um objeto de &apos;[NAME]&apos;, não é reconhecida pelo visualizador e não pode ser concedida.
+
+Para conceder essa permissão, atualize seu visualizador para a versão mais recente em [DOWNLOADURL].
+ <form name="form">
+ <button name="Deny" text="Ok"/>
+ <button name="Mute" text="Bloquear"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [NAME]
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index babb48c208..205fd6b97d 100755
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -49,6 +49,9 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
<menu_button name="plus_btn" tool_tip="Entrar em um grupo/Criar novo grupo"/>
<dnd_button name="minus_btn" tool_tip="Sair do grupo selecionado"/>
</panel>
+ <text name="groupcount">
+ Você pertence a [COUNT] grupos e pode entrar em mais [REMAINING].
+ </text>
</panel>
<panel label="RECENTE" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
index baf14c2c23..89f1e07647 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Chat" name="chat">
- <panel>
- <check_box initial_value="true" label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/>
- <check_box label="Enviar MIs por email se estiver desconectado" name="send_im_to_email"/>
+ <panel name="general_chat_settings">
+ <check_box initial_value="true" label="Executar animação de digitação durante o bate-papo" name="play_typing_animation"/>
+ <check_box label="Envie MIs por email quando eu estiver desconectado" name="send_im_to_email"/>
<check_box label="Apenas amigos e grupos podem me ligar ou enviar MIs" name="voice_call_friends_only_check"/>
<text name="font_size">
Tamanho da fonte:
@@ -12,62 +12,74 @@
<item label="Médio" name="Medium" value="1"/>
<item label="Grande" name="Large" value="2"/>
</combo_box>
- <check_box label="Balão de bate-papo" name="bubble_text_chat"/>
+ <check_box label="Balão de conversa" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- Notificações
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
MIs de amigos:
</text>
<combo_box name="FriendIMOptions">
<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
- <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
- <item label="Nenhum" name="None" value="none"/>
+ <item label="Abrir pop up com mensagem" name="PopUpMessage" value="avisos"/>
+ <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="piscar"/>
+ <item label="Nenhuma ação" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Executar som" name="play_sound_friend_im"/>
<text name="non_friend_ims">
MIs de não amigos:
</text>
<combo_box name="NonFriendIMOptions">
<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
- <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
- <item label="Nenhum" name="None" value="none"/>
+ <item label="Abrir pop up com mensagem" name="PopUpMessage" value="avisos"/>
+ <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="piscar"/>
+ <item label="Nenhuma ação" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Executar som" name="play_sound_non_friend_im"/>
<text name="conference_ims">
MIs de conferências:
</text>
<combo_box name="ConferenceIMOptions">
<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
- <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
- <item label="Nenhum" name="None" value="none"/>
+ <item label="Abrir pop up com mensagem" name="PopUpMessage" value="avisos"/>
+ <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="piscar"/>
+ <item label="Nenhuma ação" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Executar som" name="play_sound_conference_im"/>
<text name="group_chat">
- Bate-papo de grupo:
+ Conversa em grupo:
</text>
<combo_box name="GroupChatOptions">
<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
- <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
- <item label="Nenhum" name="None" value="none"/>
+ <item label="Abrir pop up com mensagem" name="PopUpMessage" value="avisos"/>
+ <item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="piscar"/>
+ <item label="Nenhuma ação" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Executar som" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
- Bate-papo local:
+ Conversa local:
</text>
<combo_box name="NearbyChatOptions">
<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
- <item label="Piscar botão da barra de ferramentas" name="FlashToolBarButton" value="flash"/>
- <item label="Nenhum" name="None" value="none"/>
+ <item label="Abrir pop up com mensagem" name="PopUpMessage" value="avisos"/>
+ <item label="Piscar botão da barra de ferramentas" name="FlashToolBarButton" value="piscar"/>
+ <item label="Nenhuma ação" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Executar som" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ MIs de objetos:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Abrir pop up com mensagem" name="PopUpMessage" value="avisos"/>
+ <item label="Piscar botão da barra de ferramentas" name="FlashToolBarButton" value="piscar"/>
+ <item label="Nenhuma ação" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Executar som" name="play_sound_object_im"/>
<text name="notifications_alert">
Para interromper temporariamente todas as notificações, use Comunicar &gt; Não perturbe.
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Executar som:
</text>
@@ -76,7 +88,7 @@
<check_box label="Oferta de teletransporte" name="teleport_offer"/>
<check_box label="Oferta de inventário" name="inventory_offer"/>
</panel>
- <panel>
+ <panel name="log_settings">
<button label="Limpar registro..." name="clear_log"/>
<button label="Excluir transcrições..." name="delete_transcripts"/>
<button label="Procurar..." label_selected="Procurar" name="log_path_button"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
index 28e7184326..37e8838bf4 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -31,7 +31,7 @@ rápido
<check_box initial_value="verdadeiro" label="Luzes locais" name="LocalLights"/>
<check_box initial_value="true" label="Sombreadores básicos" name="BasicShaders" tool_tip="Desabilitar esta opção poderá impedir que alguns drivers de placa de vídeo a travem."/>
<check_box initial_value="true" label="Sombreadores Atmosféricos" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="verdadeiro" label="Iluminação e sombras" name="UseLightShaders"/>
+ <check_box initial_value="verdadeiro" label="Modelo avançado de luzes" name="UseLightShaders"/>
<check_box initial_value="verdadeiro" label="Oclusão ambiental" name="UseSSAO"/>
<check_box initial_value="verdadeiro" label="Profundidade" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
index ebbd63138a..887d0cfe98 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="Instalar automaticamente" name="Install_automatically"/>
<combo_box.item label="Baixar e instalar atualizações manualmente" name="Install_manual"/>
</combo_box>
+ <check_box label="Disposto a atualizar para candidatos da versão" name="update_willing_to_test"/>
<text name="Proxy Settings:">
Configurações de proxy:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
index de02aafe2f..39bb5edc75 100755
--- a/indra/newview/skins/default/xui/pt/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Selecionar tudo" name="Select All"/>
<menu_item_call label="Desmarcar" name="Deselect"/>
<menu_item_call label="Buscar / Substituir..." name="Search / Replace..."/>
+ <menu_item_call label="Ir para a linha..." name="Go to line..."/>
</menu>
<menu label="Ajuda" name="Help">
<menu_item_call label="ajuda..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/pt/panel_tools_texture.xml b/indra/newview/skins/default/xui/pt/panel_tools_texture.xml
new file mode 100644
index 0000000000..03da89dd3b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Textura" name="Texture">
+ <panel.string name="string repeats per meter">
+ Repetições por metro
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Repetições por face
+ </panel.string>
+ <text name="color label">
+ Cor
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Selecionar a cor"/>
+ <text name="color trans">
+ % de transparência
+ </text>
+ <text name="glow label">
+ Brilho
+ </text>
+ <check_box label="Completamente luminoso" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Materiais" name="Materials"/>
+ <combo_box.item label="Mídia" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="Textura (difusa)" name="Texture (diffuse)"/>
+ <combo_box.item label="Relevo (normal)" name="Bumpiness (normal)"/>
+ <combo_box.item label="Brilho (especular)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="Textura" name="texture control" tool_tip="Selecionar imagem"/>
+ <text name="label alphamode">
+ Modo alpha
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Nenhum" name="None"/>
+ <combo_box.item label="Mistura alpha" name="Alpha blending"/>
+ <combo_box.item label="Máscara alpha" name="Alpha masking"/>
+ <combo_box.item label="Máscara emissiva" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ Corte da máscara
+ </text>
+ <texture_picker label="Textura" name="bumpytexture control" tool_tip="Selecionar imagem"/>
+ <text name="label bumpiness">
+ Relevo
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Nenhum" name="None"/>
+ <combo_box.item label="Luminosidade" name="Brightness"/>
+ <combo_box.item label="Escuridão" name="Darkness"/>
+ <combo_box.item label="grão de madeira" name="woodgrain"/>
+ <combo_box.item label="casca de árvore" name="bark"/>
+ <combo_box.item label="tijolos" name="bricks"/>
+ <combo_box.item label="quadriculado" name="checker"/>
+ <combo_box.item label="concreto" name="concrete"/>
+ <combo_box.item label="ladrilho ríspido" name="crustytile"/>
+ <combo_box.item label="pedra talhada" name="cutstone"/>
+ <combo_box.item label="discos" name="discs"/>
+ <combo_box.item label="cascalho" name="gravel"/>
+ <combo_box.item label="placa de petri" name="petridish"/>
+ <combo_box.item label="desvio" name="siding"/>
+ <combo_box.item label="ladrilho de pedra" name="stonetile"/>
+ <combo_box.item label="estuque" name="stucco"/>
+ <combo_box.item label="sucção" name="suction"/>
+ <combo_box.item label="tecelagem" name="weave"/>
+ </combo_box>
+ <texture_picker label="Textura" name="shinytexture control" tool_tip="Selecionar imagem"/>
+ <text name="label shininess">
+ Brilho
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Nenhum" name="None"/>
+ <combo_box.item label="Baixo" name="Low"/>
+ <combo_box.item label="Médio" name="Medium"/>
+ <combo_box.item label="Alto" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ Acetinação
+ </text>
+ <text name="label environment">
+ Ambiente
+ </text>
+ <text name="label shinycolor">
+ Cor
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Selecionar a cor"/>
+ <text name="media_info">
+ A URL da mídia escolhida, caso haja, é inserida aqui
+ </text>
+ <button label="Selecionar..." name="add_media" tool_tip="Adicionar mídia"/>
+ <button label="Remover" name="delete_media" tool_tip="Excluir esta textura de mídia"/>
+ <button label="Alinhar" label_selected="Alinhar mídia" name="button align" tool_tip="Alinhar texturas de mídia (após carregar mídia)"/>
+ <text name="tex gen">
+ Mapeamento
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Padrão" name="Default"/>
+ <combo_box.item label="Planar" name="Planar"/>
+ </combo_box>
+ <spinner label="Escala horizontal" name="TexScaleU"/>
+ <spinner label="Escala vertical" name="TexScaleV"/>
+ <spinner label="Repetições por metro" name="rptctrl"/>
+ <spinner label="Graus de rotação" name="TexRot"/>
+ <spinner label="Offset horizontal" name="TexOffsetU"/>
+ <spinner label="Offset vertical" name="TexOffsetV"/>
+ <spinner label="Escala horizontal" name="bumpyScaleU"/>
+ <spinner label="Escala vertical" name="bumpyScaleV"/>
+ <spinner label="Graus de rotação" name="bumpyRot"/>
+ <spinner label="Offset horizontal" name="bumpyOffsetU"/>
+ <spinner label="Offset vertical" name="bumpyOffsetV"/>
+ <spinner label="Escala horizontal" name="shinyScaleU"/>
+ <spinner label="Escala vertical" name="shinyScaleV"/>
+ <spinner label="Graus de rotação" name="shinyRot"/>
+ <spinner label="Offset horizontal" name="shinyOffsetU"/>
+ <spinner label="Offset vertical" name="shinyOffsetV"/>
+ <check_box initial_value="false" label="Alinhar planos planares" name="checkbox planar align" tool_tip="Alinhar texturas de todos os planos selecionados com o plano selecionado por último. Requer mapeamento de textura planar."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml
index 21b085431e..e45a3bd21f 100755
--- a/indra/newview/skins/default/xui/pt/role_actions.xml
+++ b/indra/newview/skins/default/xui/pt/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="Estas habilidades incluem poderes para mudar o nome da parcelas e configurações de publicação, visibilidade da busca de diretório e ponto de aterrissagem &amp; opções de rota de TP." name="Parcel Identity">
<action description="Alternar &apos;Exibir nos resultados de busca&apos; e selecionar a categoria" longdescription="Alterne entre &apos;Exibir nos resultados de busca&apos; ou não, e selecione a categoria do terreno em &apos;Sobre o terreno&apos;." name="land find places" value="17"/>
- <action description="Mude o nome, a descrição e a exibição do terreno nos resultados de busca." longdescription="Mude o nome, a descrição e a exibição do terreno nos resultados de busca. Veja essas opções em Sobre o terreno &gt; guia Opções." name="land change identity" value="18"/>
+ <action description="Alterar nome da parcela, descrição e configurações de &quot;Conteúdo moderado&quot;" longdescription="Altere o nome da parcela, descrição e configurações de &quot;Conteúdo moderado&quot;. Isso é feito em Sobre o terreno &gt; guia Opções." name="land change identity" value="18"/>
<action description="Definir ponto de aterrissagem e rota de teletransporte" longdescription="Em uma parcela pertencente ao grupo, membros em uma função com esta habilidade podem definir um ponto de aterrissagem para especificar onde os teletransportes chegam e também definir a rota do teletransporte para um maior controle. É feito em Sobre o terreno &gt; aba Opções." name="land set landing point" value="19"/>
</action_set>
<action_set description="Estas habilidade incluem poderes que afetam opções de parcela, como &apos;Criar objetos&apos;, &apos;Editar terreno&apos; e música &amp; configurações de mídia." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 4bf18aab70..adc3ee14e0 100755
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -130,6 +130,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
O visualizador utilizado já não é compatível com o Second Life. Visite a página abaixo para baixar uma versão atual: http://secondlife.com/download
@@ -400,6 +403,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="SLappAgentRequestFriend">
Pedido de amizade
</string>
+ <string name="SLappAgentRemoveFriend">
+ Remoção de amigo
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Fechar (⌘W)
</string>
@@ -787,6 +793,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="multiple_textures">
Múltiplo
</string>
+ <string name="use_texture">
+ Usar textura
+ </string>
<string name="texture_loading">
Carregando...
</string>
@@ -883,6 +892,21 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="TeleportYourAgent">
Teletransportá-lo
</string>
+ <string name="JoinAnExperience">
+ Participar de uma experiência
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Suprimir alertas ao gerenciar listas de acesso ao terreno
+ </string>
+ <string name="OverrideYourAnimations">
+ Substituir suas animações padrão
+ </string>
+ <string name="ScriptReturnObjects">
+ Retornar objetos em seu nome
+ </string>
+ <string name="UnknownScriptPermission">
+ (desconhecido)!
+ </string>
<string name="SIM_ACCESS_PG">
Público geral
</string>
@@ -1908,6 +1932,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="ATTACH_HUD_BOTTOM_RIGHT">
HUD direito inferior
</string>
+ <string name="ATTACH_NECK">
+ Pescoço
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Centro do avatar
+ </string>
<string name="CursorPos">
Linha [LINE], Coluna [COLUMN]
</string>
@@ -2894,6 +2924,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Hip Width">
Largura do quadril
</string>
+ <string name="Hover">
+ Pairar
+ </string>
<string name="In">
Dentro
</string>
@@ -4951,4 +4984,7 @@ Tente colocar o caminho do editor entre aspas.
<string name="logging_calls_enabled_log_empty">
Não há conversas registradas. Depois que você entrar em contato com alguém, ou alguém entrar em contato com você, um registro será exibido aqui.
</string>
+ <string name="loading_chat_logs">
+ Carregando...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/ru/floater_about.xml b/indra/newview/skins/default/xui/ru/floater_about.xml
index 2b2b3cf453..9494106e96 100755
--- a/indra/newview/skins/default/xui/ru/floater_about.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about.xml
@@ -9,6 +9,8 @@
</floater.string>
<floater.string name="AboutPosition">
Ð’Ñ‹ в точке [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] в регионе «[REGION]», раÑположенном на &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(глобальные координаты [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
index ccf13cf02a..31fc1c5ed3 100755
--- a/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="ИЗМЕÐИТЬ РÐЗРЕШЕÐИЯ ÐРИСПОЛЬЗОВÐÐИЕ КОÐТЕÐТÐ">
+<floater name="floaterbulkperms" title="ÐÐСТРОИТЬ РÐЗРЕШЕÐИЯ ÐРИСПОЛЬЗОВÐÐИЕ КОÐТЕÐТÐ">
<floater.string name="nothing_to_modify_text">
Ð’ выбранной облаÑти нет контента, который можно изменÑÑ‚ÑŒ.
</floater.string>
@@ -24,7 +24,7 @@
<button label="√ Ð’Ñе" name="check_all"/>
<button label="ОчиÑтить" label_selected="Ðет" name="check_none"/>
<text name="newperms">
- Ðовые Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° контент
+ ÐаÑтроить Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° иÑпользование контента:
</text>
<text name="GroupLabel">
Группа:
@@ -40,6 +40,7 @@
<check_box label="ИзменÑÑ‚ÑŒ" name="next_owner_modify"/>
<check_box label="Копировать" name="next_owner_copy"/>
<check_box initial_value="иÑтина" label="Передать" name="next_owner_transfer" tool_tip="Следующий владелец может отдать или перепродать объект"/>
- <button label="ОК" name="apply"/>
+ <button label="OK" name="ok"/>
+ <button label="Применить" name="apply"/>
<button label="Отмена" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_goto_line.xml b/indra/newview/skins/default/xui/ru/floater_goto_line.xml
new file mode 100644
index 0000000000..51caaa471d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="ПЕРЕЙТИ ÐРСТРОКУ">
+ <button label="OK" label_selected="OK" name="goto_btn"/>
+ <text name="txt">
+ Перейти на Ñтроку
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_im_session.xml b/indra/newview/skins/default/xui/ru/floater_im_session.xml
index ea110ffb44..d4ca04b88b 100755
--- a/indra/newview/skins/default/xui/ru/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/ru/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Переводить чат" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Переводить чат" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml
index 8faddb1805..fa72df04fd 100755
--- a/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Показать:
</text>
- <check_box label="ТеÑÑ‚" name="show_world"/>
+ <check_box label="Мир" name="show_world"/>
<check_box label="Только перемещаемые предметы" name="show_world_movables_only"/>
<check_box label="ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ñетка" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
index fb1c24448b..76acb32a64 100755
--- a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Заморозить" name="Freeze..."/>
<menu_item_call label="Выкинуть" name="Eject..."/>
<menu_item_call label="Отладка текÑтур" name="Debug..."/>
+ <menu_item_call label="Вывод XML" name="Dump XML"/>
<menu_item_call label="Приблизить" name="Zoom In"/>
<menu_item_call label="Заплатить" name="Pay..."/>
<menu_item_call label="Профиль объекта" name="Object Inspect"/>
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
index f241b48871..2b1291a8d5 100755
--- a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="Мои группы" name="Groups..."/>
<menu_item_call label="Мой профиль" name="Profile..."/>
<menu_item_call label="Отладка текÑтур" name="Debug..."/>
+ <menu_item_call label="Вывод XML" name="Dump XML"/>
<menu_item_call label="БроÑить" name="Drop"/>
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
index fb283c9d80..dfe3c2e701 100755
--- a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Заморозить" name="Freeze..."/>
<menu_item_call label="Выкинуть" name="Eject..."/>
<menu_item_call label="Отладка текÑтур" name="Debug..."/>
+ <menu_item_call label="Вывод XML" name="Dump XML"/>
<menu_item_call label="Приблизить" name="Zoom In"/>
<menu_item_call label="Заплатить" name="Pay..."/>
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
index b72f3dcc42..e09117226c 100755
--- a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="Мои группы" name="Groups..."/>
<menu_item_call label="Мой профиль" name="Profile..."/>
<menu_item_call label="Отладка текÑтур" name="Debug..."/>
+ <menu_item_call label="Вывод XML" name="Dump XML"/>
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_conversation.xml b/indra/newview/skins/default/xui/ru/menu_conversation.xml
index 530b1ea704..4d1240db98 100644
--- a/indra/newview/skins/default/xui/ru/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/ru/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Закрыть разговор" name="close_conversation"/>
<menu_item_call label="Открыть голоÑовой чат" name="open_voice_conversation"/>
<menu_item_call label="Прекратить голоÑовой чат" name="disconnect_from_voice"/>
+ <menu_item_call label="Закрыть выбранные" name="close_selected_conversations"/>
<menu_item_call label="Смотреть профиль" name="view_profile"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="Предложить телепортацию" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_land.xml b/indra/newview/skins/default/xui/ru/menu_land.xml
index 89889d7bf6..5aa4e6ccd2 100755
--- a/indra/newview/skins/default/xui/ru/menu_land.xml
+++ b/indra/newview/skins/default/xui/ru/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Купить пропуÑк" name="Land Buy Pass"/>
<menu_item_call label="СтроительÑтво" name="Create"/>
<menu_item_call label="Изменить ландшафт" name="Edit Terrain"/>
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml
index 93a5ffbb25..835c4e186e 100755
--- a/indra/newview/skins/default/xui/ru/menu_login.xml
+++ b/indra/newview/skins/default/xui/ru/menu_login.xml
@@ -18,7 +18,13 @@
<menu_item_call label="Показать лицензионное Ñоглашение" name="TOS"/>
<menu_item_call label="Показать Ñообщение об ошибке" name="Critical"/>
<menu_item_call label="ТеÑÑ‚ отладки плавающего окна Ñ Ð²ÐµÐ±-контентом" name="Web Content Floater Debug Test"/>
- <menu label="Уровень журнала" name="Set Logging Level"/>
+ <menu label="Уровень журнала" name="Set Logging Level">
+ <menu_item_check label="Отладка" name="Debug"/>
+ <menu_item_check label="ИнформациÑ" name="Info"/>
+ <menu_item_check label="Внимание!" name="Warning"/>
+ <menu_item_check label="Ошибка" name="Error"/>
+ <menu_item_check label="Ðет" name="None"/>
+ </menu>
<menu_item_check label="Выбор Ñетки" name="Show Grid Picker"/>
<menu_item_call label="КонÑоль уведомлений" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_mute_particle.xml b/indra/newview/skins/default/xui/ru/menu_mute_particle.xml
new file mode 100644
index 0000000000..0c5a147419
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_object.xml b/indra/newview/skins/default/xui/ru/menu_object.xml
index 288df3beb9..056dab74c1 100755
--- a/indra/newview/skins/default/xui/ru/menu_object.xml
+++ b/indra/newview/skins/default/xui/ru/menu_object.xml
@@ -3,13 +3,13 @@
<menu_item_call label="КоÑнутьÑÑ" name="Object Touch"/>
<menu_item_call label="Изменить" name="Edit..."/>
<menu_item_call label="СтроительÑтво" name="Build"/>
- <menu_item_call label="Показывать в наборах ÑвÑзей" name="show_in_linksets"/>
- <menu_item_call label="Показывать в перÑонажах" name="show_in_characters"/>
<menu_item_call label="Открыто" name="Open"/>
<menu_item_call label="СеÑÑ‚ÑŒ здеÑÑŒ" name="Object Sit"/>
<menu_item_call label="Ð’Ñтать" name="Object Stand Up"/>
<menu_item_call label="Профиль объекта" name="Object Inspect"/>
<menu_item_call label="Приблизить" name="Zoom In"/>
+ <menu_item_call label="Показывать в наборах ÑвÑзей" name="show_in_linksets"/>
+ <menu_item_call label="Показывать в перÑонажах" name="show_in_characters"/>
<context_menu label="Ðадеть" name="Put On">
<menu_item_call label="Ðадеть" name="Wear"/>
<menu_item_call label="Добавить" name="Add"/>
@@ -26,4 +26,5 @@
<menu_item_call label="Заплатить" name="Pay..."/>
<menu_item_call label="Купить" name="Buy..."/>
<menu_item_call label="Удалить" name="Delete"/>
+ <menu_item_call label="Блокировать владельца учаÑтка" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_url_agent.xml b/indra/newview/skins/default/xui/ru/menu_url_agent.xml
index 230d049fad..fcd1fe310d 100755
--- a/indra/newview/skins/default/xui/ru/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/ru/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Смотреть профиль" name="show_agent"/>
<menu_item_call label="Отправить Ñообщение..." name="send_im"/>
<menu_item_call label="Добавить в друзьÑ..." name="add_friend"/>
+ <menu_item_call label="Удалить из друзей..." name="remove_friend"/>
<menu_item_call label="Копировать название в буфер обмена" name="url_copy_label"/>
<menu_item_call label="Копировать URL-Ð°Ð´Ñ€ÐµÑ SL в буфер обмена" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_url_objectim.xml b/indra/newview/skins/default/xui/ru/menu_url_objectim.xml
index 1326db708e..4f5361b2e3 100755
--- a/indra/newview/skins/default/xui/ru/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/ru/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Профиль объекта..." name="show_object"/>
+ <menu_item_call label="Блокировать..." name="block_object"/>
<menu_item_call label="Показать на карте" name="show_on_map"/>
<menu_item_call label="Телепорт в меÑтоположение объекта" name="teleport_to_object"/>
<menu_item_call label="Копировать название объекта в буфер обмена" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 92a9943b93..fcb7c4e531 100755
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="ОÑтановить анимацию" name="Stop Animating My Avatar"/>
<menu_item_call label="Ходьба / бег / полет..." name="Walk / run / fly"/>
</menu>
- <menu label="СтатуÑ" name="Status"/>
+ <menu label="СтатуÑ" name="Status">
+ <menu_item_check label="Ðет на меÑте" name="Away"/>
+ <menu_item_check label="Ðе беÑпокоить" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="Купить L$..." name="Buy and Sell L$"/>
<menu_item_call label="Торговые иÑходÑщие..." name="MerchantOutbox"/>
<menu_item_call label="Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ аккаунта..." name="Manage My Account"/>
@@ -30,6 +33,7 @@
<menu_item_check label="Разговоры..." name="Conversations"/>
<menu_item_check label="Локальный чат..." name="Nearby Chat"/>
<menu_item_check label="Говорить" name="Speak"/>
+ <menu_item_check label="Журнал разговора..." name="Conversation Log..."/>
<menu label="Изменение голоÑа" name="VoiceMorphing">
<menu_item_check label="Без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð³Ð¾Ð»Ð¾Ñа" name="NoVoiceMorphing"/>
<menu_item_check label="ПроÑмотр..." name="Preview"/>
@@ -40,6 +44,7 @@
<menu_item_check label="Группы" name="My Groups"/>
<menu_item_check label="Люди неподалеку" name="Active Speakers"/>
<menu_item_call label="Черный ÑпиÑок" name="Block List"/>
+ <menu_item_check label="Ðе беÑпокоить" name="Do Not Disturb"/>
</menu>
<menu label="Мир" name="World">
<menu_item_call label="Добавить закладку на Ñто меÑто" name="Create Landmark Here"/>
@@ -108,13 +113,13 @@
<menu_item_call label="Включить Ñледующую" name="Include Next Part"/>
<menu_item_call label="Включить предыдущую" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Ðаборы ÑвÑзей..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Ð¤Ð¾ÐºÑƒÑ Ð½Ð° выбранном" name="Focus on Selection"/>
<menu_item_call label="Приблизить к выбранному" name="Zoom to Selection"/>
<menu label="Объект" name="Object">
<menu_item_call label="Купить" name="Menu Object Buy"/>
<menu_item_call label="ВзÑÑ‚ÑŒ" name="Menu Object Take"/>
<menu_item_call label="ВзÑÑ‚ÑŒ копию" name="Take Copy"/>
- <menu_item_call label="Сохранить в моем инвентаре" name="Save Object Back to My Inventory"/>
<menu_item_call label="Сохранить в контенте объектов" name="Save Object Back to Object Contents"/>
<menu_item_call label="Вернуть объект" name="Return Object back to Owner"/>
</menu>
@@ -270,6 +275,7 @@
<menu_item_check label="Ð¡Ð»ÑƒÑ‡Ð°Ð¹Ð½Ð°Ñ Ñ‡Ð°Ñтота кадров" name="Randomize Framerate"/>
<menu_item_check label="ПериодичеÑкое замедление кадров" name="Periodic Slow Frame"/>
<menu_item_check label="ТеÑÑ‚ кадров" name="Frame Test"/>
+ <menu_item_call label="Профиль кадра" name="Frame Profile"/>
</menu>
<menu label="Визуализировать метаданные" name="Render Metadata">
<menu_item_check label="Рамки" name="Bounding Boxes"/>
@@ -304,9 +310,10 @@
<menu_item_check label="ОÑи" name="Axes"/>
<menu_item_check label="КаÑательный базиÑ" name="Tangent Basis"/>
<menu_item_call label="Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñ‚ÐµÐºÑтура в оÑнове" name="Selected Texture Info Basis"/>
+ <menu_item_call label="Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ выбранном материале" name="Selected Material Info"/>
<menu_item_check label="КаркаÑ" name="Wireframe"/>
<menu_item_check label="Смыкание объектов" name="Object-Object Occlusion"/>
- <menu_item_check label="ОÑвещение и тени" name="Advanced Lighting Model"/>
+ <menu_item_check label="РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ оÑвещениÑ" name="Advanced Lighting Model"/>
<menu_item_check label="Тени от Ñолнца, луны и прожекторов" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO и Ñглаживание теней" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Отладка GL" name="Debug GL"/>
@@ -316,7 +323,6 @@
<menu_item_check label="ТекÑтуры анимаций" name="Animation Textures"/>
<menu_item_check label="Отключить текÑтуры" name="Disable Textures"/>
<menu_item_check label="ТекÑтуры в полном разрешении" name="Rull Res Textures"/>
- <menu_item_check label="ÐÑ‚Ð»Ð°Ñ Ñ‚ÐµÐºÑтур (ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ)" name="Texture Atlas"/>
<menu_item_check label="Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ñоединенных иÑточников Ñвета" name="Render Attached Lights"/>
<menu_item_check label="Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ñоединенных чаÑтиц" name="Render Attached Particles"/>
<menu_item_check label="ПарÑщие ÑветÑщиеÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹" name="Hover Glow Objects"/>
@@ -352,7 +358,6 @@
<menu_item_call label="Вывод ÑредÑтва фокуÑировки" name="Dump Focus Holder"/>
<menu_item_call label="Печать информации о выбранных объектах" name="Print Selected Object Info"/>
<menu_item_call label="Печать информации об агенте" name="Print Agent Info"/>
- <menu_item_call label="СтатиÑтичеÑÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ памÑти" name="Memory Stats"/>
<menu_item_check label="КонÑоль отладки региона" name="Region Debug Console"/>
<menu_item_check label="Отладка SelectMgr" name="Debug SelectMgr"/>
<menu_item_check label="Отладка щелчков мышью" name="Debug Clicks"/>
@@ -386,7 +391,6 @@
</menu>
<menu_item_call label="Скинуть параметры" name="Force Params to Default"/>
<menu_item_check label="Данные об анимации" name="Animation Info"/>
- <menu_item_check label="ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñ‹Ñ… движений" name="Slow Motion Animations"/>
<menu_item_check label="Показать взглÑд" name="Show Look At"/>
<menu_item_check label="Показать указание" name="Show Point At"/>
<menu_item_check label="Отладка обновленных движений ÑуÑтавов" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 00ab0b5763..1dc8202b00 100755
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -210,6 +210,14 @@
Добавить Ñту ÑпоÑобноÑÑ‚ÑŒ к роли «[ROLE_NAME]»?
<usetemplate name="okcancelbuttons" notext="Ðет" yestext="Да"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Ð’Ñ‹ ÑобираетеÑÑŒ иÑключить [AVATAR_NAME] из группы.
+ <usetemplate ignoretext="Подтвердите иÑключение учаÑтника из группы" name="okcancelignore" notext="Отмена" yestext="Выкинуть"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Ð’Ñ‹ ÑобираетеÑÑŒ иÑключить [COUNT] учаÑтников из группы.
+ <usetemplate ignoretext="Подтвердите иÑключение учаÑтников из группы" name="okcancelignore" notext="Отмена" yestext="Выкинуть"/>
+ </notification>
<notification name="AttachmentDrop">
Ð’Ñ‹ ÑобираетеÑÑŒ ÑброÑить Ñвое приÑоединение.
Продолжить?
@@ -1111,7 +1119,7 @@
Введите более выÑокую цену.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- ИмеетÑÑ ÑÑылка, ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ ÐºÐ°Ðº минимум на один из выбранных вами предметов. ЕÑли удалить Ñтот предмет, его ÑÑылки переÑтанут работать. ÐаÑтоÑтельно рекомендуетÑÑ Ñначала удалить ÑÑылки.
+ По крайней мере у одного предмета еÑÑ‚ÑŒ ÑÑылки, указывающие на него. ЕÑли удалить Ñтот предмет, его ÑÑылки переÑтанут работать. ÐаÑтоÑтельно рекомендуетÑÑ Ñначала удалить ÑÑылки.
ДейÑтвительно удалить Ñти предметы?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
@@ -1161,7 +1169,7 @@
Вы не владеете по крайней мере одним объектом.
ДейÑтвительно удалить Ñти предметы?
- <usetemplate name="okcancelbuttons" notext="отмена" yestext="OK"/>
+ <usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
Как минимум один объект фикÑирован.
@@ -1480,13 +1488,43 @@ http://secondlife.com/download.
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
Загружено обÑзательное обновление.
-ВерÑÐ¸Ñ [VERSION]
+ВерÑÐ¸Ñ [VERSION]. [[INFO_URL] Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении]
Ðеобходимо перезапуÑтить [APP_NAME] Ð´Ð»Ñ ÑƒÑтановки обновлениÑ.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
Ðеобходимо перезапуÑтить [APP_NAME] Ð´Ð»Ñ ÑƒÑтановки обновлениÑ.
+[[INFO_URL] Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ Загружено обновление Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ верÑии [APP_NAME].
+ВерÑÐ¸Ñ [VERSION]
+Ðа замену Ñтой ÑкÑпериментальной верÑии клиента предлагаетÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚ [NEW_CHANNEL];
+Ñм. [[INFO_URL] об Ñтом обновлении]
+ <usetemplate name="okcancelbuttons" notext="Позже..." yestext="УÑтановите обновление и перезапуÑтите [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ Загружено обновление Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ верÑии [APP_NAME].
+ВерÑÐ¸Ñ [VERSION]
+Ðа замену Ñтой ÑкÑпериментальной верÑии клиента предлагаетÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚ [NEW_CHANNEL];
+Ñм. [[INFO_URL] Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении]
+ <usetemplate name="okcancelbuttons" notext="Позже..." yestext="УÑтановите обновление и перезапуÑтите [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ Загружено обÑзательное обновление.
+ВерÑÐ¸Ñ [VERSION]
+Ðа замену Ñтой ÑкÑпериментальной верÑии клиента предлагаетÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚ [NEW_CHANNEL];
+Ñм. [[INFO_URL] Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении]
+
+Ðеобходимо перезапуÑтить [APP_NAME] Ð´Ð»Ñ ÑƒÑтановки обновлениÑ.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ Ðеобходимо перезапуÑтить [APP_NAME] Ð´Ð»Ñ ÑƒÑтановки обновлениÑ.
+Ðа замену Ñтой ÑкÑпериментальной верÑии клиента предлагаетÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚ [NEW_CHANNEL];
+Ñм. [[INFO_URL] Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1537,6 +1575,10 @@ http://secondlife.com/download.
Хотите покинуть группу?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ Ðевозможно покинуть группу. Ð’Ñ‹ не можете покинуть группу, так как вы ее поÑледний владелец. Сначала назначьте владельцем другого учаÑтника.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Ð’Ñ‹ ДЕЙСТВИТЕЛЬÐО хотите выброÑить вÑех жителей Ñ Ñетки?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="ВыброÑить вÑех жителей"/>
@@ -2396,9 +2438,7 @@ http://secondlife.com/download.
выбрать команду «ТелепортациÑ».)
</notification>
<notification name="TeleportToPerson">
- Чтобы обратитьÑÑ Ðº жителю, например «[NAME]», нажмите кнопку «Люди», выберите Ð¶Ð¸Ñ‚ÐµÐ»Ñ Ð² поÑвившемÑÑ Ð¾ÐºÐ½Ðµ и нажмите кнопку
- «IM» внизу окна.
- (Также можно дважды щелкнуть Ð¸Ð¼Ñ Ð¶Ð¸Ñ‚ÐµÐ»Ñ Ð² ÑпиÑке или щелкнуть его правой кнопкой мыши и выбрать команду «IM».)
+ Чтобы начать личный разговор, щелкните аватар ÑобеÑедника правой кнопкой мыши и выберите в меню «IM».
</notification>
<notification name="CantSelectLandFromMultipleRegions">
ÐÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð±Ñ€Ð°Ñ‚ÑŒ землю Ñ Ð¾Ð±ÐµÐ¸Ñ… Ñторон границы между Ñерверами.
@@ -2772,6 +2812,15 @@ http://secondlife.com/download.
<button name="Deny" text="Отклонить"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ Объект &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;» владельца «[NAME]» требует Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° выполнение Ñкрипта; разрешение не раÑпознаетÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð¼ и не будет предоÑтавлено
+
+Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñтого Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑƒÑтановите поÑледнюю верÑию клиента из [DOWNLOADURL].
+ <form name="form">
+ <button name="Deny" text="OK"/>
+ <button name="Mute" text="Заблокировать"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
[NAME] – «&lt;nolink&gt;[TITLE]&lt;/nolink&gt;»
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/ru/panel_people.xml b/indra/newview/skins/default/xui/ru/panel_people.xml
index 7da7fb3191..9606f0aec1 100755
--- a/indra/newview/skins/default/xui/ru/panel_people.xml
+++ b/indra/newview/skins/default/xui/ru/panel_people.xml
@@ -49,6 +49,9 @@
<menu_button name="plus_btn" tool_tip="ПриÑоединитьÑÑ Ðº группе/Ñоздать новую группу"/>
<dnd_button name="minus_btn" tool_tip="Покинуть выбранную группу"/>
</panel>
+ <text name="groupcount">
+ Ð’Ñ‹ входите в [COUNT] групп и можете приÑоединитьÑÑ ÐµÑ‰Ðµ к [REMAINING].
+ </text>
</panel>
<panel label="ÐЕДÐÐ’ÐИЕ" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
index 6383fc8c2c..914426c91e 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ТекÑтовый чат" name="chat">
- <panel>
- <check_box initial_value="иÑтина" label="ВоÑпроизводить анимацию ввода текÑта при общении" name="play_typing_animation"/>
+ <panel name="general_chat_settings">
+ <check_box initial_value="true" label="ВоÑпроизводить анимацию ввода текÑта при общении" name="play_typing_animation"/>
<check_box label="ОтправлÑÑ‚ÑŒ мне ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ почте, когда Ð¼ÐµÐ½Ñ Ð½ÐµÑ‚ в Ñети" name="send_im_to_email"/>
<check_box label="Только Ð´Ñ€ÑƒÐ·ÑŒÑ Ð¸ группы могут звонить мне и отправлÑÑ‚ÑŒ IM" name="voice_call_friends_only_check"/>
<text name="font_size">
@@ -14,10 +14,7 @@
</combo_box>
<check_box label="Чат в пузырьках" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- УведомлениÑ
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
IM друзей:
</text>
@@ -25,8 +22,9 @@
<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
<item label="Сообщение во вÑплывающем окне" name="PopUpMessage" value="вÑплывание"/>
<item label="Мигание кнопки на панели инÑтрументов" name="FlashToolbarButton" value="мигание"/>
- <item label="Ðет" name="None" value="нет"/>
+ <item label="Без дейÑтвиÑ" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Звук" name="play_sound_friend_im"/>
<text name="non_friend_ims">
IM чужих:
</text>
@@ -34,8 +32,9 @@
<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
<item label="Сообщение во вÑплывающем окне" name="PopUpMessage" value="вÑплывание"/>
<item label="Мигание кнопки на панели инÑтрументов" name="FlashToolbarButton" value="мигание"/>
- <item label="Ðет" name="None" value="нет"/>
+ <item label="Без дейÑтвиÑ" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Звук" name="play_sound_non_friend_im"/>
<text name="conference_ims">
IM конференции:
</text>
@@ -43,8 +42,9 @@
<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
<item label="Сообщение во вÑплывающем окне" name="PopUpMessage" value="вÑплывание"/>
<item label="Мигание кнопки на панели инÑтрументов" name="FlashToolbarButton" value="мигание"/>
- <item label="Ðет" name="None" value="нет"/>
+ <item label="Без дейÑтвиÑ" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Звук" name="play_sound_conference_im"/>
<text name="group_chat">
Групповой чат:
</text>
@@ -52,8 +52,9 @@
<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
<item label="Сообщение во вÑплывающем окне" name="PopUpMessage" value="вÑплывание"/>
<item label="Мигание кнопки на панели инÑтрументов" name="FlashToolbarButton" value="мигание"/>
- <item label="Ðет" name="None" value="нет"/>
+ <item label="Без дейÑтвиÑ" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Звук" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
Локальный чат:
</text>
@@ -61,13 +62,24 @@
<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
<item label="Сообщение во вÑплывающем окне" name="PopUpMessage" value="вÑплывание"/>
<item label="Мигание кнопки на панели инÑтрументов" name="FlashToolBarButton" value="мигание"/>
- <item label="Ðет" name="None" value="нет"/>
+ <item label="Без дейÑтвиÑ" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Звук" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ IM объектов:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Сообщение во вÑплывающем окне" name="PopUpMessage" value="вÑплывание"/>
+ <item label="Мигание кнопки на панели инÑтрументов" name="FlashToolBarButton" value="мигание"/>
+ <item label="Без дейÑтвиÑ" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Звук" name="play_sound_object_im"/>
<text name="notifications_alert">
Ð”Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²Ñех уведомлений вызовите меню «Общение &gt; Ðе беÑпокоить».
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Звук:
</text>
@@ -76,7 +88,7 @@
<check_box label="Предложение телепортации" name="teleport_offer"/>
<check_box label="Предложение инвентарÑ" name="inventory_offer"/>
</panel>
- <panel>
+ <panel name="log_settings">
<button label="ОчиÑтить журнал..." name="clear_log"/>
<button label="Удалить запиÑи..." name="delete_transcripts"/>
<button label="Обзор..." label_selected="Обзор" name="log_path_button"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
index a7e826f5fc..029e72e137 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="иÑтина" label="Локальный Ñвет" name="LocalLights"/>
<check_box initial_value="иÑтина" label="Базовые шейдеры" name="BasicShaders" tool_tip="Отключение Ñтого параметра может предотвратить завиÑание некоторых видеокарт"/>
<check_box initial_value="иÑтина" label="ÐтмоÑферные шейдеры" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="иÑтина" label="ОÑвещение и тени" name="UseLightShaders"/>
+ <check_box initial_value="иÑтина" label="РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ оÑвещениÑ" name="UseLightShaders"/>
<check_box initial_value="иÑтина" label="Объемный Ñвет" name="UseSSAO"/>
<check_box initial_value="иÑтина" label="Глубина полÑ" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
index 8e7fc71f0d..e9c0c7de10 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="УÑтанавливать автоматичеÑки" name="Install_automatically"/>
<combo_box.item label="Загружать и уÑтанавливать Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ" name="Install_manual"/>
</combo_box>
+ <check_box label="УÑтанавливать бета-верÑии" name="update_willing_to_test"/>
<text name="Proxy Settings:">
ÐаÑтройки прокÑи-Ñервера:
</text>
diff --git a/indra/newview/skins/default/xui/ru/panel_script_ed.xml b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
index 05ccaeb54b..a9e5d9ef10 100755
--- a/indra/newview/skins/default/xui/ru/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Выделить вÑе" name="Select All"/>
<menu_item_call label="СнÑÑ‚ÑŒ выделение" name="Deselect"/>
<menu_item_call label="ПоиÑк и замена..." name="Search / Replace..."/>
+ <menu_item_call label="Перейти на Ñтроку..." name="Go to line..."/>
</menu>
<menu label="Справка" name="Help">
<menu_item_call label="Справка..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/ru/panel_tools_texture.xml b/indra/newview/skins/default/xui/ru/panel_tools_texture.xml
new file mode 100644
index 0000000000..60717a3d1d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ТекÑтура" name="Texture">
+ <panel.string name="string repeats per meter">
+ Повторений на метр
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Повторений на грань
+ </panel.string>
+ <text name="color label">
+ Цвет
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Щелкните Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° цвета"/>
+ <text name="color trans">
+ ПрозрачноÑÑ‚ÑŒ %
+ </text>
+ <text name="glow label">
+ Свечение
+ </text>
+ <check_box label="СобÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ ÑркоÑÑ‚ÑŒ" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Материалы" name="Materials"/>
+ <combo_box.item label="Медиа" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="ТекÑтура (раÑÑеÑннаÑ)" name="Texture (diffuse)"/>
+ <combo_box.item label="ШероховатоÑÑ‚ÑŒ (обычнаÑ)" name="Bumpiness (normal)"/>
+ <combo_box.item label="БлеÑк (зеркальный)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="ТекÑтура" name="texture control" tool_tip="Щелкните Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° изображениÑ"/>
+ <text name="label alphamode">
+ Ðльфа-режим
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Ðет" name="None"/>
+ <combo_box.item label="Ðльфа-Ñмешивание" name="Alpha blending"/>
+ <combo_box.item label="Ðльфа-маÑкирование" name="Alpha masking"/>
+ <combo_box.item label="Ð˜Ð·Ð»ÑƒÑ‡Ð°ÑŽÑ‰Ð°Ñ Ð¼Ð°Ñка" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ ОтÑечка маÑки
+ </text>
+ <texture_picker label="ТекÑтура" name="bumpytexture control" tool_tip="Щелкните Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° изображениÑ"/>
+ <text name="label bumpiness">
+ РельефноÑÑ‚ÑŒ
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Ðет" name="None"/>
+ <combo_box.item label="ЯркоÑÑ‚ÑŒ" name="Brightness"/>
+ <combo_box.item label="По темному" name="Darkness"/>
+ <combo_box.item label="дерево" name="woodgrain"/>
+ <combo_box.item label="кора" name="bark"/>
+ <combo_box.item label="кирпич" name="bricks"/>
+ <combo_box.item label="ÑˆÐ°Ñ…Ð¼Ð°Ñ‚Ð½Ð°Ñ Ð´Ð¾Ñка" name="checker"/>
+ <combo_box.item label="бетон" name="concrete"/>
+ <combo_box.item label="ÑÑ‚Ð°Ñ€Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ°" name="crustytile"/>
+ <combo_box.item label="теÑаный камень" name="cutstone"/>
+ <combo_box.item label="диÑки" name="discs"/>
+ <combo_box.item label="гравий" name="gravel"/>
+ <combo_box.item label="чашка Петри" name="petridish"/>
+ <combo_box.item label="Ñайдинг" name="siding"/>
+ <combo_box.item label="ÐºÐ°Ð¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ°" name="stonetile"/>
+ <combo_box.item label="штукатурка" name="stucco"/>
+ <combo_box.item label="приÑоÑка" name="suction"/>
+ <combo_box.item label="переплетение" name="weave"/>
+ </combo_box>
+ <texture_picker label="ТекÑтура" name="shinytexture control" tool_tip="Щелкните Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° изображениÑ"/>
+ <text name="label shininess">
+ БлеÑк
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Ðет" name="None"/>
+ <combo_box.item label="Ðизкий" name="Low"/>
+ <combo_box.item label="Средний" name="Medium"/>
+ <combo_box.item label="Ð’Ñ‹Ñокий" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ ГлÑнец
+ </text>
+ <text name="label environment">
+ Среда
+ </text>
+ <text name="label shinycolor">
+ Цвет
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Щелкните Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° цвета"/>
+ <text name="media_info">
+ URL выбранного медиа (еÑли еÑÑ‚ÑŒ)
+ </text>
+ <button label="Выбрать..." name="add_media" tool_tip="Добавить медиа"/>
+ <button label="Удалить" name="delete_media" tool_tip="Удалить медиа-текÑтуру"/>
+ <button label="ВыровнÑÑ‚ÑŒ" label_selected="ВыровнÑÑ‚ÑŒ медиа" name="button align" tool_tip="МаÑштабирование медиа-текÑтуры (Ñначала нужно загрузить)"/>
+ <text name="tex gen">
+ Ðаложение
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="По умолчанию" name="Default"/>
+ <combo_box.item label="Ðа плоÑкоÑÑ‚ÑŒ" name="Planar"/>
+ </combo_box>
+ <spinner label="МаÑштаб по горизонтали" name="TexScaleU"/>
+ <spinner label="МаÑштаб по вертикали" name="TexScaleV"/>
+ <spinner label="Повторений на метр" name="rptctrl"/>
+ <spinner label="Поворот, градуÑÑ‹" name="TexRot"/>
+ <spinner label="Смещение по горизонтали" name="TexOffsetU"/>
+ <spinner label="Смещение по вертикали" name="TexOffsetV"/>
+ <spinner label="МаÑштаб по горизонтали" name="bumpyScaleU"/>
+ <spinner label="МаÑштаб по вертикали" name="bumpyScaleV"/>
+ <spinner label="Поворот, градуÑÑ‹" name="bumpyRot"/>
+ <spinner label="Смещение по горизонтали" name="bumpyOffsetU"/>
+ <spinner label="Смещение по вертикали" name="bumpyOffsetV"/>
+ <spinner label="МаÑштаб по горизонтали" name="shinyScaleU"/>
+ <spinner label="МаÑштаб по вертикали" name="shinyScaleV"/>
+ <spinner label="Поворот, градуÑÑ‹" name="shinyRot"/>
+ <spinner label="Смещение по горизонтали" name="shinyOffsetU"/>
+ <spinner label="Смещение по вертикали" name="shinyOffsetV"/>
+ <check_box initial_value="ложь" label="СоглаÑование" name="checkbox planar align" tool_tip="СоглаÑование текÑтур на вÑех выбранных гранÑÑ… по поÑледней выбранной грани. Должно быть выбрано наложение по плоÑкоÑÑ‚Ñм."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/role_actions.xml b/indra/newview/skins/default/xui/ru/role_actions.xml
index b6ba818abd..3f31ecfa10 100755
--- a/indra/newview/skins/default/xui/ru/role_actions.xml
+++ b/indra/newview/skins/default/xui/ru/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="К Ñтим ÑпоÑобноÑÑ‚Ñм отноÑитÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ ÑƒÑ‡Ð°Ñтка и Ð¿ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð°Ñтроек, поиÑк видимых каталогов, а также наÑтройки точек и вариантов телепортации." name="Parcel Identity">
<action description="Включение-отключение показа меÑта в результатах поиÑка и наÑтройка категории" longdescription="Включить-отключить показ меÑта в результатах поиÑка и наÑтроить категорию учаÑтка можно в окне «О земле» на вкладке «Параметры»." name="land find places" value="17"/>
- <action description="Изменение Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ опиÑÐ°Ð½Ð¸Ñ ÑƒÑ‡Ð°Ñтка, наÑтройки «Показать меÑто в поиÑке»" longdescription="Изменение Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ опиÑÐ°Ð½Ð¸Ñ ÑƒÑ‡Ð°Ñтка, наÑтройки «Показать меÑто в поиÑке». Это можно выполнить в окне «О земле» на вкладке «Параметры»." name="land change identity" value="18"/>
+ <action description="Изменение Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ опиÑÐ°Ð½Ð¸Ñ ÑƒÑ‡Ð°Ñтка, наÑтройки «Умеренный контент»" longdescription="Изменение Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ опиÑÐ°Ð½Ð¸Ñ ÑƒÑ‡Ð°Ñтка, наÑтройки «Умеренный контент». Это можно выполнить в окне «О земле» на вкладке «Параметры»." name="land change identity" value="18"/>
<action description="УÑтановка конечной точки и варианта телепортации" longdescription="УчаÑтники роли Ñ Ñтой ÑпоÑобноÑтью могут уÑтановить конечную точку телепортации на учаÑтке группы, а также задать вариант телепортации Ð´Ð»Ñ ÑƒÑÐ¸Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ. Это можно выполнить в окне «О земле» на вкладке «Параметры»." name="land set landing point" value="19"/>
</action_set>
<action_set description="К Ñтим ÑпоÑобноÑÑ‚Ñм отноÑитÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ наÑтроек учаÑтка, в Ñ‚. ч. «Создать объекты», «Изменить ландшафт», а также наÑтройки музыки и медиа." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index d7d4df4a37..49ce33ec96 100755
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -139,6 +139,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
У клиента, которым вы пользуетеÑÑŒ, больше нет доÑтупа к игре Second Life. Загрузить новую верÑию клиента можно по адреÑу
http://secondlife.com/download
@@ -448,6 +451,9 @@ support@secondlife.com.
<string name="SLappAgentRequestFriend">
Предложить дружбу
</string>
+ <string name="SLappAgentRemoveFriend">
+ Удаление друга
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Закрыть (⌘W)
</string>
@@ -835,6 +841,9 @@ support@secondlife.com.
<string name="multiple_textures">
ÐеÑколько
</string>
+ <string name="use_texture">
+ ИÑпользовать текÑтуру
+ </string>
<string name="texture_loading">
Загрузка...
</string>
@@ -934,6 +943,21 @@ support@secondlife.com.
<string name="TeleportYourAgent">
Телепортировать ваÑ
</string>
+ <string name="JoinAnExperience">
+ ПриÑоединитеÑÑŒ
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Отключить Ð¸Ð·Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ управлении ÑпиÑками доÑтупа к землевладениÑм
+ </string>
+ <string name="OverrideYourAnimations">
+ Заменить ваши Ñтандартные анимации
+ </string>
+ <string name="ScriptReturnObjects">
+ Вернуть объекты от вашего имени
+ </string>
+ <string name="UnknownScriptPermission">
+ (неизвеÑтно)!
+ </string>
<string name="SIM_ACCESS_PG">
Общий
</string>
@@ -1965,6 +1989,12 @@ support@secondlife.com.
<string name="ATTACH_HUD_BOTTOM_RIGHT">
Данные в игре внизу Ñправа
</string>
+ <string name="ATTACH_NECK">
+ ШеÑ
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Центр аватара
+ </string>
<string name="CursorPos">
Строка [LINE], Ñтолбец [COLUMN]
</string>
@@ -2991,6 +3021,9 @@ support@secondlife.com.
<string name="Hip Width">
Ширина бедер
</string>
+ <string name="Hover">
+ Ðаведите
+ </string>
<string name="In">
Внутрь
</string>
@@ -5087,4 +5120,7 @@ support@secondlife.com.
<string name="logging_calls_enabled_log_empty">
Ðет зарегиÑтрированных разговоров. ЕÑли вы обратитеÑÑŒ к кому-то или наоборот, в журнале поÑвитÑÑ Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ.
</string>
+ <string name="loading_chat_logs">
+ Загрузка...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/tr/floater_about.xml b/indra/newview/skins/default/xui/tr/floater_about.xml
index 4dcf6200c6..7b925e8830 100755
--- a/indra/newview/skins/default/xui/tr/floater_about.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about.xml
@@ -9,6 +9,8 @@
</floater.string>
<floater.string name="AboutPosition">
&lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP]) üzerinde bulunan [REGION] içerisinde [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] konumundasınız
+SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(küresel koordinatlar [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/tr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/tr/floater_bulk_perms.xml
index 1d929a2dd3..bf4473ce1f 100755
--- a/indra/newview/skins/default/xui/tr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/tr/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="İÇERİK İZİNLERİNİ DÜZENLE">
+<floater name="floaterbulkperms" title="İÇERİK İZİNLERİNİ AYARLA">
<floater.string name="nothing_to_modify_text">
Seçim içerisinde düzenlenebilir içerik yok.
</floater.string>
@@ -24,7 +24,7 @@
<button label="√ Tümü" name="check_all"/>
<button label="Temizle" label_selected="Hiçbiri" name="check_none"/>
<text name="newperms">
- Yeni İçerik İzinleri
+ Şunun İçin İçerik İzinlerini Ayarla:
</text>
<text name="GroupLabel">
Grup:
@@ -40,6 +40,7 @@
<check_box label="DeÄŸiÅŸtir" name="next_owner_modify"/>
<check_box label="Kopyala" name="next_owner_copy"/>
<check_box initial_value="true" label="Aktar" name="next_owner_transfer" tool_tip="Sonraki sahibi bu nesneyi verebilir veya tekrar satabilir"/>
- <button label="Tamam" name="apply"/>
+ <button label="Tamam" name="ok"/>
+ <button label="Uygula" name="apply"/>
<button label="Ä°ptal" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_goto_line.xml b/indra/newview/skins/default/xui/tr/floater_goto_line.xml
new file mode 100644
index 0000000000..673fe553cc
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="ÅžU SATIRA GÄ°T:">
+ <button label="Tamam" label_selected="Tamam" name="goto_btn"/>
+ <text name="txt">
+ Şu satıra git:
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_im_session.xml b/indra/newview/skins/default/xui/tr/floater_im_session.xml
index 8ce8f0fe13..52a10feeef 100755
--- a/indra/newview/skins/default/xui/tr/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/tr/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="Sohbeti çevir" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Sohbeti çevir" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml
index 35f47e6dfa..6eecc7fb77 100755
--- a/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
Göster:
</text>
- <check_box label="Test" name="show_world"/>
+ <check_box label="Dünya" name="show_world"/>
<check_box label="Sadece hareket ettirilebilir nesneler" name="show_world_movables_only"/>
<check_box label="Navigasyon örgüsü" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
index 9ba214ff31..0cb233a657 100755
--- a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="Dondur" name="Freeze..."/>
<menu_item_call label="Çıkar" name="Eject..."/>
<menu_item_call label="Dokularda Hata Ayıkla" name="Debug..."/>
+ <menu_item_call label="XML Dökümünü Al" name="Dump XML"/>
<menu_item_call label="Yakınlaştır" name="Zoom In"/>
<menu_item_call label="Öde" name="Pay..."/>
<menu_item_call label="Nesne Profili" name="Object Inspect"/>
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
index 16d1e3f356..ff7c718979 100755
--- a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="Gruplarım" name="Groups..."/>
<menu_item_call label="Profilim" name="Profile..."/>
<menu_item_call label="Dokularda Hata Ayıkla" name="Debug..."/>
+ <menu_item_call label="XML Dökümünü Al" name="Dump XML"/>
<menu_item_call label="Bırak" name="Drop"/>
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
index 7d691d2ac5..0da328a894 100755
--- a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="Dondur" name="Freeze..."/>
<menu_item_call label="Çıkar" name="Eject..."/>
<menu_item_call label="Dokularda Hata Ayıkla" name="Debug..."/>
+ <menu_item_call label="XML Dökümünü Al" name="Dump XML"/>
<menu_item_call label="Yakınlaştır" name="Zoom In"/>
<menu_item_call label="Öde" name="Pay..."/>
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
index c520aff521..6996dc612f 100755
--- a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="Gruplarım" name="Groups..."/>
<menu_item_call label="Profilim" name="Profile..."/>
<menu_item_call label="Dokularda Hata Ayıkla" name="Debug..."/>
+ <menu_item_call label="XML Dökümünü Al" name="Dump XML"/>
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_conversation.xml b/indra/newview/skins/default/xui/tr/menu_conversation.xml
index 31404f2501..c2773cdc26 100644
--- a/indra/newview/skins/default/xui/tr/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/tr/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Sohbeti kapat" name="close_conversation"/>
<menu_item_call label="Ses sohbetini aç" name="open_voice_conversation"/>
<menu_item_call label="Ses bağlantısını kes" name="disconnect_from_voice"/>
+ <menu_item_call label="Seçileni Kapat" name="close_selected_conversations"/>
<menu_item_call label="Profili Göster" name="view_profile"/>
<menu_item_call label="AÄ°" name="im"/>
<menu_item_call label="Işınlama teklif et" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_land.xml b/indra/newview/skins/default/xui/tr/menu_land.xml
index db65f1af1e..d6d8dbf730 100755
--- a/indra/newview/skins/default/xui/tr/menu_land.xml
+++ b/indra/newview/skins/default/xui/tr/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="Geçiş Hakkı Satın Al" name="Land Buy Pass"/>
<menu_item_call label="Ä°nÅŸa Et" name="Create"/>
<menu_item_call label="Yüzeyi Düzenle" name="Edit Terrain"/>
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml
index f27908bf7a..79c95407e8 100755
--- a/indra/newview/skins/default/xui/tr/menu_login.xml
+++ b/indra/newview/skins/default/xui/tr/menu_login.xml
@@ -18,7 +18,13 @@
<menu_item_call label="Hizmet Şartlarını Göster" name="TOS"/>
<menu_item_call label="Kritik İletiyi Göster" name="Critical"/>
<menu_item_call label="Web İçeriği Gezdiricisi Hata Ayıklama Testi" name="Web Content Floater Debug Test"/>
- <menu label="Günlük Tutma Seviyesini Seç" name="Set Logging Level"/>
+ <menu label="Günlük Tutma Seviyesini Seç" name="Set Logging Level">
+ <menu_item_check label="Hata ayıkla" name="Debug"/>
+ <menu_item_check label="Bilgi" name="Info"/>
+ <menu_item_check label="Uyarı" name="Warning"/>
+ <menu_item_check label="Hata" name="Error"/>
+ <menu_item_check label="Hiçbiri" name="None"/>
+ </menu>
<menu_item_check label="Izgara Seçiciyi Göster" name="Show Grid Picker"/>
<menu_item_call label="Bildirimler Konsolunu Göster" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_mute_particle.xml b/indra/newview/skins/default/xui/tr/menu_mute_particle.xml
new file mode 100644
index 0000000000..a05a745ed0
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_object.xml b/indra/newview/skins/default/xui/tr/menu_object.xml
index 72f7adf016..2f8b5c0362 100755
--- a/indra/newview/skins/default/xui/tr/menu_object.xml
+++ b/indra/newview/skins/default/xui/tr/menu_object.xml
@@ -3,13 +3,13 @@
<menu_item_call label="Dokun" name="Object Touch"/>
<menu_item_call label="Düzenle" name="Edit..."/>
<menu_item_call label="Ä°nÅŸa Et" name="Build"/>
- <menu_item_call label="Bağlantı kümelerinde göster" name="show_in_linksets"/>
- <menu_item_call label="Karakterlerde göster" name="show_in_characters"/>
<menu_item_call label="Aç" name="Open"/>
<menu_item_call label="Buraya Otur" name="Object Sit"/>
<menu_item_call label="Kalk" name="Object Stand Up"/>
<menu_item_call label="Nesne Profili" name="Object Inspect"/>
<menu_item_call label="Yakınlaştır" name="Zoom In"/>
+ <menu_item_call label="Bağlantı kümelerinde göster" name="show_in_linksets"/>
+ <menu_item_call label="Karakterlerde göster" name="show_in_characters"/>
<context_menu label="Ãœzerine Koy" name="Put On">
<menu_item_call label="Giy" name="Wear"/>
<menu_item_call label="Ekle" name="Add"/>
@@ -26,4 +26,5 @@
<menu_item_call label="Öde" name="Pay..."/>
<menu_item_call label="Satın Al" name="Buy..."/>
<menu_item_call label="Sil" name="Delete"/>
+ <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_url_agent.xml b/indra/newview/skins/default/xui/tr/menu_url_agent.xml
index b14a0509bf..109cd62495 100755
--- a/indra/newview/skins/default/xui/tr/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/tr/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="Profili Göster" name="show_agent"/>
<menu_item_call label="Aİ Gönder..." name="send_im"/>
<menu_item_call label="ArkadaÅŸ Ekle..." name="add_friend"/>
+ <menu_item_call label="Arkadaşı Çıkar..." name="remove_friend"/>
<menu_item_call label="Adı panoya kopyala" name="url_copy_label"/>
<menu_item_call label="SLurl&apos;yi Panoya Kopyala" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_url_objectim.xml b/indra/newview/skins/default/xui/tr/menu_url_objectim.xml
index 00fa3c27c2..ae68669605 100755
--- a/indra/newview/skins/default/xui/tr/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/tr/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Nesne Profili..." name="show_object"/>
+ <menu_item_call label="Engelle..." name="block_object"/>
<menu_item_call label="Haritada Göster" name="show_on_map"/>
<menu_item_call label="Nesne Konumuna Işınla" name="teleport_to_object"/>
<menu_item_call label="Nesne Adını panoya kopyala" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 35485bb292..4236f91636 100755
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="Beni Anime Etmeyi Durdur" name="Stop Animating My Avatar"/>
<menu_item_call label="Yürü / koş / uç..." name="Walk / run / fly"/>
</menu>
- <menu label="Durum" name="Status"/>
+ <menu label="Durum" name="Status">
+ <menu_item_check label="Uzakta" name="Away"/>
+ <menu_item_check label="Rahatsız Etme" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="L$ Satın Al..." name="Buy and Sell L$"/>
<menu_item_call label="Satıcı Giden Kutusu..." name="MerchantOutbox"/>
<menu_item_call label="Hesap kontrol paneli..." name="Manage My Account"/>
@@ -30,6 +33,7 @@
<menu_item_check label="Sohbetler..." name="Conversations"/>
<menu_item_check label="Yakındaki Sohbet..." name="Nearby Chat"/>
<menu_item_check label="KonuÅŸ" name="Speak"/>
+ <menu_item_check label="Sohbet Günlüğü..." name="Conversation Log..."/>
<menu label="Ses ÅŸekillendirme" name="VoiceMorphing">
<menu_item_check label="Ses ÅŸekillendirme yok" name="NoVoiceMorphing"/>
<menu_item_check label="Önizleme..." name="Preview"/>
@@ -40,6 +44,7 @@
<menu_item_check label="Gruplar" name="My Groups"/>
<menu_item_check label="Yakındaki kişiler" name="Active Speakers"/>
<menu_item_call label="Engelleme Listesi" name="Block List"/>
+ <menu_item_check label="Rahatsız Etme" name="Do Not Disturb"/>
</menu>
<menu label="Dünya" name="World">
<menu_item_call label="Bu Yeri Yer Ä°mlerine Ekle" name="Create Landmark Here"/>
@@ -108,6 +113,7 @@
<menu_item_call label="Sonraki Parçayı Dahil Et" name="Include Next Part"/>
<menu_item_call label="Önceki Parçayı Dahil Et" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="Bağlantı kümeleri..." name="pathfinding_linkset_menu_item"/>
<menu_item_call label="Seçime Odaklan" name="Focus on Selection"/>
<menu_item_call label="Seçimi Yakınlaştır" name="Zoom to Selection"/>
<menu label="Nesne" name="Object">
@@ -277,6 +283,7 @@
<menu_item_check label="Çerçeve Hızını Rastgele Seç" name="Randomize Framerate"/>
<menu_item_check label="Düzenli Yavaş Çerçeve" name="Periodic Slow Frame"/>
<menu_item_check label="Çerçeve Testi" name="Frame Test"/>
+ <menu_item_call label="Çerçeve Profili..." name="Frame Profile"/>
</menu>
<menu label="Meta Verileri Ä°ÅŸle" name="Render Metadata">
<menu_item_check label="Sınırlama Kutuları" name="Bounding Boxes"/>
@@ -311,9 +318,10 @@
<menu_item_check label="Eksenler" name="Axes"/>
<menu_item_check label="Tanjant Temeli" name="Tangent Basis"/>
<menu_item_call label="Seçilen Doku Bilgi Temeli" name="Selected Texture Info Basis"/>
+ <menu_item_call label="Seçilen Malzeme Bilgisi" name="Selected Material Info"/>
<menu_item_check label="Telkafes" name="Wireframe"/>
<menu_item_check label="Görünen Nesneler İçin Gölgeleme" name="Object-Object Occlusion"/>
- <menu_item_check label="Işıklandırma ve Gölgeler" name="Advanced Lighting Model"/>
+ <menu_item_check label="Gelişmiş Aydınlatma Modeli" name="Advanced Lighting Model"/>
<menu_item_check label="Güneş/Ay/Projektörlerden Gelen Gölgeler" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO ve Gölge Yumuşatma" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="GL Hata Ayıklama" name="Debug GL"/>
@@ -323,7 +331,6 @@
<menu_item_check label="Animasyon Dokuları" name="Animation Textures"/>
<menu_item_check label="Dokuları Devre Dışı Bırak" name="Disable Textures"/>
<menu_item_check label="Tam Çöz. Dokular" name="Rull Res Textures"/>
- <menu_item_check label="Doku Atlas (deneysel)" name="Texture Atlas"/>
<menu_item_check label="Eklenmiş Işıkları İşle" name="Render Attached Lights"/>
<menu_item_check label="Eklenmiş Parçacıkları İşle" name="Render Attached Particles"/>
<menu_item_check label="Parıldayan Nesneler Üzerine Gel" name="Hover Glow Objects"/>
@@ -359,7 +366,6 @@
<menu_item_call label="Odaklayıcı Tutucunun Dökümünü Al" name="Dump Focus Holder"/>
<menu_item_call label="Seçilen Nesne Bilgisini Yazdır" name="Print Selected Object Info"/>
<menu_item_call label="Aracı Bilgisini Yazdır" name="Print Agent Info"/>
- <menu_item_call label="Bellek Ä°statistikleri" name="Memory Stats"/>
<menu_item_check label="Bölge Hata Ayıklama Konsolu" name="Region Debug Console"/>
<menu_item_check label="SelectMgr İçin Hata Ayıklama" name="Debug SelectMgr"/>
<menu_item_check label="Tıklamalar İçin Hata Ayıklama" name="Debug Clicks"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index ad92a4b478..492178ab82 100755
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -210,6 +210,14 @@ Bu Yetenek &apos;[ROLE_NAME]&apos; rolüne eklensin mi?
Bu Yetenek &apos;[ROLE_NAME]&apos; rolüne eklensin mi?
<usetemplate name="okcancelbuttons" notext="Hayır" yestext="Evet"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ Gruptan [AVATAR_NAME] adlı üyeyi çıkarmak üzeresiniz.
+ <usetemplate ignoretext="Gruptan bir katılımcının çıkarılmasını doğrulayın" name="okcancelignore" notext="İptal" yestext="Çıkar"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ Gruptan [COUNT] üyeyi çıkarmak üzeresiniz.
+ <usetemplate ignoretext="Gruptan birden çok üyenin çıkarılmasını doğrulayın" name="okcancelignore" notext="İptal" yestext="Çıkar"/>
+ </notification>
<notification name="AttachmentDrop">
Aksesuarınızı çıkarmak üzeresiniz.
Devam etmek istediÄŸinize emin misiniz?
@@ -1111,7 +1119,7 @@ bu simdeki TÃœM ARAZÄ°LERDEN SÄ°LMEK istediÄŸinize emin misiniz?
Lütfen daha yüksek bir tutar girin.
</notification>
<notification name="ConfirmItemDeleteHasLinks">
- Seçtiğiniz öğelerden en az birinin kendisine işaret eden bağlantılı öğeler var. Bu öğeyi silerseniz, bağlantıları kalıcı olarak çalışmaz hale gelecek. Önce bağlantıları silmeniz önemle tavsiye edilir.
+ Öğelerden en az birinde kendisine işaret eden bağlantılar var. Bu öğeyi silerseniz, bağlantıları kalıcı olarak çalışmaz hale gelecek. Önce bağlantıları silmeniz önemle tavsiye edilir.
Bu öğeleri silmek istediğinize emin misiniz?
<usetemplate name="okcancelbuttons" notext="Ä°ptal" yestext="Tamam"/>
@@ -1479,14 +1487,44 @@ Sürüm [VERSION] [[RELEASE_NOTES_FULL_URL] Bu güncelleme hakkında ayrıntılÄ
<usetemplate name="okcancelbuttons" notext="Sonra..." yestext="Şimdi kur ve [APP_NAME] uygulamasını yeniden başlat"/>
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
- Gerekli bir yazılım güncellemesini karşıdan yükledik.
-Sürüm [VERSION]
+ Gerekli bir yazılım güncellemesi indirdik.
+Sürüm [VERSION] [[INFO_URL] Bu güncelleme hakkında ayrıntılı bilgi]
-Güncellemeyi kurmak için [APP_NAME] uygulamasını yeniden başlatmalısınız.
+Güncellemeyi yüklemek için [APP_NAME] uygulamasını yeniden başlatmalısınız.
<usetemplate name="okbutton" yestext="Tamam"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
- Güncellemeyi kurmak için [APP_NAME] uygulamasını yeniden başlatmalısınız.
+ Güncellemeyi yüklemek için [APP_NAME] uygulamasını yeniden başlatmalısınız.
+[[INFO_URL] Bu güncelleme hakkında bilgi]
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ [APP_NAME] kurulumunuz için bir güncelleme indirdik.
+Sürüm [VERSION]
+Bu deneysel görüntüleyicinin yerini bir [NEW_CHANNEL] görüntüleyici aldı;
+bkz. [bu güncelleme hakkında bilgi için [INFO_URL]]
+ <usetemplate name="okcancelbuttons" notext="Sonra..." yestext="Şimdi yükle ve [APP_NAME] uygulamasını yeniden başlat"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ [APP_NAME] kurulumunuz için bir güncelleme indirdik.
+Sürüm [VERSION]
+Bu deneysel görüntüleyicinin yerini bir [NEW_CHANNEL] görüntüleyici aldı;
+bkz. [[INFO_URL] Bu güncelleme hakkında bilgi]
+ <usetemplate name="okcancelbuttons" notext="Sonra..." yestext="Şimdi yükle ve [APP_NAME] uygulamasını yeniden başlat"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ Gerekli bir yazılım güncellemesi indirdik.
+Sürüm [VERSION]
+Bu deneysel görüntüleyicinin yerini bir [NEW_CHANNEL] görüntüleyici aldı;
+bkz. [[INFO_URL] Bu güncelleme hakkında bilgi]
+
+Güncellemeyi yüklemek için [APP_NAME] uygulamasını yeniden başlatmalısınız.
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ Güncellemeyi yüklemek için [APP_NAME] uygulamasını yeniden başlatmalısınız.
+Bu deneysel görüntüleyicinin yerini bir [NEW_CHANNEL] görüntüleyici aldı;
+bkz. [[INFO_URL] Bu güncelleme hakkında bilgi]
<usetemplate name="okbutton" yestext="Tamam"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1537,6 +1575,10 @@ Güncellemeyi kurmak için [APP_NAME] uygulamasını yeniden başlatmalısınız
Gruptan ayrılmak istiyor musunuz?
<usetemplate name="okcancelbuttons" notext="Ä°ptal" yestext="Tamam"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ Gruptan ayrılınamıyor. Gruptan ayrılamazsınız çünkü grubun son sahibisiniz. Lütfen önce sahip rolüne başka bir üye atayın.
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
<notification name="ConfirmKick">
Tüm Sakinleri GERÇEKTEN ağ dışına çıkarmak istiyor musunuz?
<usetemplate name="okcancelbuttons" notext="İptal Et" yestext="Tüm Sakinleri Çıkar"/>
@@ -2396,9 +2438,7 @@ Lütfen tek bir nesne seçin.
&apos;Işınla&apos; seçimini yapabilirsiniz.)
</notification>
<notification name="TeleportToPerson">
- &apos;[NAME]&apos; gibi sakinlerle bağlantıya geçmek için &quot;Kişiler&quot; düğmesine tıklayın, açılan pencereden bir Sakin seçin ve sonra
- pencerenin altında &apos;Anlık İleti&quot; üzerine tıklayın.
- (Listede adlarına çift tıklayarak veya sağ tıklayıp &quot;Anlık İleti&quot;yi seçerek de bunu yapabilirsiniz.)
+ Biriyle özel bir sohbet başlatmak için, avatarlarına sağ tıklayın ve menüden &quot;Aİ&quot; seçimini yapın.
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Sunucunun sınırları dışındaki arazi seçilemez.
@@ -2772,6 +2812,15 @@ Eğer hesabınıza neden erişmek istediğini tam olarak anlamıyorsanız, eriş
<button name="Deny" text="Reddet"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ &apos;[NAME]&apos; tarafından sahip olunan bir nesne olan &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; tarafından istenen çalışma zamanı komut dosyası izni görüntüleyici tarafından tanınmadı ve verilemez.
+
+Bu izni vermek için lütfen [DOWNLOADURL] adresinden görüntüleyicinizi en son sürüme güncelleyin.
+ <form name="form">
+ <button name="Deny" text="Tamam"/>
+ <button name="Mute" text="Engelle"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
[NAME] adlı kişiye ait &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/tr/panel_people.xml b/indra/newview/skins/default/xui/tr/panel_people.xml
index 08efd0aa61..b499ec8307 100755
--- a/indra/newview/skins/default/xui/tr/panel_people.xml
+++ b/indra/newview/skins/default/xui/tr/panel_people.xml
@@ -49,6 +49,9 @@ Birlikte takılacak kişiler mi arıyorsunuz? [secondlife:///app/worldmap Dünya
<menu_button name="plus_btn" tool_tip="Gruba katıl/yeni grup oluştur"/>
<dnd_button name="minus_btn" tool_tip="Seçilen gruptan ayrıl"/>
</panel>
+ <text name="groupcount">
+ [COUNT] gruba üyesiniz, daha [REMAINING] gruba üye olabilirsiniz.
+ </text>
</panel>
<panel label="SON" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
index aaeebdfe6e..d46f3e08cc 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Metin Sohbeti" name="chat">
- <panel>
+ <panel name="general_chat_settings">
<check_box initial_value="true" label="Sohbet sırasında yazma animasyonunu oynat" name="play_typing_animation"/>
<check_box label="Çevrimdışı olduğunda Aİ&apos;ler e-posta ile bana gönderilsin" name="send_im_to_email"/>
<check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/>
@@ -14,19 +14,17 @@
</combo_box>
<check_box label="Balon Sohbeti" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- Bildirimler
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
ArkadaÅŸ AÄ°&apos;leri:
</text>
<combo_box name="FriendIMOptions">
<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+ <item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
- <item label="Hiçbiri" name="None" value="none"/>
+ <item label="Eylem yok" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sesi çal" name="play_sound_friend_im"/>
<text name="non_friend_ims">
ArkadaÅŸ harici AÄ°&apos;ler:
</text>
@@ -34,40 +32,54 @@
<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
<item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
- <item label="Hiçbiri" name="None" value="none"/>
+ <item label="Eylem yok" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sesi çal" name="play_sound_non_friend_im"/>
<text name="conference_ims">
Konferans AÄ°&apos;leri:
</text>
<combo_box name="ConferenceIMOptions">
<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+ <item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
- <item label="Hiçbiri" name="None" value="none"/>
+ <item label="Eylem yok" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sesi çal" name="play_sound_conference_im"/>
<text name="group_chat">
Grup sohbeti:
</text>
<combo_box name="GroupChatOptions">
<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+ <item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
- <item label="Hiçbiri" name="None" value="none"/>
+ <item label="Eylem yok" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sesi çal" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
Yakındaki sohbet:
</text>
<combo_box name="NearbyChatOptions">
<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
- <item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+ <item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
+ <item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolBarButton" value="flash"/>
+ <item label="Eylem yok" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="Sesi çal" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ Nesne AÄ°&apos;leri:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolBarButton" value="flash"/>
- <item label="Hiçbiri" name="None" value="none"/>
+ <item label="Eylem yok" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="Sesi çal" name="play_sound_object_im"/>
<text name="notifications_alert">
Tüm bildirimleri geçici olarak durdurmak için İletişim Kur &gt; Rahatsız Etme seçeneğini kullanın.
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
Sesi çal:
</text>
@@ -76,7 +88,7 @@
<check_box label="Işınlama teklifi" name="teleport_offer"/>
<check_box label="Envanter teklifi" name="inventory_offer"/>
</panel>
- <panel>
+ <panel name="log_settings">
<button label="Günlüğü temizle..." name="clear_log"/>
<button label="Dökümleri sil..." name="delete_transcripts"/>
<button label="Gözat..." label_selected="Gözat" name="log_path_button"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
index ddb83ffc69..25c9e966c7 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="true" label="Yerel Işıklar" name="LocalLights"/>
<check_box initial_value="true" label="Temel gölgeleyiciler" name="BasicShaders" tool_tip="Bu seçeneğin devre dışı bırakılması bazı grafik kartlarının sürücülerinin kilitlenmesini önleyebilir"/>
<check_box initial_value="true" label="Atmosferik gölgeleyiciler" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="true" label="Işıklandırma ve Gölgeler" name="UseLightShaders"/>
+ <check_box initial_value="true" label="Gelişmiş Aydınlatma Modeli" name="UseLightShaders"/>
<check_box initial_value="true" label="Ortam Gölgeleme" name="UseSSAO"/>
<check_box initial_value="true" label="Alan DerinliÄŸi" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
index 9d03d9b01d..2039761748 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="Otomatik olarak kurulsun" name="Install_automatically"/>
<combo_box.item label="Güncelleştirmeler manuel olarak karşıdan yüklensin ve kurulsun" name="Install_manual"/>
</combo_box>
+ <check_box label="Sürüm adaylarına güncelleme yapmaya gönüllü" name="update_willing_to_test"/>
<text name="Proxy Settings:">
Proxy Ayarları:
</text>
diff --git a/indra/newview/skins/default/xui/tr/panel_script_ed.xml b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
index 7aa1da6fb2..79cd86c3f0 100755
--- a/indra/newview/skins/default/xui/tr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="Tümünü Seç" name="Select All"/>
<menu_item_call label="Seçimi Kaldır" name="Deselect"/>
<menu_item_call label="Ara / DeÄŸiÅŸtir..." name="Search / Replace..."/>
+ <menu_item_call label="Şu satıra git:" name="Go to line..."/>
</menu>
<menu label="Yardım" name="Help">
<menu_item_call label="Yardım..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/tr/panel_tools_texture.xml b/indra/newview/skins/default/xui/tr/panel_tools_texture.xml
new file mode 100644
index 0000000000..2ce7c9c11f
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Doku" name="Texture">
+ <panel.string name="string repeats per meter">
+ Metrede Kaç Kez Tekrarlandığı
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Bir Yüzde Kaç Kez Tekrarlandığı
+ </panel.string>
+ <text name="color label">
+ Renk
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="Renk seçiciyi açmak için tıklayın"/>
+ <text name="color trans">
+ Saydamlık %
+ </text>
+ <text name="glow label">
+ Parıltı
+ </text>
+ <check_box label="Tam Parlak" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="Malzemeler" name="Materials"/>
+ <combo_box.item label="Ortam" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="Doku (yayılmış)" name="Texture (diffuse)"/>
+ <combo_box.item label="Yumruluk (normal)" name="Bumpiness (normal)"/>
+ <combo_box.item label="Parıldama (yansıtan)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="Doku" name="texture control" tool_tip="Bir resim seçmek için tıklayın"/>
+ <text name="label alphamode">
+ Alfa modu
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="Hiçbiri" name="None"/>
+ <combo_box.item label="Alfa karıştırma" name="Alpha blending"/>
+ <combo_box.item label="Alfa maskeleme" name="Alpha masking"/>
+ <combo_box.item label="Yayımlatıcı maske" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ Maske kesimi
+ </text>
+ <texture_picker label="Doku" name="bumpytexture control" tool_tip="Bir resim seçmek için tıklayın"/>
+ <text name="label bumpiness">
+ Yumruluk
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Yok" name="None"/>
+ <combo_box.item label="Parlaklık" name="Brightness"/>
+ <combo_box.item label="Koyuluk" name="Darkness"/>
+ <combo_box.item label="damarlı ahşap" name="woodgrain"/>
+ <combo_box.item label="ağaç kabuğu" name="bark"/>
+ <combo_box.item label="tuÄŸlalar" name="bricks"/>
+ <combo_box.item label="dama tahtası" name="checker"/>
+ <combo_box.item label="beton" name="concrete"/>
+ <combo_box.item label="sert çini" name="crustytile"/>
+ <combo_box.item label="kesilmiÅŸ taÅŸ" name="cutstone"/>
+ <combo_box.item label="diskler" name="discs"/>
+ <combo_box.item label="çakıl" name="gravel"/>
+ <combo_box.item label="petri kabı" name="petridish"/>
+ <combo_box.item label="dış kaplama" name="siding"/>
+ <combo_box.item label="taş çini" name="stonetile"/>
+ <combo_box.item label="stükko" name="stucco"/>
+ <combo_box.item label="vakum" name="suction"/>
+ <combo_box.item label="örgü" name="weave"/>
+ </combo_box>
+ <texture_picker label="Doku" name="shinytexture control" tool_tip="Bir resim seçmek için tıklayın"/>
+ <text name="label shininess">
+ Parıldama
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Yok" name="None"/>
+ <combo_box.item label="Düşük" name="Low"/>
+ <combo_box.item label="Orta" name="Medium"/>
+ <combo_box.item label="Yüksek" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ Pürüzsüzlük
+ </text>
+ <text name="label environment">
+ Ortam
+ </text>
+ <text name="label shinycolor">
+ Renk
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="Renk seçiciyi açmak için tıklayın"/>
+ <text name="media_info">
+ Varsa, seçilen ortamın URL&apos;si burada yer alır
+ </text>
+ <button label="Seç..." name="add_media" tool_tip="Ortam Ekle"/>
+ <button label="Kaldır" name="delete_media" tool_tip="Bu ortam dokusunu sil"/>
+ <button label="Hizala" label_selected="Ortamı Hizala" name="button align" tool_tip="Ortam dokusunu hizala (önce yüklenmelidir)"/>
+ <text name="tex gen">
+ EÅŸleÅŸtirme
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Varsayılan" name="Default"/>
+ <combo_box.item label="Planar" name="Planar"/>
+ </combo_box>
+ <spinner label="Yatay ölçek" name="TexScaleU"/>
+ <spinner label="Dikey ölçek" name="TexScaleV"/>
+ <spinner label="Metrede kaç kez tekrarlandığı" name="rptctrl"/>
+ <spinner label="Dönüş derecesi" name="TexRot"/>
+ <spinner label="Yatay ofset" name="TexOffsetU"/>
+ <spinner label="Dikey ofset" name="TexOffsetV"/>
+ <spinner label="Yatay ölçek" name="bumpyScaleU"/>
+ <spinner label="Dikey ölçek" name="bumpyScaleV"/>
+ <spinner label="Dönüş derecesi" name="bumpyRot"/>
+ <spinner label="Yatay ofset" name="bumpyOffsetU"/>
+ <spinner label="Dikey ofset" name="bumpyOffsetV"/>
+ <spinner label="Yatay ölçek" name="shinyScaleU"/>
+ <spinner label="Dikey ölçek" name="shinyScaleV"/>
+ <spinner label="Dönüş derecesi" name="shinyRot"/>
+ <spinner label="Yatay ofset" name="shinyOffsetU"/>
+ <spinner label="Dikey ofset" name="shinyOffsetV"/>
+ <check_box initial_value="false" label="Planar yüzleri hizala" name="checkbox planar align" tool_tip="Tüm seçili yüzeylerdeki dokuları son seçili yüzdekiyle hizalar. Planar doku eşleştirmesi gerektirir."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml
index 655ac64172..76ca58c319 100755
--- a/indra/newview/skins/default/xui/tr/role_actions.xml
+++ b/indra/newview/skins/default/xui/tr/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="Bu yetenekler arasında parsel adını ve yayınlama ayarlarını, Bul dizinindeki görünürlük ile iniş noktası ve TP yönlendirme seçeneklerini değiştirme imkanları yer alır." name="Parcel Identity">
<action description="&apos;Konumu Arama Sonuçlarında Göster&apos; seçeneğini Aç/Kapa ve kategoriyi ayarla" longdescription="Arazi Hakkında &gt; Seçenekler sekmesinden &apos;Konumu Arama Sonuçlarında Göster&apos; seçeneğini Açın/Kapayın ve parsel kategorisini ayarlayın." name="land find places" value="17"/>
- <action description="Parsel adını, açıklamasını ve &quot;Konumu Arama Sonuçlarında Göster&quot; ayarlarını değiştir" longdescription="Parsel adını, açıklamasını ve &quot;Konumu Arama Sonuçlarında Göster&quot; ayarlarını değiştirin. Bu işlem Arazi Hakkında &gt; Seçenekler sekmesinde yapılır." name="land change identity" value="18"/>
+ <action description="Parsel adını, açıklamasını ve &quot;Orta Seviyede İçerik&quot; ayarlarını değiştir" longdescription="Parsel adını, açıklamasını ve &quot;Orta Seviyede İçerik&quot; ayarlarını değiştir. Bu işlem Arazi Hakkında &gt; Seçenekler sekmesinde yapılır." name="land change identity" value="18"/>
<action description="İniş noktasını ve ışınlama yönlendirmesini ayarlayın" longdescription="Bir grubun sahip olduğu parsel üzerinde, bu Yeteneğe sahip olan bir Roldeki Üyeler gelen ışınlanmaların varacağı iniş noktasını ve daha fazla kontrol için ışınlama yönlendirmesini ayarlayabilirler. Bu işlem Arazi Hakkında &gt; Seçenekler sekmesinde yapılır." name="land set landing point" value="19"/>
</action_set>
<action_set description="Bu Yeteneklere &apos;Nesneleri Oluştur&apos;, &apos;Yüzeyi Düzenle&apos;, müzik ve ortam ayarları gibi parsel seçeneklerini etkileyen güçler de dahildir." name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index 155dc8749a..5a809ea783 100755
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -139,6 +139,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
Kullandığınız görüntüleyici ile artık Second Life&apos;a erişemezsiniz. Yeni bir görüntüleyiciyi karşıdan yüklemek için lütfen şu sayfayı ziyaret edin:
http://secondlife.com/download
@@ -448,6 +451,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="SLappAgentRequestFriend">
Arkadaşlık Talebi
</string>
+ <string name="SLappAgentRemoveFriend">
+ Arkadaşların Çıkarılması
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Kapat (⌘W)
</string>
@@ -835,6 +841,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="multiple_textures">
Birden Çok
</string>
+ <string name="use_texture">
+ Dokuyu kullan
+ </string>
<string name="texture_loading">
Yükleniyor...
</string>
@@ -934,6 +943,21 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="TeleportYourAgent">
Sizi ışınlama
</string>
+ <string name="JoinAnExperience">
+ Bir tecrübeye katıl
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ Gayri menkul erişim listelerini yönetirken uyarıları bastır
+ </string>
+ <string name="OverrideYourAnimations">
+ Varsayılan animasyonlarınızı değiştirin
+ </string>
+ <string name="ScriptReturnObjects">
+ Kendi adınıza nesneler iade edin
+ </string>
+ <string name="UnknownScriptPermission">
+ (bilinmiyor)!
+ </string>
<string name="SIM_ACCESS_PG">
Genel
</string>
@@ -1965,6 +1989,12 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="ATTACH_HUD_BOTTOM_RIGHT">
BÃœG SaÄŸ Alt
</string>
+ <string name="ATTACH_NECK">
+ Boyun
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ Avatar Merkezi
+ </string>
<string name="CursorPos">
Satır [LINE], Sütun [COLUMN]
</string>
@@ -2994,6 +3024,9 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
<string name="Hip Width">
Kalça Genişliği
</string>
+ <string name="Hover">
+ Ãœzerine getir
+ </string>
<string name="In">
İçeri
</string>
@@ -5088,4 +5121,7 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="logging_calls_enabled_log_empty">
Günlüğü tutulmuş sohbet yok. Siz biriyle iletişime geçtikten sonra veya biri sizinle iletişime geçtikten sonra, burada bir günlük girişi gösterilir.
</string>
+ <string name="loading_chat_logs">
+ Yükleniyor...
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml
index 1193243c7e..2dfb35fa54 100755
--- a/indra/newview/skins/default/xui/zh/floater_about.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about.xml
@@ -9,6 +9,8 @@
</floater.string>
<floater.string name="AboutPosition">
ä½ çš„æ–¹ä½æ˜¯ [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1],地å€å:[REGION],主機:&lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+第二人生 URL:&lt;nolink&gt;[SLURL]&lt;/nolink&gt;
+(全域å標:[POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
</floater.string>
diff --git a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
index 59751a3a46..c103ea938f 100755
--- a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="編輯內容物權é™">
+<floater name="floaterbulkperms" title="調整內容物權é™">
<floater.string name="nothing_to_modify_text">
é¸æ“‡æœªåŒ…å«å¯ç·¨è¼¯çš„內容物。
</floater.string>
@@ -24,7 +24,7 @@
<button label="√ 全部" name="check_all"/>
<button label="清除" label_selected="無" name="check_none"/>
<text name="newperms">
- 新內容物權é™
+ 調整內容物權é™ï¼š
</text>
<text name="GroupLabel">
群組:
@@ -40,6 +40,7 @@
<check_box label="修改" name="next_owner_modify"/>
<check_box label="æšåº¨" name="next_owner_copy"/>
<check_box initial_value="true" label="轉移" name="next_owner_transfer" tool_tip="下一個所有人å¯è´ˆé€æˆ–轉售這個物件"/>
- <button label="確定" name="apply"/>
+ <button label="確定" name="ok"/>
+ <button label="套用" name="apply"/>
<button label="å–消" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_goto_line.xml b/indra/newview/skins/default/xui/zh/floater_goto_line.xml
new file mode 100644
index 0000000000..e0215aef8a
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_goto_line.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script goto" title="å‰å¾€æŸè¡Œæ•¸">
+ <button label="確定" label_selected="確定" name="goto_btn"/>
+ <text name="txt">
+ å‰å¾€æŸè¡Œæ•¸
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_im_session.xml b/indra/newview/skins/default/xui/zh/floater_im_session.xml
index d63c5507db..864af2e592 100755
--- a/indra/newview/skins/default/xui/zh/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/zh/floater_im_session.xml
@@ -34,13 +34,11 @@
<layout_panel name="body_panel">
<layout_stack name="im_panels">
<layout_panel name="right_part_holder">
- <panel name="trnsAndChat_panel">
- <layout_stack name="translate_and_chat_stack">
- <layout_panel name="translate_chat_checkbox_lp">
- <check_box label="翻譯èŠå¤©å…§å®¹" name="translate_chat_checkbox"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="translate_and_chat_stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="翻譯èŠå¤©å…§å®¹" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml
index d0978b8b01..be009b54d8 100755
--- a/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
<text name="show_label">
顯示:
</text>
- <check_box label="測試" name="show_world"/>
+ <check_box label="世界" name="show_world"/>
<check_box label="僅é™å¯ç§»å‹•çš„" name="show_world_movables_only"/>
<check_box label="導航網é¢" name="show_navmesh"/>
<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
index 885c4b9add..41b3409627 100755
--- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
@@ -11,7 +11,9 @@
<menu_item_call label="å‡çµ" name="Freeze..."/>
<menu_item_call label="踢出" name="Eject..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
+ <menu_item_call label="å‚¾å° XML" name="Dump XML"/>
<menu_item_call label="放大" name="Zoom In"/>
<menu_item_call label="支付" name="Pay..."/>
<menu_item_call label="物件檔案" name="Object Inspect"/>
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
index c14a98c64b..eb1bad0ca2 100755
--- a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
@@ -12,5 +12,7 @@
<menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的個人檔案" name="Profile..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
+ <menu_item_call label="å‚¾å° XML" name="Dump XML"/>
<menu_item_call label="丟棄" name="Drop"/>
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
index 1d02464748..dc035bafa0 100755
--- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
@@ -11,6 +11,8 @@
<menu_item_call label="å‡çµ" name="Freeze..."/>
<menu_item_call label="踢出" name="Eject..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
+ <menu_item_call label="å‚¾å° XML" name="Dump XML"/>
<menu_item_call label="放大" name="Zoom In"/>
<menu_item_call label="支付" name="Pay..."/>
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
index 32757bbff6..68d0600141 100755
--- a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
@@ -29,4 +29,6 @@
<menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的個人檔案" name="Profile..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
+ <menu_item_call label="å‚¾å° XML" name="Dump XML"/>
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_conversation.xml b/indra/newview/skins/default/xui/zh/menu_conversation.xml
index 507255d0c0..adfeefc337 100644
--- a/indra/newview/skins/default/xui/zh/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/zh/menu_conversation.xml
@@ -3,6 +3,7 @@
<menu_item_call label="關閉交談" name="close_conversation"/>
<menu_item_call label="開啟語音交談" name="open_voice_conversation"/>
<menu_item_call label="切斷語音交談" name="disconnect_from_voice"/>
+ <menu_item_call label="關閉所é¸" name="close_selected_conversations"/>
<menu_item_call label="察看檔案" name="view_profile"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="發出瞬間傳é€é‚€è«‹" name="offer_teleport"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_land.xml b/indra/newview/skins/default/xui/zh/menu_land.xml
index a87ab77dd0..3ad9c0ab31 100755
--- a/indra/newview/skins/default/xui/zh/menu_land.xml
+++ b/indra/newview/skins/default/xui/zh/menu_land.xml
@@ -6,4 +6,5 @@
<menu_item_call label="購買通行權" name="Land Buy Pass"/>
<menu_item_call label="建造" name="Create"/>
<menu_item_call label="編輯地形" name="Edit Terrain"/>
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_login.xml b/indra/newview/skins/default/xui/zh/menu_login.xml
index c327b132a1..1d3d771efb 100755
--- a/indra/newview/skins/default/xui/zh/menu_login.xml
+++ b/indra/newview/skins/default/xui/zh/menu_login.xml
@@ -18,7 +18,13 @@
<menu_item_call label="顯示 TOS" name="TOS"/>
<menu_item_call label="顯示嚴é‡è¨Šæ¯" name="Critical"/>
<menu_item_call label="網é å…§å®¹æµ®å‹•è¦–窗除錯測試" name="Web Content Floater Debug Test"/>
- <menu label="設定記錄細節" name="Set Logging Level"/>
+ <menu label="設定記錄細節" name="Set Logging Level">
+ <menu_item_check label="除錯" name="Debug"/>
+ <menu_item_check label="資訊" name="Info"/>
+ <menu_item_check label="警告" name="Warning"/>
+ <menu_item_check label="錯誤" name="Error"/>
+ <menu_item_check label="ç„¡" name="None"/>
+ </menu>
<menu_item_check label="顯示網格挑é¸å™¨" name="Show Grid Picker"/>
<menu_item_call label="顯示通知控制å°" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_mute_particle.xml b/indra/newview/skins/default/xui/zh/menu_mute_particle.xml
new file mode 100644
index 0000000000..fbde9b435d
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_mute_particle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Mute Particle Pie">
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_object.xml b/indra/newview/skins/default/xui/zh/menu_object.xml
index 4282c1e131..f6657d876e 100755
--- a/indra/newview/skins/default/xui/zh/menu_object.xml
+++ b/indra/newview/skins/default/xui/zh/menu_object.xml
@@ -3,13 +3,13 @@
<menu_item_call label="觸碰" name="Object Touch"/>
<menu_item_call label="編輯" name="Edit..."/>
<menu_item_call label="建造" name="Build"/>
- <menu_item_call label="在è¯çµé›†è£¡é¡¯ç¤º" name="show_in_linksets"/>
- <menu_item_call label="在角色中顯示" name="show_in_characters"/>
<menu_item_call label="打開" name="Open"/>
<menu_item_call label="å在這裡" name="Object Sit"/>
<menu_item_call label="èµ·ç«‹" name="Object Stand Up"/>
<menu_item_call label="物件檔案" name="Object Inspect"/>
<menu_item_call label="放大" name="Zoom In"/>
+ <menu_item_call label="在è¯çµé›†è£¡é¡¯ç¤º" name="show_in_linksets"/>
+ <menu_item_call label="在角色中顯示" name="show_in_characters"/>
<context_menu label="穿上" name="Put On">
<menu_item_call label="穿上" name="Wear"/>
<menu_item_call label="添加" name="Add"/>
@@ -26,4 +26,5 @@
<menu_item_call label="支付" name="Pay..."/>
<menu_item_call label="購買" name="Buy..."/>
<menu_item_call label="刪除" name="Delete"/>
+ <menu_item_call label="å°éŽ–ç²’å­æ‰€æœ‰äºº" name="Mute Particle"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_url_agent.xml b/indra/newview/skins/default/xui/zh/menu_url_agent.xml
index 72629822d4..752634dc6b 100755
--- a/indra/newview/skins/default/xui/zh/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_agent.xml
@@ -3,6 +3,7 @@
<menu_item_call label="察看檔案" name="show_agent"/>
<menu_item_call label="é€å‡º IM..." name="send_im"/>
<menu_item_call label="加為朋å‹..." name="add_friend"/>
+ <menu_item_call label="移除朋å‹â€¦" name="remove_friend"/>
<menu_item_call label="覆製å稱到剪貼簿" name="url_copy_label"/>
<menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
index 9f3a9d58ff..ac366f92ef 100755
--- a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="物件檔案..." name="show_object"/>
+ <menu_item_call label="å°éŽ–…" name="block_object"/>
<menu_item_call label="顯示在地圖上" name="show_on_map"/>
<menu_item_call label="瞬間傳é€åˆ°ç‰©ä»¶ä½ç½®" name="teleport_to_object"/>
<menu_item_call label="覆製物件å稱到剪貼簿" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index d4844b191b..b267bda2bb 100755
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -16,7 +16,10 @@
<menu_item_call label="åœæ­¢æˆ‘身上的動作" name="Stop Animating My Avatar"/>
<menu_item_call label="行走 / 跑步 / 飛行…" name="Walk / run / fly"/>
</menu>
- <menu label="狀態" name="Status"/>
+ <menu label="狀態" name="Status">
+ <menu_item_check label="離開" name="Away"/>
+ <menu_item_check label="請勿打擾" name="Do Not Disturb"/>
+ </menu>
<menu_item_call label="購買 L$…" name="Buy and Sell L$"/>
<menu_item_call label="商家發件匣…" name="MerchantOutbox"/>
<menu_item_call label="帳戶主控臺…" name="Manage My Account"/>
@@ -30,6 +33,7 @@
<menu_item_check label="交談……" name="Conversations"/>
<menu_item_check label="附近的èŠå¤©â€¦â€¦" name="Nearby Chat"/>
<menu_item_check label="說話" name="Speak"/>
+ <menu_item_check label="交談記錄…" name="Conversation Log..."/>
<menu label="語音變è²" name="VoiceMorphing">
<menu_item_check label="沒有變è²æ•ˆæžœ" name="NoVoiceMorphing"/>
<menu_item_check label="é è¦½â€¦â€¦" name="Preview"/>
@@ -40,6 +44,7 @@
<menu_item_check label="群組" name="My Groups"/>
<menu_item_check label="附近的人群" name="Active Speakers"/>
<menu_item_call label="å°éŽ–清單" name="Block List"/>
+ <menu_item_check label="請勿打擾" name="Do Not Disturb"/>
</menu>
<menu label="世界" name="World">
<menu_item_call label="將此處記為地標" name="Create Landmark Here"/>
@@ -108,6 +113,7 @@
<menu_item_call label="包括下一部ä½" name="Include Next Part"/>
<menu_item_call label="包括上一部ä½" name="Include Previous Part"/>
</menu>
+ <menu_item_call label="è¯çµé›†â€¦" name="pathfinding_linkset_menu_item"/>
<menu_item_call label="èšç„¦æ–¼æ‰€é¸éƒ¨ä½" name="Focus on Selection"/>
<menu_item_call label="縮放至所é¸éƒ¨ä½" name="Zoom to Selection"/>
<menu label="物件" name="Object">
@@ -277,6 +283,7 @@
<menu_item_check label="隨機變動幀率" name="Randomize Framerate"/>
<menu_item_check label="定期出ç¾æ…¢å¹€çŽ‡" name="Periodic Slow Frame"/>
<menu_item_check label="ç•«é¢æ¸¬è©¦" name="Frame Test"/>
+ <menu_item_call label="幀特性" name="Frame Profile"/>
</menu>
<menu label="呈åƒçš„元資料" name="Render Metadata">
<menu_item_check label="外框箱" name="Bounding Boxes"/>
@@ -311,9 +318,10 @@
<menu_item_check label="軸" name="Axes"/>
<menu_item_check label="切線基礎" name="Tangent Basis"/>
<menu_item_call label="å·²é¸å–æ質資訊基礎" name="Selected Texture Info Basis"/>
+ <menu_item_call label="所é¸æ料資訊" name="Selected Material Info"/>
<menu_item_check label="線框" name="Wireframe"/>
<menu_item_check label="物件導å‘çš„é®è”½" name="Object-Object Occlusion"/>
- <menu_item_check label="光線和陰影" name="Advanced Lighting Model"/>
+ <menu_item_check label="進階照明模型" name="Advanced Lighting Model"/>
<menu_item_check label="來自日/月/投影物的陰影" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="å±å¹•ç©ºé–“環境光é®è”½å’Œé™°å½±å¹³æ»‘技術" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="GL 除錯" name="Debug GL"/>
@@ -323,7 +331,6 @@
<menu_item_check label="動作æ質" name="Animation Textures"/>
<menu_item_check label="關閉æ質" name="Disable Textures"/>
<menu_item_check label="全解æžåº¦æ質" name="Rull Res Textures"/>
- <menu_item_check label="æ質圖集(實驗性質)" name="Texture Atlas"/>
<menu_item_check label="使附著燈光呈åƒ" name="Render Attached Lights"/>
<menu_item_check label="使附著例å­æ•ˆæžœå‘ˆåƒ" name="Render Attached Particles"/>
<menu_item_check label="åœæ‡¸ç™¼å…‰ç‰©ä»¶" name="Hover Glow Objects"/>
@@ -359,7 +366,6 @@
<menu_item_call label="傾å°ç„¦é»žå®¹å™¨" name="Dump Focus Holder"/>
<menu_item_call label="列å°æ‰€é¸ç‰©ä»¶è³‡è¨Š" name="Print Selected Object Info"/>
<menu_item_call label="列å°ç”¨æˆ¶è³‡è¨Š" name="Print Agent Info"/>
- <menu_item_call label="計憶體狀態" name="Memory Stats"/>
<menu_item_check label="地å€é™¤éŒ¯æŽ§åˆ¶å°" name="Region Debug Console"/>
<menu_item_check label="除錯 SelectMgr" name="Debug SelectMgr"/>
<menu_item_check label="除錯點按動作" name="Debug Clicks"/>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 59be26d43b..864f20fc15 100755
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -210,6 +210,14 @@
ä½ ä»è¦æ–°å¢žé€™é …能力給「[ROLE_NAME]ã€ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
+ <notification name="EjectGroupMemberWarning">
+ ä½ å³å°‡æŠŠ [AVATAR_NAME] 踢出群組。
+ <usetemplate ignoretext="確定將æŸäººè¸¢å‡ºç¾¤çµ„" name="okcancelignore" notext="å–消" yestext="踢出"/>
+ </notification>
+ <notification name="EjectGroupMembersWarning">
+ ä½ å³å°‡æŠŠ [COUNT] 個人踢出群組。
+ <usetemplate ignoretext="確定將多人踢出群組" name="okcancelignore" notext="å–消" yestext="踢出"/>
+ </notification>
<notification name="AttachmentDrop">
ä½ å³å°‡å¸é™¤ä½ çš„附件。
你確定你è¦ç¹¼çºŒï¼Ÿ
@@ -1470,13 +1478,43 @@ SHA1 指紋:[MD5_DIGEST]
</notification>
<notification name="RequiredUpdateDownloadedVerboseDialog">
我們已下載了一個必è¦çš„軟體更新。
-版本:[VERSION]
+[VERSION] 版本 [[INFO_URL] 關於此更新的資訊]
我門必須é‡æ–°å•Ÿå‹• [APP_NAME] 以安è£æ›´æ–°ã€‚
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="RequiredUpdateDownloadedDialog">
我門必須é‡æ–°å•Ÿå‹• [APP_NAME] 以安è£æ›´æ–°ã€‚
+[[INFO_URL] 關於此更新的資訊]
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundTip">
+ 我們已為你的 [APP_NAME] 軟體下載了更新。
+版本:[VERSION]
+原本試驗性質的ç€è¦½å™¨å·²è¢« [NEW_CHANNEL] ç€è¦½å™¨å–代,
+åƒè¦‹[[INFO_URL] 此更新版的詳情]
+ <usetemplate name="okcancelbuttons" notext="ç¨å€™..." yestext="ç«‹å³å®‰è£ä¸¦é‡æ–°å•Ÿå‹• [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelDownloadBackgroundDialog">
+ 我們已為你的 [APP_NAME] 軟體下載了更新。
+版本:[VERSION]
+原本試驗性質的ç€è¦½å™¨å·²è¢« [NEW_CHANNEL] ç€è¦½å™¨å–代,
+åƒè¦‹[[INFO_URL] 介紹此更新版的資訊]
+ <usetemplate name="okcancelbuttons" notext="ç¨å€™â€¦" yestext="ç«‹å³å®‰è£ä¸¦é‡æ–°å•Ÿå‹• [APP_NAME]"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
+ 我們已下載了一個必è¦çš„軟體更新。
+版本:[VERSION]
+原本試驗性質的ç€è¦½å™¨å·²è¢« [NEW_CHANNEL] ç€è¦½å™¨å–代,
+åƒè¦‹[[INFO_URL] 介紹此更新版的資訊]
+
+我們必須é‡æ–°å•Ÿå‹• [APP_NAME] 以便安è£æ›´æ–°ã€‚
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
+ <notification name="OtherChannelRequiredUpdateDownloadedDialog">
+ 我們必須é‡æ–°å•Ÿå‹• [APP_NAME] 以便安è£æ›´æ–°ã€‚
+原本試驗性質的ç€è¦½å™¨å·²è¢« [NEW_CHANNEL] ç€è¦½å™¨å–代,
+åƒè¦‹[[INFO_URL] 介紹此更新版的資訊]
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="DeedObjectToGroup">
@@ -1527,6 +1565,10 @@ SHA1 指紋:[MD5_DIGEST]
是å¦è¦é›¢é–‹ç¾¤çµ„?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="確定"/>
</notification>
+ <notification name="OwnerCannotLeaveGroup">
+ 無法離開群組。 你是此群組僅存的所有人,ä¸å¾—離開群組。 請先把所有人è·éŠœæŒ‡æ´¾çµ¦å¦ä¸€äººã€‚
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
<notification name="ConfirmKick">
你確定è¦è¸¢å‡ºé€™ç¶²æ ¼å…§çš„全部居民?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="踢出全部居民"/>
@@ -2386,9 +2428,7 @@ SHA1 指紋:[MD5_DIGEST]
(你還å¯ä»¥ç›´æŽ¥æŒ‰å…©ä¸‹é‚£å€‹åœ°æ¨™ï¼Œæˆ–按滑鼠å³éµï¼Œé¸æ“‡ã€Œçž¬é–“傳é€ã€ã€‚)
</notification>
<notification name="TeleportToPerson">
- è¦è¯çµ¡å¦‚「[NAME]ã€çš„任何一ä½å±…民,請點按「人群ã€æŒ‰éˆ•ï¼Œå¾žæ‰“開的視窗中é¸æ“‡ä¸€ä½å±…民,å†é»žæŒ‰è¦–窗底下的「IMã€ã€‚
-
- (你還å¯ä»¥å¾žæ¸…單直接按兩下å字,或按滑鼠å³éµï¼Œé¸æ“‡ã€ŒIMã€ã€‚)
+ è¦å’ŒæŸäººç§ä¸‹äº¤è«‡ï¼Œè«‹å³éµé»žæŒ‰åŒ–身,å†é»žæŒ‰é¸å–®çš„「IMã€ã€‚
</notification>
<notification name="CantSelectLandFromMultipleRegions">
無法é¸æ“‡è¶…出伺æœå™¨é‚Šç•Œçš„土地。
@@ -2762,6 +2802,15 @@ SHA1 指紋:[MD5_DIGEST]
<button name="Deny" text="拒絕"/>
</form>
</notification>
+ <notification name="UnknownScriptQuestion">
+ ç”± &apos;[NAME]&apos; 所æ“有的物件 &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; 正請求æŸé …執行時期腳本權é™ï¼Œä½†æœ¬ç€è¦½å™¨ç„¡æ³•è¾¨è­˜è©²æ¬Šé™ï¼Œæ•…ä¸å…准。
+
+欲准許此權é™ï¼Œè«‹å¾ž [DOWNLOADURL] 下載並更新為最新版ç€è¦½å™¨ã€‚
+ <form name="form">
+ <button name="Deny" text="確定"/>
+ <button name="Mute" text="å°éŽ–"/>
+ </form>
+ </notification>
<notification name="ScriptDialog">
[NAME] çš„ &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/zh/panel_people.xml b/indra/newview/skins/default/xui/zh/panel_people.xml
index 5f7aca387a..da5918d553 100755
--- a/indra/newview/skins/default/xui/zh/panel_people.xml
+++ b/indra/newview/skins/default/xui/zh/panel_people.xml
@@ -49,6 +49,9 @@
<menu_button name="plus_btn" tool_tip="加入群組/創立新群組"/>
<dnd_button name="minus_btn" tool_tip="離開所é¸ç¾¤çµ„"/>
</panel>
+ <text name="groupcount">
+ ä½ ç›®å‰å±¬æ–¼ [COUNT] 個群組,å¯å†åŠ å…¥ [REMAINING] 個。
+ </text>
</panel>
<panel label="最近" name="recent_panel">
<panel label="bottom_panel" name="recent_buttons_panel">
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
index e700e35516..b5cdddc252 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="文字èŠå¤©" name="chat">
- <panel>
- <check_box initial_value="true" label="èŠå¤©æ™‚播放打字動作" name="play_typing_animation"/>
+ <panel name="general_chat_settings">
+ <check_box initial_value="true" label="èŠå¤©æ™‚呈ç¾æ‰“字動作" name="play_typing_animation"/>
<check_box label="當我離線時將收到的 IM 訊æ¯éƒµå¯„給我" name="send_im_to_email"/>
- <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¾¤çµ„å¯ä»¥ IM 或與我通話。" name="voice_call_friends_only_check"/>
+ <check_box label="åªå…許我的朋å‹å’Œç¾¤çµ„與我通話或 IM 給我" name="voice_call_friends_only_check"/>
<text name="font_size">
- 字型尺寸:
+ 字型大å°ï¼š
</text>
<combo_box name="chat_font_size">
<item label="å°" name="Small" value="0"/>
@@ -14,10 +14,7 @@
</combo_box>
<check_box label="èŠå¤©æ³¡æ³¡" name="bubble_text_chat"/>
</panel>
- <panel>
- <text name="notifications">
- 通知
- </text>
+ <panel name="im_notification_settings">
<text name="friend_ims">
æœ‹å‹ IM:
</text>
@@ -25,8 +22,9 @@
<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
<item label="以çªé¡¯å¼è¦–窗顯示訊æ¯" name="PopUpMessage" value="toast"/>
<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
- <item label="ç„¡" name="None" value="ç„¡"/>
+ <item label="無動作" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="播放è²éŸ³" name="play_sound_friend_im"/>
<text name="non_friend_ims">
éžæœ‹å‹ IM:
</text>
@@ -34,8 +32,9 @@
<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
<item label="以çªé¡¯å¼è¦–窗顯示訊æ¯" name="PopUpMessage" value="toast"/>
<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
- <item label="ç„¡" name="None" value="ç„¡"/>
+ <item label="無動作" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="播放è²éŸ³" name="play_sound_non_friend_im"/>
<text name="conference_ims">
多方交談 IM:
</text>
@@ -43,8 +42,9 @@
<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
<item label="以çªé¡¯å¼è¦–窗顯示訊æ¯" name="PopUpMessage" value="toast"/>
<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
- <item label="ç„¡" name="None" value="ç„¡"/>
+ <item label="無動作" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="播放è²éŸ³" name="play_sound_conference_im"/>
<text name="group_chat">
群組èŠå¤©ï¼š
</text>
@@ -52,8 +52,9 @@
<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
<item label="以çªé¡¯å¼è¦–窗顯示訊æ¯" name="PopUpMessage" value="toast"/>
<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
- <item label="ç„¡" name="None" value="ç„¡"/>
+ <item label="無動作" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="播放è²éŸ³" name="play_sound_group_chat_im"/>
<text name="nearby_chat">
附近的èŠå¤©ï¼š
</text>
@@ -61,13 +62,24 @@
<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
<item label="以çªé¡¯å¼è¦–窗顯示訊æ¯" name="PopUpMessage" value="toast"/>
<item label="Flash 工具列按鈕" name="FlashToolBarButton" value="flash"/>
- <item label="ç„¡" name="None" value="ç„¡"/>
+ <item label="無動作" name="NoAction" value="noaction"/>
+ </combo_box>
+ <check_box label="播放è²éŸ³" name="play_sound_nearby_chat_im"/>
+ <text name="object_ims">
+ 來自物件的 IM:
+ </text>
+ <combo_box name="ObjectIMOptions">
+ <item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
+ <item label="以çªé¡¯å¼è¦–窗顯示訊æ¯" name="PopUpMessage" value="toast"/>
+ <item label="Flash 工具列按鈕" name="FlashToolBarButton" value="flash"/>
+ <item label="無動作" name="NoAction" value="noaction"/>
</combo_box>
+ <check_box label="播放è²éŸ³" name="play_sound_object_im"/>
<text name="notifications_alert">
è‹¥è¦æš«æ™‚åœæ­¢æ‰€æœ‰é€šçŸ¥ï¼Œè«‹è¨­å®šã€Œæºé€š &gt; 請勿打擾ã€ã€‚
</text>
</panel>
- <panel>
+ <panel name="play_sound_settings">
<text name="play_sound">
播放è²éŸ³ï¼š
</text>
@@ -76,9 +88,9 @@
<check_box label="瞬間傳é€é‚€è«‹" name="teleport_offer"/>
<check_box label="收ç´ç‰©å“è´ˆé€" name="inventory_offer"/>
</panel>
- <panel>
- <button label="清空記錄……" name="clear_log"/>
- <button label="刪除交談內容記錄……" name="delete_transcripts"/>
+ <panel name="log_settings">
+ <button label="清空記錄…" name="clear_log"/>
+ <button label="刪除交談內容記錄…" name="delete_transcripts"/>
<button label="ç€è¦½â€¦" label_selected="ç€è¦½" name="log_path_button"/>
</panel>
<button label="翻譯…" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
index 3948a48992..2311eb99a7 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
@@ -30,7 +30,7 @@
<check_box initial_value="true" label="本地光線" name="LocalLights"/>
<check_box initial_value="true" label="基本著色" name="BasicShaders" tool_tip="關閉此一é¸é …å¯èƒ½é¿å…部分顯示å¡é©…動程å¼æ毀當機"/>
<check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/>
- <check_box initial_value="true" label="光線和陰影" name="UseLightShaders"/>
+ <check_box initial_value="true" label="進階照明模型" name="UseLightShaders"/>
<check_box initial_value="true" label="環境光é®è”½" name="UseSSAO"/>
<check_box initial_value="true" label="景深" name="UseDoF"/>
<text name="shadows_label">
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
index a607a7c33b..0fcc49b203 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
@@ -29,6 +29,7 @@
<combo_box.item label="自動安è£" name="Install_automatically"/>
<combo_box.item label="手動下載åŠå®‰è£" name="Install_manual"/>
</combo_box>
+ <check_box label="願æ„在更新時æ¶å…ˆè©¦ç”¨é‡‹å‡ºå€™é¸ç‰ˆ" name="update_willing_to_test"/>
<text name="Proxy Settings:">
代ç†ä¼ºæœå™¨è¨­å®šï¼š
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
index 29e9a35869..198e59be7b 100755
--- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
@@ -34,6 +34,7 @@
<menu_item_call label="å…¨é¸" name="Select All"/>
<menu_item_call label="å–消é¸æ“‡" name="Deselect"/>
<menu_item_call label="æœå°‹ / å–代..." name="Search / Replace..."/>
+ <menu_item_call label="å‰å¾€æŸè¡Œæ•¸â€¦" name="Go to line..."/>
</menu>
<menu label="幫助" name="Help">
<menu_item_call label="幫助..." name="Help..."/>
diff --git a/indra/newview/skins/default/xui/zh/panel_tools_texture.xml b/indra/newview/skins/default/xui/zh/panel_tools_texture.xml
new file mode 100644
index 0000000000..5ea6d818c7
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_tools_texture.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="æ質" name="Texture">
+ <panel.string name="string repeats per meter">
+ æ¯å…¬å°ºé‡è¦†æ¬¡æ•¸
+ </panel.string>
+ <panel.string name="string repeats per face">
+ æ¯ä¸€é¢é‡è¦†æ¬¡æ•¸
+ </panel.string>
+ <text name="color label">
+ é¡è‰²
+ </text>
+ <color_swatch label="" name="colorswatch" tool_tip="點按以開啟é¡è‰²æŒ‘é¸å™¨"/>
+ <text name="color trans">
+ é€æ˜Žåº¦ %
+ </text>
+ <text name="glow label">
+ 光暈
+ </text>
+ <check_box label="全亮" name="checkbox fullbright"/>
+ <combo_box name="combobox matmedia">
+ <combo_box.item label="ææ–™" name="Materials"/>
+ <combo_box.item label="媒體" name="Media"/>
+ </combo_box>
+ <combo_box name="combobox mattype">
+ <combo_box.item label="æ質(漫å射圖)" name="Texture (diffuse)"/>
+ <combo_box.item label="凹凸度(正交)" name="Bumpiness (normal)"/>
+ <combo_box.item label="閃亮度(é¡å光)" name="Shininess (specular)"/>
+ </combo_box>
+ <texture_picker label="æ質" name="texture control" tool_tip="點按以挑é¸åœ–片"/>
+ <text name="label alphamode">
+ åŠé€æ˜Žæ¨¡å¼
+ </text>
+ <combo_box name="combobox alphamode">
+ <combo_box.item label="ç„¡" name="None"/>
+ <combo_box.item label="åŠé€æ˜Žæ”™æ··" name="Alpha blending"/>
+ <combo_box.item label="åŠé€æ˜Žé®ç½©" name="Alpha masking"/>
+ <combo_box.item label="自發光é®ç½©" name="Emissive mask"/>
+ </combo_box>
+ <text name="label maskcutoff">
+ é®ç½©æˆªæ–·å€¼
+ </text>
+ <texture_picker label="æ質" name="bumpytexture control" tool_tip="點按以挑é¸åœ–片"/>
+ <text name="label bumpiness">
+ 凹凸度
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="ç„¡" name="None"/>
+ <combo_box.item label="亮度" name="Brightness"/>
+ <combo_box.item label="暗度" name="Darkness"/>
+ <combo_box.item label="木紋" name="woodgrain"/>
+ <combo_box.item label="樹皮" name="bark"/>
+ <combo_box.item label="磚" name="bricks"/>
+ <combo_box.item label="æ ¼å­" name="checker"/>
+ <combo_box.item label="æ··å‡åœŸ" name="concrete"/>
+ <combo_box.item label="粗花磚" name="crustytile"/>
+ <combo_box.item label="石磚" name="cutstone"/>
+ <combo_box.item label="圓盤" name="discs"/>
+ <combo_box.item label="碎石" name="gravel"/>
+ <combo_box.item label="培養皿" name="petridish"/>
+ <combo_box.item label="å´é‚Šç‰‡" name="siding"/>
+ <combo_box.item label="石磚格" name="stonetile"/>
+ <combo_box.item label="彩色沙岩" name="stucco"/>
+ <combo_box.item label="å¸é™„" name="suction"/>
+ <combo_box.item label="編織" name="weave"/>
+ </combo_box>
+ <texture_picker label="æ質" name="shinytexture control" tool_tip="點按以挑é¸åœ–片"/>
+ <text name="label shininess">
+ 閃亮度
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="ç„¡" name="None"/>
+ <combo_box.item label="低" name="Low"/>
+ <combo_box.item label="中" name="Medium"/>
+ <combo_box.item label="高" name="High"/>
+ </combo_box>
+ <text name="label glossiness">
+ 光滑度
+ </text>
+ <text name="label environment">
+ 環境
+ </text>
+ <text name="label shinycolor">
+ é¡è‰²
+ </text>
+ <color_swatch label="" name="shinycolorswatch" tool_tip="點按以開啟é¡è‰²æŒ‘é¸å™¨"/>
+ <text name="media_info">
+ 所é¸åª’體如有 URL,置於此
+ </text>
+ <button label="é¸æ“‡â€¦" name="add_media" tool_tip="添加媒體"/>
+ <button label="移除" name="delete_media" tool_tip="刪除這個媒體æ質"/>
+ <button label="å°é½Š" label_selected="å°é½Šåª’é«”" name="button align" tool_tip="å°é½Šåª’é«”æ質(須先載入)"/>
+ <text name="tex gen">
+ 映射方å¼
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="é è¨­" name="Default"/>
+ <combo_box.item label="å¹³é¢" name="Planar"/>
+ </combo_box>
+ <spinner label="水平刻度" name="TexScaleU"/>
+ <spinner label="垂直刻度" name="TexScaleV"/>
+ <spinner label="æ¯å…¬å°ºé‡è¦†æ¬¡æ•¸" name="rptctrl"/>
+ <spinner label="旋轉角度" name="TexRot"/>
+ <spinner label="æ°´å¹³åè·" name="TexOffsetU"/>
+ <spinner label="åž‚ç›´åè·" name="TexOffsetV"/>
+ <spinner label="水平刻度" name="bumpyScaleU"/>
+ <spinner label="垂直刻度" name="bumpyScaleV"/>
+ <spinner label="旋轉角度" name="bumpyRot"/>
+ <spinner label="æ°´å¹³åè·" name="bumpyOffsetU"/>
+ <spinner label="åž‚ç›´åè·" name="bumpyOffsetV"/>
+ <spinner label="水平刻度" name="shinyScaleU"/>
+ <spinner label="垂直刻度" name="shinyScaleV"/>
+ <spinner label="旋轉角度" name="shinyRot"/>
+ <spinner label="æ°´å¹³åè·" name="shinyOffsetU"/>
+ <spinner label="åž‚ç›´åè·" name="shinyOffsetV"/>
+ <check_box initial_value="false" label="å°é½Šå¹³é¢" name="checkbox planar align" tool_tip="以最後所é¸æ“‡çš„é¢ç‚ºåŸºæº–,å°é½Šå…¨éƒ¨æ‰€é¸æ“‡çš„é¢ä¸Šçš„æ質。 這必須使用平é¢æ質映射方å¼ã€‚"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml
index 767bcecde7..9587981444 100755
--- a/indra/newview/skins/default/xui/zh/role_actions.xml
+++ b/indra/newview/skins/default/xui/zh/role_actions.xml
@@ -25,7 +25,7 @@
</action_set>
<action_set description="這些能力包括å¯æ›´æ”¹åœ°æ®µå稱和發佈設定ã€è¨­å®šæ˜¯å¦å…¬é–‹åˆ°æœå°‹çµæžœã€è¨­å®šç™»é™¸åœ°é»žå’Œçž¬é–“傳é€ç¹žè·¯é¸é …。" name="Parcel Identity">
<action description="切æ›ã€Œå°‡åœ°é»žé¡¯ç¤ºåœ¨æœå°‹çµæžœã€è¨­å®šï¼Œä¸¦é¸å®šé¡žåˆ¥" longdescription="切æ›ã€Œå°‡åœ°é»žé¡¯ç¤ºåœ¨æœå°‹çµæžœã€è¨­å®šï¼Œä¸¦åœ¨ã€ŒåœŸåœ°è³‡æ–™ã€&gt; é¸é …é ç±¤è¨­å®šåœ°æ®µé¡žåˆ¥ã€‚" name="land find places" value="17"/>
- <action description="更改地段å稱ã€æ述,和「將地點顯示在æœå°‹çµæžœã€è¨­å®šã€‚" longdescription="更改地段å稱ã€æ述,和「將地點顯示在æœå°‹çµæžœã€è¨­å®šã€‚ 這å¯åœ¨ã€ŒåœŸåœ°è³‡æ–™ã€&gt; é¸é …é ç±¤å®Œæˆã€‚" name="land change identity" value="18"/>
+ <action description="更改地段å稱ã€æè¿°ã€ã€Œé©åº¦æˆäººå…§å®¹ã€è¨­å®š" longdescription="更改地段å稱ã€æè¿°ã€ã€Œé©åº¦æˆäººå…§å®¹ã€è¨­å®šã€‚ 這å¯åœ¨ã€ŒåœŸåœ°è³‡æ–™ã€&gt; é¸é …é ç±¤å®Œæˆã€‚" name="land change identity" value="18"/>
<action description="設定登陸地點和瞬間傳é€ç¹žè·¯è¨­å®šã€‚" longdescription="在群組所有的地段上,身負具此能力的æˆå“¡ï¼Œå¯ä»¥è¨­å®šäººå€‘瞬間傳é€é€²ä¾†æ™‚的登陸地點,和瞬間傳é€çš„繞路é¸é …。 這å¯åœ¨ã€ŒåœŸåœ°è³‡æ–™ã€&gt; é¸é …é ç±¤å®Œæˆã€‚" name="land set landing point" value="19"/>
</action_set>
<action_set description="這些能力包括有權更改地段é¸é …,例如「新建物件ã€ã€ã€Œç·¨è¼¯åœ°å½¢ã€ï¼Œå’ŒéŸ³æ¨‚ã€åª’體設定等。" name="Parcel Settings">
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 31713ac281..d9fa105ef4 100755
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -139,6 +139,9 @@
<string name="create_account_url">
http://join.secondlife.com/?sourceid=[sourceid]
</string>
+ <string name="ViewerDownloadURL">
+ http://secondlife.com/download
+ </string>
<string name="LoginFailedViewerNotPermitted">
ä½ ç›®å‰æ‰€ç”¨çš„ Viewer 已經無法å†é€²å…¥ç¬¬äºŒäººç”Ÿã€‚ 請到這個é é¢ä¸‹è¼‰æœ€æ–° Viewer:
http://secondlife.com/download
@@ -443,6 +446,9 @@ http://secondlife.com/viewer-access-faq
<string name="SLappAgentRequestFriend">
交å‹è¦æ±‚
</string>
+ <string name="SLappAgentRemoveFriend">
+ 移除朋å‹
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
關閉(⌘W)
</string>
@@ -830,6 +836,9 @@ http://secondlife.com/viewer-access-faq
<string name="multiple_textures">
多個
</string>
+ <string name="use_texture">
+ 使用æ質
+ </string>
<string name="texture_loading">
載入中...
</string>
@@ -929,6 +938,21 @@ http://secondlife.com/viewer-access-faq
<string name="TeleportYourAgent">
瞬間傳é€ä½ æœ¬äºº
</string>
+ <string name="JoinAnExperience">
+ 加入體驗
+ </string>
+ <string name="SilentlyManageEstateAccess">
+ 管ç†é ˜å‡ºå…¥è¨±å¯å單時,ä¸é¡¯ç¤ºè­¦ç¤º
+ </string>
+ <string name="OverrideYourAnimations">
+ 替æ›ä½ é è¨­çš„動作
+ </string>
+ <string name="ScriptReturnObjects">
+ 為你é€è¿”物件
+ </string>
+ <string name="UnknownScriptPermission">
+ (未知)ï¼
+ </string>
<string name="SIM_ACCESS_PG">
一般普級
</string>
@@ -1960,6 +1984,12 @@ http://secondlife.com/viewer-access-faq
<string name="ATTACH_HUD_BOTTOM_RIGHT">
擡頭顯示å³ä¸‹
</string>
+ <string name="ATTACH_NECK">
+ 頸部
+ </string>
+ <string name="ATTACH_AVATAR_CENTER">
+ 化身中心
+ </string>
<string name="CursorPos">
橫行 [LINE],縱列 [COLUMN]
</string>
@@ -2989,6 +3019,9 @@ http://secondlife.com/viewer-access-faq
<string name="Hip Width">
腰寬
</string>
+ <string name="Hover">
+ åœæ‡¸
+ </string>
<string name="In">
å‘å…§
</string>
@@ -5085,4 +5118,7 @@ http://secondlife.com/viewer-access-faq
<string name="logging_calls_enabled_log_empty">
ç›®å‰æ²’有交談記錄。 在你è¯çµ¡æŸäººæˆ–æŸäººè¯çµ¡ä½ ä¹‹å¾Œï¼Œé€™è£¡å°‡ç•™å­˜è¨˜éŒ„。
</string>
+ <string name="loading_chat_logs">
+ 載入中…
+ </string>
</strings>
diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp
index a40b5c9a3d..45ce1ba62f 100755
--- a/indra/newview/tests/llagentaccess_test.cpp
+++ b/indra/newview/tests/llagentaccess_test.cpp
@@ -40,7 +40,7 @@
static U32 test_preferred_maturity = SIM_ACCESS_PG;
LLControlGroup::LLControlGroup(const std::string& name)
- : LLInstanceTracker<LLControlGroup, std::string>(name)
+: LLInstanceTracker<LLControlGroup, std::string>(name)
{
}