diff --git a/autobuild.xml b/autobuild.xml index 55ee49fb68..b3de2fc836 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -235,6 +235,72 @@ + glod + + copyright + Copyright 2003 Jonathan Cohen, Nat Duca, David Luebke, Brenden Schubert - Johns Hopkins University and University of Virginia + license + GLOD Open-Source License Version 1.0 + license_file + LICENSES/GLOD.txt + name + glod + platforms + + darwin64 + + archive + + hash + 94fc457c46e1fb94b31251bd4747d10f + url + http://3p.firestormviewer.org/glod-1.0pre3.171101143-darwin64-171101143.tar.bz2 + + name + darwin64 + + linux64 + + archive + + hash + acc1181cd31ef32c3724eda84ae4b580 + url + http://3p.firestormviewer.org/glod-1.0pre3.180990827-linux64-180990827.tar.bz2 + + name + linux64 + + windows + + archive + + hash + e1f8da12a2b7a6c31830b4bb86d31ed6 + hash_algorithm + md5 + url + http://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows-vs2017-1906061512.tar.bz2 + + name + windows + + windows64 + + archive + + hash + e906cf08bfbfbd9d4fc78557e021e7d0 + url + http://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows64-vs2017-1906061512.tar.bz2 + + name + windows64 + + + version + 1.0pre3.532346 + gntp-growl copyright @@ -375,18 +441,6 @@ SDL platforms - linux - - archive - - hash - ff2e4df5bffe0203dc654b111347e617 - url - http://3p.firestormviewer.org/SDL-1.2.15-linux-181412059.tar.bz2 - - name - linux - linux64 archive @@ -481,18 +535,6 @@ apr_suite platforms - darwin - - archive - - hash - 0c53148aa00e51c06fa246c4130915be - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/Darwin/installer/apr_suite-1.4.5.297252-darwin-297252.tar.bz2 - - name - darwin - darwin64 archive @@ -505,18 +547,6 @@ name darwin64 - linux - - archive - - hash - 161e07b37e2f30da004a0d72d5075ad7 - url - http://3p.firestormviewer.org/apr_suite-1.4.5.180871344-linux-180871344.tar.bz2 - - name - linux - linux64 archive @@ -571,26 +601,14 @@ boost platforms - darwin - - archive - - hash - c296845cad075250c1ae2620f175a957 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Darwin/installer/boost-1.57-darwin-297445.tar.bz2 - - name - darwin - darwin64 archive hash - 35cc090d942b85c9126ceac9912d52d6 + fedc8d63856f534b6098102e059dc548 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78585/744021/boost-1.72-darwin64-557045.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87776/805857/boost-1.72-darwin64-563847.tar.bz2 name darwin64 @@ -600,9 +618,9 @@ archive hash - 401f317fbb67623c97a7b9d8b6627ef1 + 8d96a9d1a9a208b1f48ac677edb7ca4d url - http://3p.firestormviewer.org/boost-1.72-linux64_bionic-220402045.tar.bz2 + http://3p.firestormviewer.org/boost-1.72-linux64-222121224.tar.bz2 name linux64 @@ -612,9 +630,9 @@ archive hash - 9aa4ce32df5f5e36124c990e2d77b885 + 6cc9fb4ca21365c4470a3e516544ba71 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78586/743982/boost-1.72-windows-557045.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87784/805850/boost-1.72-windows-563847.tar.bz2 name windows @@ -624,9 +642,9 @@ archive hash - a79511c9d8b956767ebaa405155d4238 + 0c526efc3f8825cd25cdf635e238fab3 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78584/743961/boost-1.72-windows64-557045.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87783/805851/boost-1.72-windows64-563847.tar.bz2 name windows64 @@ -701,26 +719,14 @@ colladadom platforms - darwin - - archive - - hash - 726bc31e562752f081e95e8fcc70e405 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Darwin/installer/colladadom-2.3.297450-darwin-297450.tar.bz2 - - name - darwin - darwin64 archive hash - 1d063cf1783e7788f17486c234adb1db + 4699b8389dfb754da0393ddb5d325722 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78635/744249/colladadom-2.3.557064-darwin64-557064.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95882/856117/colladadom-2.3.569219-darwin64-569219.tar.bz2 name darwin64 @@ -730,9 +736,9 @@ archive hash - 88ee58d6548deae6c306f125b6461d61 + e1a8e9eca2894687b3532474ffc9b326 url - http://3p.firestormviewer.org/colladadom-2.3.220402056-linux64_bionic-220402056.tar.bz2 + http://3p.firestormviewer.org/colladadom-2.3.222130404-linux64-222130404.tar.bz2 name linux64 @@ -742,9 +748,9 @@ archive hash - e78ecf919eee01567556787c3a358d15 + 343e46ea49a08ad6596d3dc702d5b812 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78637/744269/colladadom-2.3.557064-windows-557064.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95883/856128/colladadom-2.3.569219-windows-569219.tar.bz2 name windows @@ -754,16 +760,16 @@ archive hash - 7e63a212c8909a25236138422fe01298 + de5bdfb61b31db56c5fe7d0962ad11e2 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78636/744273/colladadom-2.3.557064-windows64-557064.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95884/856129/colladadom-2.3.569219-windows64-569219.tar.bz2 name windows64 version - 2.3.557064 + 2.3.569219 cubemaptoequirectangular @@ -843,50 +849,26 @@ curl platforms - darwin - - archive - - hash - ad0061db7188a1b9a974eb0512eeeb8d - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/312763/arch/Darwin/installer/curl-7.47.0.312763-darwin-312763.tar.bz2 - - name - darwin - darwin64 archive hash - 13f74f43a6363ec998569f731fd869c5 + 44d801e05811269d1bed7dbc75d85843 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82637/774617/curl-7.54.1.560191-darwin64-560191.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87786/805905/curl-7.54.1.563852-darwin64-563852.tar.bz2 name darwin64 - linux - - archive - - hash - cade3843dfd7985f008cc8161daaefb0 - url - http://3p.firestormviewer.org/curl-7.54.1.180871811-linux-180871811.tar.bz2 - - name - linux - linux64 archive hash - 0bcccd248a5e4084af4026eee439816b + bacaa5403be0f1cba52b2250c2c227d9 url - http://3p.firestormviewer.org/curl-7.81.0.220511906-linux64_bionic-220511906.tar.bz2 + http://3p.firestormviewer.org/curl-7.81.0.222121724-linux64-222121724.tar.bz2 name linux64 @@ -896,11 +878,11 @@ archive hash - 0df99bd685dc3561ca8ea347b2921987 + 676f624d4ebdc2189caa43ef6dd8266d hash_algorithm md5 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82639/774610/curl-7.54.1.560191-windows-560191.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87790/805917/curl-7.54.1.563852-windows-563852.tar.bz2 name windows @@ -910,46 +892,16 @@ archive hash - 50db2a9e6b74ec4b0c38b1ea8f135735 + b3db5a2cdf275c1af7758fbe2d14544a url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82638/774608/curl-7.54.1.560191-windows64-560191.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87789/805918/curl-7.54.1.563852-windows64-563852.tar.bz2 name windows64 version - 7.54.1.560191 - - db - - copyright - Copyright (c) 1990, 2010 Oracle and/or its affiliates. All rights reserved. - description - Berkeley DB (libdb) is a programmatic toolkit that provides embedded database support for both traditional and client/server applications. - license - bsd - license_file - LICENSES/db.txt - name - db - platforms - - linux - - archive - - hash - 1cc7940e500858a9754e9a3cc3ba2237 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/db_3p-update-db/rev/295315/arch/Linux/installer/db-5.1.25-linux-295315.tar.bz2 - - name - linux - - - version - 5.1.25 + 7.54.1.563852 dictionaries @@ -1047,30 +999,6 @@ version 1.12.3.202111032221_91.1.21_g9dd45fe_chromium-91.0.4472.114 - elfio - - license - lgpl - license_file - LICENSES/elfio.txt - name - elfio - platforms - - linux - - archive - - hash - 031e6315a5c0829c9b9a2ec18aeb7ae3 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2 - - name - linux - - - expat copyright @@ -1085,18 +1013,6 @@ expat platforms - darwin - - archive - - hash - 452d1910ef853329cd59858e6c5b2c48 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/Darwin/installer/expat-2.0.1.297014-darwin-297014.tar.bz2 - - name - darwin - darwin64 archive @@ -1109,18 +1025,6 @@ name darwin64 - linux - - archive - - hash - b20e813b55488e43df5c197f1efd165c - url - http://3p.firestormviewer.org/expat-2.1.1.180871203-linux-180871203.tar.bz2 - - name - linux - linux64 archive @@ -1180,11 +1084,11 @@ archive hash - 20c867a0327bb653c8fc377b97d68c55 + 971a4c8accc851994039ef36785bed38 hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-2.02.06-darwin64-3.tar.bz2 + file:///opt/firestorm/fmodstudio-2.02.07-darwin-222051107.tar.bz2 name darwin @@ -1208,11 +1112,11 @@ archive hash - b81336e7824c6cf96a6cd6200333b3f7 + 611c5389b0354e6b64a7de50b93fafdb hash_algorithm md5 url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.06-windows-220870903.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.07-windows-222041046.tar.bz2 name windows @@ -1222,18 +1126,18 @@ archive hash - cbfb25df1e231a84b0beaf85600efb20 + 1b0b4d70d172c9b1eaac211f051ca599 hash_algorithm md5 url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.06-windows64-220870905.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.07-windows64-222041047.tar.bz2 name windows64 version - 2.02.06 + 2.02.07 fontconfig @@ -1249,18 +1153,6 @@ fontconfig platforms - linux - - archive - - hash - f7a2a70417ab9d2f999f80604cb4fa48 - url - http://3p.firestormviewer.org/fontconfig-2.11.0-linux-180871443.tar.bz2 - - name - linux - linux64 archive @@ -1291,42 +1183,18 @@ freetype platforms - darwin - - archive - - hash - 83618d16d974eb0af93926a10ac13297 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/Darwin/installer/freetype-2.4.4.297053-darwin-297053.tar.bz2 - - name - darwin - darwin64 archive hash - 3a478d6c8a10d49d9161ef864394b03c + 8865739d8e530199dacb3c3042c1bc01 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78592/744013/freetype-2.4.4.557047-darwin64-557047.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87777/805782/freetype-2.4.4.563848-darwin64-563848.tar.bz2 name darwin64 - linux - - archive - - hash - ced1bc8b28a2e87093b364c2b6d8cb9c - url - http://3p.firestormviewer.org/freetype-2.4.4.180871412-linux-180871412.tar.bz2 - - name - linux - linux64 archive @@ -1344,9 +1212,9 @@ archive hash - 4b3b02027ec0b64c479837f57e3d4ec8 + 90d94d031bc27bcefe3473432d6fa213 url - http://3p.firestormviewer.org/freetype-2.3.9.210761651-windows-210761651.tar.bz2 + http://3p.firestormviewer.org/freetype-2.3.9.220141015-windows-220141015.tar.bz2 name windows @@ -1356,16 +1224,16 @@ archive hash - 1b3ace03dcd61fa800a186213477a5fb + c5d76132e28039d1785a1719594b8418 url - http://3p.firestormviewer.org/freetype-2.3.9.210761652-windows64-210761652.tar.bz2 + http://3p.firestormviewer.org/freetype-2.3.9.220141018-windows64-220141018.tar.bz2 name windows64 version - 2.4.4.557047 + 2.4.4.563848 glext @@ -1393,18 +1261,6 @@ name darwin64 - linux - - archive - - hash - da432b959ccd920adca1030ad7f1b6cf - url - http://3p.firestormviewer.org/glext-68-linux-180871251.tar.bz2 - - name - linux - linux64 archive @@ -1489,42 +1345,18 @@ googlemock platforms - darwin - - archive - - hash - 022649e284163b8ee23e3c9a81302fa7 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Darwin/installer/googlemock-1.7.0.297460-darwin-297460.tar.bz2 - - name - darwin - darwin64 archive hash - 19e925604bc1a91efb4b130e1edd8bf2 + 11d0794582e91a57f6524ad345f2399d url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78620/744140/googlemock-1.7.0.557057-darwin64-557057.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87791/805924/googlemock-1.7.0.563853-darwin64-563853.tar.bz2 name darwin64 - linux - - archive - - hash - 5bc5ddeb97b8498d5141e27092161323 - url - http://3p.firestormviewer.org/googlemock-1.7.0.180871704-linux-180871704.tar.bz2 - - name - linux - linux64 archive @@ -1542,9 +1374,9 @@ archive hash - eed7b41d0d1f41b24f315349ef78c728 + 7d267050970ec6e28749178597bc8af0 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78622/744148/googlemock-1.7.0.557057-windows-557057.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87793/805930/googlemock-1.7.0.563853-windows-563853.tar.bz2 name windows @@ -1554,16 +1386,16 @@ archive hash - a6ad6fe722d2fe4e8137495af3f374c9 + 27638c692f0ec6121e54bf75f2d45e49 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78621/744152/googlemock-1.7.0.557057-windows64-557057.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87792/805936/googlemock-1.7.0.563853-windows64-563853.tar.bz2 name windows64 version - 1.7.0.557057 + 1.7.0.563853 gstreamer @@ -1577,18 +1409,6 @@ gstreamer platforms - linux - - archive - - hash - 904540d91ea7d577c7bcbb679621f013 - url - http://3p.firestormviewer.org/gstreamer-0.10.6.180871246-linux-180871246.tar.bz2 - - name - linux - linux64 archive @@ -1619,18 +1439,6 @@ havok-source platforms - darwin - - archive - - hash - 5c5b4820999ae9e398801d6a46f45897 - url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/297312/arch/Darwin/installer/havok_source-2012.1-darwin-297312.tar.bz2 - - name - darwin - darwin64 archive @@ -1643,18 +1451,6 @@ name darwin64 - linux - - archive - - hash - 03c1c5f7c3e93e905f635ca22b607494 - url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/p64_3p-havok-source/rev/314226/arch/Linux/installer/havok_source-2012.1-2-linux-314226.tar.bz2 - - name - linux - linux64 archive @@ -1773,18 +1569,6 @@ jpeglib platforms - darwin - - archive - - hash - 4d7658997fd0f93a9c55e40e40b1b0e5 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/Darwin/installer/jpeglib-8c.296854-darwin-296854.tar.bz2 - - name - darwin - darwin64 archive @@ -1797,18 +1581,6 @@ name darwin64 - linux - - archive - - hash - a7039c9a9c4461c5f85542f068dc09e5 - url - http://3p.firestormviewer.org/jpeglib-8c.180871203-linux-180871203.tar.bz2 - - name - linux - linux64 archive @@ -1863,18 +1635,6 @@ jsoncpp platforms - darwin - - archive - - hash - b25a4f480e07c670ffef00c3da578f87 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297281/arch/Darwin/installer/jsoncpp-0.5.0.297281-darwin-297281.tar.bz2 - - name - darwin - darwin64 archive @@ -1887,18 +1647,6 @@ name darwin64 - linux - - archive - - hash - da45220ec6fcf945f6ca1f11bc7606cf - url - http://3p.firestormviewer.org/jsoncpp-0.5.0.180872045-linux-180872045.tar.bz2 - - name - linux - linux64 archive @@ -2019,18 +1767,6 @@ libhunspell platforms - darwin - - archive - - hash - 05eda16106df26a211f8bdd874d1fca5 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/Darwin/installer/libhunspell-1.3.2.296916-darwin-296916.tar.bz2 - - name - darwin - darwin64 archive @@ -2043,18 +1779,6 @@ name darwin64 - linux - - archive - - hash - 77996d95cf2f072f4f277a2aaff20456 - url - http://3p.firestormviewer.org/libhunspell-1.3.2.180871248-linux-180871248.tar.bz2 - - name - linux - linux64 archive @@ -2109,18 +1833,6 @@ libndofdev platforms - darwin - - archive - - hash - a01b411433dbf8a4b481de9e76d9a652 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297264/arch/Darwin/installer/libndofdev-0.1.297264-darwin-297264.tar.bz2 - - name - darwin - darwin64 archive @@ -2175,42 +1887,18 @@ libpng platforms - darwin - - archive - - hash - 14cb5c8686a472e9e60179e46cd196f7 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297708/arch/Darwin/installer/libpng-1.6.8.297708-darwin-297708.tar.bz2 - - name - darwin - darwin64 archive hash - 2a41acc3116ce19a443873216cb882ad + c1c9e32e21f3c34d91ed045b2ca91f24 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78587/743948/libpng-1.6.8.557046-darwin64-557046.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87781/805801/libpng-1.6.8.563850-darwin64-563850.tar.bz2 name darwin64 - linux - - archive - - hash - 31754947447ec98374b3bf92e29cf68a - url - http://3p.firestormviewer.org/libpng-1.6.8.180871343-linux-180871343.tar.bz2 - - name - linux - linux64 archive @@ -2228,9 +1916,9 @@ archive hash - b935b440947f63c69700bdcf5095a8e1 + 642e9cf95c8ccd0eb34f6d7a40df585a url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78591/743970/libpng-1.6.8.557046-windows-557046.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87782/805831/libpng-1.6.8.563850-windows-563850.tar.bz2 name windows @@ -2240,16 +1928,16 @@ archive hash - d1cc8354ac4e877eefedf16b1be3aac6 + ce46aa0f171d97626c4a3940347cecd7 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78589/743991/libpng-1.6.8.557046-windows64-557046.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87780/805832/libpng-1.6.8.563850-windows64-563850.tar.bz2 name windows64 version - 1.6.8.557046 + 1.6.8.563850 libuuid @@ -2265,18 +1953,6 @@ libuuid platforms - linux - - archive - - hash - 1b1d83df165c947bea5c60c460277f93 - url - http://3p.firestormviewer.org/libuuid-1.6.2-linux-180871203.tar.bz2 - - name - linux - linux64 archive @@ -2307,50 +1983,26 @@ libxml2 platforms - darwin - - archive - - hash - 9303f0dd174129e297eca6cc2eb1ab3f - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/Darwin/installer/libxml2-2.9.1.297050-darwin-297050.tar.bz2 - - name - darwin - darwin64 archive hash - 6677173bbbb0ea32369b5e9b6c9aa641 + 6f37dd6c4a5174f358b6cc5d953f121b url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78631/744225/libxml2-2.9.4.557062-darwin64-557062.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87768/805766/libxml2-2.9.4.563845-darwin64-563845.tar.bz2 name darwin64 - linux - - archive - - hash - b4e676d3d583264f006432510727aa05 - url - http://3p.firestormviewer.org/libxml2-2.9.4.180871340-linux-180871340.tar.bz2 - - name - linux - linux64 archive hash - 0bc56fa68f59537486c75b04646d65a9 + c68bbfe6c9bd59d182c4d20d966492b4 url - http://3p.firestormviewer.org/libxml2-2.9.4.180841555-linux64-180841555.tar.bz2 + http://3p.firestormviewer.org/libxml2-2.9.4.222130358-linux64-222130358.tar.bz2 name linux64 @@ -2360,9 +2012,9 @@ archive hash - ad6a596fbf0e83a21d95762da78437bc + fd85d3aa13fbdfd1f1ace587e95ef151 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78633/744239/libxml2-2.9.4.557062-windows-557062.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87773/805797/libxml2-2.9.4.563845-windows-563845.tar.bz2 name windows @@ -2372,16 +2024,16 @@ archive hash - 6b5bb230684ecf28386d7c91c47bb6e1 + d231d36c3b8942e0259aa2d9fcaa3b7e url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78634/744240/libxml2-2.9.4.557062-windows64-557062.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87772/805795/libxml2-2.9.4.563845-windows64-563845.tar.bz2 name windows64 version - 2.9.4.557062 + 2.9.4.563845 llappearance_utility @@ -2666,6 +2318,18 @@ name darwin64 + linux64 + + archive + + hash + 50d647afc4e510af72f09dcd7a77e920 + url + http://3p.firestormviewer.org/meshoptimizer-0.16.222121104-linux64-222121104.tar.bz2 + + name + linux64 + windows archive @@ -2694,6 +2358,74 @@ version 0.16.561408 + minizip-ng + + canonical_repo + https://bitbucket.org/lindenlab/3p-minizip-ng + copyright + This project uses the zlib license. Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + description + minizip-ng is a zip manipulation library. Based on work of Gilles Vollant. + license + minizip-ng + license_file + LICENSES/minizip-ng.txt + name + minizip-ng + platforms + + darwin64 + + archive + + hash + 843587a078102d86d90054d03354684d + url + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95876/856095/minizip_ng-3.0.2.569217-darwin64-569217.tar.bz2 + + name + darwin64 + + linux64 + + archive + + hash + ee4e3a02ad4669a4d84e9c32e509530e + url + http://3p.firestormviewer.org/minizip_ng-3.0.2.222121607-linux64-222121607.tar.bz2 + + name + linux64 + + windows + + archive + + hash + 26dc254f443ca9c5509547d7fbd9d8e5 + url + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95878/856107/minizip_ng-3.0.2.569217-windows-569217.tar.bz2 + + name + windows + + windows64 + + archive + + hash + e9241fa325f4014995b62193321e7a1c + url + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95877/856106/minizip_ng-3.0.2.569217-windows64-569217.tar.bz2 + + name + windows64 + + + version + 3.0.2.569217 + nghttp2 copyright @@ -2721,18 +2453,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name darwin64 - linux - - archive - - hash - 24c50d563fe8ff10ca819088ffbef7a6 - url - http://3p.firestormviewer.org/nghttp2-1.25.0.180871240-linux-180871240.tar.bz2 - - name - linux - linux64 archive @@ -2831,18 +2551,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors ogg_vorbis platforms - darwin - - archive - - hash - 07fca1531a27915f642a5c1d95008d54 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2.296878-darwin-296878.tar.bz2 - - name - darwin - darwin64 archive @@ -2855,18 +2563,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name darwin64 - linux - - archive - - hash - 0d3db04b9b10085b100b345c68381cb0 - url - http://3p.firestormviewer.org/ogg_vorbis-1.3.3-1.3.6.183570207-linux-183570207.tar.bz2 - - name - linux - linux64 archive @@ -2951,20 +2647,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors openal platforms - linux - - archive - - hash - cc0f030e6f4a78e3afd5269165c056b4 - hash_algorithm - md5 - url - http://3p.firestormviewer.org/openal-1.12.854-1.1.0.180871246-linux-180871246.tar.bz2 - - name - linux - linux64 archive @@ -3021,18 +2703,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors openjpeg platforms - darwin - - archive - - hash - 4e278d789c5d6e448d1e39211d19bf41 - url - http://3p.firestormviewer.org/openjpeg-1.4.201505181816-r27-darwin-201505181816-r27.tar.bz2 - - name - darwin - darwin64 archive @@ -3099,50 +2769,26 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors openssl platforms - darwin - - archive - - hash - 0a77d56769e6075957f614be6575423e - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/Darwin/installer/openssl-1.0.1h.297168-darwin-297168.tar.bz2 - - name - darwin - darwin64 archive hash - 5503e4928bcdb0a29685b3242c4a409b + 142d0ad85d0ee4fbb673c9f9e414fbdd url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82619/774464/openssl-1.1.1l.560177-darwin64-560177.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87769/805772/openssl-1.1.1l.563846-darwin64-563846.tar.bz2 name darwin64 - linux - - archive - - hash - 343f6ace63617546704c4aad9b432312 - url - http://3p.firestormviewer.org/openssl-1.0.2l.180871731-linux-180871731.tar.bz2 - - name - linux - linux64 archive hash - ea82e634334bccf088daf3d15eab07b7 + cdd9c6c484542a2e1be99149c4f0e75f url - http://3p.firestormviewer.org/openssl-1.1.1l.212872015-linux64-212872015.tar.bz2 + http://3p.firestormviewer.org/openssl-1.1.1l.222121440-linux64-222121440.tar.bz2 name linux64 @@ -3152,9 +2798,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - d2153f20dc2d35c609b876a9f019a748 + 55bd833166d03f1467e2c7f24fa9143e url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82623/774521/openssl-1.1.1l.560177-windows-560177.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87775/805841/openssl-1.1.1l.563846-windows-563846.tar.bz2 name windows @@ -3164,16 +2810,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - f40b8622ba38084b0962e273988d748f + 6fefc60f68882fc6b246521b696497ab url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82624/774520/openssl-1.1.1l.560177-windows64-560177.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87774/805833/openssl-1.1.1l.563846-windows64-563846.tar.bz2 name windows64 version - 1.1.1l.560177 + 1.1.1l.563846 pcre @@ -3189,18 +2835,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors pcre platforms - darwin - - archive - - hash - 6d2b38897f1adf354b299345d5fc759b - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/Darwin/installer/pcre-8.35.-darwin-297155.tar.bz2 - - name - darwin - darwin64 archive @@ -3213,18 +2847,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name darwin64 - linux - - archive - - hash - cf1c53b27e5889c7c5963ed06ab23cb2 - url - http://3p.firestormviewer.org/pcre-8.35.180871234-linux-180871234.tar.bz2 - - name - linux - linux64 archive @@ -3279,18 +2901,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors slvoice platforms - darwin - - archive - - hash - 511a9c3fd4b6c76a8a737d06bba1c291 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oz-426-slvoice/rev/330003/arch/Darwin/installer/slvoice-4.9.0002.27586.330003-darwin-330003.tar.bz2 - - name - darwin - darwin64 archive @@ -3515,18 +3125,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors uriparser platforms - darwin - - archive - - hash - 22608adaf54e8ddc9182a719ba6e2b32 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Darwin/installer/uriparser-0.8.0.1-darwin-299435.tar.bz2 - - name - darwin - darwin64 archive @@ -3539,18 +3137,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name darwin64 - linux - - archive - - hash - 6573a190dbdef9b23235beb9b1219bef - url - http://3p.firestormviewer.org/uriparser-0.8.0.1-linux-180871244.tar.bz2 - - name - linux - linux64 archive @@ -3617,18 +3203,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name darwin64 - linux - - archive - - hash - b7167025f54c044abee21b48476ad4f2 - url - http://3p.firestormviewer.org/viewer_manager-1.0.180871935-linux-180871935.tar.bz2 - - name - linux - linux64 archive @@ -3727,18 +3301,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors xmlrpc-epi platforms - darwin - - archive - - hash - ffd3aab8e0c0ff6dadbce49ca2809078 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/Darwin/installer/xmlrpc_epi-0.54.1.297075-darwin-297075.tar.bz2 - - name - darwin - darwin64 archive @@ -3751,18 +3313,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name darwin64 - linux - - archive - - hash - 0f318372198fb34b3a59b4aa03c40ac7 - url - http://3p.firestormviewer.org/xmlrpc_epi-0.54.1.180871731-linux-180871731.tar.bz2 - - name - linux - linux64 archive @@ -3803,66 +3353,42 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors version 0.54.1.555529 - zlib + zlib-ng + canonical_repo + https://bitbucket.org/lindenlab/3p-zlib-ng copyright Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler description - Zlib Data Compression Library + zlib data compression library for the next generation systems license - zlib + zlib-ng license_file - LICENSES/zlib.txt + LICENSES/zlib-ng.txt name - zlib + zlib-ng platforms - darwin - - archive - - hash - 1a79eeac199c2d94e4ae4e5d0194e25f - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Darwin/installer/zlib-1.2.8.296881-darwin-296881.tar.bz2 - - name - darwin - darwin64 archive hash - 9181bc8229f1a8e480d2a40a2744ec28 + bf306e38bf81c6095e0967bdef6a2445 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78578/743913/zlib-1.2.11.557041-darwin64-557041.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87759/805718/zlib_ng-2.0.5.563838-darwin64-563838.tar.bz2 name darwin64 - linux - - archive - - hash - ee84398d540324533332a048f77bf08a - hash_algorithm - md5 - url - http://3p.firestormviewer.org/zlib-1.2.8.180871259-linux-180871259.tar.bz2 - - name - linux - linux64 archive hash - 15a645809cb2f14074f22e7848bb42cf + 5ee7cda65cede06190c811e59b3880b0 url - http://3p.firestormviewer.org/zlib-1.2.8.180841547-linux64-180841547.tar.bz2 + http://3p.firestormviewer.org/zlib_ng-2.0.5.222121000-linux64-222121000.tar.bz2 name linux64 @@ -3872,9 +3398,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 8308cbd2ea0fe290541698b0f63482e2 + 8ffce5bd00e3d5afa8cb39b855237c4a url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78579/743926/zlib-1.2.11.557041-windows-557041.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87761/805730/zlib_ng-2.0.5.563838-windows-563838.tar.bz2 name windows @@ -3884,16 +3410,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 36bdc34f67d3ad3c57125dc1b16a3129 + bd103a9129e57f7ea35886bc7750f8a6 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78577/743920/zlib-1.2.11.557041-windows64-557041.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87760/805729/zlib_ng-2.0.5.563838-windows64-563838.tar.bz2 name windows64 version - 1.2.11.557041 + 2.0.5.563838 package_description diff --git a/doc/contributions.txt b/doc/contributions.txt index be3b807557..bcd60aa21c 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1115,16 +1115,18 @@ Nicky Dasmijn STORM-1937 OPEN-187 SL-15234 - STORM-2010 + STORM-2010 STORM-2082 MAINT-6665 SL-10291 SL-10293 SL-11061 - SL-11072 + SL-11072 SL-13141 SL-13642 + SL-14541 SL-16438 + SL-17218 Nicky Perian OPEN-1 STORM-1087 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 1245ce2e8c..962f9d006c 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -136,6 +136,12 @@ if (LINUX) include(LLAppearanceUtility) add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR}) endif (INSTALL_PROPRIETARY) +# add_dependencies(viewer linux-crash-logger-strip-target) +elseif (WINDOWS) + # cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake + if (EXISTS ${VIEWER_DIR}win_setup) + add_subdirectory(${VIEWER_DIR}win_setup) + endif (EXISTS ${VIEWER_DIR}win_setup) endif (LINUX) if (WINDOWS) diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 1a01671002..9b64bc6160 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -1,4 +1,3 @@ -include(BerkeleyDB) include(Linking) include(Prebuilt) @@ -49,7 +48,7 @@ else (USESYSTEMLIBS) set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1) if (LINUX) - list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) - list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} rt) + list(APPEND APRUTIL_LIBRARIES uuid) + list(APPEND APRUTIL_LIBRARIES rt) endif (LINUX) endif (USESYSTEMLIBS) diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake deleted file mode 100644 index 968e4f782b..0000000000 --- a/indra/cmake/BerkeleyDB.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# -*- cmake -*- -include(Prebuilt) -set(DB_FIND_QUIETLY ON) -set(DB_FIND_REQUIRED ON) - -if (USESYSTEMLIBS) - include(FindBerkeleyDB) -else (USESYSTEMLIBS) - if (LINUX) - # Need to add dependency pthread explicitely to support ld.gold. -# use_prebuilt_binary(db) -# set(DB_LIBRARIES db-5.1 pthread) - else (LINUX) -# set(DB_LIBRARIES db-4.2) - endif (LINUX) - set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) -endif (USESYSTEMLIBS) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 0f69fb7fa0..50d7ce3c14 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -24,66 +24,33 @@ else (USESYSTEMLIBS) set(addrsfx "-x${ADDRESS_SIZE}") if (WINDOWS) - if(MSVC80) - # This should be obsolete at this point - set(BOOST_VERSION "1.55") - set(BOOST_CONTEXT_LIBRARY - optimized libboost_context-vc80-mt-${BOOST_VERSION} - debug libboost_context-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_FILESYSTEM_LIBRARY - optimized libboost_filesystem-vc80-mt-${BOOST_VERSION} - debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_PROGRAM_OPTIONS_LIBRARY - optimized libboost_program_options-vc80-mt-${BOOST_VERSION} - debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_REGEX_LIBRARY - optimized libboost_regex-vc80-mt-${BOOST_VERSION} - debug libboost_regex-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_SIGNALS_LIBRARY - optimized libboost_signals-vc80-mt-${BOOST_VERSION} - debug libboost_signals-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_SYSTEM_LIBRARY - optimized libboost_system-vc80-mt-${BOOST_VERSION} - debug libboost_system-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_THREAD_LIBRARY - optimized libboost_thread-vc80-mt-${BOOST_VERSION} - debug libboost_thread-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_WAVE_LIBRARY - optimized libboost_wave-vc80-mt-${BOOST_VERSION} - debug libboost_wave-vc80-mt-gd-${BOOST_VERSION}) - set(BOOST_THREAD_LIBRARY - optimized libboost_thread-vc80-mt-${BOOST_VERSION} - debug libboost_thread-vc80-mt-gd-${BOOST_VERSION}) - else(MSVC80) - # MSVC 10.0 config - set(BOOST_CONTEXT_LIBRARY - optimized libboost_context-mt${addrsfx} - debug libboost_context-mt${addrsfx}-gd) - set(BOOST_FIBER_LIBRARY - optimized libboost_fiber-mt${addrsfx} - debug libboost_fiber-mt${addrsfx}-gd) - set(BOOST_FILESYSTEM_LIBRARY - optimized libboost_filesystem-mt${addrsfx} - debug libboost_filesystem-mt${addrsfx}-gd) - set(BOOST_PROGRAM_OPTIONS_LIBRARY - optimized libboost_program_options-mt${addrsfx} - debug libboost_program_options-mt${addrsfx}-gd) - set(BOOST_REGEX_LIBRARY - optimized libboost_regex-mt${addrsfx} - debug libboost_regex-mt${addrsfx}-gd) - set(BOOST_SIGNALS_LIBRARY - optimized libboost_signals-mt${addrsfx} - debug libboost_signals-mt${addrsfx}-gd) - set(BOOST_SYSTEM_LIBRARY - optimized libboost_system-mt${addrsfx} - debug libboost_system-mt${addrsfx}-gd) - set(BOOST_THREAD_LIBRARY - optimized libboost_thread-mt${addrsfx} - debug libboost_thread-mt${addrsfx}-gd) - set(BOOST_WAVE_LIBRARY - optimized libboost_wave-mt${addrsfx} - debug libboost_wave-mt${addrsfx}-gd) - endif (MSVC80) + set(BOOST_CONTEXT_LIBRARY + optimized libboost_context-mt${addrsfx} + debug libboost_context-mt${addrsfx}-gd) + set(BOOST_FIBER_LIBRARY + optimized libboost_fiber-mt${addrsfx} + debug libboost_fiber-mt${addrsfx}-gd) + set(BOOST_FILESYSTEM_LIBRARY + optimized libboost_filesystem-mt${addrsfx} + debug libboost_filesystem-mt${addrsfx}-gd) + set(BOOST_PROGRAM_OPTIONS_LIBRARY + optimized libboost_program_options-mt${addrsfx} + debug libboost_program_options-mt${addrsfx}-gd) + set(BOOST_REGEX_LIBRARY + optimized libboost_regex-mt${addrsfx} + debug libboost_regex-mt${addrsfx}-gd) + set(BOOST_SIGNALS_LIBRARY + optimized libboost_signals-mt${addrsfx} + debug libboost_signals-mt${addrsfx}-gd) + set(BOOST_SYSTEM_LIBRARY + optimized libboost_system-mt${addrsfx} + debug libboost_system-mt${addrsfx}-gd) + set(BOOST_THREAD_LIBRARY + optimized libboost_thread-mt${addrsfx} + debug libboost_thread-mt${addrsfx}-gd) + set(BOOST_WAVE_LIBRARY + optimized libboost_wave-mt${addrsfx} + debug libboost_wave-mt${addrsfx}-gd) elseif (LINUX) set(BOOST_CONTEXT_LIBRARY optimized boost_context-mt${addrsfx} diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 93fb3ae52a..7bd4dce8fc 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -10,7 +10,6 @@ set(cmake_SOURCE_FILES 00-Common.cmake APR.cmake Audio.cmake - BerkeleyDB.cmake Boost.cmake bugsplat.cmake BuildVersion.cmake @@ -27,7 +26,6 @@ set(cmake_SOURCE_FILES EXPAT.cmake FindAPR.cmake FindAutobuild.cmake - FindBerkeleyDB.cmake FindFMODSTUDIO.cmake FindGLH.cmake FindHUNSPELL.cmake @@ -37,11 +35,12 @@ set(cmake_SOURCE_FILES FindSCP.cmake FindURIPARSER.cmake FindXmlRpcEpi.cmake - FindZLIB.cmake + FindZLIBNG.cmake FMODSTUDIO.cmake FreeType.cmake GLEXT.cmake GLH.cmake + GLOD.cmake ## GStreamer010Plugin.cmake GoogleMock.cmake Growl.cmake @@ -97,7 +96,7 @@ set(cmake_SOURCE_FILES VisualLeakDetector.cmake LibVLCPlugin.cmake XmlRpcEpi.cmake - ZLIB.cmake + ZLIBNG.cmake ) source_group("Shared Rules" FILES ${cmake_SOURCE_FILES}) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index ffc810f6b0..bdeac63e5a 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -57,6 +57,7 @@ if(WINDOWS) libaprutil-1.dll libapriconv-1.dll nghttp2.dll + glod.dll # restore GLOD libhunspell.dll uriparser.dll ) @@ -198,6 +199,7 @@ elseif(DARWIN) libaprutil-1.0.dylib libaprutil-1.dylib ${EXPAT_COPY} + libGLOD.dylib # restore GLOD libhunspell-1.3.0.dylib libndofdev.dylib libnghttp2.dylib diff --git a/indra/cmake/FindBerkeleyDB.cmake b/indra/cmake/FindBerkeleyDB.cmake deleted file mode 100644 index 2d633c74ec..0000000000 --- a/indra/cmake/FindBerkeleyDB.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# -*- cmake -*- - -# - Find BerkeleyDB -# Find the BerkeleyDB includes and library -# This module defines -# DB_INCLUDE_DIR, where to find db.h, etc. -# DB_LIBRARIES, the libraries needed to use BerkeleyDB. -# DB_FOUND, If false, do not try to use BerkeleyDB. -# also defined, but not for general use are -# DB_LIBRARY, where to find the BerkeleyDB library. - -FIND_PATH(DB_INCLUDE_DIR db.h -/usr/local/include/db4 -/usr/local/include -/usr/include/db4 -/usr/include -) - -SET(DB_NAMES ${DB_NAMES} db) -FIND_LIBRARY(DB_LIBRARY - NAMES ${DB_NAMES} - PATHS /usr/lib /usr/local/lib - ) - -IF (DB_LIBRARY AND DB_INCLUDE_DIR) - SET(DB_LIBRARIES ${DB_LIBRARY}) - SET(DB_FOUND "YES") -ELSE (DB_LIBRARY AND DB_INCLUDE_DIR) - SET(DB_FOUND "NO") -ENDIF (DB_LIBRARY AND DB_INCLUDE_DIR) - - -IF (DB_FOUND) - IF (NOT DB_FIND_QUIETLY) - MESSAGE(STATUS "Found BerkeleyDB: ${DB_LIBRARIES}") - ENDIF (NOT DB_FIND_QUIETLY) -ELSE (DB_FOUND) - IF (DB_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find BerkeleyDB library") - ENDIF (DB_FIND_REQUIRED) -ENDIF (DB_FOUND) - -# Deprecated declarations. -SET (NATIVE_DB_INCLUDE_PATH ${DB_INCLUDE_DIR} ) -GET_FILENAME_COMPONENT (NATIVE_DB_LIB_PATH ${DB_LIBRARY} PATH) - -MARK_AS_ADVANCED( - DB_LIBRARY - DB_INCLUDE_DIR - ) diff --git a/indra/cmake/FindZLIB.cmake b/indra/cmake/FindZLIB.cmake deleted file mode 100644 index 03a7db9d6f..0000000000 --- a/indra/cmake/FindZLIB.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# -*- cmake -*- - -# - Find zlib -# Find the ZLIB includes and library -# This module defines -# ZLIB_INCLUDE_DIRS, where to find zlib.h, etc. -# ZLIB_LIBRARIES, the libraries needed to use zlib. -# ZLIB_FOUND, If false, do not try to use zlib. -# -# This FindZLIB is about 43 times as fast the one provided with cmake (2.8.x), -# because it doesn't look up the version of zlib, resulting in a dramatic -# speed up for configure (from 4 minutes 22 seconds to 6 seconds). -# -# Note: Since this file is only used for standalone, the windows -# specific parts were left out. - -FIND_PATH(ZLIB_INCLUDE_DIR zlib.h - NO_SYSTEM_ENVIRONMENT_PATH - ) - -FIND_LIBRARY(ZLIB_LIBRARY z) - -if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) - SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) - SET(ZLIB_FOUND "YES") -else (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - SET(ZLIB_FOUND "NO") -endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - -if (ZLIB_FOUND) - if (NOT ZLIB_FIND_QUIETLY) - message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") - SET(ZLIB_FIND_QUIETLY TRUE) - endif (NOT ZLIB_FIND_QUIETLY) -else (ZLIB_FOUND) - if (ZLIB_FIND_REQUIRED) - message(FATAL_ERROR "Could not find ZLIB library") - endif (ZLIB_FIND_REQUIRED) -endif (ZLIB_FOUND) - -mark_as_advanced( - ZLIB_LIBRARY - ZLIB_INCLUDE_DIR - ) - diff --git a/indra/cmake/FindZLIBNG.cmake b/indra/cmake/FindZLIBNG.cmake new file mode 100644 index 0000000000..6e3c8cdddb --- /dev/null +++ b/indra/cmake/FindZLIBNG.cmake @@ -0,0 +1,46 @@ +# -*- cmake -*- + +# - Find zlib-ng +# Find the ZLIB includes and library +# This module defines +# ZLIBNG_INCLUDE_DIRS, where to find zlib.h, etc. +# ZLIBNG_LIBRARIES, the libraries needed to use zlib. +# ZLIBNG_FOUND, If false, do not try to use zlib. +# +# This FindZLIBNG is about 43 times as fast the one provided with cmake (2.8.x), +# because it doesn't look up the version of zlib, resulting in a dramatic +# speed up for configure (from 4 minutes 22 seconds to 6 seconds). +# +# Note: Since this file is only used for standalone, the windows +# specific parts were left out. + +FIND_PATH(ZLIBNG_INCLUDE_DIR zlib.h + NO_SYSTEM_ENVIRONMENT_PATH + ) + +FIND_LIBRARY(ZLIBNG_LIBRARY z) + +if (ZLIBNG_LIBRARY AND ZLIBNG_INCLUDE_DIR) + SET(ZLIBNG_INCLUDE_DIRS ${ZLIBNG_INCLUDE_DIR}) + SET(ZLIBNG_LIBRARIES ${ZLIBNG_LIBRARY}) + SET(ZLIBNG_FOUND "YES") +else (ZLIBNG_LIBRARY AND ZLIBNG_INCLUDE_DIR) + SET(ZLIBNG_FOUND "NO") +endif (ZLINGB_LIBRARY AND ZLIBNG_INCLUDE_DIR) + +if (ZLIBNG_FOUND) + if (NOT ZLIBNG_FIND_QUIETLY) + message(STATUS "Found ZLIBNG: ${ZLIBNG_LIBRARIES}") + SET(ZLIBNG_FIND_QUIETLY TRUE) + endif (NOT ZLIBNG_FIND_QUIETLY) +else (ZLIBNG_FOUND) + if (ZLIBNG_FIND_REQUIRED) + message(FATAL_ERROR "Could not find ZLIBNG library") + endif (ZLIBNG_FIND_REQUIRED) +endif (ZLIBNG_FOUND) + +mark_as_advanced( + ZLIBNG_LIBRARY + ZLIBNG_INCLUDE_DIR + ) + diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake new file mode 100644 index 0000000000..2580ead67b --- /dev/null +++ b/indra/cmake/GLOD.cmake @@ -0,0 +1,15 @@ +# -*- cmake -*- + +#if (USESYSTEMLIBS) +# set(GLOD_FIND_REQUIRED true) +# include(FindGLOD) +#else (USESYSTEMLIBS) + include(Prebuilt) + use_prebuilt_binary(glod) +set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) +if(LINUX) + set(GLOD_LIBRARIES GLOD vds) +else() + set(GLOD_LIBRARIES GLOD) +endif() +#endif (USESYSTEMLIBS) diff --git a/indra/cmake/LLAppearanceUtility.cmake b/indra/cmake/LLAppearanceUtility.cmake index 28b49bf75f..0eb3c723d5 100644 --- a/indra/cmake/LLAppearanceUtility.cmake +++ b/indra/cmake/LLAppearanceUtility.cmake @@ -10,5 +10,3 @@ if (INSTALL_PROPRIETARY) set(LLAPPEARANCEUTILITY_BIN_DIR ${CMAKE_BINARY_DIR}/llappearanceutility) endif (LINUX) endif (INSTALL_PROPRIETARY) - - diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 843cb7905c..53871791fd 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -3,22 +3,15 @@ include(APR) include(Boost) include(EXPAT) -include(ZLIB) -include(Tracy) # Tracy profiler +include(Tracy) +include(ZLIBNG) -# Add Tracy profiler support -#set(LLCOMMON_INCLUDE_DIRS -# ${LIBS_OPEN_DIR}/llcommon -# ${APRUTIL_INCLUDE_DIR} -# ${APR_INCLUDE_DIR} -# ) set(LLCOMMON_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llcommon ${APRUTIL_INCLUDE_DIR} ${APR_INCLUDE_DIR} ${TRACY_INCLUDE_DIR} ) -# set(LLCOMMON_SYSTEM_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ) diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index 93626f689f..4e34951215 100644 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -5,6 +5,7 @@ include(Prebuilt) include(Boost) use_prebuilt_binary(colladadom) +use_prebuilt_binary(minizip-ng) # needed for colladadom use_prebuilt_binary(pcre) use_prebuilt_binary(libxml2) @@ -22,6 +23,8 @@ if (WINDOWS) optimized pcrecpp debug pcred optimized pcre + debug libminizip + optimized libminizip ${BOOST_SYSTEM_LIBRARIES} ) elseif (DARWIN) @@ -29,7 +32,7 @@ elseif (DARWIN) llprimitive debug collada14dom-d optimized collada14dom - minizip + minizip # for collada libminizip.a xml2 pcrecpp pcre diff --git a/indra/cmake/MESHOPTIMIZER.cmake b/indra/cmake/MESHOPTIMIZER.cmake index 1c5b47b9bd..9c1f4a8c21 100644 --- a/indra/cmake/MESHOPTIMIZER.cmake +++ b/indra/cmake/MESHOPTIMIZER.cmake @@ -8,7 +8,7 @@ use_prebuilt_binary(meshoptimizer) if (WINDOWS) set(MESHOPTIMIZER_LIBRARIES meshoptimizer.lib) elseif (LINUX) - set(MESHOPTIMIZER_LIBRARIES meshoptimizer.o) + set(MESHOPTIMIZER_LIBRARIES libmeshoptimizer.a) elseif (DARWIN) set(MESHOPTIMIZER_LIBRARIES libmeshoptimizer.a) endif (WINDOWS) diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index 756c3f4f42..6f48f36ecc 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -217,8 +217,12 @@ set(FLICKR_API_SECRET "846f0958020b553e") # Discord client key. set(DDISCORD_API_KEY "427641535253708801") -set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer") -set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.") +# FS:ND Don't force this into the cache, that can have some strange effects. Instead make it a normal variable +#set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer") +set(ENABLE_SIGNING OFF) + +# FS:ND Don't force this into the cache here, we set it in 00-Common.make +#set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.") set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside") set(USESYSTEMLIBS OFF CACHE BOOL "Use libraries from your system rather than Linden-supplied prebuilt libraries.") diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIBNG.cmake similarity index 72% rename from indra/cmake/ZLIB.cmake rename to indra/cmake/ZLIBNG.cmake index 5c1e3c57a1..7ff10a922e 100644 --- a/indra/cmake/ZLIB.cmake +++ b/indra/cmake/ZLIBNG.cmake @@ -1,17 +1,17 @@ # -*- cmake -*- -set(ZLIB_FIND_QUIETLY ON) -set(ZLIB_FIND_REQUIRED ON) +set(ZLIBNG_FIND_QUIETLY ON) +set(ZLIBNG_FIND_REQUIRED ON) include(Prebuilt) if (USESYSTEMLIBS) - include(FindZLIB) + include(FindZLIBNG) else (USESYSTEMLIBS) - use_prebuilt_binary(zlib) + use_prebuilt_binary(zlib-ng) if (WINDOWS) - set(ZLIB_LIBRARIES - debug zlibd + set(ZLIBNG_LIBRARIES + debug zlib optimized zlib) elseif (LINUX) # @@ -26,12 +26,12 @@ else (USESYSTEMLIBS) # second whole-archive load of the archive. See viewer's # CMakeLists.txt for more information. # - set(ZLIB_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive) - set(ZLIB_LIBRARIES z) + set(ZLIBNG_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive) + set(ZLIBNG_LIBRARIES z) elseif (DARWIN) - set(ZLIB_LIBRARIES z) + set(ZLIBNG_LIBRARIES z) endif (WINDOWS) if (WINDOWS OR LINUX) - set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib) + set(ZLIBNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib-ng) endif (WINDOWS OR LINUX) endif (USESYSTEMLIBS) diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 512c7c8482..f6b9103f0d 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -83,9 +83,7 @@ def proper_windows_path(path, current_platform = sys.platform): return drive_letter.upper() + ':\\' + rel.replace('/', '\\') def get_default_platform(dummy): - return {'linux2':'linux', - 'linux1':'linux', - 'linux':'linux', + return {'linux':'linux', 'cygwin':'windows', 'win32':'windows', 'darwin':'darwin' diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt index ab8ef14fce..8cb5028985 100644 --- a/indra/linux_crash_logger/CMakeLists.txt +++ b/indra/linux_crash_logger/CMakeLists.txt @@ -7,7 +7,7 @@ include(Linking) include(UI) include(CURL) include(OpenSSL) -include(ZLIB) +include(ZLIBNG) include_directories( ${LLCOREHTTP_INCLUDE_DIRS} @@ -54,12 +54,12 @@ set(LIBRT_LIBRARY rt) target_link_libraries(linux-crash-logger ${UI_LIBRARIES} - ${CURL_LIBRARIES} - ${OPENSSL_LIBRARIES} - ${CRYPTO_LIBRARIES} - ${ZLIB_LIBRARIES} + ${CURL_LIBRARIES} + ${OPENSSL_LIBRARIES} + ${CRYPTO_LIBRARIES} + ${ZLIBNG_LIBRARIES} ${LIBRT_LIBRARY} - X11 + X11 ) add_custom_target(linux-crash-logger-target ALL diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index 7e9636f488..f39b112f37 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -453,32 +453,6 @@ const std::string LLTexLayerSet::getBodyRegionName() const return mInfo->mBodyRegion; } - -// virtual -void LLTexLayerSet::asLLSD(LLSD& sd) const -{ - sd["visible"] = LLSD::Boolean(isVisible()); - LLSD layer_list_sd; - layer_list_t::const_iterator layer_iter = mLayerList.begin(); - layer_list_t::const_iterator layer_end = mLayerList.end(); - for(; layer_iter != layer_end; ++layer_iter) - { - LLSD layer_sd; - //LLTexLayerInterface* layer = (*layer_iter); - //if (layer) - //{ - // layer->asLLSD(layer_sd); - //} - layer_list_sd.append(layer_sd); - } - LLSD mask_list_sd; - LLSD info_sd; - sd["layers"] = layer_list_sd; - sd["masks"] = mask_list_sd; - sd["info"] = info_sd; -} - - void LLTexLayerSet::destroyComposite() { if( mComposite ) diff --git a/indra/llappearance/lltexlayer.h b/indra/llappearance/lltexlayer.h index 8ffb91470d..a70404ced0 100644 --- a/indra/llappearance/lltexlayer.h +++ b/indra/llappearance/lltexlayer.h @@ -220,8 +220,6 @@ public: static BOOL sHasCaches; - virtual void asLLSD(LLSD& sd) const; - protected: typedef std::vector layer_list_t; layer_list_t mLayerList; diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 00447bb33d..960331aedd 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -10,7 +10,7 @@ include(Boost) include(LLSharedLibs) include(JsonCpp) include(Copy3rdPartyLibs) -include(ZLIB) +include(ZLIBNG) include(URIPARSER) include(Tracy) @@ -18,7 +18,7 @@ include_directories( SYSTEM ${EXPAT_INCLUDE_DIRS} ${LLCOMMON_INCLUDE_DIRS} ${JSONCPP_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIRS} + ${ZLIBNG_INCLUDE_DIRS} ${URIPARSER_INCLUDE_DIRS} ${TRACY_INCLUDE_DIR} ) @@ -130,6 +130,7 @@ set(llcommon_HEADER_FILES CMakeLists.txt chrono.h + classic_callback.h commoncontrol.h ctype_workaround.h fix_macros.h @@ -341,7 +342,7 @@ target_link_libraries( ${APR_LIBRARIES} ${EXPAT_LIBRARIES} ${JSONCPP_LIBRARIES} - ${ZLIB_LIBRARIES} + ${ZLIBNG_LIBRARIES} ${WINDOWS_LIBRARIES} ${BOOST_FIBER_LIBRARY} ${BOOST_CONTEXT_LIBRARY} @@ -377,16 +378,17 @@ if (LL_TESTS) ${BOOST_CONTEXT_LIBRARY} ${BOOST_THREAD_LIBRARY} ${BOOST_SYSTEM_LIBRARY}) - LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}") LL_ADD_INTEGRATION_TEST(bitpack "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(classic_callback "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llbase64 "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llcond "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lldate "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lldeadmantimer "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lldependencies "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llerror "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lleventfilter "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llframetimer "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llheteromap "" "${test_libs}") @@ -404,8 +406,8 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltrace "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}") LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}") LL_ADD_INTEGRATION_TEST(threadsafeschedule "" "${test_libs}") LL_ADD_INTEGRATION_TEST(tuple "" "${test_libs}") diff --git a/indra/llcommon/classic_callback.cpp b/indra/llcommon/classic_callback.cpp new file mode 100644 index 0000000000..5674e0a44d --- /dev/null +++ b/indra/llcommon/classic_callback.cpp @@ -0,0 +1,16 @@ +/** + * @file classic_callback.cpp + * @author Nat Goodspeed + * @date 2021-09-23 + * @brief Implementation for classic_callback. + * + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Copyright (c) 2021, Linden Research, Inc. + * $/LicenseInfo$ + */ + +namespace { + +const char dummy[] = "cpp file required to build test program"; + +} // anonymous namespace diff --git a/indra/llcommon/classic_callback.h b/indra/llcommon/classic_callback.h new file mode 100644 index 0000000000..1ad6dbc58f --- /dev/null +++ b/indra/llcommon/classic_callback.h @@ -0,0 +1,292 @@ +/** + * @file classic_callback.h + * @author Nat Goodspeed + * @date 2016-06-21 + * @brief ClassicCallback and HeapClassicCallback + * + * This header file addresses the problem of passing a method on a C++ object + * to an API that requires a classic-C function pointer. Typically such a + * callback API accepts a void* pointer along with the function pointer, and + * the function pointer signature accepts a void* parameter. The API passes + * the caller's pointer value into the callback function so it can find its + * data. In C++, there are a few ways to deal with this case: + * + * - Use a static method with correct signature. If you don't need access to a + * specific instance, that works fine. + * - Store the object statically (or store a static pointer to a non-static + * instance). As long as you only care about one instance, that works, but + * starts to get a little icky. As soon as there's more than one pertinent + * instance, fight valiantly against the temptation to stuff the instance + * pointer into a static pointer variable "just for a moment." + * - Code a static trampoline callback function that accepts the void* user + * data pointer, casts it to the appropriate class type and calls the actual + * method on that class. + * + * ClassicCallback encapsulates the last. You need only construct a + * ClassicCallback instance somewhere that will survive until the callback is + * called, binding the target C++ callable. You then call its get_callback() + * and get_userdata() methods to pass an appropriate classic-C function + * pointer and void* user data pointer, respectively, to the old-style + * callback API. get_callback() synthesizes a static trampoline function + * that casts the user data pointer and calls the bound C++ callable. + * + * $LicenseInfo:firstyear=2016&license=viewerlgpl$ + * Copyright (c) 2016, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_CLASSIC_CALLBACK_H) +#define LL_CLASSIC_CALLBACK_H + +#include +#include // std::is_same + +/***************************************************************************** +* Helpers +*****************************************************************************/ + +// find a type in a parameter pack: http://stackoverflow.com/q/17844867/5533635 +// usage: index_of<0, sought_t, PackName...>::value +template +struct index_of +{ + static constexpr int const value = + std::is_same::value ? + idx : index_of::value; +}; + +// recursion tail +template +struct index_of +{ + static constexpr int const value = + std::is_same::value ? idx : -1; +}; + +/***************************************************************************** +* ClassicCallback +*****************************************************************************/ +/** + * Instantiate ClassicCallback in whatever storage will persist long enough + * for the callback to be called. It holds a modern C++ callable, providing a + * static function pointer and a USERDATA (default void*) capable of being + * passed through a classic-C callback API. When the static function is called + * with that USERDATA pointer, ClassicCallback forwards the call to the bound + * C++ callable. + * + * Usage: + * @code + * // callback signature required by the API of interest + * typedef void (*callback_t)(int, const char*, void*, double); + * // old-style API that accepts a classic-C callback function pointer + * void oldAPI(callback_t callback, void* userdata); + * // but I want to pass a lambda that references data local to my function! + * // (We don't need to name the void* parameter in the C++ callable; + * // ClassicCallback already used it to locate the lambda instance.) + * auto ccb{ + * makeClassicCallback( + * [=](int n, const char* s, void*, double f){ ... }) }; + * oldAPI(ccb.get_callback(), ccb.get_userdata()); + * // If the passed callback is called before oldAPI() returns, we can now + * // safely destroy ccb. If the callback might be called later, consider + * // HeapClassicCallback instead. + * @endcode + * + * If you have a callable object in hand, and you want to pass that to + * ClassicCallback, you may either consume it by passing std::move(object), or + * explicitly specify a reference to that object type as the CALLABLE template + * parameter: + * @code + * CallableObject obj; + * ClassicCallback ccb{obj}; + * @endcode + */ +// CALLABLE should either be deduced, e.g. by makeClassicCallback(), or +// specified explicitly. Its default type is meaningless, coded only so we can +// provide a useful default for USERDATA. +template +class ClassicCallback +{ + typedef ClassicCallback self_t; + +public: + /// ClassicCallback binds any modern C++ callable. + ClassicCallback(CALLABLE&& callable): + mCallable(std::forward(callable)) + {} + + /** + * ClassicCallback must not itself be copied or moved! Once you've passed + * get_userdata() to some API, this object MUST remain at that address. + */ + // However, we can't yet count on C++17 Class Template Argument Deduction, + // which means makeClassicCallback() is still useful, which means we MUST + // be able to return one to construct into caller's instance (move ctor). + // Possible defense: bool 'referenced' data member set by get_userdata(), + // with an llassert_always(! referenced) check in the move constructor. + ClassicCallback(ClassicCallback const&) = delete; + ClassicCallback(ClassicCallback&&) = default; // delete; + ClassicCallback& operator=(ClassicCallback const&) = delete; + ClassicCallback& operator=(ClassicCallback&&) = delete; + + /// Call get_callback() to get the necessary function pointer. + SIGNATURE get_callback() const + { + // This declaration is where the compiler instantiates the correct + // signature for the call() function template. + SIGNATURE callback = call; + return callback; + } + + /// Call get_userdata() to get the opaque USERDATA pointer to pass + /// through the classic-C callback API. + USERDATA get_userdata() const + { + // The USERDATA userdata is of course a pointer to this object. + return static_cast(const_cast(this)); + } + +protected: + /** + * This call() method accepts one or more callback arguments. It assumes + * the first USERDATA parameter is the userdata. + */ + // Note that we're not literally using C++ perfect forwarding here -- it + // doesn't work to specify (Args&&... args). But that's okay because we're + // dealing with a classic-C callback! It's not going to pass any move-only + // types. + template + static auto call(Args... args) + { + auto userdata = extract_userdata(std::forward(args)...); + // cast the userdata param to 'this' and call mCallable + return static_cast(userdata)-> + mCallable(std::forward(args)...); + } + + template + static USERDATA extract_userdata(Args... args) + { + // Search for the first USERDATA parameter type, then extract that pointer. + // extract value from parameter pack: http://stackoverflow.com/a/24710433/5533635 + return std::get::value>(std::forward_as_tuple(args...)); + } + + CALLABLE mCallable; +}; + +/** + * Usage: + * @code + * auto ccb{ makeClassicCallback(actual_callback) }; + * @endcode + */ +template +auto makeClassicCallback(CALLABLE&& callable) +{ + return std::move(ClassicCallback + (std::forward(callable))); +} + +/***************************************************************************** +* HeapClassicCallback +*****************************************************************************/ +/** + * HeapClassicCallback is like ClassicCallback, with this exception: it MUST + * be allocated on the heap because, once the callback has been called, it + * deletes itself. This addresses the problem of a callback whose lifespan + * must persist beyond the scope in which the callback API is engaged -- but + * naturally this callback must be called exactly ONCE. + * + * Usage: + * @code + * // callback signature required by the API of interest + * typedef void (*callback_t)(int, const char*, void*, double); + * // here's the old-style API + * void oldAPI(callback_t callback, void* userdata); + * // want to call someObjPtr->method() when oldAPI() fires the callback, + * // sometime in the future after the enclosing function has returned + * auto ccb{ + * makeHeapClassicCallback( + * [someObjPtr](int n, const char* s, void*, double f) + * { someObjPtr->method(); }) }; + * oldAPI(ccb.get_callback(), ccb.get_userdata()); + * // We don't need a smart pointer for ccb, because it will be deleted once + * // oldAPI() calls the bound lambda. HeapClassicCallback is for when the + * // callback will be called exactly once. If the classic API might call the + * // passed callback more than once -- or might never call it at all -- + * // manually construct a ClassicCallback on the heap and manage its lifespan + * // explicitly. + * @endcode + */ +template +class HeapClassicCallback: public ClassicCallback +{ + typedef ClassicCallback super; + typedef HeapClassicCallback self_t; + + // This destructor is intentionally private to prevent allocation anywhere + // but the heap. (The Design and Evolution of C++, section 11.4.2: Control + // of Allocation) + ~HeapClassicCallback() {} + +public: + HeapClassicCallback(CALLABLE&& callable): + super(std::forward(callable)) + {} + + // makeHeapClassicCallback() only needs to return a pointer -- not an + // instance -- so we can lock down our move constructor too. + HeapClassicCallback(HeapClassicCallback&&) = delete; + + /// Replicate get_callback() from the base class because we must + /// instantiate OUR call() function template. + SIGNATURE get_callback() const + { + // This declaration is where the compiler instantiates the correct + // signature for the call() function template. + SIGNATURE callback = call; + return callback; + } + + /// Replicate get_userdata() from the base class because our call() + /// method must be able to reconstitute a pointer to this subclass. + USERDATA get_userdata() const + { + // The USERDATA userdata is of course a pointer to this object. + return static_cast(const_cast(this)); + } + +private: + // call() uses a helper class to delete the HeapClassicCallback when done, + // for two reasons. Most importantly, this deletes even if the callback + // throws an exception. But also, call() must directly return the callback + // result for return-type deduction. + struct Destroyer + { + Destroyer(self_t* p): mPtr(p) {} + ~Destroyer() { delete mPtr; } + + self_t* mPtr; + }; + + template + static auto call(Args... args) + { + // extract userdata at this level too + USERDATA userdata = super::extract_userdata(std::forward(args)...); + // arrange to delete it when we leave by whatever means + Destroyer destroy(static_cast(userdata)); + + return super::call(std::forward(args)...); + } +}; + +template +auto makeHeapClassicCallback(CALLABLE&& callable) +{ + return new HeapClassicCallback + (std::forward(callable)); +} + +#endif /* ! defined(LL_CLASSIC_CALLBACK_H) */ diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index 259ed22d0c..42766396e5 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -41,7 +41,7 @@ #ifdef LL_USESYSTEMLIBS # include #else -# include "zlib/zlib.h" // for davep's dirty little zip functions +# include "zlib-ng/zlib.h" // for davep's dirty little zip functions #endif #if !LL_WINDOWS diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 9afa38a079..65df4a2e1e 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -36,7 +36,7 @@ #ifdef LL_USESYSTEMLIBS # include #else -# include "zlib/zlib.h" +# include "zlib-ng/zlib.h" #endif #include "llprocessor.h" @@ -467,6 +467,8 @@ LLOSInfo::LLOSInfo() : dotted_version_string << mMajorVer << "." << mMinorVer << "." << mBuild; mOSVersionString.append(dotted_version_string.str()); + mOSBitness = is64Bit() ? 64 : 32; + LL_INFOS("LLOSInfo") << "OS bitness: " << mOSBitness << LL_ENDL; } #ifndef LL_WINDOWS @@ -522,6 +524,11 @@ const std::string& LLOSInfo::getOSVersionString() const return mOSVersionString; } +const S32 LLOSInfo::getOSBitness() const +{ + return mOSBitness; +} + //static U32 LLOSInfo::getProcessVirtualSizeKB() { @@ -575,6 +582,25 @@ U32 LLOSInfo::getProcessResidentSizeKB() return resident_size; } +//static +bool LLOSInfo::is64Bit() +{ +#if LL_WINDOWS +#if defined(_WIN64) + return true; +#elif defined(_WIN32) + // 32-bit viewer may be run on both 32-bit and 64-bit Windows, need to elaborate + BOOL f64 = FALSE; + return IsWow64Process(GetCurrentProcess(), &f64) && f64; +#else + return false; +#endif +#else // ! LL_WINDOWS + // we only build a 64-bit mac viewer and currently we don't build for linux at all + return true; +#endif +} + LLCPUInfo::LLCPUInfo() { std::ostringstream out; diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h index b2f9b6a4ab..538e61c521 100644 --- a/indra/llcommon/llsys.h +++ b/indra/llcommon/llsys.h @@ -51,6 +51,8 @@ public: const std::string& getOSStringSimple() const; const std::string& getOSVersionString() const; + + const S32 getOSBitness() const; S32 mMajorVer; S32 mMinorVer; @@ -59,6 +61,7 @@ public: #ifndef LL_WINDOWS static S32 getMaxOpenFiles(); #endif + static bool is64Bit(); static U32 getProcessVirtualSizeKB(); static U32 getProcessResidentSizeKB(); @@ -66,6 +69,7 @@ private: std::string mOSString; std::string mOSStringSimple; std::string mOSVersionString; + S32 mOSBitness; }; diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h index 68d79cdd12..16b3966ad2 100644 --- a/indra/llcommon/llthreadsafequeue.h +++ b/indra/llcommon/llthreadsafequeue.h @@ -452,7 +452,9 @@ ElementT LLThreadSafeQueue::pop(void) // so we can finish draining the queue. pop_result popped = pop_(lock1, value); if (popped == POPPED) - return std::move(value); + // Prevent RVO elision + //return std::move(value); + return value; // Once the queue is DONE, there will never be any more coming. if (popped == DONE) diff --git a/indra/llcommon/tests/classic_callback_test.cpp b/indra/llcommon/tests/classic_callback_test.cpp new file mode 100644 index 0000000000..c060775c24 --- /dev/null +++ b/indra/llcommon/tests/classic_callback_test.cpp @@ -0,0 +1,144 @@ +/** + * @file classic_callback_test.cpp + * @author Nat Goodspeed + * @date 2021-09-22 + * @brief Test ClassicCallback and HeapClassicCallback. + * + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Copyright (c) 2021, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "classic_callback.h" +// STL headers +#include +#include +// std headers +// external library headers +// other Linden headers +#include "../test/lltut.h" + +/***************************************************************************** +* example callback +*****************************************************************************/ +// callback_t is part of the specification of someAPI() +typedef void (*callback_t)(const char*, void*); +void someAPI(callback_t callback, void* userdata) +{ + callback("called", userdata); +} + +// C++ callable I want as the actual callback +struct MyCallback +{ + void operator()(const char* msg, void*) + { + mMsg = msg; + } + + void callback_with_extra(const std::string& extra, const char* msg) + { + mMsg = extra + ' ' + msg; + } + + std::string mMsg; +}; + +/***************************************************************************** +* example callback accepting several params, and void* userdata isn't first +*****************************************************************************/ +typedef std::string (*complex_callback)(int, const char*, void*, double); +std::string otherAPI(complex_callback callback, void* userdata) +{ + return callback(17, "hello world", userdata, 3.0); +} + +// struct into which we can capture complex_callback params +static struct Data +{ + void set(int i, const char* s, double f) + { + mi = i; + ms = s; + mf = f; + } + + void clear() { set(0, "", 0.0); } + + int mi; + std::string ms; + double mf; +} sData; + +// C++ callable I want to pass +struct OtherCallback +{ + std::string operator()(int num, const char* str, void*, double approx) + { + sData.set(num, str, approx); + return "hello back!"; + } +}; + +/***************************************************************************** +* TUT +*****************************************************************************/ +namespace tut +{ + struct classic_callback_data + { + }; + typedef test_group classic_callback_group; + typedef classic_callback_group::object object; + classic_callback_group classic_callbackgrp("classic_callback"); + + template<> template<> + void object::test<1>() + { + set_test_name("ClassicCallback"); + // engage someAPI(MyCallback()) + auto ccb{ makeClassicCallback(MyCallback()) }; + someAPI(ccb.get_callback(), ccb.get_userdata()); + // Unfortunately, with the side effect confined to the bound + // MyCallback instance, that call was invisible. Bind a reference to a + // named instance by specifying a ref type. + MyCallback mcb; + ClassicCallback ccb2(mcb); + someAPI(ccb2.get_callback(), ccb2.get_userdata()); + ensure_equals("failed to call through ClassicCallback", mcb.mMsg, "called"); + + // try with HeapClassicCallback + mcb.mMsg.clear(); + auto hcbp{ makeHeapClassicCallback(mcb) }; + someAPI(hcbp->get_callback(), hcbp->get_userdata()); + ensure_equals("failed to call through HeapClassicCallback", mcb.mMsg, "called"); + + // lambda + // The tricky thing here is that a lambda is an unspecified type, so + // you can't declare a ClassicCallback. + mcb.mMsg.clear(); + auto xcb( + makeClassicCallback( + [&mcb](const char* msg, void*) + { mcb.callback_with_extra("extra", msg); })); + someAPI(xcb.get_callback(), xcb.get_userdata()); + ensure_equals("failed to call lambda", mcb.mMsg, "extra called"); + + // engage otherAPI(OtherCallback()) + OtherCallback ocb; + // Instead of specifying a reference type for the bound CALLBACK, as + // with ccb2 above, you can alternatively move the callable object + // into the ClassicCallback (of course AFTER any other reference). + // That's why OtherCallback uses external data for its observable side + // effect. + auto occb{ makeClassicCallback(std::move(ocb)) }; + std::string result{ otherAPI(occb.get_callback(), occb.get_userdata()) }; + ensure_equals("failed to return callback result", result, "hello back!"); + ensure_equals("failed to set int", sData.mi, 17); + ensure_equals("failed to set string", sData.ms, "hello world"); + ensure_equals("failed to set double", sData.mf, 3.0); + } +} // namespace tut diff --git a/indra/llcommon/threadsafeschedule.h b/indra/llcommon/threadsafeschedule.h index 3e0da94c02..5ae89375c5 100644 --- a/indra/llcommon/threadsafeschedule.h +++ b/indra/llcommon/threadsafeschedule.h @@ -248,7 +248,9 @@ namespace LL TimePoint until = TimePoint::clock::now() + std::chrono::hours(24); pop_result popped = tryPopUntil_(lock, until, tt); if (popped == POPPED) - return std::move(tt); + // Prevent RVO elision + //return std::move(tt); + return tt; // DONE: throw, just as super::pop() does if (popped == DONE) diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index 17d72a73d2..1074f111d3 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -11,7 +11,7 @@ include(00-Common) include(CURL) include(OpenSSL) include(NGHTTP2) -include(ZLIB) +include(ZLIBNG) include(LLCoreHttp) include(LLAddBuildTest) include(LLMessage) diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt index 8883317751..436b8dd1a2 100644 --- a/indra/llimage/CMakeLists.txt +++ b/indra/llimage/CMakeLists.txt @@ -9,7 +9,7 @@ include(LLMath) include(LLFileSystem) include(LLKDU) include(LLImageJ2COJ) -include(ZLIB) +include(ZLIBNG) include(LLAddBuildTest) include(bugsplat) include(Tut) @@ -20,7 +20,7 @@ include_directories( ${LLMATH_INCLUDE_DIRS} ${LLFILESYSTEM_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIRS} + ${ZLIBNG_INCLUDE_DIRS} ) set(llimage_SOURCE_FILES @@ -74,7 +74,7 @@ target_link_libraries(llimage ${LLCOMMON_LIBRARIES} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} - ${ZLIB_LIBRARIES} + ${ZLIBNG_LIBRARIES} ) # Add tests diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 7c6b07974e..b39407f54f 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -463,13 +463,13 @@ BOOL LLParcel::importAccessEntry(std::istream& input_stream, LLAccessEntry* entr } else if ("time" == keyword) { - S32 when(0); + S32 when{}; LLStringUtil::convertToS32(value, when); entry->mTime = when; } else if ("flags" == keyword) { - U32 setting(0); + U32 setting{}; LLStringUtil::convertToU32(value, setting); entry->mFlags = setting; } diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index f9fdb31579..8b50652386 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -335,7 +335,7 @@ public: // "init_history" message void initializeUrlHistory(const LLSD& url_history); - boost::shared_ptr getSharedPrt() { return boost::dynamic_pointer_cast(shared_from_this()); } // due to enable_shared_from_this + boost::shared_ptr getSharedPtr() { return boost::dynamic_pointer_cast(shared_from_this()); } // due to enable_shared_from_this protected: diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index c3f6ee0642..0762053b8e 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -37,7 +37,7 @@ #ifdef LL_USESYSTEMLIBS # include #else -# include "zlib/zlib.h" +# include "zlib-ng/zlib.h" #endif extern LLControlGroup gSavedSettings; diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 5b7a7cdc16..40bde8935e 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -60,11 +60,11 @@ BOOL gDebugSession = FALSE; +BOOL gDebugGLSession = FALSE; BOOL gClothRipple = FALSE; BOOL gHeadlessClient = FALSE; BOOL gNonInteractive = FALSE; BOOL gGLActive = FALSE; -BOOL gGLDebugLoggingEnabled = TRUE; static const std::string HEADLESS_VENDOR_STRING("Linden Lab"); static const std::string HEADLESS_RENDERER_STRING("Headless"); @@ -86,34 +86,30 @@ void APIENTRY gl_debug_callback(GLenum source, const GLchar* message, GLvoid* userParam) { - if (gGLDebugLoggingEnabled) - { - - if (severity != GL_DEBUG_SEVERITY_HIGH_ARB && - severity != GL_DEBUG_SEVERITY_MEDIUM_ARB && - severity != GL_DEBUG_SEVERITY_LOW_ARB) - { //suppress out-of-spec messages sent by nvidia driver (mostly vertexbuffer hints) - return; - } - - if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) - { - LL_WARNS() << "----- GL ERROR --------" << LL_ENDL; - } - else - { - LL_WARNS() << "----- GL WARNING -------" << LL_ENDL; - } - LL_WARNS() << "Type: " << std::hex << type << LL_ENDL; - LL_WARNS() << "ID: " << std::hex << id << LL_ENDL; - LL_WARNS() << "Severity: " << std::hex << severity << LL_ENDL; - LL_WARNS() << "Message: " << message << LL_ENDL; - LL_WARNS() << "-----------------------" << LL_ENDL; - if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) - { - LL_ERRS() << "Halting on GL Error" << LL_ENDL; - } + if (severity != GL_DEBUG_SEVERITY_HIGH_ARB && + severity != GL_DEBUG_SEVERITY_MEDIUM_ARB && + severity != GL_DEBUG_SEVERITY_LOW_ARB) + { //suppress out-of-spec messages sent by nvidia driver (mostly vertexbuffer hints) + return; } + + if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) + { + LL_WARNS() << "----- GL ERROR --------" << LL_ENDL; + } + else + { + LL_WARNS() << "----- GL WARNING -------" << LL_ENDL; + } + LL_WARNS() << "Type: " << std::hex << type << LL_ENDL; + LL_WARNS() << "ID: " << std::hex << id << LL_ENDL; + LL_WARNS() << "Severity: " << std::hex << severity << LL_ENDL; + LL_WARNS() << "Message: " << message << LL_ENDL; + LL_WARNS() << "-----------------------" << LL_ENDL; + if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) + { + LL_ERRS() << "Halting on GL Error" << LL_ENDL; + } } #endif diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index e97f8fe32a..d2e27d2e00 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -57,6 +57,7 @@ extern BOOL gDebugGL; extern BOOL gDebugSession; +extern BOOL gDebugGLSession; extern llofstream gFailLog; #define LL_GL_ERRS LL_ERRS("RenderState") diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index e7ded4a002..0ab1cc618e 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -2456,6 +2456,16 @@ LLImageGLThread::LLImageGLThread(LLWindow* window) mFinished = false; mContext = mWindow->createSharedContext(); + + // If context creating is not supported (SDL1), mark texture thread disabled and exit + if( !mContext ) + { + sEnabled = false; + mFinished = true; + return; + } + // + ThreadPool::start(); } diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index beed4458ae..5cc9c24e7e 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -326,6 +326,18 @@ LLScrollListItem* LLComboBox::addSeparator(EAddPosition pos) return mList->addSeparator(pos); } +// Get items by value +LLScrollListItem* LLComboBox::getItemByValue(const LLSD& value) +{ + if (mList) + { + return mList->getItem(value); + } + + return nullptr; +} +// + void LLComboBox::sortByName(BOOL ascending) { mList->sortOnce(0, ascending); diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h index 96d71cf743..bee7486905 100644 --- a/indra/llui/llcombobox.h +++ b/indra/llui/llcombobox.h @@ -144,6 +144,7 @@ public: BOOL remove( S32 index ); // remove item by index, return TRUE if found and removed void removeall() { clearRows(); } bool itemExists(const std::string& name); + LLScrollListItem* getItemByValue(const LLSD& value); // Get items by value void sortByName(BOOL ascending = TRUE); // Sort the entries in the combobox by name diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index ac3516d170..0616ed179c 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -1384,6 +1384,9 @@ public: virtual BOOL handleKeyHere(KEY key, MASK mask); virtual BOOL handleAcceleratorKey(KEY key, MASK mask); + + virtual void onFocusLost(); + virtual void setFocus(BOOL b); }; LLMenuItemBranchDownGL::LLMenuItemBranchDownGL( const Params& p) : @@ -1538,6 +1541,21 @@ BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask) return handled; } +void LLMenuItemBranchDownGL::onFocusLost() +{ + // needed for tab-based selection + LLMenuItemBranchGL::onFocusLost(); + LLMenuGL::setKeyboardMode(FALSE); + setHighlight(FALSE); +} + +void LLMenuItemBranchDownGL::setFocus(BOOL b) +{ + // needed for tab-based selection + LLMenuItemBranchGL::setFocus(b); + LLMenuGL::setKeyboardMode(b); + setHighlight(b); +} BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask) { @@ -3970,12 +3988,14 @@ LLTearOffMenu::~LLTearOffMenu() void LLTearOffMenu::draw() { mMenu->setBackgroundVisible(isBackgroundOpaque()); + // FIRE-31823: Torn off menu doesn't update enabled/visible state + mMenu->needsArrange(); if (getRect().getHeight() != mTargetHeight) { // animate towards target height reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), (F32)mTargetHeight, LLSmoothInterpolation::getInterpolant(0.05f)))); - mMenu->needsArrange(); + //mMenu->needsArrange(); // FIRE-31823: Torn off menu doesn't update enabled/visible state } LLFloater::draw(); } diff --git a/indra/llui/llprogressbar.cpp b/indra/llui/llprogressbar.cpp index 209796565c..cf57b1fe76 100644 --- a/indra/llui/llprogressbar.cpp +++ b/indra/llui/llprogressbar.cpp @@ -69,16 +69,22 @@ void LLProgressBar::draw() static LLTimer timer; F32 alpha = getDrawContext().mAlpha; - LLColor4 image_bar_color = mColorBackground.get(); - image_bar_color.setAlpha(alpha); - mImageBar->draw(getLocalRect(), image_bar_color); + if (mImageBar) // optional according to parameters + { + LLColor4 image_bar_color = mColorBackground.get(); + image_bar_color.setAlpha(alpha); + mImageBar->draw(getLocalRect(), image_bar_color); + } - alpha *= 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32())); - LLColor4 bar_color = mColorBar.get(); - bar_color.mV[VALPHA] *= alpha; // modulate alpha - LLRect progress_rect = getLocalRect(); - progress_rect.mRight = ll_round(getRect().getWidth() * (mPercentDone / 100.f)); - mImageFill->draw(progress_rect, bar_color); + if (mImageFill) + { + alpha *= 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32())); + LLColor4 bar_color = mColorBar.get(); + bar_color.mV[VALPHA] *= alpha; // modulate alpha + LLRect progress_rect = getLocalRect(); + progress_rect.mRight = ll_round(getRect().getWidth() * (mPercentDone / 100.f)); + mImageFill->draw(progress_rect, bar_color); + } } void LLProgressBar::setValue(const LLSD& value) diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 0bebfd86ac..27004be3f6 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -488,6 +488,8 @@ public: void setSkipLinkUnderline(bool skip_link_underline) { mSkipLinkUnderline = skip_link_underline; } bool getSkipLinkUnderline() { return mSkipLinkUnderline; } + void setParseURLs(bool parse_urls) { mParseHTML = parse_urls; } + void setPlainText(bool value) { mPlainText = value;} bool getPlainText() const { return mPlainText; } diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp index 82074f386d..e13cfc4aa9 100644 --- a/indra/llwindow/lldxhardware.cpp +++ b/indra/llwindow/lldxhardware.cpp @@ -229,9 +229,7 @@ S32 LLDXHardware::getMBVideoMemoryViaWMI() } //Getting the version of graphics controller driver via WMI -// FIRE-8264: System info displays wrong driver version on Optimus systems -//std::string LLDXHardware::getDriverVersionWMI() -std::string LLDXHardware::getDriverVersionWMI(const std::string& vendor) +std::string LLDXHardware::getDriverVersionWMI(EGPUVendor vendor) { std::string mDriverVersion; HRESULT hrCoInitialize = S_OK; @@ -327,38 +325,68 @@ std::string LLDXHardware::getDriverVersionWMI(const std::string& vendor) { break; // If quantity less then 1. } + + if (vendor != GPU_ANY) + { + VARIANT vtCaptionProp; + // Might be preferable to check "AdapterCompatibility" here instead of caption. + hr = pclsObj->Get(L"Caption", 0, &vtCaptionProp, 0, 0); - VARIANT vtProp; + if (FAILED(hr)) + { + LL_WARNS("AppInit") << "Query for Caption property failed." << " Error code = 0x" << hr << LL_ENDL; + pSvc->Release(); + pLoc->Release(); + CoUninitialize(); + return std::string(); // Program has failed. + } - // FIRE-8264: System info displays wrong driver version on Optimus systems - hr = pclsObj->Get(L"AdapterCompatibility", 0, &vtProp, 0, 0); + // use characters in the returned driver version + BSTR caption(vtCaptionProp.bstrVal); + + //convert BSTR to std::string + std::wstring ws(caption, SysStringLen(caption)); + std::string caption_str(ws.begin(), ws.end()); + LLStringUtil::toLower(caption_str); + + bool found = false; + switch (vendor) + { + case GPU_INTEL: + found = caption_str.find("intel") != std::string::npos; + break; + case GPU_NVIDIA: + found = caption_str.find("nvidia") != std::string::npos; + break; + case GPU_AMD: + found = caption_str.find("amd") != std::string::npos + || caption_str.find("ati ") != std::string::npos + || caption_str.find("radeon") != std::string::npos; + break; + default: + break; + } + + if (found) + { + VariantClear(&vtCaptionProp); + } + else + { + VariantClear(&vtCaptionProp); + pclsObj->Release(); + continue; + } + } + + VARIANT vtVersionProp; + + // Get the value of the DriverVersion property + hr = pclsObj->Get(L"DriverVersion", 0, &vtVersionProp, 0, 0); if (FAILED(hr)) { - LL_WARNS("AppInit") << "Query for name property failed." << " Error code = 0x" << hr << LL_ENDL; - pSvc->Release(); - pLoc->Release(); - CoUninitialize(); - return std::string(); // Program has failed. - } - - BSTR vendorCompatibility(vtProp.bstrVal); - std::wstring vc_ws(vendorCompatibility, SysStringLen(vendorCompatibility)); - std::string vc_str(vc_ws.begin(), vc_ws.end()); - - LLStringUtil::toUpper(vc_str); - if (vc_str.find(vendor) == std::string::npos) - { - continue; - } - // - - // Get the value of the Name property - hr = pclsObj->Get(L"DriverVersion", 0, &vtProp, 0, 0); - - if (FAILED(hr)) - { - LL_WARNS("AppInit") << "Query for name property failed." << " Error code = 0x" << hr << LL_ENDL; + LL_WARNS("AppInit") << "Query for DriverVersion property failed." << " Error code = 0x" << hr << LL_ENDL; pSvc->Release(); pLoc->Release(); CoUninitialize(); @@ -366,7 +394,7 @@ std::string LLDXHardware::getDriverVersionWMI(const std::string& vendor) } // use characters in the returned driver version - BSTR driverVersion(vtProp.bstrVal); + BSTR driverVersion(vtVersionProp.bstrVal); //convert BSTR to std::string std::wstring ws(driverVersion, SysStringLen(driverVersion)); @@ -379,10 +407,19 @@ std::string LLDXHardware::getDriverVersionWMI(const std::string& vendor) } else if (mDriverVersion != str) { - LL_WARNS("DriverVersion") << "Different versions of drivers. Version of second driver : " << str << LL_ENDL; + if (vendor == GPU_ANY) + { + // Expected from systems with gpus from different vendors + LL_INFOS("DriverVersion") << "Multiple video drivers detected. Version of second driver: " << str << LL_ENDL; + } + else + { + // Not Expected! + LL_WARNS("DriverVersion") << "Multiple video drivers detected from same vendor. Version of second driver : " << str << LL_ENDL; + } } - VariantClear(&vtProp); + VariantClear(&vtVersionProp); pclsObj->Release(); } diff --git a/indra/llwindow/lldxhardware.h b/indra/llwindow/lldxhardware.h index db03742761..86e209b2cd 100644 --- a/indra/llwindow/lldxhardware.h +++ b/indra/llwindow/lldxhardware.h @@ -91,9 +91,15 @@ public: BOOL getInfo(BOOL vram_only, bool disable_wmi); // - // FIRE-8264: System info displays wrong driver version on Optimus systems - //std::string getDriverVersionWMI(); - std::string getDriverVersionWMI(const std::string& vendor); + // WMI can return multiple GPU drivers + // specify which one to output + typedef enum { + GPU_INTEL, + GPU_NVIDIA, + GPU_AMD, + GPU_ANY + } EGPUVendor; + std::string getDriverVersionWMI(EGPUVendor vendor); S32 getVRAM() const { return mVRAM; } diff --git a/indra/llwindow/llkeyboardsdl2.cpp b/indra/llwindow/llkeyboardsdl2.cpp index c75c081055..d14c5b97a6 100644 --- a/indra/llwindow/llkeyboardsdl2.cpp +++ b/indra/llwindow/llkeyboardsdl2.cpp @@ -63,7 +63,7 @@ LLKeyboardSDL::LLKeyboardSDL() mTranslateKeyMap[SDLK_LCTRL] = KEY_CONTROL; mTranslateKeyMap[SDLK_RCTRL] = KEY_CONTROL; mTranslateKeyMap[SDLK_LALT] = KEY_ALT; - mTranslateKeyMap[SDLK_RALT] = KEY_ALT; + // mTranslateKeyMap[SDLK_RALT] = KEY_ALT; mTranslateKeyMap[SDLK_HOME] = KEY_HOME; mTranslateKeyMap[SDLK_END] = KEY_END; mTranslateKeyMap[SDLK_PAGEUP] = KEY_PAGE_UP; @@ -148,7 +148,7 @@ void LLKeyboardSDL::resetMaskKeys() mKeyLevel[KEY_CONTROL] = TRUE; } - if(mask & KMOD_ALT) + if(mask & KMOD_LALT) { mKeyLevel[KEY_ALT] = TRUE; } @@ -170,7 +170,7 @@ MASK LLKeyboardSDL::updateModifiers(const U32 mask) out_mask |= MASK_CONTROL; } - if(mask & KMOD_ALT) + if(mask & KMOD_LALT) { out_mask |= MASK_ALT; } @@ -252,7 +252,7 @@ MASK LLKeyboardSDL::currentMask(BOOL for_mouse_event) result |= MASK_SHIFT; if (mask & KMOD_CTRL) result |= MASK_CONTROL; - if (mask & KMOD_ALT) + if (mask & KMOD_LALT) result |= MASK_ALT; // For keyboard events, consider Meta keys equivalent to Control diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index 2b4eb45c98..e414195bda 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -115,8 +115,8 @@ public: void interruptLanguageTextInput() override; void spawnWebBrowser(const std::string& escaped_url, bool async) override; F32 getSystemUISize() override; - /*virtual*/ void openFile(const std::string& file_name); - /*virtual*/ void setTitle(const std::string& title); + void openFile(const std::string& file_name) override; + void setTitle(const std::string& title) override; static std::vector getDisplaysResolutionList(); diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index f3ba4cc6d4..0783b1bab7 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -3024,4 +3024,26 @@ std::vector LLWindowSDL::getDynamicFallbackFontList() return rtns; } +void* LLWindowSDL::createSharedContext() +{ + LL_WARNS() << "Not available" << LL_ENDL; + return nullptr; +} + +void LLWindowSDL::makeContextCurrent(void* contextPtr) +{ + LL_WARNS() << "Not available" << LL_ENDL; + LL_PROFILER_GPU_CONTEXT; +} + +void LLWindowSDL::destroySharedContext(void* contextPtr) +{ + LL_WARNS() << "Not available" << LL_ENDL; +} + +void LLWindowSDL::toggleVSync(bool enable_vsync) +{ + LL_WARNS() << "Not available" << LL_ENDL; +} + #endif // LL_SDL diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index c2d49fd251..da6da0f4d8 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -151,7 +151,11 @@ public: static Window get_SDL_XWindowID(void); static Display* get_SDL_Display(void); #endif // LL_X11 - + void* createSharedContext() override; + void makeContextCurrent(void* context) override; + void destroySharedContext(void* context) override; + void toggleVSync(bool enable_vsync) override; + protected: LLWindowSDL(LLWindowCallbacks* callbacks, const std::string& title, int x, int y, int width, int height, U32 flags, diff --git a/indra/llwindow/llwindowsdl2.cpp b/indra/llwindow/llwindowsdl2.cpp index b5e350f863..4f7e58fd55 100644 --- a/indra/llwindow/llwindowsdl2.cpp +++ b/indra/llwindow/llwindowsdl2.cpp @@ -78,7 +78,10 @@ static bool ATIbug = false; // be only one object of this class at any time. Currently this is true. static LLWindowSDL *gWindowImplementation = NULL; - +// extern "C" Bool XineramaIsActive (Display *dpy) +// { +// return 0; +// } void maybe_lock_display(void) { if (gWindowImplementation && gWindowImplementation->Lock_Display) { @@ -649,6 +652,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B mReallyCapturedCount = 0; SDL_SetHint( SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0" ); + SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1"); if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 ) { @@ -713,6 +717,8 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, mFSAASamples); } + // Make shared context work on Linux for multithreaded OpenGL + SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); mWindow = SDL_CreateWindow( mWindowTitle.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, mSDLFlags ); if( mWindow ) @@ -863,6 +869,10 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B } #endif // LL_X11 + // clear screen to black right at the start so it doesn't look like a crash + glClearColor(0.0f, 0.0f, 0.0f ,1.0f); + glClear(GL_COLOR_BUFFER_BIT); + SDL_GL_SwapWindow(mWindow); SDL_StartTextInput(); //make sure multisampling is disabled by default @@ -1774,10 +1784,12 @@ void LLWindowSDL::gatherInput() { mKeyVirtualKey = key; - if( (MASK_CONTROL|MASK_ALT)&mKeyModifiers ) - gKeyboard->handleKeyDown(mKeyVirtualKey, mKeyModifiers ); + // filter ctrl and left-alt keypresses from line inputs so we don't end up with e.g. + // "h" in teleport history filter input after pressing alt+h to call up the floater + if (mKeyModifiers & (MASK_CONTROL | MASK_ALT)) + gKeyboard->handleKeyDown(mKeyVirtualKey, mKeyModifiers); else - handleUnicodeUTF16( key, mKeyModifiers ); + handleUnicodeUTF16(key, mKeyModifiers); } break; } @@ -1787,13 +1799,23 @@ void LLWindowSDL::gatherInput() mKeyModifiers = event.key.keysym.mod; mInputType = "keydown"; + // treat all possible Enter/Return keys the same + if (mKeyVirtualKey == SDLK_RETURN2 || mKeyVirtualKey == SDLK_KP_ENTER) + { + mKeyVirtualKey = SDLK_RETURN; + } + gKeyboard->handleKeyDown(mKeyVirtualKey, mKeyModifiers ); // Slightly hacky :| To make the viewer honor enter (eg to accept form input) we've to not only send handleKeyDown but also send a // invoke handleUnicodeUTF16 in case the user hits return. // Note that we cannot blindly use handleUnicodeUTF16 for each SDL_KEYDOWN. Doing so will create bogus keyboard input (like % for cursor left). if( mKeyVirtualKey == SDLK_RETURN ) + { + // fix return key not working when capslock, scrolllock or numlock are enabled + mKeyModifiers &= (~(KMOD_NUM | KMOD_CAPS | KMOD_MODE | KMOD_SCROLL)); handleUnicodeUTF16( mKeyVirtualKey, mKeyModifiers ); + } // part of the fix for SL-13243 if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0) @@ -1806,6 +1828,12 @@ void LLWindowSDL::gatherInput() mKeyModifiers = event.key.keysym.mod; mInputType = "keyup"; + // treat all possible Enter/Return keys the same + if (mKeyVirtualKey == SDLK_RETURN2 || mKeyVirtualKey == SDLK_KP_ENTER) + { + mKeyVirtualKey = SDLK_RETURN; + } + if (SDLCheckGrabbyKeys(mKeyVirtualKey, FALSE) == 0) SDLReallyCaptureInput(FALSE); // part of the fix for SL-13243 @@ -1909,7 +1937,7 @@ void LLWindowSDL::gatherInput() // I think is is not // SDL_SetWindowSize(mWindow, width, height); // - + mCallbacks->handleResize(this, width, height); } else if( event.window.event == SDL_WINDOWEVENT_FOCUS_GAINED ) // What about SDL_WINDOWEVENT_ENTER (mouse focus) @@ -2560,4 +2588,57 @@ std::vector LLWindowSDL::getDynamicFallbackFontList() return rtns; } +// Make shared context work on Linux for multithreaded OpenGL +class sharedContext +{ + public: + SDL_GLContext mContext; +}; + +void* LLWindowSDL::createSharedContext() +{ + sharedContext* sc = new sharedContext(); + sc->mContext = SDL_GL_CreateContext(mWindow); + if (sc->mContext) + { + SDL_GL_SetSwapInterval(0); + SDL_GL_MakeCurrent(mWindow, mContext); + + LLCoordScreen size; + if (getSize(&size)) + { + setSize(size); + } + + LL_DEBUGS() << "Creating shared OpenGL context successful!" << LL_ENDL; + + return (void*)sc; + } + + LL_WARNS() << "Creating shared OpenGL context failed!" << LL_ENDL; + + return nullptr; +} + +void LLWindowSDL::makeContextCurrent(void* context) +{ + LL_PROFILER_GPU_CONTEXT; + SDL_GL_MakeCurrent(mWindow, ((sharedContext*)context)->mContext); +} + +void LLWindowSDL::destroySharedContext(void* context) +{ + sharedContext* sc = (sharedContext*)context; + + SDL_GL_DeleteContext(sc->mContext); + + delete sc; +} + +void LLWindowSDL::toggleVSync(bool enable_vsync) +{ + SDL_GL_SetSwapInterval(enable_vsync); +} +// + #endif // LL_SDL diff --git a/indra/llwindow/llwindowsdl2.h b/indra/llwindow/llwindowsdl2.h index e60827644d..20adba802e 100644 --- a/indra/llwindow/llwindowsdl2.h +++ b/indra/llwindow/llwindowsdl2.h @@ -66,6 +66,12 @@ public: /*virtual*/ BOOL setSizeImpl(LLCoordScreen size); /*virtual*/ BOOL setSizeImpl(LLCoordWindow size); /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL); + // Make shared context work on Linux for multithreaded OpenGL + void* createSharedContext() override; + void makeContextCurrent(void* context) override; + void destroySharedContext(void* context) override; + /*virtual*/ void toggleVSync(bool enable_vsync); + // /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); /*virtual*/ void showCursor(); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 7d42d00b56..cb58c2cf96 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -3159,8 +3159,20 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ if (raw->header.dwType == RIM_TYPEMOUSE) { LLMutexLock lock(&window_imp->mRawMouseMutex); - window_imp->mRawMouseDelta.mX += raw->data.mouse.lLastX; - window_imp->mRawMouseDelta.mY -= raw->data.mouse.lLastY; + + S32 speed; + const S32 DEFAULT_SPEED(10); + SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); + if (speed == DEFAULT_SPEED) + { + window_imp->mRawMouseDelta.mX += raw->data.mouse.lLastX; + window_imp->mRawMouseDelta.mY -= raw->data.mouse.lLastY; + } + else + { + window_imp->mRawMouseDelta.mX += round((F32)raw->data.mouse.lLastX * (F32)speed / DEFAULT_SPEED); + window_imp->mRawMouseDelta.mY -= round((F32)raw->data.mouse.lLastY * (F32)speed / DEFAULT_SPEED); + } } } } diff --git a/indra/mac_crash_logger/README.txt b/indra/mac_crash_logger/README.txt deleted file mode 100644 index 6932a8d9c3..0000000000 --- a/indra/mac_crash_logger/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -This component is no longer used in Linden Lab builds. -Change requests to support continued use by open source -builds are welcome. diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b4009b33a7..85b1cbe682 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -17,6 +17,7 @@ include(GLIB) include(DragDrop) include(EXPAT) include(FMODSTUDIO) +include(GLOD) # restore GLOD include(Hunspell) include(JPEGEncoderBasic) include(JsonCpp) @@ -56,6 +57,7 @@ include(UnixInstall) include(ViewerMiscLibs) #include(ViewerManager) # Remove VMP include(VisualLeakDetector) +include(ZLIBNG) include(URIPARSER) include(Growl) include(ColladaDom) @@ -82,6 +84,7 @@ endif(FMODSTUDIO) include_directories( ${DBUSGLIB_INCLUDE_DIRS} ${JSONCPP_INCLUDE_DIR} + ${GLOD_INCLUDE_DIR} # restore GLOD ${LLAUDIO_INCLUDE_DIRS} ${LLCHARACTER_INCLUDE_DIRS} ${LLCOMMON_INCLUDE_DIRS} @@ -2269,6 +2272,11 @@ if (WINDOWS) ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/libapr-1.dll ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/libaprutil-1.dll ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/libapriconv-1.dll + # Restore GLOD build dependencies + ${SHARED_LIB_STAGING_DIR}/Release/glod.dll + ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/glod.dll + ${SHARED_LIB_STAGING_DIR}/Debug/glod.dll + # ${SHARED_LIB_STAGING_DIR}/Release/libcollada14dom22.dll ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/libcollada14dom22.dll ${SHARED_LIB_STAGING_DIR}/Debug/libcollada14dom22-d.dll @@ -2297,10 +2305,6 @@ if (WINDOWS) #media_plugin_example # Don't package example plugin ) - if (NOT USE_BUGSPLAT) - LIST(APPEND COPY_INPUT_DEPENDENCIES windows-crash-logger) - endif (NOT USE_BUGSPLAT) - # Only copy OpenJPEG dll if needed if (NOT USE_KDU) list(APPEND COPY_INPUT_DEPENDENCIES @@ -2481,14 +2485,14 @@ endif (WINDOWS) # # We generally want the newest version of the library to provide all symbol # resolution. To that end, when using static archives, the *_PRELOAD_ARCHIVES -# variables, PNG_PRELOAD_ARCHIVES and ZLIB_PRELOAD_ARCHIVES, get the archives +# variables, PNG_PRELOAD_ARCHIVES and ZLIBNG_PRELOAD_ARCHIVES, get the archives # dumped into the target binary and runtime lookup will find the most # modern version. target_link_libraries(${VIEWER_BINARY_NAME} ${LEGACY_STDIO_LIBS} ${PNG_PRELOAD_ARCHIVES} - ${ZLIB_PRELOAD_ARCHIVES} + ${ZLIBNG_PRELOAD_ARCHIVES} ${URIPARSER_PRELOAD_ARCHIVES} ${GOOGLE_PERFTOOLS_LIBRARIES} ${LLAUDIO_LIBRARIES} @@ -2522,6 +2526,7 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${OPENGL_LIBRARIES} ${FMODWRAPPER_LIBRARY} # must come after LLAudio ${OPENAL_LIBRARIES} + ${GLOD_LIBRARIES} # restore GLOD dependencies ${OPENGL_LIBRARIES} ${JSONCPP_LIBRARIES} ${SDL_LIBRARY} diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 09a7391e4e..28179fc1f5 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.6.1 +6.6.2 diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml index 1d6d19b367..7edb17e913 100644 --- a/indra/newview/app_settings/cmd_line.xml +++ b/indra/newview/app_settings/cmd_line.xml @@ -55,7 +55,7 @@ debugsession desc - Run as if RenderDebugGL is TRUE, but log errors until end of session. + Run as if RenderDebugGLSession is TRUE, but log errors until end of session. map-to DebugSession diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 172ff40d73..8e113a8e84 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1028,6 +1028,17 @@ Value 1 + FSCreateCallingCards + + Comment + Don't create calling cards when friending other avatars (requires restart) + Persist + 1 + Type + Boolean + Value + 1 + FSSupportGroupChatPrefix3 Comment @@ -5977,7 +5988,7 @@ Type String Value - http://events.secondlife.com/viewer/embed/event/ + http://events.[GRID]/viewer/embed/event/[EVENT_ID] FastCacheFetchEnabled @@ -11525,6 +11536,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 + UpdateRememberPasswordSetting + + Comment + Save 'rememeber password' setting for current user. + Persist + 0 + Type + Boolean + Value + 0 + OctreeMaxNodeCapacity Comment @@ -12088,10 +12110,10 @@ Change of this parameter will affect the layout of buttons in notification toast Backup 0 - RenderDebugGL + RenderDebugGLSession Comment - Enable strict GL debugging. + Enable strict GL debugging on the start of next session. Persist 0 Type @@ -20907,7 +20929,7 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0.0 - FSShowMapDetails + StarLightShowMapDetails Comment Show the details panel on the side of the World Map @@ -24505,6 +24527,19 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSLatencyOneTimeFixRun + + Comment + One time fix has run for this install for script dialog colors on Latency + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + FSUseCtrlShout Comment diff --git a/indra/newview/app_settings/settings_v3.xml b/indra/newview/app_settings/settings_v3.xml index e6a1caebef..6c89031e12 100644 --- a/indra/newview/app_settings/settings_v3.xml +++ b/indra/newview/app_settings/settings_v3.xml @@ -80,7 +80,7 @@ Type String Value - firestorm + starlight SkinCurrentTheme @@ -106,7 +106,7 @@ Type String Value - Firestorm + Starlight FSSkinCurrentThemeReadableName diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 8d5400ed19..0fefe33c6a 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -33,7 +33,6 @@ RenderAvatarLODFactor 1 1.0 RenderAvatarPhysicsLODFactor 1 1.0 RenderAvatarMaxNonImpostors 1 16 RenderAvatarMaxComplexity 1 350000 -RenderAvatarVP 1 1 RenderAutoMuteSurfaceAreaLimit 1 1000.0 RenderCubeMap 1 1 RenderDelayVBUpdate 1 0 @@ -69,7 +68,7 @@ RenderShadowDetail 1 2 RenderUseStreamVBO 1 1 RenderFSAASamples 1 16 RenderMaxTextureIndex 1 16 -RenderGLCoreProfile 1 1 +RenderGLContextCoreProfile 1 1 RenderGLMultiThreaded 1 1 @@ -315,12 +314,12 @@ RenderAnisotropic 1 0 RenderCubeMap 0 0 RenderFSAASamples 1 0 RenderGLMultiThreaded 1 0 -RenderGLCoreProfile 1 0 +RenderGLContextCoreProfile 1 0 // AMD cards generally perform better when not using VBOs for streaming data // AMD cards also prefer an OpenGL Compatibility Profile Context list AMD RenderUseStreamVBO 1 0 -RenderGLCoreProfile 1 0 +RenderGLContextCoreProfile 1 0 diff --git a/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt b/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt index 9103d4faf3..34e132994d 100644 --- a/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt +++ b/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt @@ -6,160 +6,159 @@ // Global variables and CONSTANTS // - // Bridge platform - string BRIDGE_VERSION = "2.28"; // This should match fslslbridge.cpp - string gLatestURL; - integer gViewerIsFirestorm; - integer gTryHandshakeOnce = TRUE; - key gOwner; +// Bridge platform +string BRIDGE_VERSION = "2.29"; // This should match fslslbridge.cpp +string gLatestURL; +integer gViewerIsFirestorm; +integer gTryHandshakeOnce = TRUE; +key gOwner; - // Teleport - float TP_TARGET_DISTANCE = 1.0; // Distance to target when move to target should stop - integer MAX_TIME_TO_TP = 10; // (seconds) Should be set to 10 for normal use - float TP_TIMER_TICK = 0.05; - vector gMttVector; // Target for llMoveToTarget() teleport - integer gStartTPTimer; +// Teleport +float TP_TARGET_DISTANCE = 1.0; // Distance to target when move to target should stop +integer MAX_TIME_TO_TP = 10; // (seconds) Should be set to 10 for normal use +float TP_TIMER_TICK = 0.05; +vector gMttVector; // Target for llMoveToTarget() teleport +integer gStartTPTimer; - // Movelock - integer gUseMoveLock; - integer gRelockMoveLockAfterMovement; - integer gRelockIsUserMoving; +// Movelock +integer gUseMoveLock; +integer gRelockMoveLockAfterMovement; +integer gRelockIsUserMoving; - // Flight assist - integer gIsFlyingNow; - float FLIGHT_CHECK_NORMAL = 0.5; - float FLIGHT_CHECK_SLOW = 3.0; - float gFlightAssistPushForce; +// Flight assist +integer gIsFlyingNow; +float FLIGHT_CHECK_NORMAL = 0.5; +float FLIGHT_CHECK_SLOW = 3.0; +float gFlightAssistPushForce; - // OpenCollar/LockMeister AO interface - integer gAO_EnabledOC; - integer gAO_EnabledLM; - integer gAO_ChannelOC; - integer AO_CHANNEL_LM = -8888; - integer gAO_ListenerOC; - integer gAO_ListenerLM; - key gAO_CollarKey; +// OpenCollar/LockMeister AO interface +integer gAO_EnabledOC; +integer gAO_EnabledLM; +integer gAO_ChannelOC; +integer AO_CHANNEL_LM = -8888; +integer gAO_ListenerOC; +integer gAO_ListenerLM; +key gAO_CollarKey; // // Bridge platform helper functions // - requestBridgeURL() - { - llReleaseURL(gLatestURL); - gLatestURL = ""; - llRequestSecureURL(); - // llRequestURL(); -- Uncomment this line and comment the previous one for HTTP instead of HTTPS - } +requestBridgeURL() +{ + llReleaseURL(gLatestURL); + gLatestURL = ""; + llRequestSecureURL(); +} - detachBridge() - { - llReleaseURL(gLatestURL); - llRequestPermissions(gOwner, PERMISSION_ATTACH); - } +detachBridge() +{ + llReleaseURL(gLatestURL); + llRequestPermissions(gOwner, PERMISSION_ATTACH); +} // // OpenCollar/LockMeister AO interface functions // - aoListenOC(key collarid, integer enabled) +aoListenOC(key collarid, integer enabled) +{ + llListenRemove(gAO_ListenerOC); + if (enabled) { - llListenRemove(gAO_ListenerOC); - if (enabled) - { - gAO_ListenerOC = llListen(gAO_ChannelOC, "", collarid, ""); - gAO_CollarKey = collarid; - } - else - { - gAO_CollarKey = NULL_KEY; - } + gAO_ListenerOC = llListen(gAO_ChannelOC, "", collarid, ""); + gAO_CollarKey = collarid; } + else + { + gAO_CollarKey = NULL_KEY; + } +} - aoState(string newstate) - { - llOwnerSay(""); - } +aoState(string newstate) +{ + llOwnerSay(""); +} - integrationCheckOC() +integrationCheckOC() +{ + if (gAO_EnabledOC) { - if (gAO_EnabledOC) + if (gAO_ChannelOC != PUBLIC_CHANNEL) { - if (gAO_ChannelOC != PUBLIC_CHANNEL) - { - aoListenOC(NULL_KEY, TRUE); - llWhisper(gAO_ChannelOC, "OpenCollar?"); - } - } - else - { - aoListenOC(NULL_KEY, FALSE); + aoListenOC(NULL_KEY, TRUE); + llWhisper(gAO_ChannelOC, "OpenCollar?"); } } + else + { + aoListenOC(NULL_KEY, FALSE); + } +} - integrationCheckLM() +integrationCheckLM() +{ + if (gAO_EnabledLM) { - if (gAO_EnabledLM) - { - gAO_ListenerLM = llListen(AO_CHANNEL_LM, "", NULL_KEY, ""); - } - else - { - llListenRemove(gAO_ListenerLM); - } + gAO_ListenerLM = llListen(AO_CHANNEL_LM, "", NULL_KEY, ""); } + else + { + llListenRemove(gAO_ListenerLM); + } +} // // Teleport Helper functions // - setTimerEvent2(float time) +setTimerEvent2(float time) +{ + if (time <= 0) { - if (time <= 0) - { - llSensorRemove(); - } - else - { - llSensorRepeat("set-Timer-Event-2", NULL_KEY, AGENT_BY_LEGACY_NAME, 0.001, 0.001, time); - } + llSensorRemove(); } + else + { + llSensorRepeat("set-Timer-Event-2", NULL_KEY, AGENT_BY_LEGACY_NAME, 0.001, 0.001, time); + } +} // // Flight Assist // - flightHover(integer yes) +flightHover(integer yes) +{ + if (yes) { - if (yes) - { - llSetForce((<0.0, 0.0, 9.8> * llGetMass()), 0); - } - else - { - llSetForce(ZERO_VECTOR, 1); - } + llSetForce((<0.0, 0.0, 9.8> * llGetMass()), 0); } + else + { + llSetForce(ZERO_VECTOR, 1); + } +} // // Movelock // - movelockMe(integer lock) +movelockMe(integer lock) +{ + if (lock) { - if (lock) - { - llMoveToTarget(llGetPos() - <0, 0, 0.1>, 0.05); - llSetVehicleType(VEHICLE_TYPE_SLED); - llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 0.05); - llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.05); - } - else - { - llStopMoveToTarget(); - llSetVehicleType(VEHICLE_TYPE_NONE); - } + llMoveToTarget(llGetPos() - <0, 0, 0.1>, 0.05); + llSetVehicleType(VEHICLE_TYPE_SLED); + llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 0.05); + llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.05); } + else + { + llStopMoveToTarget(); + llSetVehicleType(VEHICLE_TYPE_NONE); + } +} // // MAIN @@ -365,8 +364,6 @@ default vector targ = gMttVector - loc; float dist = llVecMag(targ); - // llOwnerSay("current: " + (string)loc + " target: " + (string)targ + " tp distance: " + (string)dist); - // If we are out of time or distance - stop if (dist < TP_TARGET_DISTANCE || llGetUnixTime() - MAX_TIME_TO_TP > gStartTPTimer || gMttVector == loc) { @@ -391,7 +388,6 @@ default http_request(key httpReqID, string Method, string Body) { - // llOwnerSay("Received HTTP " + Method + " message. Command body: " + Body); if (Method == URL_REQUEST_GRANTED) { gLatestURL = Body; @@ -429,11 +425,10 @@ default // Radar-specific command to get high-rez altitude data. // Input is list of UUIDs to query, output is list of UUID:Altitude pairs. - // Get parameters list tUUIDs = llCSV2List(llList2String(commandList, 1)); commandList = []; // Free memory integer tLength = llGetListLength(tUUIDs); - key tUUID; // Key for llGetobjectDetails() + key tUUID; vector tPos; integer i = 0; list responses; @@ -507,9 +502,9 @@ default if (extended) { currentPosition = llGetPos(); - details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME, OBJECT_DESC, OBJECT_ROOT, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_VELOCITY, OBJECT_POS, OBJECT_ROT, OBJECT_OMEGA, OBJECT_CREATOR, OBJECT_OWNER, OBJECT_LAST_OWNER_ID, OBJECT_REZZER_KEY, OBJECT_GROUP, OBJECT_CREATION_TIME, OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT, OBJECT_TEMP_ATTACHED])); + details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME, OBJECT_DESC, OBJECT_ROOT, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_VELOCITY, OBJECT_POS, OBJECT_ROT, OBJECT_OMEGA, OBJECT_CREATOR, OBJECT_OWNER, OBJECT_LAST_OWNER_ID, OBJECT_REZZER_KEY, OBJECT_GROUP, OBJECT_CREATION_TIME, OBJECT_REZ_TIME, OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT, OBJECT_TEMP_ATTACHED])); details = details + [currentPosition, targetkey]; - elements = 26; + elements = 27; } else { @@ -522,7 +517,7 @@ default list returnedList = [llStringToBase64(llStringTrim(llList2String(details, 0), STRING_TRIM)), llList2String(details, 1), llList2String(details, 2), llList2Integer(details, 3) / 1024, llList2Float(details, 4) * 1000.0, llList2Float(details, 5) * 1000.0]; if (extended) { - returnedList = returnedList + [llStringToBase64(llStringTrim(llList2String(details, 6), STRING_TRIM)), llList2String(details, 7), llList2Integer(details, 8), llList2Integer(details, 9), llList2Integer(details, 10), llStringToBase64(llList2String(details, 11)), llStringToBase64(llList2String(details, 12) + " (" + (string)llVecDist(llList2Vector(details, 12), currentPosition) + " m)"), llStringToBase64(llList2String(details, 13) + " (" + (string)(RAD_TO_DEG * llRot2Euler(llList2Rot(details, 13))) + ")"), llStringToBase64(llList2String(details, 14)), llList2Key(details, 15), llList2Key(details, 16), llList2Key(details, 17), llList2Key(details, 18), llList2Key(details, 19), llList2String(details, 20), llList2Integer(details, 21), llList2Integer(details, 22), llList2Integer(details, 23), llStringToBase64(llList2String(details, 24)), llList2Key(details, 25)]; + returnedList = returnedList + [llStringToBase64(llStringTrim(llList2String(details, 6), STRING_TRIM)), llList2String(details, 7), llList2Integer(details, 8), llList2Integer(details, 9), llList2Integer(details, 10), llStringToBase64(llList2String(details, 11)), llStringToBase64(llList2String(details, 12) + " (" + (string)llVecDist(llList2Vector(details, 12), currentPosition) + " m)"), llStringToBase64(llList2String(details, 13) + " (" + (string)(RAD_TO_DEG * llRot2Euler(llList2Rot(details, 13))) + ")"), llStringToBase64(llList2String(details, 14)), llList2Key(details, 15), llList2Key(details, 16), llList2Key(details, 17), llList2Key(details, 18), llList2Key(details, 19), llList2String(details, 20), llList2String(details, 21), llList2Integer(details, 22), llList2Integer(details, 23), llList2Integer(details, 24), llStringToBase64(llList2String(details, 25)), llList2Key(details, 26)]; } llOwnerSay("" + llList2CSV(returnedList) + ""); } diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index 8f2d113217..8fc1699282 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -81,6 +81,13 @@ const F32 MIN_DISTANCE_MOVED = 1.0f; // timeout to resend object properties request again const F32 REQUEST_TIMEOUT = 30.0f; +std::string RLVa_hideNameIfRestricted(std::string const &name) +{ + if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) + return name; + else + return RlvStrings::getAnonym(name); +} F32 calculateObjectDistance(LLVector3d agent_pos, LLViewerObject* object) { @@ -907,10 +914,13 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje std::string object_description = details.description; details.name_requested = false; - getNameFromUUID(details.ownership_id, true, owner_name, details.group_owned, details.name_requested); - getNameFromUUID(details.creator_id, false, creator_name, false, details.name_requested); - getNameFromUUID(details.last_owner_id, false, last_owner_name, false, details.name_requested); - getNameFromUUID(details.group_id, false, group_name, true, details.name_requested); + getNameFromUUID(details.ownership_id, owner_name, details.group_owned, details.name_requested); + getNameFromUUID(details.creator_id, creator_name, false, details.name_requested); + getNameFromUUID(details.last_owner_id, last_owner_name, false, details.name_requested); + getNameFromUUID(details.group_id, group_name, true, details.name_requested); + + owner_name = RLVa_hideNameIfRestricted(owner_name); + last_owner_name = RLVa_hideNameIfRestricted(last_owner_name); if (mRegexSearch) { @@ -1042,7 +1052,7 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje cell_params.column = "owner"; cell_params.value = owner_name; - row_params.columns.add(cell_params); + row_params.columns.add(cell_params); cell_params.column = "group"; cell_params.value = group_name; @@ -1105,7 +1115,7 @@ void FSAreaSearch::updateObjectCosts(const LLUUID& object_id, F32 object_cost, F } } -void FSAreaSearch::getNameFromUUID(const LLUUID& id, bool needs_rlva_check, std::string& name, bool group, bool& name_requested) +void FSAreaSearch::getNameFromUUID(const LLUUID& id, std::string& name, bool group, bool& name_requested) { static const std::string unknown_name = LLTrans::getString("AvatarNameWaiting"); @@ -1127,46 +1137,28 @@ void FSAreaSearch::getNameFromUUID(const LLUUID& id, bool needs_rlva_check, std: else { LLAvatarName av_name; - if (LLAvatarNameCache::get(id, &av_name)) - { - if (!needs_rlva_check || !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) - { - name = av_name.getCompleteName(); - } - else - { - name = RlvStrings::getAnonym(av_name); - } - } - else + if (!LLAvatarNameCache::get(id, &av_name)) { name = unknown_name; if (std::find(mNamesRequested.begin(), mNamesRequested.end(), id) == mNamesRequested.end()) { mNamesRequested.push_back(id); - boost::signals2::connection cb_connection = LLAvatarNameCache::get(id, boost::bind(&FSAreaSearch::avatarNameCacheCallback, this, _1, _2, needs_rlva_check)); + boost::signals2::connection cb_connection = LLAvatarNameCache::get(id, boost::bind(&FSAreaSearch::avatarNameCacheCallback, this, _1, _2)); mNameCacheConnections.insert(std::make_pair(id, cb_connection)); // mNamesRequested will do the dupe check } name_requested = true; } + else + name = av_name.getCompleteName(); } } -void FSAreaSearch::avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name, bool needs_rlva_check) +void FSAreaSearch::avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name) { - std::string name; - if (!needs_rlva_check || !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) - { - name = av_name.getCompleteName(); - } - else - { - name = RlvStrings::getAnonym(av_name); - } - callbackLoadFullName(id, name); + callbackLoadFullName(id, av_name.getCompleteName()); } -void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& full_name) +void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& full_name ) { auto iter = mNameCacheConnections.find(id); if (iter != mNameCacheConnections.end()) @@ -1193,7 +1185,7 @@ void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& ful } } - mPanelList->updateName(id, full_name); + mPanelList->updateName(id, full_name); } void FSAreaSearch::updateCounterText() @@ -1613,7 +1605,7 @@ void FSPanelAreaSearchList::updateName(const LLUUID& id, const std::string& name if (owner_column && (id == details.owner_id)) { LLScrollListText* owner_text = (LLScrollListText*)item->getColumn(owner_column->mIndex); - owner_text->setText(name); + owner_text->setText(RLVa_hideNameIfRestricted(name)); mResultList->setNeedsSort(); } @@ -1627,7 +1619,7 @@ void FSPanelAreaSearchList::updateName(const LLUUID& id, const std::string& name if (last_owner_column && (id == details.last_owner_id)) { LLScrollListText* last_owner_text = (LLScrollListText*)item->getColumn(last_owner_column->mIndex); - last_owner_text->setText(name); + last_owner_text->setText(RLVa_hideNameIfRestricted(name)); mResultList->setNeedsSort(); } } diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index 00c8e36444..9ffdcb4499 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -114,7 +114,7 @@ public: virtual void draw(); virtual void onOpen(const LLSD& key); - void avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name, bool needs_rlva_check); + void avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name); void callbackLoadFullName(const LLUUID& id, const std::string& full_name); void processObjectProperties(LLMessageSystem* msg); void updateObjectCosts(const LLUUID& object_id, F32 object_cost, F32 link_cost, F32 physics_cost, F32 link_physics_cost); @@ -172,7 +172,7 @@ public: private: void requestObjectProperties(const std::vector< U32 >& request_list, bool select, LLViewerRegion* regionp); void matchObject(FSObjectProperties& details, LLViewerObject* objectp); - void getNameFromUUID(const LLUUID& id, bool needs_rvla_check, std::string& name, bool group, bool& name_requested); + void getNameFromUUID(const LLUUID& id, std::string& name, bool group, bool& name_requested); void updateCounterText(); bool regexTest(std::string text); diff --git a/indra/newview/fschathistory.cpp b/indra/newview/fschathistory.cpp index d2d0dd8b08..d72947c4b3 100644 --- a/indra/newview/fschathistory.cpp +++ b/indra/newview/fschathistory.cpp @@ -595,9 +595,15 @@ public: mHeaderLayoutStack = getChild("header_ls"); mInfoCtrl = LLUICtrlFactory::getInstance()->createFromFile("inspector_info_ctrl.xml", this, LLPanel::child_registry_t::instance()); - llassert(mInfoCtrl != NULL); - mInfoCtrl->setCommitCallback(boost::bind(&FSChatHistoryHeader::onClickInfoCtrl, mInfoCtrl)); - mInfoCtrl->setVisible(FALSE); + if (mInfoCtrl) + { + mInfoCtrl->setCommitCallback(boost::bind(&FSChatHistoryHeader::onClickInfoCtrl, mInfoCtrl)); + mInfoCtrl->setVisible(FALSE); + } + else + { + LL_ERRS() << "Failed to create an interface element due to missing or corrupted file inspector_info_ctrl.xml" << LL_ENDL; + } return LLPanel::postBuild(); } diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp index 528d859aa2..591d76f91e 100644 --- a/indra/newview/fsfloaterim.cpp +++ b/indra/newview/fsfloaterim.cpp @@ -411,7 +411,14 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type) static LLCachedControl FSInternalSkinCurrent(gSavedSettings, "FSInternalSkinCurrent"); std::string skin_indicator(FSInternalSkinCurrent); LLStringUtil::toLower(skin_indicator); - skin_indicator = skin_indicator.substr(0, 1); // "FS 4.4.1f os", "FS 4.4.1v", "FS 4.4.1a", "FS 4.4.1s os", "FS 4.4.1m os" etc. + if (skin_indicator == "starlight cui") + { + skin_indicator = "sc"; // Separate "s" (StarLight) from "sc" (StarLight CUI) + } + else + { + skin_indicator = skin_indicator.substr(0, 1); // "FS 4.4.1f os", "FS 4.4.1v", "FS 4.4.1a", "FS 4.4.1s os", "FS 4.4.1m os" etc. + } // //Address size check diff --git a/indra/newview/fslslbridge.cpp b/indra/newview/fslslbridge.cpp index 2495242dd1..b2ec6834e3 100644 --- a/indra/newview/fslslbridge.cpp +++ b/indra/newview/fslslbridge.cpp @@ -55,7 +55,7 @@ static const std::string FS_BRIDGE_FOLDER = "#LSL Bridge"; static const std::string FS_BRIDGE_CONTAINER_FOLDER = "Landscaping"; static const U32 FS_BRIDGE_MAJOR_VERSION = 2; -static const U32 FS_BRIDGE_MINOR_VERSION = 28; +static const U32 FS_BRIDGE_MINOR_VERSION = 29; static const U32 FS_MAX_MINOR_VERSION = 99; static const std::string UPLOAD_SCRIPT_CURRENT = "EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt"; static const std::string FS_STATE_ATTRIBUTE = "state="; @@ -410,7 +410,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, while (std::getline(strStreamGetScriptInfo, scriptInfoToken, ',')) { LLStringUtil::trim(scriptInfoToken); - if (scriptInfoArrayCount == 0 || scriptInfoArrayCount == 6 || scriptInfoArrayCount == 11 || scriptInfoArrayCount == 12 || scriptInfoArrayCount == 13 || scriptInfoArrayCount == 14 || scriptInfoArrayCount == 24) + if (scriptInfoArrayCount == 0 || scriptInfoArrayCount == 6 || scriptInfoArrayCount == 11 || scriptInfoArrayCount == 12 || scriptInfoArrayCount == 13 || scriptInfoArrayCount == 14 || scriptInfoArrayCount == 25) { // First value, OBJECT_NAME, should be passed from Bridge as encoded in base64 // Encoding eliminates problems with special characters and commas for CSV @@ -433,7 +433,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, ++scriptInfoArrayCount; } - if (scriptInfoArrayCount == 6 || scriptInfoArrayCount == 26) + if (scriptInfoArrayCount == 6 || scriptInfoArrayCount == 27) { LLStringUtil::format_map_t args; args["OBJECT_NAME"] = scriptInfoArray[0].asString(); @@ -452,7 +452,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, args["PATHFINDING_TEXT"] = ""; } report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info"), args)); - if (scriptInfoArrayCount == 26) + if (scriptInfoArrayCount == 27) { LLStringUtil::format_map_t args3; args3["OBJECT_DESC"] = scriptInfoArray[6].asString(); @@ -470,11 +470,12 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, args3["OBJECT_REZZER_KEY"] = scriptInfoArray[18].asString(); args3["OBJECT_GROUP"] = scriptInfoArray[19].asUUID().notNull() ? LLSLURL("group", scriptInfoArray[19].asUUID(), "inspect").getSLURLString() : "---"; args3["OBJECT_CREATION_TIME"] = scriptInfoArray[20].asString(); - args3["OBJECT_PATHFINDING_TYPE"] = scriptInfoArray[21].asString(); - args3["OBJECT_ATTACHED_POINT"] = (scriptInfoArray[22].asInteger() < 1 || scriptInfoArray[22].asInteger() > 255) ? "---" : LLTrans::getString(LLAvatarAppearance::getAttachmentPointName(scriptInfoArray[22].asInteger())); - args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[23].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No"); - args3["AVATAR_POS"] = scriptInfoArray[24].asString(); - args3["INSPECTING_KEY"] = scriptInfoArray[25].asString(); + args3["OBJECT_REZ_TIME"] = scriptInfoArray[21].asString(); + args3["OBJECT_PATHFINDING_TYPE"] = scriptInfoArray[22].asString(); + args3["OBJECT_ATTACHED_POINT"] = (scriptInfoArray[23].asInteger() < 1 || scriptInfoArray[23].asInteger() > 255) ? "---" : LLTrans::getString(LLAvatarAppearance::getAttachmentPointName(scriptInfoArray[23].asInteger())); + args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[24].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No"); + args3["AVATAR_POS"] = scriptInfoArray[25].asString(); + args3["INSPECTING_KEY"] = scriptInfoArray[26].asString(); report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info_ext"), args3)); } } diff --git a/indra/newview/fslslpreproc.cpp b/indra/newview/fslslpreproc.cpp index b2e815df0a..12f46fa2eb 100644 --- a/indra/newview/fslslpreproc.cpp +++ b/indra/newview/fslslpreproc.cpp @@ -1540,6 +1540,22 @@ void FSLSLPreprocessor::start_process() } } } + else + { + // FIRE-31718: Preprocessor crashes viewer on recursive #include + + // Truncate the resulting preprocessed script to something the text field can handle without + // freezing for so long the viewer disconnects. The usual script source code limit is 64kB so + // let's play it safe and allow twice as much here. The script is most likely already unusable + // at this point due to the preprocessor bailing out with an error earlier, so a truncated + // version doesn't hurt more than it already did. + if (output.size() > 128 * 1024) + { + output.resize(128 * 1024); + display_error(LLTrans::getString("fs_preprocessor_truncated")); + } + } + if (!errored) { if (preprocessor_enabled && use_compression) diff --git a/indra/newview/fsperfstats.h b/indra/newview/fsperfstats.h index 590c91598d..d690e0bcf2 100644 --- a/indra/newview/fsperfstats.h +++ b/indra/newview/fsperfstats.h @@ -44,7 +44,7 @@ #ifdef TRACY_ENABLE // USAGE_TRACKING - displays overlapping stats that may imply double counting. // ATTACHMENT_TRACKING - displays detailed tracking info for Avatar and Attachment. very heavy overhead. -#define USAGE_TRACKING +// #define USAGE_TRACKING #define ATTACHMENT_TRACKING #else #undef USAGE_TRACKING diff --git a/indra/newview/licenses-win32.txt b/indra/newview/licenses-win32.txt index 837d92139d..d1b3d0c8b7 100644 --- a/indra/newview/licenses-win32.txt +++ b/indra/newview/licenses-win32.txt @@ -796,3 +796,69 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +============= +GLOD license +============= +The GLOD Open-Source License Version 1.0 June 16, 2004 + +Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns +Hopkins University and David Luebke, Brenden Schubert, University of +Virginia. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, is permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer and + request. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer and + request in the documentation and/or other materials provided with + the distribution. + +3. The name "GLOD" must not be used to endorse or promote products + derived from this software without prior written permission. + +4. Redistributions of any modified version of this source, whether in + source or binary form , must include a form of the following + acknowledgment: "This product is derived from the GLOD library, + which is available from http://www.cs.jhu.edu/~graphics/GLOD." + +5. Redistributions of any modified version of this source in binary + form must provide, free of charge, access to the modified version + of the code. + +6. This license shall be governed by and construed and enforced in + accordance with the laws of the State of Maryland, without + reference to its conflicts of law provisions. The exclusive + jurisdiction and venue for all legal actions relating to this + license shall be in courts of competent subject matter jurisdiction + located in the State of Maryland. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, GLOD IS PROVIDED +UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +THAT GLOD IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR +PURPOSE OR NON-INFRINGING. ALL WARRANTIES ARE DISCLAIMED AND THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE CODE IS WITH +YOU. SHOULD ANY CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE +COPYRIGHT HOLDER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY +NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY +CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY CODE IS +AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL +THE COPYRIGHT HOLDER OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY +SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES FOR LOSS OF +PROFITS, REVENUE, OR FOR LOSS OF INFORMATION OR ANY OTHER LOSS. + +YOU EXPRESSLY AGREE TO FOREVER INDEMNIFY, DEFEND AND HOLD HARMLESS THE +COPYRIGHT HOLDERS AND CONTRIBUTORS OF GLOD AGAINST ALL CLAIMS, +DEMANDS, SUITS OR OTHER ACTIONS ARISING DIRECTLY OR INDIRECTLY FROM +YOUR ACCEPTANCE AND USE OF GLOD. + +Although NOT REQUIRED, we would appreciate it if active users of GLOD +put a link on their web site to the GLOD web site when possible. diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 40503dc567..b95e9f0f1a 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -829,6 +829,12 @@ void LLAgent::moveYaw(F32 mag, bool reset_view) setControlFlags(AGENT_CONTROL_YAW_NEG); } + U32 mask = AGENT_CONTROL_YAW_POS | AGENT_CONTROL_YAW_NEG; + if ((getControlFlags() & mask) == mask) + { + gAgentCamera.setYawKey(0); + } + if (reset_view) { // FIRE-8798: Option to prevent camera reset on movement @@ -2439,6 +2445,27 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 // gAgentCamera.updateLookAt(mouse_x, mouse_y); + + // When agent has no parents, position updates come from setPositionAgent() + // But when agent has a parent (ex: is seated), position remains unchanged + // relative to parent and no parent's position update trigger + // setPositionAgent(). + // But EEP's sky track selection still needs an update if agent has a parent + // and parent moves (ex: vehicles). + if (isAgentAvatarValid() + && gAgentAvatarp->getParent() + && !mOnPositionChanged.empty() + ) + { + LLVector3d new_position = getPositionGlobal(); + if ((mLastTestGlobal - new_position).lengthSquared() > 1.0) + { + // If the position has changed by more than 1 meter since the last time we triggered. + // filters out some noise. + mLastTestGlobal = new_position; + mOnPositionChanged(mFrameAgent.getOrigin(), new_position); + } + } } // friends and operators diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index dde745b1c6..c8de834923 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -434,10 +434,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi LLQuaternion obj_rot = object->getRenderRotation(); LLVector3 obj_pos = object->getRenderPosition(); - BOOL is_avatar = object->isAvatar(); // if is avatar - don't do any funk heuristics to position the focal point // see DEV-30589 - if (is_avatar) + if (object->isAvatar() || (object->isAnimatedObject() && object->getControlAvatar())) { return original_focus_point - obj_pos; } @@ -562,7 +561,6 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi // or keep the focus point in the object middle when (relatively) far // NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars // is almost always "tumble about middle" and not "spin around surface point" - if (!is_avatar) { LLVector3 obj_rel = original_focus_point - object->getRenderPosition(); @@ -1521,7 +1519,7 @@ void LLAgentCamera::updateCamera() F32 smoothing = LLSmoothInterpolation::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE); - if (!mFocusObject) // we differentiate on avatar mode + if (mFocusOnAvatar && !mFocusObject) // we differentiate on avatar mode { // for avatar-relative focus, we smooth in avatar space - // the avatar moves too jerkily w/r/t global space to smooth there. diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index c4e3593e7f..0a9e67505e 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -37,6 +37,7 @@ #include "llgesturemgr.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" #include "lllocaltextureobject.h" @@ -1755,6 +1756,14 @@ void LLAgentWearables::editWearable(const LLUUID& item_id) return; } + if (!item->isFinished()) + { + LL_WARNS() << "Tried to edit wearable that isn't loaded" << LL_ENDL; + // Restart fetch or put item to the front + LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false); + return; + } + LLViewerWearable* wearable = gAgentWearables.getWearableFromItemID(item_id); if (!wearable) { @@ -1768,6 +1777,18 @@ void LLAgentWearables::editWearable(const LLUUID& item_id) return; } + S32 shape_count = gAgentWearables.getWearableCount(LLWearableType::WT_SHAPE); + S32 hair_count = gAgentWearables.getWearableCount(LLWearableType::WT_HAIR); + S32 eye_count = gAgentWearables.getWearableCount(LLWearableType::WT_EYES); + S32 skin_count = gAgentWearables.getWearableCount(LLWearableType::WT_SKIN); + if (!shape_count || !hair_count || !eye_count || !skin_count) + { + // Don't let user edit wearables if avatar is cloud due to missing parts. + // Let user edit wearables if avatar is cloud due to missing textures. + LL_WARNS() << "Cannot modify wearable. Avatar is cloud and missing parts." << LL_ENDL; + return; + } + const BOOL disable_camera_switch = LLWearableType::getInstance()->getDisableCameraSwitch(wearable->getType()); LLPanel* panel = LLFloaterSidePanelContainer::getPanel("appearance"); LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index cacc23e3cf..c9dbaddcbf 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -651,8 +651,8 @@ static void settings_modify() LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred || (gSavedSettings.getBOOL("WindLightUseAtmosShaders") && LLPipeline::sUseDepthTexture); // [/RLVa:KB] LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor"); - LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4] - gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession; + LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; // square lod factor to get exponential range of [1,4] + gDebugGL = gDebugGLSession || gDebugSession; gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline"); } @@ -1327,7 +1327,8 @@ bool LLAppViewer::init() // Disable updater //#if LL_RELEASE_FOR_DOWNLOAD -// if (!gSavedSettings.getBOOL("CmdLineSkipUpdater")) +// // Skip updater if this is a non-interactive instance +// if (!gSavedSettings.getBOOL("CmdLineSkipUpdater") && !gNonInteractive) // { // LLProcess::Params updater; // updater.desc = "updater process"; @@ -3234,6 +3235,15 @@ bool LLAppViewer::initConfiguration() ll_init_fail_log(gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "test_failures.log")); } + if (gSavedSettings.getBOOL("RenderDebugGLSession")) + { + gDebugGLSession = TRUE; + gDebugGL = TRUE; + // gDebugGL can cause excessive logging + // so it's limited to a single session + gSavedSettings.setBOOL("RenderDebugGLSession", FALSE); + } + // Hacking to save the skin and theme for future use. mCurrentSkin = gSavedSettings.getString("SkinCurrent"); mCurrentSkinTheme = gSavedSettings.getString("SkinCurrentTheme"); @@ -3703,6 +3713,11 @@ bool LLAppViewer::isUpdaterMissing() return mUpdaterNotFound; } +bool LLAppViewer::waitForUpdater() +{ + return !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !mUpdaterNotFound && !gNonInteractive; +} + void LLAppViewer::writeDebugInfo(bool isStatic) { #if LL_WINDOWS && LL_BUGSPLAT @@ -3865,9 +3880,28 @@ LLSD LLAppViewer::getViewerInfo() const info["GRAPHICS_CARD_MEMORY"] = gGLManager.mVRAM; #if LL_WINDOWS - // FIRE-8264: System info displays wrong driver version on Optimus systems - //std::string drvinfo = gDXHardware.getDriverVersionWMI(); - std::string drvinfo = gDXHardware.getDriverVersionWMI(gGLManager.mGLVendorShort); + std::string drvinfo; + + if (gGLManager.mIsIntel) + { + drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_INTEL); + } + else if (gGLManager.mIsNVIDIA) + { + drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_NVIDIA); + } + else if (gGLManager.mIsAMD) + { + drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_AMD); + } + + if (drvinfo.empty()) + { + // Generic/substitute windows driver? Unknown vendor? + LL_WARNS("DriverVersion") << "Vendor based driver search failed, searching for any driver" << LL_ENDL; + drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_ANY); + } + if (!drvinfo.empty()) { info["GRAPHICS_DRIVER_VERSION"] = drvinfo; @@ -5678,6 +5712,13 @@ void LLAppViewer::idle() } } + + // Update layonts, handle mouse events, tooltips, e t c + // updateUI() needs to be called even in case viewer disconected + // since related notification still needs handling and allows + // opening chat. + gViewerWindow->updateUI(); + if (gDisconnected) { // Inworldz hang in disconnecting fix by McCabe Maxstead @@ -5690,8 +5731,6 @@ void LLAppViewer::idle() return; } - gViewerWindow->updateUI(); - if (gTeleportDisplay) { return; diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 5a0cf9bd07..80dec10493 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -106,6 +106,7 @@ public: bool logoutRequestSent() { return mLogoutRequestSent; } bool isSecondInstance() { return mSecondInstance; } bool isUpdaterMissing(); // In use by tests + bool waitForUpdater(); void writeDebugInfo(bool isStatic=true); diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp index f89b2cf889..88c2777675 100644 --- a/indra/newview/llaudiosourcevo.cpp +++ b/indra/newview/llaudiosourcevo.cpp @@ -34,6 +34,7 @@ #include "llmutelist.h" #include "llviewercontrol.h" #include "llviewerparcelmgr.h" +#include "llvoavatarself.h" LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp) // FIRE-10512 - Sound explorer fix by Sei Lisa @@ -144,11 +145,36 @@ void LLAudioSourceVO::updateMute() LLVector3d pos_global = getPosGlobal(); F32 cutoff = mObjectp->getSoundCutOffRadius(); - if ((cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) // consider cutoff below 0.1m as off - || !LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) - { - mute = true; - } + // Object can specify radius at which it turns off + // consider cutoff below 0.1m as 'cutoff off' + if (cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) + { + mute = true; + } + // check if parcel allows sounds to pass border + else if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) + { + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + // Check if agent is riding this object + // Agent can ride something out of region border and canHearSound + // will treat object as not being part of agent's parcel. + LLViewerObject *sound_root = (LLViewerObject*)mObjectp->getRoot(); + LLViewerObject *agent_root = (LLViewerObject*)gAgentAvatarp->getRoot(); + if (sound_root != agent_root) + { + mute = true; + } + else + { + LL_INFOS() << "roots identical" << LL_ENDL; + } + } + else + { + mute = true; + } + } if (!mute) { diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 349e579bb9..540614abb7 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -578,9 +578,15 @@ public: mTimeBoxTextBox = getChild("time_box"); mInfoCtrl = LLUICtrlFactory::getInstance()->createFromFile("inspector_info_ctrl.xml", this, LLPanel::child_registry_t::instance()); - llassert(mInfoCtrl != NULL); - mInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, mInfoCtrl)); - mInfoCtrl->setVisible(FALSE); + if (mInfoCtrl) + { + mInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, mInfoCtrl)); + mInfoCtrl->setVisible(FALSE); + } + else + { + LL_ERRS() << "Failed to create an interface element due to missing or corrupted file inspector_info_ctrl.xml" << LL_ENDL; + } return LLPanel::postBuild(); } diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index a3f68ef93a..6d43b4cb46 100644 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -274,9 +274,9 @@ BOOL LLConversationViewSession::postBuild() default: break; } - } - refresh(); + refresh(); // requires vmi + } return TRUE; } @@ -492,17 +492,20 @@ void LLConversationViewSession::refresh() { // Refresh the session view from its model data LLConversationItem* vmi = dynamic_cast(getViewModelItem()); - vmi->resetRefresh(); + if (vmi) + { + vmi->resetRefresh(); - if (mSessionTitle) - { - if (!highlightFriendTitle(vmi)) - { - LLStyle::Params title_style; - title_style.color = LLUIColorTable::instance().getColor("LabelTextColor"); - mSessionTitle->setText(vmi->getDisplayName(), title_style); - } - } + if (mSessionTitle) + { + if (!highlightFriendTitle(vmi)) + { + LLStyle::Params title_style; + title_style.color = LLUIColorTable::instance().getColor("LabelTextColor"); + mSessionTitle->setText(vmi->getDisplayName(), title_style); + } + } + } // Update all speaking indicators LLSpeakingIndicatorManager::updateSpeakingIndicators(); @@ -526,8 +529,11 @@ void LLConversationViewSession::refresh() } requestArrange(); - // Do the regular upstream refresh - LLFolderViewFolder::refresh(); + if (vmi) + { + // Do the regular upstream refresh + LLFolderViewFolder::refresh(); + } } void LLConversationViewSession::onCurrentVoiceSessionChanged(const LLUUID& session_id) @@ -629,8 +635,11 @@ BOOL LLConversationViewParticipant::postBuild() } updateChildren(); - LLFolderViewItem::postBuild(); - refresh(); + if (getViewModelItem()) + { + LLFolderViewItem::postBuild(); + refresh(); + } return TRUE; } @@ -714,10 +723,10 @@ void LLConversationViewParticipant::refresh() // *TODO: We should also do something with vmi->isModerator() to echo that state in the UI somewhat mSpeakingIndicator->setIsModeratorMuted(participant_model->isModeratorMuted()); + + // Do the regular upstream refresh + LLFolderViewItem::refresh(); } - - // Do the regular upstream refresh - LLFolderViewItem::refresh(); } void LLConversationViewParticipant::addToFolder(LLFolderViewFolder* folder) diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 600d226d91..7b37ec09b8 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -68,7 +68,6 @@ #pragma GCC diagnostic ignored "-Wuninitialized" #endif -extern BOOL gGLDebugLoggingEnabled; #define LL_MAX_INDICES_COUNT 1000000 static LLStaticHashedString sTextureIndexIn("texture_index_in"); @@ -1085,22 +1084,12 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po } const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset); - - if( !vf.mNormals ) + if (! (vf.mNormals && vf.mTangents)) { - LL_WARNS( ) << "Volume face without normal vector (object id: " << getViewerObject()->getID().asString() << ")" << LL_ENDL; return; } - - - if( !vf.mTangents ) - { - LL_WARNS() << "Volume face without tangent (object id: " << getViewerObject()->getID().asString() << ")" << LL_ENDL; - return; - } - - const LLVector4a& normal4a = vf.mNormals[0]; - const LLVector4a& tangent = vf.mTangents[0]; + const LLVector4a& normal4a = *vf.mNormals; + const LLVector4a& tangent = *vf.mTangents; LLVector4a binormal4a; binormal4a.setCross3(normal4a, tangent); @@ -1634,7 +1623,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, !rebuild_weights && //TODO: add support for weights !volume.isUnique()) //source volume is NOT flexi { //use transform feedback to pack vertex buffer - //gGLDebugLoggingEnabled = TRUE; LL_PROFILE_ZONE_NAMED_CATEGORY_FACE("getGeometryVolume - transform feedback"); LLGLEnable discard(GL_RASTERIZER_DISCARD); diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index f556218e4e..c843fd0f7c 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -919,6 +919,14 @@ void LLFavoritesBarCtrl::updateButtons(bool force_update) } LLFavoritesOrderStorage::instance().mPrevFavorites = mItems; mGetPrevItems = false; + + if (LLFavoritesOrderStorage::instance().isStorageUpdateNeeded()) + { + if (!mItemsChangedTimer.getStarted()) + { + mItemsChangedTimer.start(); + } + } } const LLButton::Params& button_params = getButtonParams(); @@ -1782,7 +1790,7 @@ void LLFavoritesOrderStorage::destroyClass() file.close(); LLFile::remove(filename); } - if(mSaveOnExit) + if(mSaveOnExit || gSavedSettings.getBOOL("UpdateRememberPasswordSetting")) { LLFavoritesOrderStorage::instance().saveFavoritesRecord(true); } @@ -1826,7 +1834,6 @@ void LLFavoritesOrderStorage::load() llifstream in_file; in_file.open(filename.c_str()); LLSD fav_llsd; - LLSD user_llsd; if (in_file.is_open()) { LLSDSerialize::fromXML(fav_llsd, in_file); @@ -1837,16 +1844,16 @@ void LLFavoritesOrderStorage::load() // FIRE-10122 - User@grid stored_favorites.xml //if (fav_llsd.isMap() && fav_llsd.has(gAgentUsername)) //{ - // user_llsd = fav_llsd[gAgentUsername]; + // mStorageFavorites = fav_llsd[gAgentUsername]; if (fav_llsd.isMap() && fav_llsd.has(gAgentUsername + " @ " + LLGridManager::getInstance()->getGridLabel())) { - user_llsd = fav_llsd[gAgentUsername + " @ " + LLGridManager::getInstance()->getGridLabel()]; + mStorageFavorites = fav_llsd[gAgentUsername + " @ " + LLGridManager::getInstance()->getGridLabel()]; // S32 index = 0; bool needs_validation = gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"); - for (LLSD::array_iterator iter = user_llsd.beginArray(); - iter != user_llsd.endArray(); ++iter) + for (LLSD::array_iterator iter = mStorageFavorites.beginArray(); + iter != mStorageFavorites.endArray(); ++iter) { // Validation LLUUID fv_id = iter->get("id").asUUID(); @@ -2161,7 +2168,7 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed) } } - if((items != mPrevFavorites) || name_changed || pref_changed) + if((items != mPrevFavorites) || name_changed || pref_changed || gSavedSettings.getBOOL("UpdateRememberPasswordSetting")) { std::string filename = getStoredFavoritesFilename(); if (!filename.empty()) @@ -2182,6 +2189,12 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed) LLSD user_llsd; S32 fav_iter = 0; mMissingSLURLs.clear(); + + LLSD save_pass; + save_pass["save_password"] = gSavedSettings.getBOOL("RememberPassword"); + user_llsd[fav_iter] = save_pass; + fav_iter++; + for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++) { LLSD value; @@ -2257,6 +2270,23 @@ void LLFavoritesOrderStorage::showFavoritesOnLoginChanged(BOOL show) } } +bool LLFavoritesOrderStorage::isStorageUpdateNeeded() +{ + if (!mRecreateFavoriteStorage) + { + for (LLSD::array_iterator iter = mStorageFavorites.beginArray(); + iter != mStorageFavorites.endArray(); ++iter) + { + if (mFavoriteNames[iter->get("id").asUUID()] != iter->get("name").asString()) + { + mRecreateFavoriteStorage = true; + return true; + } + } + } + return false; +} + void AddFavoriteLandmarkCallback::fire(const LLUUID& inv_item_id) { if (mTargetLandmarkId.isNull()) return; diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 9046110428..a7cd5ba0a2 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -233,8 +233,11 @@ public: BOOL saveFavoritesRecord(bool pref_changed = false); void showFavoritesOnLoginChanged(BOOL show); - LLInventoryModel::item_array_t mPrevFavorites; + bool isStorageUpdateNeeded(); + LLInventoryModel::item_array_t mPrevFavorites; + LLSD mStorageFavorites; + bool mRecreateFavoriteStorage; const static S32 NO_INDEX; static bool mSaveOnExit; @@ -261,7 +264,6 @@ private: slurls_map_t mSLURLs; std::set mMissingSLURLs; bool mIsDirty; - bool mRecreateFavoriteStorage; struct IsNotInFavorites { diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 4f3c2d8d34..d5115df35f 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -386,7 +386,8 @@ void LLVolumeImplFlexible::doIdleUpdate() U64 throttling_delay = (virtual_frame_num + id) % update_period; if ((throttling_delay == 0 && mLastFrameNum < virtual_frame_num) //one or more virtual frames per frame - || (mLastFrameNum + update_period < virtual_frame_num)) // missed virtual frame + || (mLastFrameNum + update_period < virtual_frame_num) // missed virtual frame + || mLastFrameNum > virtual_frame_num) // overflow { // We need mLastFrameNum to compensate for 'unreliable time' and to filter 'duplicate' frames // If happened too late, subtract throttling_delay (it is zero otherwise) @@ -787,10 +788,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) volume->updateRelativeXform(); - if (mRenderRes > -1) - { - doFlexibleUpdate(); - } + doFlexibleUpdate(); // Object may have been rotated, which means it needs a rebuild. See SL-47220 BOOL rotated = FALSE; diff --git a/indra/newview/llfloatercreatelandmark.cpp b/indra/newview/llfloatercreatelandmark.cpp index 588f72e85b..ad5cf428d7 100644 --- a/indra/newview/llfloatercreatelandmark.cpp +++ b/indra/newview/llfloatercreatelandmark.cpp @@ -143,7 +143,9 @@ void LLFloaterCreateLandmark::setLandmarkInfo(const LLUUID &folder_id) mLandmarkTitleEditor->setText(name); } - LLLandmarkActions::createLandmarkHere(name, "", folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE)); + // FIRE-31689: Landmark initially shown in wrong folder while creating + //LLLandmarkActions::createLandmarkHere(name, "", folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE)); + LLLandmarkActions::createLandmarkHere(name, "", folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK)); } bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right) diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index a6640cc073..a3504ac6ee 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -108,11 +108,12 @@ void LLFloaterEvent::setEventID(const U32 event_id) LLSD subs; subs["EVENT_ID"] = (S32)event_id; // get the search URL and expand all of the substitutions - // (also adds things like [LANGUAGE], [VERSION], [OS], etc.) - std::ostringstream url; - url << gSavedSettings.getString("EventURL") << event_id << std::endl; + // (also adds things like [LANGUAGE], [VERSION], [OS], etc.) + + std::string expanded_url = LLWeb::expandURLSubstitutions(gSavedSettings.getString("EventURL"), subs); + // and load the URL in the web view - mBrowser->navigateTo(url.str()); + mBrowser->navigateTo(expanded_url); } } diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 8f186d5ea2..220f567ba9 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -553,7 +553,7 @@ void LLFloaterIMSessionTab::removeConversationViewParticipant(const LLUUID& part void LLFloaterIMSessionTab::updateConversationViewParticipant(const LLUUID& participant_id) { LLFolderViewItem* widget = get_ptr_in_map(mConversationsWidgets,participant_id); - if (widget) + if (widget && widget->getViewModelItem()) { widget->refresh(); } @@ -578,8 +578,11 @@ void LLFloaterIMSessionTab::refreshConversation() { participants_uuids.push_back(widget_it->first); } - widget_it->second->refresh(); - widget_it->second->setVisible(TRUE); + if (widget_it->second->getViewModelItem()) + { + widget_it->second->refresh(); + widget_it->second->setVisible(TRUE); + } ++widget_it; } if (is_ad_hoc || mIsP2PChat) @@ -1128,7 +1131,10 @@ void LLFloaterIMSessionTab::getSelectedUUIDs(uuid_vec_t& selected_uuids) for (; it != it_end; ++it) { LLConversationItem* conversation_item = static_cast((*it)->getViewModelItem()); - selected_uuids.push_back(conversation_item->getUUID()); + if (conversation_item) + { + selected_uuids.push_back(conversation_item->getUUID()); + } } } diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp index ebc9e2be22..f88e8741cf 100644 --- a/indra/newview/llfloaterjoystick.cpp +++ b/indra/newview/llfloaterjoystick.cpp @@ -369,9 +369,7 @@ void LLFloaterJoystick::refreshListOfDevices() std::string desc = LLViewerJoystick::getInstance()->getDescription(); if (!desc.empty()) { - // FIRE-30846 - Select the first detected device, don't fall back to 0 which will select "None" - // LLSD value = LLSD::Integer(0); - LLSD value = LLSD::Integer(1); + LLSD value = LLSD::Integer(1); // value for selection addDevice(desc, value); mHasDeviceList = true; } @@ -471,6 +469,9 @@ void LLFloaterJoystick::onCommitJoystickEnabled(LLUICtrl*, void *joy_panel) LLSD value = self->mJoysticksCombo->getValue(); bool joystick_enabled = true; + // value is 0 for no device, + // 1 for a device on Mac (single device, no list support yet) + // binary packed guid for a device on windows (can have multiple devices) if (value.isInteger()) { // ndof already has a device selected, we are just setting it enabled or disabled @@ -479,7 +480,7 @@ void LLFloaterJoystick::onCommitJoystickEnabled(LLUICtrl*, void *joy_panel) else { LLViewerJoystick::getInstance()->initDevice(value); - // else joystick is enabled, because combobox holds id of device + // else joystick is enabled, because combobox holds id of the device joystick_enabled = true; } gSavedSettings.setBOOL("JoystickEnabled", joystick_enabled); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 0f6d07800a..157c943653 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -472,7 +472,8 @@ BOOL LLPanelLandGeneral::postBuild() mEditDesc = getChild("Description"); mEditDesc->setCommitOnFocusLost(TRUE); - mEditDesc->setCommitCallback(onCommitAny, this); + mEditDesc->setCommitCallback(onCommitAny, this); + mEditDesc->setContentTrusted(false); // No prevalidate function - historically the prevalidate function was broken, // allowing residents to put in characters like U+2661 WHITE HEART SUIT, so // preserve that ability. @@ -778,6 +779,7 @@ void LLPanelLandGeneral::refresh() BOOL can_edit_identity = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY); mEditName->setEnabled(can_edit_identity); mEditDesc->setEnabled(can_edit_identity); + mEditDesc->setParseURLs(!can_edit_identity); BOOL can_edit_agent_only = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_NO_POWERS); mBtnSetGroup->setEnabled(can_edit_agent_only && !parcel->getIsGroupOwned()); diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 08eeded896..694b077720 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -828,6 +828,9 @@ void LLFloaterModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit) case LLModelPreview::MESH_OPTIMIZER_COMBINE: mModelPreview->onLODMeshOptimizerParamCommit(lod, enforce_tri_limit, mode); break; + case LLModelPreview::GENERATE: + mModelPreview->onLODGLODParamCommit(lod, enforce_tri_limit); + break; default: LL_ERRS() << "Only supposed to be called to generate models" << LL_ENDL; break; @@ -1957,6 +1960,7 @@ void LLFloaterModelPreview::onLoDSourceCommit(S32 lod) S32 index = lod_source_combo->getCurrentIndex(); if (index == LLModelPreview::MESH_OPTIMIZER_AUTO + || index == LLModelPreview::GENERATE // Improved LOD generation || index == LLModelPreview::MESH_OPTIMIZER_SLOPPY || index == LLModelPreview::MESH_OPTIMIZER_COMBINE) { //rebuild LoD to update triangle counts diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 7409858256..5ac780296c 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -5121,6 +5121,34 @@ void LLPanelPreferenceSkins::apply() gSavedSettings.setBOOL("ResetToolbarSettings", TRUE); } + if (m_Skin == "starlight" || m_Skin == "starlightcui") + { + std::string noteMessage; + + if (gSavedSettings.getBOOL("ShowMenuBarLocation")) + { + noteMessage = LLTrans::getString("skin_defaults_starlight_location"); + gSavedSettings.setBOOL("ShowMenuBarLocation", FALSE); + } + + if (!gSavedSettings.getBOOL("ShowNavbarNavigationPanel")) + { + if (!noteMessage.empty()) + { + noteMessage += "\n"; + } + noteMessage += LLTrans::getString("skin_defaults_starlight_navbar"); + gSavedSettings.setBOOL("ShowNavbarNavigationPanel", TRUE); + } + + if (!noteMessage.empty()) + { + LLSD args; + args["MESSAGE"] = noteMessage; + LLNotificationsUtil::add("SkinDefaultsChangeSettings", args, LLSD(), boost::bind(&LLPanelPreferenceSkins::showSkinChangeNotification, this)); + return; + } + } // showSkinChangeNotification(); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 9464bcd770..1061bdb6ec 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -2347,6 +2347,8 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region) LLTextBox* region_landtype = getChild("region_landtype_text"); region_landtype->setText(region->getLocalizedSimProductName()); + + getChild("reset_covenant")->setEnabled(gAgent.isGodlike() || (region && region->canManageEstate())); // let the parent class handle the general data collection. bool rv = LLPanelRegionInfo::refreshFromRegion(region); diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index ac78e06a4e..6401d8586e 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -510,7 +510,7 @@ void LLInspectAvatar::onClickMuteVolume() LLMuteList* mute_list = LLMuteList::getInstance(); bool is_muted = mute_list->isMuted(mAvatarID, LLMute::flagVoiceChat); - LLMute mute(mAvatarID, mAvatarName.getDisplayName(), LLMute::AGENT); + LLMute mute(mAvatarID, mAvatarName.getUserName(), LLMute::AGENT); if (!is_muted) { mute_list->add(mute, LLMute::flagVoiceChat); diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 730e67ddac..c270075624 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -28,18 +28,20 @@ #include "llinspectobject.h" // Viewer +#include "llagent.h" // To standup #include "llfloatersidepanelcontainer.h" #include "llinspect.h" #include "llmediaentry.h" -#include "llnotificationsutil.h" // *TODO: Eliminate, add LLNotificationsUtil wrapper #include "llselectmgr.h" #include "llslurl.h" #include "llviewermenu.h" // handle_object_touch(), handle_buy() #include "llviewermedia.h" #include "llviewermediafocus.h" #include "llviewerobjectlist.h" // to select the requested object +#include "llvoavatarself.h" // [RLVa:KB] - Checked: 2010-02-27 (RLVa-1.2.0c) #include "rlvactions.h" +#include "rlvhandler.h" #include "rlvcommon.h" #include "lltoolpie.h" // [/RLVa:KB] @@ -662,7 +664,37 @@ void LLInspectObject::onClickTouch() void LLInspectObject::onClickSit() { - handle_object_sit_or_stand(); + bool is_sitting = false; + if (mObjectSelection) + { + LLSelectNode* node = mObjectSelection->getFirstRootNode(); + if (node && node->mValid) + { + LLViewerObject* root_object = node->getObject(); + if (root_object + && isAgentAvatarValid() + && gAgentAvatarp->isSitting() + && gAgentAvatarp->getRoot() == root_object) + { + is_sitting = true; + } + } + } + + if (is_sitting) + { + // RLVa fix + //gAgent.standUp(); + if (!rlv_handler_t::isEnabled() || RlvActions::canStand()) + { + gAgent.standUp(); + } + // + } + else + { + handle_object_sit(mObjectID); + } closeFloater(); } diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp index ec04107403..74452fc32b 100644 --- a/indra/newview/llinventorylistitem.cpp +++ b/indra/newview/llinventorylistitem.cpp @@ -299,31 +299,41 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem applyXUILayout(icon_params, this); mIconCtrl = LLUICtrlFactory::create(icon_params); - if (mIconCtrl) - { - addChild(mIconCtrl); - } - else + if (!mIconCtrl) { LLIconCtrl::Params icon_params; icon_params.name = "item_icon"; mIconCtrl = LLUICtrlFactory::create(icon_params); } + if (mIconCtrl) + { + addChild(mIconCtrl); + } + else + { + LL_ERRS() << "Failed to create mIconCtrl" << LL_ENDL; + } + LLTextBox::Params text_params(params.item_name); applyXUILayout(text_params, this); mTitleCtrl = LLUICtrlFactory::create(text_params); - if (mTitleCtrl) + if (!mTitleCtrl) { - addChild(mTitleCtrl); - } - else - { - LLTextBox::Params text_aprams; + LLTextBox::Params text_params; text_params.name = "item_title"; mTitleCtrl = LLUICtrlFactory::create(text_params); } + + if (mTitleCtrl) + { + addChild(mTitleCtrl); + } + else + { + LL_ERRS() << "Failed to create mTitleCtrl" << LL_ENDL; + } } class WidgetVisibilityChanger diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 3b694803ad..ff138dc229 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -295,7 +295,9 @@ void LLLoginInstance::constructAuthParams(LLPointer user_credentia mRequestData["options"] = requested_options; mRequestData["http_params"] = http_params; //#if LL_RELEASE_FOR_DOWNLOAD -// mRequestData["wait_for_updater"] = !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !LLAppViewer::instance()->isUpdaterMissing(); +// mRequestData["wait_for_updater"] = !gSavedSettings.getBOOL("CmdLineSkipUpdater") +// && !LLAppViewer::instance()->isUpdaterMissing() +// && !gNonInteractive; //#else mRequestData["wait_for_updater"] = false; //#endif diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index 9786e8f857..cbeeff5404 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -92,6 +92,7 @@ bool LLModelPreview::sIgnoreLoadedCallback = false; // const F32 SKIN_WEIGHT_CAMERA_DISTANCE = 16.f; +#include "glod/glod.h" // More flexible LOD generation // mesh loader suffix configuration //static const std::array LLModelPreview::sSuffixVarNames @@ -103,6 +104,25 @@ const std::array LLModelPreview::sSuffixVarNames "FSMeshPhysicsSuffix" }; // + +// More flexible LOD generation +BOOL stop_gloderror() +{ + GLuint error = glodGetError(); + + if (error != GLOD_NO_ERROR) + { + std::ostringstream out; + out << "GLOD error detected, cannot generate LOD (try another method?): " << std::hex << error; + LL_WARNS("MeshUpload") << out.str() << LL_ENDL; + LLFloaterModelPreview::addStringToLog(out, true); + return TRUE; + } + + return FALSE; +} +// + LLViewerFetchedTexture* bindMaterialDiffuseTexture(const LLImportMaterial& material) { LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(material.getDiffuseMap(), FTT_DEFAULT, TRUE, LLGLTexture::BOOST_PREVIEW); @@ -222,6 +242,12 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp) mLoadState = LLModelLoader::STARTING; mGroup = 0; mLODFrozen = false; + // Improved LOD generation + mBuildShareTolerance = 0.f; + mBuildQueueMode = GLOD_QUEUE_GREEDY; + mBuildBorderMode = GLOD_BORDER_UNLOCK; + mBuildOperator = GLOD_OPERATOR_EDGE_COLLAPSE; + // mUVGuideTexture = LLViewerTextureManager::getFetchedTextureFromFile(gSavedSettings.getString("FSMeshPreviewUVGuideFile"), FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_PREVIEW); // - Add UV guide overlay to pmesh preview for (U32 i = 0; i < LLModel::NUM_LODS; ++i) @@ -234,7 +260,7 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp) mViewOption["show_textures"] = false; mFMP = fmp; - + glodInit(); // Improved LOD generation mHasPivot = false; mModelPivot = LLVector3(0.0f, 0.0f, 0.0f); @@ -918,7 +944,12 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable } mLODFile[lod] = filename; - + // Improved LOD generation + if (lod == LLModel::LOD_HIGH) + { + clearGLODGroup(); + } + // std::map joint_alias_map; getJointAliases(joint_alias_map); @@ -1061,12 +1092,31 @@ void LLModelPreview::clearIncompatible(S32 lod) mBaseModel = mModel[lod]; mBaseScene = mScene[lod]; mVertexBuffer[5].clear(); + clearGLODGroup(); // Improved LOD generation } } } } } +// Improved LOD generation +void LLModelPreview::clearGLODGroup() +{ + if (mGroup) + { + for (std::map, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter) + { + glodDeleteObject(iter->second); + stop_gloderror(); + } + mObject.clear(); + + glodDeleteGroup(mGroup); + stop_gloderror(); + mGroup = 0; + } +} +// void LLModelPreview::loadModelCallback(S32 loaded_lod) { assert_main_thread(); @@ -1220,6 +1270,7 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod) } mBaseModel = mModel[loaded_lod]; + clearGLODGroup(); // Improved LOD generation mBaseScene = mScene[loaded_lod]; mVertexBuffer[5].clear(); @@ -1450,6 +1501,453 @@ void LLModelPreview::restoreNormals() updateStatusMessages(); } +// Improved LOD generation +// Restore the GLOD entry point. +// There would appear to be quite a lot of commonality which would be well suited to refactoring but +// LL are still playing with Mesh Optimiser code. +void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit) +{ + // Allow LoD from -1 to LLModel::LOD_PHYSICS + if (which_lod < -1 || which_lod > LLModel::NUM_LODS - 1) + { + std::ostringstream out; + out << "Invalid level of detail: " << which_lod; + LL_WARNS() << out.str() << LL_ENDL; + LLFloaterModelPreview::addStringToLog(out, false); + assert(which_lod >= -1 && which_lod < LLModel::NUM_LODS); + return; + } + + if (mBaseModel.empty()) + { + return; + } + + LLVertexBuffer::unbind(); + + LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; + + if (shader) + { + shader->unbind(); + } + + stop_gloderror(); + static U32 cur_name = 1; + + S32 limit = -1; + + U32 triangle_count = 0; + + U32 instanced_triangle_count = 0; + + //get the triangle count for the whole scene + for (LLModelLoader::scene::iterator iter = mBaseScene.begin(), endIter = mBaseScene.end(); iter != endIter; ++iter) + { + for (LLModelLoader::model_instance_list::iterator instance = iter->second.begin(), end_instance = iter->second.end(); instance != end_instance; ++instance) + { + LLModel* mdl = instance->mModel; + if (mdl) + { + instanced_triangle_count += mdl->getNumTriangles(); + } + } + } + + //get the triangle count for the non-instanced set of models + for (U32 i = 0; i < mBaseModel.size(); ++i) + { + triangle_count += mBaseModel[i]->getNumTriangles(); + } + + //get ratio of uninstanced triangles to instanced triangles + F32 triangle_ratio = (F32)triangle_count / (F32)instanced_triangle_count; + + U32 base_triangle_count = triangle_count; + + U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; + + U32 lod_mode = 0; + + F32 lod_error_threshold = 0; + + // The LoD should be in range from Lowest to High + if (which_lod > -1 && which_lod < NUM_LOD) + { + LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]); + if (iface) + { + lod_mode = iface->getFirstSelectedIndex(); + } + + lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal(); + } + + if (which_lod != -1) + { + mRequestedLoDMode[which_lod] = lod_mode; + } + + if (lod_mode == 0) + { + lod_mode = GLOD_TRIANGLE_BUDGET; + + // The LoD should be in range from Lowest to High + if (which_lod > -1 && which_lod < NUM_LOD) + { + limit = mFMP->childGetValue("lod_triangle_limit_" + lod_name[which_lod]).asInteger(); + //convert from "scene wide" to "non-instanced" triangle limit + limit = (S32)((F32)limit*triangle_ratio); + } + } + else + { + lod_mode = GLOD_ERROR_THRESHOLD; + } + + bool object_dirty = false; + + if (mGroup == 0) + { + object_dirty = true; + mGroup = cur_name++; + glodNewGroup(mGroup); + } + + if (object_dirty) + { + for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter) + { //build GLOD objects for each model in base model list + LLModel* mdl = *iter; + + if (mObject[mdl] != 0) + { + glodDeleteObject(mObject[mdl]); + } + + mObject[mdl] = cur_name++; + + glodNewObject(mObject[mdl], mGroup, GLOD_DISCRETE); + stop_gloderror(); + + if (iter == mBaseModel.begin() && !mdl->mSkinWeights.empty()) + { //regenerate vertex buffer for skinned models to prevent animation feedback during LOD generation + mVertexBuffer[5].clear(); + } + + if (mVertexBuffer[5].empty()) + { + genBuffers(5, false); + } + + U32 tri_count = 0; + for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i) + { + LLVertexBuffer* buff = mVertexBuffer[5][mdl][i]; + buff->setBuffer(type_mask & buff->getTypeMask()); + + U32 num_indices = mVertexBuffer[5][mdl][i]->getNumIndices(); + if (num_indices > 2) + { + // Fix glod so it works when just using the opengl core profile + //glodInsertElements(mObject[mdl], i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, (U8*)mVertexBuffer[5][mdl][i]->getIndicesPointer(), 0, 0.f); + LLStrider vertex_strider; + LLStrider normal_strider; + LLStrider tc_strider; + + LLStrider< U16 > index_strider; + buff->getIndexStrider( index_strider ); + + glodVBO vbo = {}; + + if( buff->hasDataType( LLVertexBuffer::TYPE_VERTEX ) ) + { + buff->getVertexStrider( vertex_strider ); + vbo.mV.p = vertex_strider.get(); + vbo.mV.size = 3; + vbo.mV.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_VERTEX ]; + vbo.mV.type = GL_FLOAT; + } + if( buff->hasDataType( LLVertexBuffer::TYPE_NORMAL ) ) + { + buff->getNormalStrider( normal_strider ); + vbo.mN.p = normal_strider.get(); + vbo.mN.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_NORMAL ]; + vbo.mN.type = GL_FLOAT; + } + if( buff->hasDataType( LLVertexBuffer::TYPE_TEXCOORD0 ) ) + { + buff->getTexCoord0Strider( tc_strider ); + vbo.mT.p = tc_strider.get(); + vbo.mT.size = 2; + vbo.mT.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_TEXCOORD0 ]; + vbo.mT.type = GL_FLOAT; + } + + glodInsertElements( mObject[ mdl ], i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, (U8*)index_strider.get(), 0, 0.f, &vbo ); + // + } + tri_count += num_indices / 3; + stop_gloderror(); + } + + glodBuildObject(mObject[mdl]); + stop_gloderror(); + } + } + + + S32 start = LLModel::LOD_HIGH; + S32 end = 0; + + if (which_lod != -1) + { + start = end = which_lod; + } + + mMaxTriangleLimit = base_triangle_count; + + for (S32 lod = start; lod >= end; --lod) + { + if (which_lod == -1) + { + if (lod < start) + { + triangle_count /= decimation; + } + } + else + { + if (enforce_tri_limit) + { + triangle_count = limit; + } + else + { + for (S32 j = LLModel::LOD_HIGH; j>which_lod; --j) + { + triangle_count /= decimation; + } + } + } + + mModel[lod].clear(); + mModel[lod].resize(mBaseModel.size()); + mVertexBuffer[lod].clear(); + + U32 actual_tris = 0; + U32 actual_verts = 0; + U32 submeshes = 0; + + mRequestedTriangleCount[lod] = (S32)((F32)triangle_count / triangle_ratio); + mRequestedErrorThreshold[lod] = lod_error_threshold; + + glodGroupParameteri(mGroup, GLOD_ADAPT_MODE, lod_mode); + stop_gloderror(); + + glodGroupParameteri(mGroup, GLOD_ERROR_MODE, GLOD_OBJECT_SPACE_ERROR); + stop_gloderror(); + + glodGroupParameterf(mGroup, GLOD_OBJECT_SPACE_ERROR_THRESHOLD, lod_error_threshold); + stop_gloderror(); + + if (lod_mode != GLOD_TRIANGLE_BUDGET) + { + glodGroupParameteri(mGroup, GLOD_MAX_TRIANGLES, 0); + } + else + { + //SH-632: always add 1 to desired amount to avoid decimating below desired amount + glodGroupParameteri(mGroup, GLOD_MAX_TRIANGLES, triangle_count + 1); + } + + stop_gloderror(); + glodAdaptGroup(mGroup); + stop_gloderror(); + + for (U32 mdl_idx = 0; mdl_idx < mBaseModel.size(); ++mdl_idx) + { + LLModel* base = mBaseModel[mdl_idx]; + + GLint patch_count = 0; + glodGetObjectParameteriv(mObject[base], GLOD_NUM_PATCHES, &patch_count); + stop_gloderror(); + + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + mModel[lod][mdl_idx] = new LLModel(volume_params, 0.f); + + std::string name = base->mLabel + getLodSuffix(lod); + + mModel[lod][mdl_idx]->mLabel = name; + mModel[lod][mdl_idx]->mSubmodelID = base->mSubmodelID; + + GLint* sizes = new GLint[patch_count * 2]; + glodGetObjectParameteriv(mObject[base], GLOD_PATCH_SIZES, sizes); + stop_gloderror(); + + GLint* names = new GLint[patch_count]; + glodGetObjectParameteriv(mObject[base], GLOD_PATCH_NAMES, names); + stop_gloderror(); + + mModel[lod][mdl_idx]->setNumVolumeFaces(patch_count); + + LLModel* target_model = mModel[lod][mdl_idx]; + + for (GLint i = 0; i < patch_count; ++i) + { + type_mask = mVertexBuffer[5][base][i]->getTypeMask(); + + LLPointer buff = new LLVertexBuffer(type_mask, 0); + + if (sizes[i * 2 + 1] > 0 && sizes[i * 2] > 0) + { + if (!buff->allocateBuffer(sizes[i * 2 + 1], sizes[i * 2], true)) + { + // Todo: find a way to stop preview in this case instead of crashing + LL_ERRS() << "Failed buffer allocation during preview LOD generation." + << " Vertices: " << sizes[i * 2 + 1] + << " Indices: " << sizes[i * 2] << LL_ENDL; + } + buff->setBuffer(type_mask); + // Fix glod so it works when just using the opengl core profile + //glodFillElements(mObject[base], names[i], GL_UNSIGNED_SHORT, (U8*)buff->getIndicesPointer()); + LLStrider vertex_strider; + LLStrider normal_strider; + LLStrider tc_strider; + + LLStrider< U16 > index_strider; + buff->getIndexStrider( index_strider ); + + glodVBO vbo = {}; + + if( buff->hasDataType( LLVertexBuffer::TYPE_VERTEX ) ) + { + buff->getVertexStrider( vertex_strider ); + vbo.mV.p = vertex_strider.get(); + vbo.mV.size = 3; + vbo.mV.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_VERTEX ]; + vbo.mV.type = GL_FLOAT; + } + if( buff->hasDataType( LLVertexBuffer::TYPE_NORMAL ) ) + { + buff->getNormalStrider( normal_strider ); + vbo.mN.p = normal_strider.get(); + vbo.mN.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_NORMAL ]; + vbo.mN.type = GL_FLOAT; + } + if( buff->hasDataType( LLVertexBuffer::TYPE_TEXCOORD0 ) ) + { + buff->getTexCoord0Strider( tc_strider ); + vbo.mT.p = tc_strider.get(); + vbo.mT.size = 2; + vbo.mT.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_TEXCOORD0 ]; + vbo.mT.type = GL_FLOAT; + } + + glodFillElements( mObject[ base ], names[ i ], GL_UNSIGNED_SHORT, (U8*)index_strider.get(), &vbo ); + // + stop_gloderror(); + } + else + { + // This face was eliminated or we failed to allocate buffer, + // attempt to create a dummy triangle (one vertex, 3 indices, all 0) + buff->allocateBuffer(1, 3, true); + memset((U8*)buff->getMappedData(), 0, buff->getSize()); + // Fix when running with opengl core profile + //memset((U8*)buff->getIndicesPointer(), 0, buff->getIndicesSize()); + LLStrider< U16 > index_strider; + buff->getIndexStrider( index_strider ); + + memset( (U8*)index_strider.get(), 0, buff->getIndicesSize() ); + // + } + + buff->validateRange(0, buff->getNumVerts() - 1, buff->getNumIndices(), 0); + + LLStrider pos; + LLStrider norm; + LLStrider tc; + LLStrider index; + + buff->getVertexStrider(pos); + if (type_mask & LLVertexBuffer::MAP_NORMAL) + { + buff->getNormalStrider(norm); + } + if (type_mask & LLVertexBuffer::MAP_TEXCOORD0) + { + buff->getTexCoord0Strider(tc); + } + + buff->getIndexStrider(index); + + target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices()); + actual_tris += buff->getNumIndices() / 3; + actual_verts += buff->getNumVerts(); + ++submeshes; + + if (!validate_face(target_model->getVolumeFace(names[i]))) + { + std::ostringstream out; + out << "Invalid face generated during LOD generation."; + LLFloaterModelPreview::addStringToLog(out,true); + LL_ERRS() << out.str() << LL_ENDL; + } + } + + //blind copy skin weights and just take closest skin weight to point on + //decimated mesh for now (auto-generating LODs with skin weights is still a bit + //of an open problem). + target_model->mPosition = base->mPosition; + target_model->mSkinWeights = base->mSkinWeights; + target_model->mSkinInfo = base->mSkinInfo; + //copy material list + target_model->mMaterialList = base->mMaterialList; + + if (!validate_model(target_model)) + { + LL_ERRS() << "Invalid model generated when creating LODs" << LL_ENDL; + } + + delete[] sizes; + delete[] names; + } + + //rebuild scene based on mBaseScene + mScene[lod].clear(); + mScene[lod] = mBaseScene; + + for (U32 i = 0; i < mBaseModel.size(); ++i) + { + LLModel* mdl = mBaseModel[i]; + LLModel* target = mModel[lod][i]; + if (target) + { + for (LLModelLoader::scene::iterator iter = mScene[lod].begin(); iter != mScene[lod].end(); ++iter) + { + for (U32 j = 0; j < iter->second.size(); ++j) + { + if (iter->second[j].mModel == mdl) + { + iter->second[j].mModel = target; + } + } + } + } + } + } + + LLVertexBuffer::unbind(); + if (shader) + { + shader->bind(); + } + refresh(); // refresh once to make sure render gets called with the updated vbos +} +// + // Runs per object, but likely it is a better way to run per model+submodels // returns a ratio of base model indices to resulting indices // returns -1 in case of failure @@ -4368,8 +4866,13 @@ bool LLModelPreview::lodQueryCallback() { S32 lod = preview->mLodsQuery.back(); preview->mLodsQuery.pop_back(); +// Improved LOD generation +#ifdef USE_GLOD_AS_DEFAULT + preview->genGlodLODs(lod, 3, false); +#else preview->genMeshOptimizerLODs(lod, MESH_OPTIMIZER_AUTO, 3, false); - +#endif +// if (preview->mLookUpLodFiles && (lod == LLModel::LOD_HIGH)) { preview->lookupLODModelFiles(LLModel::LOD_HIGH); @@ -4383,9 +4886,21 @@ bool LLModelPreview::lodQueryCallback() return true; } +// Improved LOD generation +void LLModelPreview::onLODGLODParamCommit(S32 lod, bool enforce_tri_limit) +{ + if (mFMP && !mLODFrozen) + { + genGlodLODs(lod, 3, enforce_tri_limit); + mFMP->refresh(); + refresh(); + mDirty = true; + } + +} void LLModelPreview::onLODMeshOptimizerParamCommit(S32 requested_lod, bool enforce_tri_limit, S32 mode) { - if (!mLODFrozen) + if (mFMP && !mLODFrozen) // minor sidestep of potential crash { genMeshOptimizerLODs(requested_lod, mode, 3, enforce_tri_limit); mFMP->refresh(); // BUG-231970 Fix b0rken upload floater refresh diff --git a/indra/newview/llmodelpreview.h b/indra/newview/llmodelpreview.h index 30c9afe842..c3b56ba8f2 100644 --- a/indra/newview/llmodelpreview.h +++ b/indra/newview/llmodelpreview.h @@ -128,6 +128,7 @@ public: MESH_OPTIMIZER_AUTO, // automatically selects method based on model or face MESH_OPTIMIZER_COMBINE, // combines faces into a single model, simplifies, then splits back into faces MESH_OPTIMIZER_SLOPPY, // uses sloppy method, works per face + GENERATE, // Use GLOD Improved LOD generation USE_LOD_ABOVE, } eLoDMode; @@ -165,6 +166,7 @@ public: void loadModelCallback(S32 lod); bool lodsReady() { return !mGenLOD && mLodsQuery.empty(); } void queryLODs() { mGenLOD = true; }; + void genGlodLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false); void genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 decimation = 3, bool enforce_tri_limit = false); void generateNormals(); void restoreNormals(); @@ -175,6 +177,8 @@ public: void clearIncompatible(S32 lod); void updateStatusMessages(); void updateLodControls(S32 lod); + void clearGLODGroup(); + void onLODGLODParamCommit(S32 lod, bool enforce_tri_limit); void onLODMeshOptimizerParamCommit(S32 lod, bool enforce_tri_limit, S32 mode); void addEmptyFace(LLModel* pTarget); @@ -272,6 +276,16 @@ protected: S32 mRequestedTriangleCount[LLModel::NUM_LODS]; F32 mRequestedErrorThreshold[LLModel::NUM_LODS]; F32 mRequestedCreaseAngle[LLModel::NUM_LODS]; + // Improved LOD generation + F32 mBuildShareTolerance; + U32 mBuildQueueMode; + U32 mBuildOperator; + U32 mBuildBorderMode; + U32 mRequestedBuildOperator[LLModel::NUM_LODS]; + U32 mRequestedQueueMode[LLModel::NUM_LODS]; + U32 mRequestedBorderMode[LLModel::NUM_LODS]; + F32 mRequestedShareTolerance[LLModel::NUM_LODS]; + // LLModelLoader* mModelLoader; diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 1912e15bf5..6be25911db 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -691,7 +691,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view) // Attach to movement controls. parent->removeChild(this); - // FIRE-9636: Resizable movement controls + // FIRE-9636: Resizable movement controls (for all skins except Starlight/CUI) //move_view->addChild(this); LLView* modes_container = move_view->findChildView("modes_container"); if (modes_container) diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index 5204a8083f..bf0e126ac9 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -237,7 +237,7 @@ void LLPanelBlockedList::onFilterEdit(const std::string& search_string) void LLPanelBlockedList::callbackBlockPicked(const uuid_vec_t& ids, const std::vector names) { if (names.empty() || ids.empty()) return; - LLMute mute(ids[0], names[0].getAccountName(), LLMute::AGENT); + LLMute mute(ids[0], names[0].getUserName(), LLMute::AGENT); LLMuteList::getInstance()->add(mute); showPanelAndSelect(mute.mID); } diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 9d6f04d419..730bf9972d 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -125,6 +125,7 @@ BOOL LLPanelGroupGeneral::postBuild() mEditCharter->setCommitCallback(onCommitAny, this); mEditCharter->setFocusReceivedCallback(boost::bind(onFocusEdit, _1, this)); mEditCharter->setFocusChangedCallback(boost::bind(onFocusEdit, _1, this)); + mEditCharter->setContentTrusted(false); } // set up callbacks for copy URI and name buttons childSetCommitCallback("copy_uri", boost::bind(&LLPanelGroupGeneral::onCopyURI, this), NULL); @@ -676,7 +677,8 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) if (mEditCharter) { - mEditCharter->setText(gdatap->mCharter); + mEditCharter->setParseURLs(!mAllowEdit || !can_change_ident); + mEditCharter->setText(gdatap->mCharter); } // Re-add group member list on general panel diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 9c383a6f4b..22c8288722 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -94,44 +94,6 @@ LLPointer load_user_credentials(std::string &user_key) } } -// keys are lower case to be case insensitive so they are not always -// identical to names which retain user input, like: -// "AwEsOmE Resident" -> "awesome_resident" -std::string get_user_key_from_name(const std::string &username) -{ - std::string key = username; - LLStringUtil::trim(key); - LLStringUtil::toLower(key); - if (!LLGridManager::getInstance()->isSystemGrid()) - { - size_t separator_index = username.find_first_of(" "); - if (separator_index == username.npos) - { - // CRED_IDENTIFIER_TYPE_ACCOUNT - return key; - } - } - // CRED_IDENTIFIER_TYPE_AGENT - size_t separator_index = username.find_first_of(" ._"); - std::string first = username.substr(0, separator_index); - std::string last; - if (separator_index != username.npos) - { - last = username.substr(separator_index + 1, username.npos); - LLStringUtil::trim(last); - } - else - { - // ...on Linden grids, single username users as considered to have - // last name "Resident" - // *TODO: Make login.cgi support "account_name" like above - last = "resident"; - } - - key = first + "_" + last; - return key; -} - class LLLoginLocationAutoHandler : public LLCommandHandler { public: @@ -363,11 +325,10 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, username_combo->setReturnCallback(boost::bind(&LLPanelLogin::onClickConnect, this)); username_combo->setKeystrokeOnEsc(TRUE); - if (!mFirstLoginThisInstall) - { - LLCheckBoxCtrl* remember_name = getChild("remember_name"); - remember_name->setCommitCallback(boost::bind(&LLPanelLogin::onRememberUserCheck, this)); - } + + LLCheckBoxCtrl* remember_name = getChild("remember_name"); + remember_name->setCommitCallback(boost::bind(&LLPanelLogin::onRememberUserCheck, this)); + getChild("remember_password")->setCommitCallback(boost::bind(&LLPanelLogin::onRememberPasswordCheck, this)); } void LLPanelLogin::addFavoritesToStartLocation() @@ -440,10 +401,22 @@ void LLPanelLogin::addFavoritesToStartLocation() combo->addSeparator(); LL_DEBUGS() << "Loading favorites for " << iter->first << LL_ENDL; LLSD user_llsd = iter->second; + bool update_password_setting = true; for (LLSD::array_const_iterator iter1 = user_llsd.beginArray(); iter1 != user_llsd.endArray(); ++iter1) { - std::string label = (*iter1)["name"].asString(); + if ((*iter1).has("save_password")) + { + bool save_password = (*iter1)["save_password"].asBoolean(); + gSavedSettings.setBOOL("RememberPassword", save_password); + if (!save_password) + { + getChild("connect_btn")->setEnabled(false); + } + update_password_setting = false; + } + + std::string label = (*iter1)["name"].asString(); std::string value = (*iter1)["slurl"].asString(); if(label != "" && value != "") { @@ -455,6 +428,10 @@ void LLPanelLogin::addFavoritesToStartLocation() } } } + if (update_password_setting) + { + gSavedSettings.setBOOL("UpdateRememberPasswordSetting", TRUE); + } break; } if (combo->getValue().asString().empty()) @@ -567,21 +544,12 @@ void LLPanelLogin::populateFields(LLPointer credential, bool remem LL_WARNS() << "Attempted fillFields with no login view shown" << LL_ENDL; return; } - if (sInstance->mFirstLoginThisInstall) - { - LLUICtrl* remember_check = sInstance->getChild("remember_check"); - remember_check->setValue(remember_psswrd); - // no list to populate - setFields(credential); - } - else - { - sInstance->getChild("remember_name")->setValue(remember_user); - LLUICtrl* remember_password = sInstance->getChild("remember_password"); - remember_password->setValue(remember_user && remember_psswrd); - remember_password->setEnabled(remember_user); - sInstance->populateUserList(credential); - } + + sInstance->getChild("remember_name")->setValue(remember_user); + LLUICtrl* remember_password = sInstance->getChild("remember_password"); + remember_password->setValue(remember_user && remember_psswrd); + remember_password->setEnabled(remember_user); + sInstance->populateUserList(credential); } //static @@ -692,39 +660,6 @@ void LLPanelLogin::getFields(LLPointer& credential, LL_INFOS("Credentials", "Authentication") << "retrieving username:" << username << LL_ENDL; // determine if the username is a first/last form or not. size_t separator_index = username.find_first_of(' '); - if (separator_index == username.npos - && !LLGridManager::getInstance()->isSystemGrid()) - { - LL_INFOS("Credentials", "Authentication") << "account: " << username << LL_ENDL; - // single username, so this is a 'clear' identifier - identifier["type"] = CRED_IDENTIFIER_TYPE_ACCOUNT; - identifier["account_name"] = username; - - if (LLPanelLogin::sInstance->mPasswordModified) - { - // password is plaintext - authenticator["type"] = CRED_AUTHENTICATOR_TYPE_CLEAR; - authenticator["secret"] = password; - } - else - { - credential = load_user_credentials(username); - if (credential.notNull()) - { - authenticator = credential->getAuthenticator(); - if (authenticator.emptyMap()) - { - // Likely caused by user trying to log in to non-system grid - // with unsupported name format, just retry - LL_WARNS() << "Authenticator failed to load for: " << username << LL_ENDL; - // password is plaintext - authenticator["type"] = CRED_AUTHENTICATOR_TYPE_CLEAR; - authenticator["secret"] = password; - } - } - } - } - else { // Be lenient in terms of what separators we allow for two-word names // and allow legacy users to login with firstname.lastname @@ -775,16 +710,9 @@ void LLPanelLogin::getFields(LLPointer& credential, } } credential = gSecAPIHandler->createCredential(LLGridManager::getInstance()->getGrid(), identifier, authenticator); - if (!sInstance->mFirstLoginThisInstall) - { - remember_psswrd = sInstance->getChild("remember_password")->getValue(); - remember_user = sInstance->getChild("remember_name")->getValue(); - } - else - { - remember_psswrd = sInstance->getChild("remember_check")->getValue(); - remember_user = remember_psswrd; // on panel_login_first "remember_check" is named as 'remember me' - } + + remember_psswrd = sInstance->getChild("remember_password")->getValue(); + remember_user = sInstance->getChild("remember_name")->getValue(); } @@ -1147,17 +1075,18 @@ void LLPanelLogin::onUserListCommit(void*) } // static -// At the moment only happens if !mFirstLoginThisInstall void LLPanelLogin::onRememberUserCheck(void*) { - if (sInstance && !sInstance->mFirstLoginThisInstall) + if (sInstance) { LLCheckBoxCtrl* remember_name(sInstance->getChild("remember_name")); LLCheckBoxCtrl* remember_psswrd(sInstance->getChild("remember_password")); LLComboBox* user_combo(sInstance->getChild("username_combo")); bool remember = remember_name->getValue().asBoolean(); - if (user_combo->getCurrentIndex() != -1 && !remember) + if (!sInstance->mFirstLoginThisInstall + && user_combo->getCurrentIndex() != -1 + && !remember) { remember = true; remember_name->setValue(true); @@ -1171,6 +1100,14 @@ void LLPanelLogin::onRememberUserCheck(void*) } } +void LLPanelLogin::onRememberPasswordCheck(void*) +{ + if (sInstance) + { + gSavedSettings.setBOOL("UpdateRememberPasswordSetting", TRUE); + } +} + // static void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) { diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index f832507b09..12b1c368ed 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -109,6 +109,7 @@ private: static void onUserNameTextEnty(void*); static void onUserListCommit(void*); static void onRememberUserCheck(void*); + static void onRememberPasswordCheck(void*); static void onPassKey(LLLineEditor* caller, void* user_data); static void updateServerCombo(); diff --git a/indra/newview/llpanelloginlistener.cpp b/indra/newview/llpanelloginlistener.cpp index 843a8ff41e..9aab0294b4 100644 --- a/indra/newview/llpanelloginlistener.cpp +++ b/indra/newview/llpanelloginlistener.cpp @@ -50,7 +50,7 @@ LLPanelLoginListener::LLPanelLoginListener(LLPanelLogin* instance): void LLPanelLoginListener::onClickConnect(const LLSD&) const { - mPanel->onClickConnect(NULL); + mPanel->onClickConnect(false); } #endif diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 85760d5fe2..24bd275d8e 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -2290,6 +2290,18 @@ void LLPanelObject::sendPosition(BOOL btn_down) // Building spin controls for attachments // partly copied from llmaniptranslate.cpp to get the positioning right + //bool is_valid_pos = true; + //if (mObject->isAttachment()) + //{ + // LLVector3 delta_pos = mObject->getPositionEdit() - newpos; + // LLVector3d attachment_pos = regionp->getPosGlobalFromRegion(mObject->getPositionRegion() + delta_pos); + // is_valid_pos = LLWorld::getInstance()->positionRegionValidGlobal(attachment_pos); + //} + //else + //{ + // is_valid_pos = LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global); + //} + //if (is_valid_pos) if (mObject->isAttachment()) { LLVector3 old_position_local = mObject->getPosition(); @@ -2324,8 +2336,8 @@ void LLPanelObject::sendPosition(BOOL btn_down) LLSelectMgr::getInstance()->updateSelectionCenter(); } - // Building spin controls for attachments else if (LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global) ) + // Building spin controls for attachments { // send only if the position is changed, that is, the delta vector is not zero LLVector3d old_pos_global = mObject->getPositionGlobal(); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 225483b1d4..4a1c02afbb 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -360,7 +360,8 @@ public: // For notification when SIP online status changes. LLVoiceClient::getInstance()->addObserver(this); // Disconnect LLFriendCardsManager - //mInvObserver = new LLInventoryFriendCardObserver(this); + if (gSavedSettings.getBOOL("FSCreateCallingCards")) + mInvObserver = new LLInventoryFriendCardObserver(this); } ~LLFriendListUpdater() @@ -414,7 +415,7 @@ public: private: U32 mMask; // Disconnect LLFriendCardsManager - //LLInventoryFriendCardObserver* mInvObserver; + LLInventoryFriendCardObserver* mInvObserver{ nullptr }; bool mIsActive; /** diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 75318e4491..fe9d87181f 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -1122,7 +1122,8 @@ void LLPanelPlaces::togglePickPanel(BOOL visible) if (mPickPanel) { mPickPanel->setVisible(visible); - mPlaceProfile->setVisible(!visible); + // FIRE-31687: Place profile overlaps landmark panel in places floater when closing create pick panel + //mPlaceProfile->setVisible(!visible); updateVerbs(); } diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp index 852b39f442..17b8ec0683 100644 --- a/indra/newview/llpathfindingmanager.cpp +++ b/indra/newview/llpathfindingmanager.cpp @@ -61,7 +61,8 @@ #define CAP_SERVICE_NAVMESH_STATUS "NavMeshGenerationStatus" -#define CAP_SERVICE_OBJECT_LINKSETS "RegionObjects" +#define CAP_SERVICE_GET_OBJECT_LINKSETS "RegionObjects" +#define CAP_SERVICE_SET_OBJECT_LINKSETS "ObjectNavMeshProperties" #define CAP_SERVICE_TERRAIN_LINKSETS "TerrainNavMeshProperties" #define CAP_SERVICE_CHARACTERS "CharacterProperties" @@ -244,7 +245,7 @@ void LLPathfindingManager::requestGetLinksets(request_id_t pRequestId, object_re } else { - std::string objectLinksetsURL = getObjectLinksetsURLForCurrentRegion(); + std::string objectLinksetsURL = getRetrieveObjectLinksetsURLForCurrentRegion(); std::string terrainLinksetsURL = getTerrainLinksetsURLForCurrentRegion(); if (objectLinksetsURL.empty() || terrainLinksetsURL.empty()) { @@ -273,7 +274,7 @@ void LLPathfindingManager::requestSetLinksets(request_id_t pRequestId, const LLP { LLPathfindingObjectListPtr emptyLinksetListPtr; - std::string objectLinksetsURL = getObjectLinksetsURLForCurrentRegion(); + std::string objectLinksetsURL = getChangeObjectLinksetsURLForCurrentRegion(); std::string terrainLinksetsURL = getTerrainLinksetsURLForCurrentRegion(); if (objectLinksetsURL.empty() || terrainLinksetsURL.empty()) { @@ -755,9 +756,14 @@ std::string LLPathfindingManager::getRetrieveNavMeshURLForRegion(LLViewerRegion return getCapabilityURLForRegion(pRegion, CAP_SERVICE_RETRIEVE_NAVMESH); } -std::string LLPathfindingManager::getObjectLinksetsURLForCurrentRegion() const +std::string LLPathfindingManager::getRetrieveObjectLinksetsURLForCurrentRegion() const { - return getCapabilityURLForCurrentRegion(CAP_SERVICE_OBJECT_LINKSETS); + return getCapabilityURLForCurrentRegion(CAP_SERVICE_GET_OBJECT_LINKSETS); +} + +std::string LLPathfindingManager::getChangeObjectLinksetsURLForCurrentRegion() const +{ + return getCapabilityURLForCurrentRegion(CAP_SERVICE_SET_OBJECT_LINKSETS); } std::string LLPathfindingManager::getTerrainLinksetsURLForCurrentRegion() const diff --git a/indra/newview/llpathfindingmanager.h b/indra/newview/llpathfindingmanager.h index a44cd892da..bb44f780c8 100644 --- a/indra/newview/llpathfindingmanager.h +++ b/indra/newview/llpathfindingmanager.h @@ -122,7 +122,8 @@ private: std::string getNavMeshStatusURLForCurrentRegion() const; std::string getNavMeshStatusURLForRegion(LLViewerRegion *pRegion) const; std::string getRetrieveNavMeshURLForRegion(LLViewerRegion *pRegion) const; - std::string getObjectLinksetsURLForCurrentRegion() const; + std::string getRetrieveObjectLinksetsURLForCurrentRegion() const; + std::string getChangeObjectLinksetsURLForCurrentRegion() const; std::string getTerrainLinksetsURLForCurrentRegion() const; std::string getCharactersURLForCurrentRegion() const; std::string getAgentStateURLForRegion(LLViewerRegion *pRegion) const; diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index d799581de0..afda93c3a3 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -347,9 +347,6 @@ BOOL LLPreviewGesture::postBuild() LLTextBox* text; LLCheckBoxCtrl* check; - edit = getChild("name"); - edit->setKeystrokeCallback(onKeystrokeCommit, this); - edit = getChild("desc"); edit->setKeystrokeCallback(onKeystrokeCommit, this); @@ -482,9 +479,6 @@ BOOL LLPreviewGesture::postBuild() { getChild("desc")->setValue(item->getDescription()); getChild("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); - - getChild("name")->setValue(item->getName()); - getChild("name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); } return LLPreview::postBuild(); diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 14a9f4aa30..5da9533f46 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -694,8 +694,12 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force) LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky(); - LLVector4 sunDiffuse = LLVector4(psky->getSunlightColor().mV); - LLVector4 moonDiffuse = LLVector4(psky->getMoonlightColor().mV); + // Fix array out of bounds on assigning LLColor3() to llVector4() + // LLVector4 sunDiffuse = LLVector4(psky->getSunlightColor().mV); + // LLVector4 moonDiffuse = LLVector4(psky->getMoonlightColor().mV); + LLVector4 sunDiffuse = LLVector4(LLVector3(psky->getSunlightColor().mV)); + LLVector4 moonDiffuse = LLVector4(LLVector3(psky->getMoonlightColor().mV)); + // shader->uniform4fv(LLShaderMgr::SUNLIGHT_COLOR, sunDiffuse); shader->uniform4fv(LLShaderMgr::MOONLIGHT_COLOR, moonDiffuse); @@ -1026,12 +1030,39 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n std::set framenames; std::set notfound; + // expected and correct folder sctructure is to have + // three folders in widnlight's root: days, water, skies std::string base_path(gDirUtilp->getDirName(path)); std::string water_path(base_path); std::string sky_path(base_path); + std::string day_path(base_path); gDirUtilp->append(water_path, "water"); gDirUtilp->append(sky_path, "skies"); + gDirUtilp->append(day_path, "days"); + + if (!gDirUtilp->fileExists(day_path)) + { + LL_WARNS("SETTINGS") << "File " << name << ".xml is not in \"days\" folder." << LL_ENDL; + } + + if (!gDirUtilp->fileExists(water_path)) + { + LL_WARNS("SETTINGS") << "Failed to find accompaniying water folder for file " << name + << ".xml. Falling back to using default folder" << LL_ENDL; + + water_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight"); + gDirUtilp->append(water_path, "water"); + } + + if (!gDirUtilp->fileExists(sky_path)) + { + LL_WARNS("SETTINGS") << "Failed to find accompaniying skies folder for file " << name + << ".xml. Falling back to using default folder" << LL_ENDL; + + sky_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight"); + gDirUtilp->append(sky_path, "skies"); + } newsettings[SETTING_NAME] = name; diff --git a/indra/newview/llsky.h b/indra/newview/llsky.h index 8c0d70c16c..ec0de1fbfd 100644 --- a/indra/newview/llsky.h +++ b/indra/newview/llsky.h @@ -39,7 +39,6 @@ class LLViewerCamera; class LLVOWLSky; -class LLVOWLClouds; class LLSky diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 71bd44fba0..4c36c25056 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1685,7 +1685,7 @@ bool idle_startup() { // Generic failure message std::ostringstream emsg; - emsg << LLTrans::getString("LoginFailed") << "\n"; + emsg << LLTrans::getString("LoginFailedHeader") << "\n"; if(LLLoginInstance::getInstance()->authFailure()) { LL_INFOS("LLStartup") << "Login failed, LLLoginInstance::getResponse(): " @@ -1698,11 +1698,37 @@ bool idle_startup() std::string message_id = response["message_id"]; std::string message; // actual string to show the user - if(!message_id.empty() && LLTrans::findString(message, message_id, response["message_args"])) - { - // message will be filled in with the template and arguments - } - else if(!message_response.empty()) + bool localized_by_id = false; + if(!message_id.empty()) + { + LLSD message_args = response["message_args"]; + if (message_args.has("TIME") + && (message_id == "LoginFailedAcountSuspended" + || message_id == "LoginFailedAccountMaintenance")) + { + LLDate date; + std::string time_string; + if (date.fromString(message_args["TIME"].asString())) + { + LLSD args; + args["datetime"] = (S32)date.secondsSinceEpoch(); + LLTrans::findString(time_string, "LocalTime", args); + } + else + { + time_string = message_args["TIME"].asString() + " " + LLTrans::getString("PacificTime"); + } + + message_args["TIME"] = time_string; + } + // message will be filled in with the template and arguments + if (LLTrans::findString(message, message_id, message_args)) + { + localized_by_id = true; + } + } + + if(!localized_by_id && !message_response.empty()) { // *HACK: "no_inventory_host" sent as the message itself. // Remove this clause when server is sending message_id as well. @@ -3074,7 +3100,10 @@ bool idle_startup() FSFloaterWearableFavorites::initCategory(); // Bypass the calling card sync-crap to create the agent's calling card - LLFriendCardsManager::createAgentCallingCard(); + if (!gSavedSettings.getBOOL("FSCreateCallingCards")) + { + LLFriendCardsManager::createAgentCallingCard(); + } // Let the map know about the inventory. LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance(); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 19752c06b8..efa2306fa8 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -567,13 +567,6 @@ static bool handleRenderBumpChanged(const LLSD& newval) return true; } -static bool handleRenderDebugGLChanged(const LLSD& newvalue) -{ - gDebugGL = newvalue.asBoolean() || gDebugSession; - gGL.clearErrors(); - return true; -} - static bool handleRenderDebugPipelineChanged(const LLSD& newvalue) { gDebugPipeline = newvalue.asBoolean(); @@ -1176,7 +1169,6 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderVSyncEnable")->getSignal()->connect(boost::bind(&handleVSyncChanged, _2)); gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); - gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2)); gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2)); gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2)); // [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4 diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c553acaacc..dbb5331d53 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -478,7 +478,19 @@ void set_merchant_SLM_menu() // All other cases (new merchant, not merchant, migrated merchant): show the new Marketplace Listings menu and enable the tool gMenuHolder->getChild("MarketplaceListings")->setVisible(TRUE); LLCommand* command = LLCommandManager::instance().getCommand("marketplacelistings"); - gToolBarView->enableCommand(command->id(), true); + gToolBarView->enableCommand(command->id(), true); + + const LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); + if (marketplacelistings_id.isNull()) + { + U32 mkt_status = LLMarketplaceData::instance().getSLMStatus(); + bool is_merchant = (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT) || (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_MIGRATED_MERCHANT); + if (is_merchant) + { + gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, true); + LL_WARNS("SLM") << "Creating the marketplace listings folder for a merchant" << LL_ENDL; + } + } } void check_merchant_status(bool force) @@ -5285,29 +5297,15 @@ bool is_object_sittable() } } - // only works on pie menu -void handle_object_sit_or_stand() +void handle_object_sit(LLViewerObject *object, const LLVector3 &offset) { - LLPickInfo pick = LLToolPie::getInstance()->getPick(); - LLViewerObject *object = pick.getObject();; - if (!object || pick.mPickType == LLPickInfo::PICK_FLORA) - { - return; - } - - if (sitting_on_selection()) - { - gAgent.standUp(); - return; - } - // get object selection offset // if (object && object->getPCode() == LL_PCODE_VOLUME) // [RLVa:KB] - Checked: 2010-03-06 (RLVa-1.2.0c) | Modified: RLVa-1.2.0c if ( (object && object->getPCode() == LL_PCODE_VOLUME) && - ((!rlv_handler_t::isEnabled()) || (RlvActions::canSit(object, pick.mObjectOffset))) ) + ((!rlv_handler_t::isEnabled()) || (RlvActions::canSit(object, offset))) ) // [/RLVa:KB] { // [RLVa:KB] - Checked: 2010-08-29 (RLVa-1.2.1c) | Added: RLVa-1.2.1c @@ -5328,12 +5326,42 @@ void handle_object_sit_or_stand() gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); gMessageSystem->nextBlockFast(_PREHASH_TargetObject); gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); - gMessageSystem->addVector3Fast(_PREHASH_Offset, pick.mObjectOffset); + gMessageSystem->addVector3Fast(_PREHASH_Offset, offset); object->getRegion()->sendReliableMessage(); } } +void handle_object_sit_or_stand() +{ + LLPickInfo pick = LLToolPie::getInstance()->getPick(); + LLViewerObject *object = pick.getObject(); + if (!object || pick.mPickType == LLPickInfo::PICK_FLORA) + { + return; + } + + if (sitting_on_selection()) + { + gAgent.standUp(); + return; + } + + handle_object_sit(object, pick.mObjectOffset); +} + +void handle_object_sit(const LLUUID& object_id) +{ + LLViewerObject* obj = gObjectList.findObject(object_id); + if (!obj) + { + return; + } + + LLVector3 offset(0, 0, 0); + handle_object_sit(obj, offset); +} + void near_sit_down_point(BOOL success, void *) { if (success) @@ -7838,6 +7866,24 @@ class LLAvatarResetSkeletonAndAnimations : public view_listener_t } }; +class LLAvatarResetSelfSkeletonAndAnimations : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + if (avatar) + { + avatar->resetSkeleton(true); + } + else + { + gAgentAvatarp->resetSkeleton(true); + } + return true; + } +}; + + class LLAvatarAddContact : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -9673,6 +9719,7 @@ void setDoubleClickAction(const std::string& control) bool ignore_mask = true; conflictHandler.registerControl(control, index, click, key, mask, ignore_mask); + report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportEnabled")); } else { @@ -9683,6 +9730,7 @@ void setDoubleClickAction(const std::string& control) if (data.mMouse == click && data.mKey == key && data.mMask == mask) { conflictHandler.clearControl(control, i); + report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportDisabled")); } } } @@ -9690,7 +9738,7 @@ void setDoubleClickAction(const std::string& control) conflictHandler.saveToSettings(); } -bool isDoubleClickActionEnabled(const std::string control) +bool isDoubleClickActionEnabled(const std::string& control) { constexpr LLKeyConflictHandler::ESourceMode mode{ LLKeyConflictHandler::MODE_THIRD_PERSON }; constexpr EMouseClickType click{ EMouseClickType::CLICK_DOUBLELEFT }; @@ -12201,6 +12249,7 @@ void initialize_menus() view_listener_t::addMenu(new LLAvatarResetSkeleton(), "Avatar.ResetSkeleton"); view_listener_t::addMenu(new LLAvatarEnableResetSkeleton(), "Avatar.EnableResetSkeleton"); view_listener_t::addMenu(new LLAvatarResetSkeletonAndAnimations(), "Avatar.ResetSkeletonAndAnimations"); + view_listener_t::addMenu(new LLAvatarResetSelfSkeletonAndAnimations(), "Avatar.ResetSelfSkeletonAndAnimations"); enable.add("Avatar.IsMyProfileOpen", boost::bind(&my_profile_visible)); commit.add("Avatar.OpenMarketplace", boost::bind(&LLWeb::loadURLExternal, gSavedSettings.getString("MarketplaceURL"))); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index b13e38e561..256d7f8554 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -156,6 +156,7 @@ void handle_save_snapshot(void *); void handle_toggle_flycam(); void handle_object_sit_or_stand(); +void handle_object_sit(const LLUUID& object_id); void handle_give_money_dialog(); bool enable_pay_object(); bool enable_buy_object(); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 23c150ae29..8ad095d6e4 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -263,13 +263,13 @@ void LLFilePickerReplyThread::notify(const std::vector& filenames) LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) : LLFilePickerThread(filter, get_multiple), - mPlugin(plugin->getSharedPrt()) + mPlugin(plugin->getSharedPtr()) { } LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) : LLFilePickerThread(filter, proposed_name), - mPlugin(plugin->getSharedPrt()) + mPlugin(plugin->getSharedPtr()) { } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index a11fbe3011..65bedf92bb 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4250,6 +4250,13 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) // trigger a control event. U32 control_flags = gAgent.getControlFlags(); + // Rotation into both directions should cancel out + U32 mask = AGENT_CONTROL_YAW_POS | AGENT_CONTROL_YAW_NEG; + if ((control_flags & mask) == mask) + { + control_flags &= ~mask; + } + MASK key_mask = gKeyboard->currentMask(TRUE); if (key_mask & MASK_ALT || key_mask & MASK_CONTROL) @@ -7379,15 +7386,15 @@ void process_script_question(LLMessageSystem *msg, void **user_data) if (("ScriptTakeMoney" == script_perm.question) && has_not_only_debit) continue; - if (script_perm.question == "JoinAnExperience") - { // Some experience only permissions do not have an explicit permission bit. Add them here. - script_question += " " + LLTrans::getString("ForceSitAvatar") + "\n"; + if (LLTrans::getString(script_perm.question).empty()) + { + continue; } script_question += " " + LLTrans::getString(script_perm.question) + "\n"; } } - + args["QUESTIONS"] = script_question; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 4d65345c62..49b813fa69 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -530,6 +530,7 @@ void LLViewerObject::markDead() } } +// Add visible (rendered) face count to inspect S32 LLViewerObject::getNumVisibleFaces() const { int v{0}; @@ -537,13 +538,16 @@ S32 LLViewerObject::getNumVisibleFaces() const { for (int i = 0;i < mDrawable->getNumFaces();i++) { - if(mDrawable->getFace(i)->getTextureEntry()->getAlpha() != 0.f) + const LLFace* f = mDrawable->getFace(i); + if (f && f->getTextureEntry() && f->getTextureEntry()->getAlpha() != 0.0f) + { v++; + } } } return v; }; - +// void LLViewerObject::dump() const { diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 7bbc41783a..f80a65ca86 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -72,7 +72,7 @@ #ifdef LL_USESYSTEMLIBS #include #else -#include "zlib/zlib.h" +#include "zlib-ng/zlib.h" #endif #include "object_flags.h" diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 4dbca4dac4..13f193bb79 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -948,6 +948,7 @@ void LLOcclusionCullingGroup::setOcclusionState(U32 state, S32 mode /* = STATE_M break; case STATE_MODE_DIFF: + if (mOctreeNode) { LLSpatialSetOcclusionStateDiff setter(state); setter.traverse(mOctreeNode); @@ -955,6 +956,7 @@ void LLOcclusionCullingGroup::setOcclusionState(U32 state, S32 mode /* = STATE_M break; case STATE_MODE_BRANCH: + if (mOctreeNode) { LLSpatialSetOcclusionState setter(state); setter.traverse(mOctreeNode); @@ -1024,6 +1026,7 @@ void LLOcclusionCullingGroup::clearOcclusionState(U32 state, S32 mode /* = STATE break; case STATE_MODE_DIFF: + if (mOctreeNode) { LLSpatialClearOcclusionStateDiff clearer(state); clearer.traverse(mOctreeNode); @@ -1031,6 +1034,7 @@ void LLOcclusionCullingGroup::clearOcclusionState(U32 state, S32 mode /* = STATE break; case STATE_MODE_BRANCH: + if (mOctreeNode) { LLSpatialClearOcclusionState clearer(state); clearer.traverse(mOctreeNode); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index a093b1dedd..61067a0db0 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -3293,6 +3293,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("ObjectAnimation"); capabilityNames.append("ObjectMedia"); capabilityNames.append("ObjectMediaNavigate"); + capabilityNames.append("ObjectNavMeshProperties"); capabilityNames.append("ParcelPropertiesUpdate"); capabilityNames.append("ParcelVoiceInfoRequest"); capabilityNames.append("ProductInfoRequest"); diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 42dadb4d8f..e286aa2156 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -495,6 +495,7 @@ void send_viewer_stats(bool include_preferences) system["os"] = LLOSInfo::instance().getOSStringSimple(); system["cpu"] = gSysCPU.getCPUString(); system["address_size"] = ADDRESS_SIZE; + system["os_bitness"] = LLOSInfo::instance().getOSBitness(); unsigned char MACAddress[MAC_ADDRESS_BYTES]; LLUUID::getNodeID(MACAddress); std::string macAddressString = llformat("%02x-%02x-%02x-%02x-%02x-%02x", diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index ec38380bae..3741616f45 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1185,8 +1185,7 @@ BOOL LLViewerTextureList::createUploadFile(const std::string& filename, LLPointer image = LLImageFormatted::createFromType(codec); if (image.isNull()) { - // Pointer is null! - //image->setLastError("Couldn't open the image to be uploaded."); + LL_WARNS() << "Couldn't open the image to be uploaded." << LL_ENDL; return FALSE; } if (!image->load(filename)) diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index af6ab9d965..fb51639fec 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2423,6 +2423,7 @@ void LLViewerWindow::initWorldUI() gStatusBar->setShape(status_bar_container->getLocalRect()); // sync bg color with menu bar gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() ); + // add InBack so that gStatusBar won't be drawn over menu status_bar_container->addChildInBack(gStatusBar); status_bar_container->setVisible(TRUE); @@ -3682,6 +3683,11 @@ void LLViewerWindow::handleScrollWheel(S32 clicks) void LLViewerWindow::handleScrollHWheel(S32 clicks) { + if (LLAppViewer::instance()->quitRequested()) + { + return; + } + LLUI::getInstance()->resetMouseIdleTimer(); LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 46eb30a68f..16be14333e 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5287,7 +5287,12 @@ bool LLVOAvatar::updateCharacter(LLAgent &agent) } else if (!getParent() && isSitting() && !isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED)) { - getOffObject(); + // If we are starting up, motion might be loading + LLMotion *motionp = mMotionController.findMotion(ANIM_AGENT_SIT_GROUND_CONSTRAINED); + if (!motionp || !mMotionController.isMotionLoading(motionp)) + { + getOffObject(); + } } //-------------------------------------------------------------------- @@ -12087,7 +12092,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity() // place in the code. For now, this is a good spot as the complexity calculation // gets updated when rigging data arrives, so we can reliably identify rigged // attachments where the skinning information took a while to load. - if (attached_object->isHUDAttachment() && attached_object->mCheckRigOnHUD) + if (attached_object->isHUDAttachment() && attached_object->mCheckRigOnHUD && !attached_object->isTempAttachment()) { // check if the root object is rigged bool is_rigged = attached_object->isRiggedMesh(); diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h index a53f309e46..e7033290c7 100644 --- a/indra/newview/llvoground.h +++ b/indra/newview/llvoground.h @@ -49,7 +49,6 @@ public: /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); - void cleanupGL(); }; #endif // LL_LLVOGROUND_H diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index e998a25104..25168cc495 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -100,8 +100,12 @@ LLSkyTex::LLSkyTex() : void LLSkyTex::init(bool isShiny) { mIsShiny = isShiny; - mSkyData = new LLColor4[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION]; - mSkyDirs = new LLVector3[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION]; + // Compiler fix - make sure the array size is an integer value + // mSkyData = new LLColor4[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION]; + // mSkyDirs = new LLVector3[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION]; + mSkyData = new LLColor4[(U32)(SKYTEX_RESOLUTION * SKYTEX_RESOLUTION)]; + mSkyDirs = new LLVector3[(U32)(SKYTEX_RESOLUTION * SKYTEX_RESOLUTION)]; + // for (S32 i = 0; i < 2; ++i) { diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index fb290a1df4..4503c3bce8 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -111,8 +111,6 @@ S32 LLVOVolume::mRenderComplexity_current = 0; LLPointer LLVOVolume::sObjectMediaClient = NULL; LLPointer LLVOVolume::sObjectMediaNavigateClient = NULL; -extern BOOL gGLDebugLoggingEnabled; - // NaCl - Graphics crasher protection static bool enableVolumeSAPProtection() { @@ -249,6 +247,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mMediaImplList.resize(getNumTEs()); mLastFetchedMediaVersion = -1; + mServerDrawableUpdateCount = 0; memset(&mIndexInTex, 0, sizeof(S32) * LLRender::NUM_VOLUME_TEXTURE_CHANNELS); mMDCImplCount = 0; mLastRiggingInfoLOD = -1; @@ -348,6 +347,9 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, LLColor4U color; const S32 teDirtyBits = (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR|TEM_CHANGE_MEDIA); + const bool previously_volume_changed = mVolumeChanged; + const bool previously_face_mapping_changed = mFaceMappingChanged; + const bool previously_color_changed = mColorChanged; // Do base class updates... U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); @@ -670,9 +672,31 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, // ...and clean up any media impls cleanUpMediaImpls(); + if (( + (mVolumeChanged && !previously_volume_changed) || + (mFaceMappingChanged && !previously_face_mapping_changed) || + (mColorChanged && !previously_color_changed) + ) + && !mLODChanged) { + onDrawableUpdateFromServer(); + } + return retval; } +// Called when a volume, material, etc is updated by the server, possibly by a +// script. If this occurs too often for this object, mark it as active so that +// it doesn't disrupt the octree/render batches, thereby potentially causing a +// big performance penalty. +void LLVOVolume::onDrawableUpdateFromServer() +{ + constexpr U32 UPDATES_UNTIL_ACTIVE = 8; + ++mServerDrawableUpdateCount; + if (mDrawable && !mDrawable->isActive() && mServerDrawableUpdateCount > UPDATES_UNTIL_ACTIVE) + { + mDrawable->makeActive(); + } +} void LLVOVolume::animateTextures() { @@ -1844,7 +1868,7 @@ void LLVOVolume::regenFaces() } } -BOOL LLVOVolume::genBBoxes(BOOL force_global) +BOOL LLVOVolume::genBBoxes(BOOL force_global, BOOL should_update_octree_bounds) { LL_PROFILE_ZONE_SCOPED; BOOL res = TRUE; @@ -1925,20 +1949,9 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) } } - bool rigged = false; - - if (!isAnimatedObject()) - { - rigged = isRiggedMesh() && isAttachment(); - } - else - { - rigged = isRiggedMesh() && getControlAvatar() && getControlAvatar()->mPlaying; - } - if (any_valid_boxes) { - if (rebuild) + if (rebuild && should_update_octree_bounds) { //get the Avatar associated with this object if it's rigged LLVOAvatar* avatar = nullptr; @@ -2100,7 +2113,7 @@ void LLVOVolume::updateRelativeXform(bool force_identity) } } -bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled) +bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled, BOOL &should_update_octree_bounds) { LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME; bool regen_faces = false; @@ -2132,6 +2145,9 @@ bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled) } compiled = TRUE; + // new_lod > old_lod breaks a feedback loop between LOD updates and + // bounding box updates. + should_update_octree_bounds = should_update_octree_bounds || mSculptChanged || new_lod > old_lod; sNumLODChanges += new_num_faces; if ((S32)getNumTEs() != getVolume()->getNumFaces()) @@ -2197,8 +2213,6 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable) group->dirtyMesh(); } - BOOL compiled = FALSE; - updateRelativeXform(); if (mDrawable.isNull()) // Not sure why this is happening, but it is... @@ -2206,47 +2220,49 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable) return TRUE; // No update to complete } + BOOL compiled = FALSE; + // This should be true in most cases, unless we're sure no octree update is + // needed. + BOOL should_update_octree_bounds = bool(getRiggedVolume()) || mDrawable->isState(LLDrawable::REBUILD_POSITION) || !mDrawable->getSpatialExtents()->isFinite3(); + if (mVolumeChanged || mFaceMappingChanged) { dirtySpatialGroup(drawable->isState(LLDrawable::IN_REBUILD_Q1)); bool was_regen_faces = false; + should_update_octree_bounds = true; if (mVolumeChanged) { - was_regen_faces = lodOrSculptChanged(drawable, compiled); + was_regen_faces = lodOrSculptChanged(drawable, compiled, should_update_octree_bounds); drawable->setState(LLDrawable::REBUILD_VOLUME); } else if (mSculptChanged || mLODChanged || mColorChanged) { compiled = TRUE; - was_regen_faces = lodOrSculptChanged(drawable, compiled); + was_regen_faces = lodOrSculptChanged(drawable, compiled, should_update_octree_bounds); } if (!was_regen_faces) { regenFaces(); } - - genBBoxes(FALSE); } else if (mLODChanged || mSculptChanged || mColorChanged) { dirtySpatialGroup(drawable->isState(LLDrawable::IN_REBUILD_Q1)); compiled = TRUE; - lodOrSculptChanged(drawable, compiled); + lodOrSculptChanged(drawable, compiled, should_update_octree_bounds); if(drawable->isState(LLDrawable::REBUILD_RIGGED | LLDrawable::RIGGED)) { updateRiggedVolume(false); } - genBBoxes(FALSE); } // it has its own drawable (it's moved) or it has changed UVs or it has changed xforms from global<->local else { compiled = TRUE; // All it did was move or we changed the texture coordinate offset - genBBoxes(FALSE); } // NaCl - Graphics crasher protection @@ -2256,6 +2272,10 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable) } // NaCl End + // Generate bounding boxes if needed, and update the object's size in the + // octree + genBBoxes(FALSE, should_update_octree_bounds); + // Update face flags updateFaceFlags(); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 3925b8a3f7..593057adbc 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -237,7 +237,7 @@ public: void updateFaceFlags(); void regenFaces(); - BOOL genBBoxes(BOOL force_global); + BOOL genBBoxes(BOOL force_global, BOOL should_update_octree_bounds = TRUE); void preRebuild(); virtual void updateSpatialExtents(LLVector4a& min, LLVector4a& max); virtual F32 getBinRadius(); @@ -391,13 +391,14 @@ protected: static S32 mRenderComplexity_last; static S32 mRenderComplexity_current; + void onDrawableUpdateFromServer(); void requestMediaDataUpdate(bool isNew); void cleanUpMediaImpls(); void addMediaImpl(LLViewerMediaImpl* media_impl, S32 texture_index) ; void removeMediaImpl(S32 texture_index) ; private: - bool lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled); + bool lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled, BOOL &shouldUpdateOctreeBounds); public: @@ -434,6 +435,7 @@ private: LLPointer mLightTexture; media_list_t mMediaImplList; S32 mLastFetchedMediaVersion; // as fetched from the server, starts as -1 + U32 mServerDrawableUpdateCount; S32 mIndexInTex[LLRender::NUM_VOLUME_TEXTURE_CHANNELS]; S32 mMDCImplCount; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 8f9b8d9d6d..739104fd1b 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -108,7 +108,7 @@ LLWorld::LLWorld() : mSpaceTimeUSec(0), mLimitsNeedRefresh(true)// { - for (S32 i = 0; i < 8; i++) + for (S32 i = 0; i < EDGE_WATER_OBJECTS_COUNT; i++) { mEdgeWaterObjects[i] = NULL; } @@ -140,7 +140,7 @@ void LLWorld::resetClass() LLViewerPartSim::getInstance()->destroyClass(); mDefaultWaterTexturep = NULL ; - for (S32 i = 0; i < 8; i++) + for (S32 i = 0; i < EDGE_WATER_OBJECTS_COUNT; i++) { mEdgeWaterObjects[i] = NULL; } @@ -1195,6 +1195,8 @@ void LLWorld::clearAllVisibleObjects() //clear all cached visible objects. (*iter)->clearCachedVisibleObjects(); } + clearHoleWaterObjects(); + clearEdgeWaterObjects(); } void LLWorld::updateParticles() @@ -1368,7 +1370,7 @@ void LLWorld::precullWaterObjects(LLCamera& camera, LLCullResult* cull, bool inc } S32 dir; - for (dir = 0; dir < 8; dir++) + for (dir = 0; dir < EDGE_WATER_OBJECTS_COUNT; dir++) { LLVOWater* waterp = mEdgeWaterObjects[dir]; if (waterp && waterp->mDrawable) @@ -1379,6 +1381,26 @@ void LLWorld::precullWaterObjects(LLCamera& camera, LLCullResult* cull, bool inc } } +void LLWorld::clearHoleWaterObjects() +{ + for (std::list >::iterator iter = mHoleWaterObjects.begin(); + iter != mHoleWaterObjects.end(); ++iter) + { + LLVOWater* waterp = (*iter).get(); + gObjectList.killObject(waterp); + } + mHoleWaterObjects.clear(); +} + +void LLWorld::clearEdgeWaterObjects() +{ + for (S32 i = 0; i < EDGE_WATER_OBJECTS_COUNT; i++) + { + gObjectList.killObject(mEdgeWaterObjects[i]); + mEdgeWaterObjects[i] = NULL; + } +} + void LLWorld::updateWaterObjects() { if (!gAgent.getRegion()) @@ -1431,13 +1453,7 @@ void LLWorld::updateWaterObjects() } } - for (std::list >::iterator iter = mHoleWaterObjects.begin(); - iter != mHoleWaterObjects.end(); ++ iter) - { - LLVOWater* waterp = (*iter).get(); - gObjectList.killObject(waterp); - } - mHoleWaterObjects.clear(); + clearHoleWaterObjects(); // Use the water height of the region we're on for areas where there is no region F32 water_height = gAgent.getRegion()->getWaterHeight(); @@ -1496,7 +1512,7 @@ void LLWorld::updateWaterObjects() // Fix water height on regions larger than 2048x2048 S32 dir; - for (dir = 0; dir < 8; dir++) + for (dir = 0; dir < EDGE_WATER_OBJECTS_COUNT; dir++) { S32 dim[2] = { 0 }; switch (gDirAxes[dir][0]) diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h index 31996aa7be..066adc273c 100644 --- a/indra/newview/llworld.h +++ b/indra/newview/llworld.h @@ -193,12 +193,9 @@ public: void updateRegions(F32 max_update_time); void updateVisibilities(); void updateParticles(); - void updateClouds(const F32 dt); - LLCloudGroup * findCloudGroup(const LLCloudPuff &puff); void renderPropertyLines(); - void resetStats(); void updateNetStats(); // Update network statistics for all the regions... void printPacketsLost(); @@ -211,7 +208,7 @@ public: void setLandFarClip(const F32 far_clip); LLViewerTexture *getDefaultWaterTexture(); - void updateWaterObjects(); + void updateWaterObjects(); void precullWaterObjects(LLCamera& camera, LLCullResult* cull, bool include_void_water); @@ -249,6 +246,9 @@ public: bool isRegionListed(const LLViewerRegion* region) const; private: + void clearHoleWaterObjects(); + void clearEdgeWaterObjects(); + region_list_t mActiveRegionList; region_list_t mRegionList; region_list_t mVisibleRegionList; @@ -319,7 +319,8 @@ private: // std::list > mHoleWaterObjects; - LLPointer mEdgeWaterObjects[8]; + static const S32 EDGE_WATER_OBJECTS_COUNT = 8; + LLPointer mEdgeWaterObjects[EDGE_WATER_OBJECTS_COUNT]; LLPointer mDefaultWaterTexturep; }; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 6885e1e382..d796db407c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -749,7 +749,9 @@ void LLPipeline::cleanup() mFaceSelectImagep = NULL; - mMovedBridge.clear(); + mMovedList.clear(); + mMovedBridge.clear(); + mShiftList.clear(); mInitialized = false; @@ -2984,6 +2986,14 @@ void LLPipeline::clearRebuildDrawables() drawablep->clearState(LLDrawable::EARLY_MOVE | LLDrawable::MOVE_UNDAMPED | LLDrawable::ON_MOVE_LIST | LLDrawable::ANIMATED_CHILD); } mMovedList.clear(); + + for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin(); + iter != mShiftList.end(); ++iter) + { + LLDrawable *drawablep = *iter; + drawablep->clearState(LLDrawable::EARLY_MOVE | LLDrawable::MOVE_UNDAMPED | LLDrawable::ON_MOVE_LIST | LLDrawable::ANIMATED_CHILD | LLDrawable::ON_SHIFT_LIST); + } + mShiftList.clear(); } void LLPipeline::rebuildPriorityGroups() @@ -11273,22 +11283,47 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar, bool preview_avatar) { markVisible(avatar->mDrawable, *viewer_camera); - LLVOAvatar::attachment_map_t::iterator iter; - for (iter = avatar->mAttachmentPoints.begin(); - iter != avatar->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) - { - if (LLViewerObject* attached_object = attachment_iter->get()) - { - markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); - } - } - } + if (preview_avatar) + { + // Only show rigged attachments for preview + LLVOAvatar::attachment_map_t::iterator iter; + for (iter = avatar->mAttachmentPoints.begin(); + iter != avatar->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) + { + LLViewerObject* attached_object = attachment_iter->get(); + if (attached_object && attached_object->isRiggedMesh()) + { + markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); + } + } + } + } + else + { + LLVOAvatar::attachment_map_t::iterator iter; + for (iter = avatar->mAttachmentPoints.begin(); + iter != avatar->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) + { + LLViewerObject* attached_object = attachment_iter->get(); + if (attached_object) + { + markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); + } + } + } + } } stateSort(*LLViewerCamera::getInstance(), result); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 70c4c4884e..7fd13f8260 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -475,7 +475,7 @@ public: RENDER_TYPE_PASS_SIMPLE_RIGGED = LLRenderPass::PASS_SIMPLE_RIGGED, RENDER_TYPE_PASS_GRASS = LLRenderPass::PASS_GRASS, RENDER_TYPE_PASS_FULLBRIGHT = LLRenderPass::PASS_FULLBRIGHT, - RENDER_TYPE_PASS_FULLBRIGHT_RIGGED = LLRenderPass::PASS_FULLBRIGHT, + RENDER_TYPE_PASS_FULLBRIGHT_RIGGED = LLRenderPass::PASS_FULLBRIGHT_RIGGED, // Fix apparent copy&paste issue RENDER_TYPE_PASS_INVISIBLE = LLRenderPass::PASS_INVISIBLE, RENDER_TYPE_PASS_INVISIBLE_RIGGED = LLRenderPass::PASS_INVISIBLE_RIGGED, RENDER_TYPE_PASS_INVISI_SHINY = LLRenderPass::PASS_INVISI_SHINY, diff --git a/indra/newview/quickprefs.cpp b/indra/newview/quickprefs.cpp index 177e1c51ea..723610abb9 100644 --- a/indra/newview/quickprefs.cpp +++ b/indra/newview/quickprefs.cpp @@ -278,8 +278,8 @@ void FloaterQuickPrefs::initCallbacks() void FloaterQuickPrefs::loadDayCyclePresets(const std::multimap& daycycle_map) { mDayCyclePresetsCombo->operateOnAll(LLComboBox::OP_DELETE); - mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); - mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_None"), LLSD(PRESET_NAME_NONE)); + mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT), EAddPosition::ADD_BOTTOM, FALSE); + mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_None"), LLSD(PRESET_NAME_NONE), EAddPosition::ADD_BOTTOM, FALSE); mDayCyclePresetsCombo->addSeparator(); // Add setting presets. @@ -319,8 +319,8 @@ void FloaterQuickPrefs::loadDayCyclePresets(const std::multimap& sky_map) { mWLPresetsCombo->operateOnAll(LLComboBox::OP_DELETE); - mWLPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); - mWLPresetsCombo->add(LLTrans::getString("QP_WL_Day_Cycle_Based"), LLSD(PRESET_NAME_DAY_CYCLE)); + mWLPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT), EAddPosition::ADD_BOTTOM, FALSE); + mWLPresetsCombo->add(LLTrans::getString("QP_WL_Day_Cycle_Based"), LLSD(PRESET_NAME_DAY_CYCLE), EAddPosition::ADD_BOTTOM, FALSE); mWLPresetsCombo->addSeparator(); // Add setting presets. @@ -361,8 +361,8 @@ void FloaterQuickPrefs::loadSkyPresets(const std::multimap& void FloaterQuickPrefs::loadWaterPresets(const std::multimap& water_map) { mWaterPresetsCombo->operateOnAll(LLComboBox::OP_DELETE); - mWaterPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); - mWaterPresetsCombo->add(LLTrans::getString("QP_WL_Day_Cycle_Based"), LLSD(PRESET_NAME_DAY_CYCLE)); + mWaterPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT), EAddPosition::ADD_BOTTOM, FALSE); + mWaterPresetsCombo->add(LLTrans::getString("QP_WL_Day_Cycle_Based"), LLSD(PRESET_NAME_DAY_CYCLE), EAddPosition::ADD_BOTTOM, FALSE); mWaterPresetsCombo->addSeparator(); // Add setting presets. @@ -441,10 +441,34 @@ void FloaterQuickPrefs::loadPresets() loadDayCyclePresets(daycycle_map); } +void FloaterQuickPrefs::setDefaultPresetsEnabled(BOOL enabled) +{ + LLScrollListItem* item{ nullptr }; + + item = mWLPresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); + if (item) item->setEnabled(enabled); + + item = mWLPresetsCombo->getItemByValue(LLSD(PRESET_NAME_DAY_CYCLE)); + if (item) item->setEnabled(enabled); + + item = mWaterPresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); + if (item) item->setEnabled(enabled); + + item = mWaterPresetsCombo->getItemByValue(LLSD(PRESET_NAME_DAY_CYCLE)); + if (item) item->setEnabled(enabled); + + item = mDayCyclePresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); + if (item) item->setEnabled(enabled); + + item = mDayCyclePresetsCombo->getItemByValue(LLSD(PRESET_NAME_NONE)); + if (item) item->setEnabled(enabled); +} + void FloaterQuickPrefs::setSelectedEnvironment() { //LL_INFOS() << "EEP: getSelectedEnvironment: " << LLEnvironment::instance().getSelectedEnvironment() << LL_ENDL; + setDefaultPresetsEnabled(TRUE); mWLPresetsCombo->selectByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); mWaterPresetsCombo->selectByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); mDayCyclePresetsCombo->selectByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); @@ -492,7 +516,6 @@ void FloaterQuickPrefs::setSelectedEnvironment() } else { - //mWaterPresetsCombo->selectByValue(LLSD(water->getName())); std::string preset_name = water->getName(); if (preset_name == "_default_") { @@ -517,7 +540,7 @@ void FloaterQuickPrefs::setSelectedEnvironment() { mWLPresetsCombo->selectByValue(LLSD(sky->getAssetId())); } -#ifdef OPENSIM +#ifdef OPENSIM else if (LLGridManager::getInstance()->isInOpenSim()) { auto preset_name = sky->getName(); @@ -525,7 +548,7 @@ void FloaterQuickPrefs::setSelectedEnvironment() if (preset_name == "_default_") { preset_name = "Default"; - } + } mWLPresetsCombo->selectByValue(preset_name); } #endif @@ -560,6 +583,8 @@ void FloaterQuickPrefs::setSelectedEnvironment() mWaterPresetsCombo->selectByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); mDayCyclePresetsCombo->selectByValue(LLSD(PRESET_NAME_REGION_DEFAULT)); } + + setDefaultPresetsEnabled(FALSE); } BOOL FloaterQuickPrefs::postBuild() @@ -704,7 +729,7 @@ void FloaterQuickPrefs::loadSavedSettingsFromFile(const std::string& settings_pa // Parse the quick preferences settings LLXUIParser parser; parser.readXUI(root, xml, settings_path); - + if (!xml.validateBlock()) { LL_WARNS() << "Unable to validate quick preferences from file: " << settings_path << LL_ENDL; @@ -834,7 +859,7 @@ void FloaterQuickPrefs::selectSkyPreset(const LLSD& preset) LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, legacy_sky, current_water); LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); LLEnvironment::instance().updateEnvironment(static_cast(gSavedSettings.getF32("FSEnvironmentManualTransitionTime"))); - } + } else { LL_WARNS() << "Legacy windlight conversion failed for " << preset << " existing env unchanged." << LL_ENDL; @@ -847,7 +872,6 @@ void FloaterQuickPrefs::selectSkyPreset(const LLSD& preset) LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); LLEnvironment::instance().setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID()); } - // LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST); } void FloaterQuickPrefs::selectWaterPreset(const LLSD& preset) @@ -865,7 +889,7 @@ void FloaterQuickPrefs::selectWaterPreset(const LLSD& preset) LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, current_sky, legacy_water); LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); LLEnvironment::instance().updateEnvironment(static_cast(gSavedSettings.getF32("FSEnvironmentManualTransitionTime"))); - } + } else { LL_WARNS() << "Legacy windlight conversion failed for " << preset << " existing env unchanged." << LL_ENDL; @@ -893,7 +917,7 @@ void FloaterQuickPrefs::selectDayCyclePreset(const LLSD& preset) LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, legacyday); LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); LLEnvironment::instance().updateEnvironment(static_cast(gSavedSettings.getF32("FSEnvironmentManualTransitionTime"))); - } + } else { LL_WARNS() << "Legacy windlight conversion failed for " << preset << " existing env unchanged." << LL_ENDL; @@ -1155,17 +1179,6 @@ void FloaterQuickPrefs::updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamT } } -// void FloaterQuickPrefs::onSunMoved() -// { - -// F32 val = mWLSunPos->getCurSliderValue(); - -// auto env = LLEnvironment::instance().getSelectedEnvironment() == LLEnvironment::ENV_LOCAL) -// auto day = LLEnvironment::instance().getEnvironmentDay(env); - - -// } - void FloaterQuickPrefs::enableWindlightButtons(bool enable) { childSetEnabled("WLPresetsCombo", enable); @@ -1229,7 +1242,7 @@ void FloaterQuickPrefs::updateControl(const std::string& controlName, ControlEnt typeMap[ControlTypeColor4] = "option_color4_control"; // hide all widget types except for the one the user wants - LLUICtrl* widget; + LLUICtrl* widget{ nullptr }; for (it = typeMap.begin(); it != typeMap.end(); ++it) { if (entry.type != it->first) @@ -1785,8 +1798,7 @@ void FloaterQuickPrefs::onValuesChanged() mControlsList[mSelectedControl].type = type; // old_parameters.type; mControlsList[mSelectedControl].widget->setValue(var->getValue()); } - // rebuild controls UI (probably not needed) - // updateControls(); + // update our new control updateControl(mSelectedControl, mControlsList[mSelectedControl]); } diff --git a/indra/newview/quickprefs.h b/indra/newview/quickprefs.h index 7ddf96a550..e55338b450 100644 --- a/indra/newview/quickprefs.h +++ b/indra/newview/quickprefs.h @@ -94,6 +94,8 @@ private: void updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamType type); void enableWindlightButtons(bool enable); + void setDefaultPresetsEnabled(BOOL enabled); + public: /*virtual*/ BOOL postBuild(); virtual void onOpen(const LLSD& key); diff --git a/indra/newview/skins/default/textures/skinspreview/scui_dark.jpg b/indra/newview/skins/default/textures/skinspreview/scui_dark.jpg new file mode 100644 index 0000000000..700fb235ce Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/scui_dark.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/scui_light.jpg b/indra/newview/skins/default/textures/skinspreview/scui_light.jpg new file mode 100644 index 0000000000..2466269056 Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/scui_light.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/slight_mteal.jpg b/indra/newview/skins/default/textures/skinspreview/slight_mteal.jpg new file mode 100644 index 0000000000..211113da73 Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/slight_mteal.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/slight_nblue.jpg b/indra/newview/skins/default/textures/skinspreview/slight_nblue.jpg new file mode 100644 index 0000000000..5f7adc8247 Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/slight_nblue.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/slight_orange.jpg b/indra/newview/skins/default/textures/skinspreview/slight_orange.jpg new file mode 100644 index 0000000000..b20fd62082 Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/slight_orange.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/slight_sblue.jpg b/indra/newview/skins/default/textures/skinspreview/slight_sblue.jpg new file mode 100644 index 0000000000..42813e5358 Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/slight_sblue.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/slight_spink.jpg b/indra/newview/skins/default/textures/skinspreview/slight_spink.jpg new file mode 100644 index 0000000000..b6e9c0ae6e Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/slight_spink.jpg differ diff --git a/indra/newview/skins/default/textures/skinspreview/slight_teal.jpg b/indra/newview/skins/default/textures/skinspreview/slight_teal.jpg new file mode 100644 index 0000000000..75f1702842 Binary files /dev/null and b/indra/newview/skins/default/textures/skinspreview/slight_teal.jpg differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 704b60dc7e..0e570a8184 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -712,8 +712,7 @@ with the same filename but different name - - + @@ -839,6 +838,14 @@ with the same filename but different name + + + + + + + + @@ -1015,13 +1022,16 @@ with the same filename but different name + + + + + + + - - - - diff --git a/indra/newview/skins/default/textures/windows/first_login_image.jpg b/indra/newview/skins/default/textures/windows/first_login_image.jpg new file mode 100644 index 0000000000..30f31341ed Binary files /dev/null and b/indra/newview/skins/default/textures/windows/first_login_image.jpg differ diff --git a/indra/newview/skins/default/textures/windows/first_login_image_left.png b/indra/newview/skins/default/textures/windows/first_login_image_left.png deleted file mode 100644 index 77904d7d12..0000000000 Binary files a/indra/newview/skins/default/textures/windows/first_login_image_left.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/windows/first_login_image_right.png b/indra/newview/skins/default/textures/windows/first_login_image_right.png deleted file mode 100644 index 35ecce9c07..0000000000 Binary files a/indra/newview/skins/default/textures/windows/first_login_image_right.png and /dev/null differ diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index a416ec729a..3b44691fe4 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -103,7 +103,7 @@ Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse. - + Login fejlede. diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml index 718413e5a2..f06b624702 100644 --- a/indra/newview/skins/default/xui/de/floater_about.xml +++ b/indra/newview/skins/default/xui/de/floater_about.xml @@ -21,7 +21,7 @@ mit Open-Source-Beiträgen von: - + @@ -36,6 +36,8 @@ Zusätzlicher Programmcode von: Besonderer Dank gilt unserem Firestorm-Support-Team sowie den Wiki-Autoren, Schulungsleitern und Übersetzern: +Firestorm enthält Starlight, modifiziert für Firestorm. Es ist von Einwohnern für Einwohner und hat das Ziel, eine alternative, freundlichere und hoffentlich einfacher zu bedienende Oberfläche bereitzustellen. Für weitere Details, siehe <nolink>https://wiki.secondlife.com/wiki/Viewer_Skins/Starlight</nolink>. + UI-Künstler und Designer: diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml index e60c48c046..474f09a594 100644 --- a/indra/newview/skins/default/xui/de/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml @@ -176,6 +176,7 @@ + + + + + + + Drag to move, shift-drag to copy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [DESC] [NUM] + + + Nothing selected. + + + + + [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights More info] + + + + + + + Deed + + + Deed + + + You can modify this object + + + You can modify these objects + + + You can't modify this object + + + You can't modify these objects + + + You can't modify this object across a region boundary + + + You can't modify these objects across a region boundary + + + You must select entire object to set permissions + + + Price: L$ + + + Total Price: L$ + + + Price Per: L$ + + + Mixed Price + + + Mixed Sale + + + Multiple selection + + + Name: + + + + Description: + + + + Creator: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect TestString PleaseIgnore (please.ignore) + + + Owner: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect TestString PleaseIgnore (please.ignore) + + + Last Owner: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect TestString PleaseIgnore (please.ignore) + + + Group: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect Loading... + + + + + + You can modify this object + + + Anyone: + + + + + + Next owner: + + + + + + + B: + + + O: + + + G: + + + E: + + + N: + + + F: + + + + + Pathfinding attributes: + + + + + + + + + Paste Position +[VALUE] + + + Paste Size +[VALUE] + + + Paste Rotation +[VALUE] + + + + + + + Position (meters) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path Cut (begin/end) + + + + + Hollow + + + Skew + + + + + Hollow Shape + + + + + + + + + Twist (begin/end) + + + + + Taper + + + Hole Size + + + + + Top Shear + + + + + Profile Cut (begin/end) + + + Dimple (begin/end) + + + Slice (begin/end) + + + + + Taper Profile + + + + + Radius + + + Revolutions + + + + + + + + Stitching type + + + + + + + + + + Mesh Information: + + + + +High: +Medium: +Low: +Lowest: + + +[HIGHTRIS] +[MIDTRIS] +[LOWTRIS] +[LOWESTTRIS] + + + + + + + + + + + + + + + + + Linden Lab Second Life Viewer default ([FACTOR]) + + [APP_NAME] Viewer default ([FACTOR]) + + [APP_NAME_ABBR] + + [FACTOR] + + +High ↔ Med +Med ↔ Low +Low ↔ Lwst + + +[HIGH2MED] +[MED2LOW] +[LOW2LOWEST] + + + + + + This table shows the LOD change boundaries in metres from the camera. + + + + + None + Prim + Convex Hull + + Select only one primitive to edit features. + + + Edit object features: + + + + + + + + + + + + + + + + + + + + + + + Physics Shape Type: + + + + diff --git a/indra/newview/skins/starlight/xui/en/floater_ui_preview.xml b/indra/newview/skins/starlight/xui/en/floater_ui_preview.xml new file mode 100644 index 0000000000..df26a35f6f --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/floater_ui_preview.xml @@ -0,0 +1,420 @@ + + + +Select an editor by setting the environment variable LL_XUI_EDITOR +or the ExternalEditor setting +or specifying its path in the "Editor Path" field. + + + Primary Language: + + + + + + + Me + + + + + Person + + + + + Infohub + + + + + Land Sale + + + + land auction + + + + by owner + + + + + Go Home + + + Events: + + + + + + General + + + + + + Moderate + + + + + + Adult + + + + + + + Find on Map + + + + + + + + + + + + + + + + + + + + + + + + + Location: + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlight/xui/en/main_view.xml b/indra/newview/skins/starlight/xui/en/main_view.xml new file mode 100644 index 0000000000..f0708bbfe1 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/main_view.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlight/xui/en/panel_avatar_tag.xml b/indra/newview/skins/starlight/xui/en/panel_avatar_tag.xml new file mode 100644 index 0000000000..fcdb705240 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/panel_avatar_tag.xml @@ -0,0 +1,66 @@ + + + + + + Angela Tester + + + + + The quick brown fox jumps over the lazy dog. + + diff --git a/indra/newview/skins/starlight/xui/en/panel_classified_info.xml b/indra/newview/skins/starlight/xui/en/panel_classified_info.xml new file mode 100644 index 0000000000..b3f4af97a8 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/panel_classified_info.xml @@ -0,0 +1,470 @@ + + + + Moderate + + + General Content + + + L$[PRICE] + + + [TELEPORT] teleport, [MAP] map, [PROFILE] profile + + + [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] + + + Enabled + + + Disabled + + + + + + + + +Warning: the home page specified in the General tab fails to pass this whitelist. It has been disabled until a valid entry has been added. + + + diff --git a/indra/newview/skins/starlight/xui/en/panel_my_profile.xml b/indra/newview/skins/starlight/xui/en/panel_my_profile.xml new file mode 100644 index 0000000000..bb8b7c3a35 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/panel_my_profile.xml @@ -0,0 +1,382 @@ + + + +[ACCTTYPE] +[PAYMENTINFO] [FIRESTORM][FSDEV][FSSUPP][FSQA][FSGW] + + + + + + + + http://www.secondlife.com/account/billing.php?lang=en + + + http://www.secondlife.com/account/partners.php?lang=en + + + + + + [REG_DATE] ([AGE]) + + + [NAME] + + + [DISPLAY_NAME] + + + + + + + + + + + Resident. No payment info on file. + Linden. + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet.Nullamma lesuada mauris sit amet ipsum. adipiscing elit. Ae nean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. + + + + + + + + + + + + + + + + + Nearby Media + + + Show: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlight/xui/en/panel_notes.xml b/indra/newview/skins/starlight/xui/en/panel_notes.xml new file mode 100644 index 0000000000..7c0ac7e085 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/panel_notes.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Mighty Moose of mooseville soundvillemoose + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlight/xui/en/panel_places.xml b/indra/newview/skins/starlight/xui/en/panel_places.xml new file mode 100644 index 0000000000..12309c77de --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/panel_places.xml @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlight/xui/en/panel_status_bar.xml b/indra/newview/skins/starlight/xui/en/panel_status_bar.xml new file mode 100644 index 0000000000..ad7da6fde1 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/panel_status_bar.xml @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlight/xui/en/sidepanel_appearance.xml b/indra/newview/skins/starlight/xui/en/sidepanel_appearance.xml new file mode 100644 index 0000000000..1f252a06b1 --- /dev/null +++ b/indra/newview/skins/starlight/xui/en/sidepanel_appearance.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/floater_price_for_listing.xml b/indra/newview/skins/starlightcui/xui/en/floater_price_for_listing.xml new file mode 100644 index 0000000000..616bbdc47d --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/floater_price_for_listing.xml @@ -0,0 +1,81 @@ + + + + Your classified ad will run for one week from the day it is published. + +Your ad's position in the classified listings is determined by how much you choose to pay. + +The highest paid ads go to the top of the list, and appear higher in searches. + + + Price for Ad: + + + L$ + + + + + + + + + Drag to move, shift-drag to copy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [DESC] [NUM] + + + Nothing selected. + + + + + [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights More info] + + + + + + + Deed + + + Deed + + + You can modify this object + + + You can modify these objects + + + You can't modify this object + + + You can't modify these objects + + + You can't modify this object across a region boundary + + + You can't modify these objects across a region boundary + + + You must select entire object to set permissions + + + Price: L$ + + + Total Price: L$ + + + Price Per: L$ + + + Mixed Price + + + Mixed Sale + + + Multiple selection + + + Name: + + + + Description: + + + + Creator: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect TestString PleaseIgnore (please.ignore) + + + Owner: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect TestString PleaseIgnore (please.ignore) + + + Last Owner: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect TestString PleaseIgnore (please.ignore) + + + Group: + + + + secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect Loading... + + + + + + You can modify this object + + + Anyone: + + + + + + Next owner: + + + + + + + B: + + + O: + + + G: + + + E: + + + N: + + + F: + + + + + Pathfinding attributes: + + + + + + + + + Paste Position +[VALUE] + + + Paste Size +[VALUE] + + + Paste Rotation +[VALUE] + + + + + + + Position (meters) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Path Cut (begin/end) + + + + + Hollow + + + Skew + + + + + Hollow Shape + + + + + + + + + Twist (begin/end) + + + + + Taper + + + Hole Size + + + + + Top Shear + + + + + Profile Cut (begin/end) + + + Dimple (begin/end) + + + Slice (begin/end) + + + + + Taper Profile + + + + + Radius + + + Revolutions + + + + + + + + Stitching type + + + + + + + + + + Mesh Information: + + + + +High: +Medium: +Low: +Lowest: + + +[HIGHTRIS] +[MIDTRIS] +[LOWTRIS] +[LOWESTTRIS] + + + + + + + + + + + + + + + + + Linden Lab Second Life Viewer default ([FACTOR]) + + [APP_NAME] Viewer default ([FACTOR]) + + [APP_NAME_ABBR] + + [FACTOR] + + +High ↔ Med +Med ↔ Low +Low ↔ Lwst + + +[HIGH2MED] +[MED2LOW] +[LOW2LOWEST] + + + + + + This table shows the LOD change boundaries in metres from the camera. + + + + + None + Prim + Convex Hull + + Select only one primitive to edit features. + + + Edit object features: + + + + + + + + + + + + + + + + + + + + + + + Physics Shape Type: + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/floater_ui_preview.xml b/indra/newview/skins/starlightcui/xui/en/floater_ui_preview.xml new file mode 100644 index 0000000000..65bde85d2a --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/floater_ui_preview.xml @@ -0,0 +1,420 @@ + + + +Select an editor by setting the environment variable LL_XUI_EDITOR +or the ExternalEditor setting +or specifying its path in the "Editor Path" field. + + + Primary Language: + + + + + + + Me + + + + + Person + + + + + Infohub + + + + + Land Sale + + + + land auction + + + + by owner + + + + + Go Home + + + Events: + + + + + + General + + + + + + Moderate + + + + + + Adult + + + + + + + Find on Map + + + + + + + + + + + + + + + + + + + + + + + + + Location: + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/line_editor.xml b/indra/newview/skins/starlightcui/xui/en/line_editor.xml new file mode 100644 index 0000000000..b6fd4bb15f --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/line_editor.xml @@ -0,0 +1,18 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/main_view.xml b/indra/newview/skins/starlightcui/xui/en/main_view.xml new file mode 100644 index 0000000000..8f2e284a7b --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/main_view.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_avatar_tag.xml b/indra/newview/skins/starlightcui/xui/en/panel_avatar_tag.xml new file mode 100644 index 0000000000..fcdb705240 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_avatar_tag.xml @@ -0,0 +1,66 @@ + + + + + + Angela Tester + + + + + The quick brown fox jumps over the lazy dog. + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_classified_info.xml b/indra/newview/skins/starlightcui/xui/en/panel_classified_info.xml new file mode 100644 index 0000000000..b3f4af97a8 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_classified_info.xml @@ -0,0 +1,470 @@ + + + + Moderate + + + General Content + + + L$[PRICE] + + + [TELEPORT] teleport, [MAP] map, [PROFILE] profile + + + [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] + + + Enabled + + + Disabled + + + + + + + + +Warning: the home page specified in the General tab fails to pass this whitelist. It has been disabled until a valid entry has been added. + + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_my_profile.xml b/indra/newview/skins/starlightcui/xui/en/panel_my_profile.xml new file mode 100644 index 0000000000..bb8b7c3a35 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_my_profile.xml @@ -0,0 +1,382 @@ + + + +[ACCTTYPE] +[PAYMENTINFO] [FIRESTORM][FSDEV][FSSUPP][FSQA][FSGW] + + + + + + + + http://www.secondlife.com/account/billing.php?lang=en + + + http://www.secondlife.com/account/partners.php?lang=en + + + + + + [REG_DATE] ([AGE]) + + + [NAME] + + + [DISPLAY_NAME] + + + + + + + + + + + Resident. No payment info on file. + Linden. + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet.Nullamma lesuada mauris sit amet ipsum. adipiscing elit. Ae nean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. + + + + + + + + + + + + + + + + + Nearby Media + + + Show: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_notes.xml b/indra/newview/skins/starlightcui/xui/en/panel_notes.xml new file mode 100644 index 0000000000..7c0ac7e085 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_notes.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Mighty Moose of mooseville soundvillemoose + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_places.xml b/indra/newview/skins/starlightcui/xui/en/panel_places.xml new file mode 100644 index 0000000000..12309c77de --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_places.xml @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/starlightcui/xui/en/panel_stand_stop_flying.xml new file mode 100644 index 0000000000..ee6b2b9d44 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_stand_stop_flying.xml @@ -0,0 +1,50 @@ + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/panel_status_bar.xml b/indra/newview/skins/starlightcui/xui/en/panel_status_bar.xml new file mode 100644 index 0000000000..e911fc9b6c --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/panel_status_bar.xml @@ -0,0 +1,419 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/sidepanel_appearance.xml b/indra/newview/skins/starlightcui/xui/en/sidepanel_appearance.xml new file mode 100644 index 0000000000..6a64942ed6 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/sidepanel_appearance.xml @@ -0,0 +1,167 @@ + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/starlightcui/xui/en/widgets/chiclet_im_p2p.xml new file mode 100644 index 0000000000..37144bb81b --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/chiclet_im_p2p.xml @@ -0,0 +1,56 @@ + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/clothing_list_item.xml b/indra/newview/skins/starlightcui/xui/en/widgets/clothing_list_item.xml new file mode 100644 index 0000000000..d83f44737e --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/clothing_list_item.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/combo_box.xml b/indra/newview/skins/starlightcui/xui/en/widgets/combo_box.xml new file mode 100644 index 0000000000..a2e735cb08 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/combo_box.xml @@ -0,0 +1,37 @@ + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/deletable_wearable_list_item.xml b/indra/newview/skins/starlightcui/xui/en/widgets/deletable_wearable_list_item.xml new file mode 100644 index 0000000000..bd977aa4a6 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/deletable_wearable_list_item.xml @@ -0,0 +1,43 @@ + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/drop_down.xml b/indra/newview/skins/starlightcui/xui/en/widgets/drop_down.xml new file mode 100644 index 0000000000..5260e080cb --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/drop_down.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/dummy_clothing_list_item.xml b/indra/newview/skins/starlightcui/xui/en/widgets/dummy_clothing_list_item.xml new file mode 100644 index 0000000000..11bc36c01d --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/dummy_clothing_list_item.xml @@ -0,0 +1,52 @@ + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/floater.xml b/indra/newview/skins/starlightcui/xui/en/widgets/floater.xml new file mode 100644 index 0000000000..3829e1f84a --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/floater.xml @@ -0,0 +1,26 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/fs_chiclet_im_p2p.xml b/indra/newview/skins/starlightcui/xui/en/widgets/fs_chiclet_im_p2p.xml new file mode 100644 index 0000000000..07d8962d72 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/fs_chiclet_im_p2p.xml @@ -0,0 +1,56 @@ + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/gesture_combo_list.xml b/indra/newview/skins/starlightcui/xui/en/widgets/gesture_combo_list.xml new file mode 100644 index 0000000000..872d12cb87 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/gesture_combo_list.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/icon.xml b/indra/newview/skins/starlightcui/xui/en/widgets/icon.xml new file mode 100644 index 0000000000..fe0cee9c59 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/icon.xml @@ -0,0 +1,8 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/starlightcui/xui/en/widgets/inventory_list_item.xml new file mode 100644 index 0000000000..f31b247822 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/inventory_list_item.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/inventory_panel.xml b/indra/newview/skins/starlightcui/xui/en/widgets/inventory_panel.xml new file mode 100644 index 0000000000..8aea659372 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/inventory_panel.xml @@ -0,0 +1,16 @@ + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/line_editor.xml b/indra/newview/skins/starlightcui/xui/en/widgets/line_editor.xml new file mode 100644 index 0000000000..b6fd4bb15f --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/line_editor.xml @@ -0,0 +1,18 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/location_input.xml b/indra/newview/skins/starlightcui/xui/en/widgets/location_input.xml new file mode 100644 index 0000000000..4e61843aa9 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/location_input.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/menu.xml b/indra/newview/skins/starlightcui/xui/en/widgets/menu.xml new file mode 100644 index 0000000000..c074308134 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/menu.xml @@ -0,0 +1,8 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/menu_bar.xml b/indra/newview/skins/starlightcui/xui/en/widgets/menu_bar.xml new file mode 100644 index 0000000000..71a624ac04 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/menu_bar.xml @@ -0,0 +1,8 @@ + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/panel.xml b/indra/newview/skins/starlightcui/xui/en/widgets/panel.xml new file mode 100644 index 0000000000..008d06a705 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/panel.xml @@ -0,0 +1,15 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/progress_bar.xml b/indra/newview/skins/starlightcui/xui/en/widgets/progress_bar.xml new file mode 100644 index 0000000000..2a6ea05b84 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/progress_bar.xml @@ -0,0 +1,12 @@ + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/recent_inventory_panel.xml b/indra/newview/skins/starlightcui/xui/en/widgets/recent_inventory_panel.xml new file mode 100644 index 0000000000..fe0d93a9c2 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/recent_inventory_panel.xml @@ -0,0 +1,16 @@ + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/starlightcui/xui/en/widgets/scroll_bar.xml new file mode 100644 index 0000000000..05b601eadd --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/scroll_bar.xml @@ -0,0 +1,30 @@ + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/scroll_container.xml b/indra/newview/skins/starlightcui/xui/en/widgets/scroll_container.xml new file mode 100644 index 0000000000..abae7f7683 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/scroll_container.xml @@ -0,0 +1,7 @@ + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/starlightcui/xui/en/widgets/simple_text_editor.xml new file mode 100644 index 0000000000..f9cf52c8fc --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/simple_text_editor.xml @@ -0,0 +1,27 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/slider_bar.xml b/indra/newview/skins/starlightcui/xui/en/widgets/slider_bar.xml new file mode 100644 index 0000000000..061cbfc177 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/slider_bar.xml @@ -0,0 +1,14 @@ + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/split_button.xml b/indra/newview/skins/starlightcui/xui/en/widgets/split_button.xml new file mode 100644 index 0000000000..78258bc3f0 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/split_button.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/tab_container.xml b/indra/newview/skins/starlightcui/xui/en/widgets/tab_container.xml new file mode 100644 index 0000000000..ed50e4f104 --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/tab_container.xml @@ -0,0 +1,39 @@ + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/talk_button.xml b/indra/newview/skins/starlightcui/xui/en/widgets/talk_button.xml new file mode 100644 index 0000000000..fd931a896b --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/talk_button.xml @@ -0,0 +1,40 @@ + + + + + + + + diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/toolbar.xml b/indra/newview/skins/starlightcui/xui/en/widgets/toolbar.xml new file mode 100644 index 0000000000..00d755cc1a --- /dev/null +++ b/indra/newview/skins/starlightcui/xui/en/widgets/toolbar.xml @@ -0,0 +1,78 @@ + + + + + + +