diff options
| author | Merov Linden <merov@lindenlab.com> | 2012-12-13 18:04:47 -0800 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2012-12-13 18:04:47 -0800 | 
| commit | 94694be6b5aac985153aec8d396bfd47e7463acd (patch) | |
| tree | 1350032c477613e20685ccd3401069b0a23e7010 | |
| parent | 569701cfc898091a414dad0650f89471b1962d49 (diff) | |
| parent | 179ab5c7353150ebaeac6e32fa55f96670c3c256 (diff) | |
Pull merge from richard/viewer-chui
44 files changed, 548 insertions, 319 deletions
| @@ -72,35 +72,35 @@ b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release  461c8c65b5c799ddfe365422f9be9c0095d91e7d 2.6.0-beta1-tip  9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2  9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2 -42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release -42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release  c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1  c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start  c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1 -c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release -c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release  56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start  d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1  d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1 -214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release -214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release +42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release +42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release +c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release +c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release  52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py  ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start  d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1  d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1  0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2  0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2 -8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release -8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release  3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work +214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release +214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release  7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1  7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1 +8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release +8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release  800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start  bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1  bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1 +5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start  dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release  dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release -5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start  beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1  beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1  be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release @@ -119,50 +119,50 @@ e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start  9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start  e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1  e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1 +6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start  fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release  fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release  fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release  fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release -6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start  6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start  be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1  be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1 -057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release -057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release  19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start  09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1  09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1 -6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release -6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release  e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1  e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start  e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1 -493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release -493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release +057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release +057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release +6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release +6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release  502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start  2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1  2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 +493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release +493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release +54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start +ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start  29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release  29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release  4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix  4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix -54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start -ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start  599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1  599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 -fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release -fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release  6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start  b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1  b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 -1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release +fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release +fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release  82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start  364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1  364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1  f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start  42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1  42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1 +1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release +1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release  e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2  e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2  b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start @@ -170,9 +170,9 @@ b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start  6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1  61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2  61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 +586907287be581817b2422b5137971b22d54ea48 3.0.4-start  0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release  0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release -586907287be581817b2422b5137971b22d54ea48 3.0.4-start  92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start  c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start  2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1 @@ -193,11 +193,11 @@ e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1  c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start  9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1  9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1 -a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release -a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release  40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start  523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1  523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1 +a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release +a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release  80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start @@ -248,68 +248,58 @@ bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156  6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148  2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155  24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153 -a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 -9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157  5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160  f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1  f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144 -089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 -600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 -c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163  2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164 +600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162  80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165  fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2  af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169  4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3  6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release +a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 +9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 +089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 +c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163  b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171  050e48759337249130f684b4a21080b683f61732 DRTVWR-168  09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170  f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158  f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1 -005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167  bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173  cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174  82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2  57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176  eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177  a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3 -888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175  4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180  5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183  6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4  9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184  ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5  28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release +005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167 +888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175  a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1 -81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186 -47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190 -cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 -c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188  9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 +47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190  421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 -4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191  33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195  e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193 -78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194  7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196  ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198  507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197  b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2  37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200  182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3 -248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203  6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199  7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2  7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201  84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4  092a9effbedd1a0276fa5ced520992ce00f96fbf CHUI-PV-0 -de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202  573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5 -34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag -6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205 -7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206  8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207  351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3  af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212 @@ -320,7 +310,6 @@ ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215  97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release  5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1  b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a -b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219  2b779f233ee6f38c89cb921650c773a96e63da92 DRTVWR-220  0b9d95f4bfb6867cbf56eaec51633b0da2f1262d DRTVWR-221  e6e553761829dc0270eaaa712b7cb0622535b076 3.4.1-beta3 @@ -345,21 +334,42 @@ baf97f06ae17223614c5e31aa42e71d87cff07fe DRTVWR-236  b2f21e3442542283a80e7eaebae9f833e5a927b6 DRTVWR-237  3f9be82de642d468c5fc272cb9d96b46b5498402 3.4.1-beta12  e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release +81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186 +cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 +c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188 +4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191 +78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194 +248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203 +de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202 +34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag +6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205 +7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206 +b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219  32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217  704bbae7b182a1f2811a47a054e680522966f54a 3.4.2-beta1 -d799593b53ed733862e9a13871e318e886469377 DRTVWR-208 -e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223  288539fc0408ed4b69a99665de33bbbc2c3c08fe DRTVWR-216  e664473c16df1d82ffaff382e7b3e023da202d52 3.4.2-beta2 -93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240  0891d7a773a31397dcad48be3fa66531d567a821 DRTVWR-242  710785535362b3cb801b6a3dc4703be3373bd0cd 3.4.2-beta3 +e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243 +73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4 +16310aabccf315870f7cc9bf966926c0ad6954fa 3.4.2-release +d799593b53ed733862e9a13871e318e886469377 DRTVWR-208 +e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223 +93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240  2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209  f7bedce18ad52283e6072814db23318907261487 DRTVWR-238  7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210 -e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243 -73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4  5e4e4128b256525bafc07a62e35ae8527aaa9c9d DRTVWR-241  f1d3b3fcab28ed9ea532bf50db0ba96f5c8cc8e9 DRTVWR-232  4918b150e75df6b516fb6c2616d32043fa6b4cac DRTVWR-245  94ab2b49458ab372a95d2d6949fdf574f413068d 3.4.3-beta1 +965b9a35e260c0f53be1a25f0db7abc8a67eaf47 DRTVWR-252 +bb10adc4f76cf0067fca7075146f00cdc0740e9d DRTVWR-251 +ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253 +48382ec79741671d19ce4cc3e8cd59e9a521e4a7 DRTVWR-254 +937ec902bb9a1cbceff17bd89e3923352b0a5fbc DRTVWR-256 +44e764a6ac9e672a4f3bce821a4b6a218590c374 DRTVWR-258 +c23d734065ed593b2413385aecd8366d8e0ee96b DRTVWR-257 +452ce96d4046dc05a3ecaecc203e2cc8ddd72e76 DRTVWR-259 +5cba5f39d0a81d659f24ebc4b5efd025a39e3db1 3.4.3-release diff --git a/indra/llcorehttp/_httpinternal.h b/indra/llcorehttp/_httpinternal.h index 465e2036b3..14f744a9f1 100644 --- a/indra/llcorehttp/_httpinternal.h +++ b/indra/llcorehttp/_httpinternal.h @@ -111,7 +111,15 @@ const int HTTP_TRACE_MIN = HTTP_TRACE_OFF;  const int HTTP_TRACE_MAX = HTTP_TRACE_CURL_BODIES;  // Request retry limits -const int HTTP_RETRY_COUNT_DEFAULT = 5; +// +// At a minimum, retries need to extend past any throttling +// window we're expecting from central services.  In the case +// of Linden services running through the caps routers, there's +// a five-second or so window for throttling with some spillover. +// We want to span a few windows to allow transport to slow +// after onset of the throttles and then recover without a final +// failure.  Other systems may need other constants. +const int HTTP_RETRY_COUNT_DEFAULT = 8;  const int HTTP_RETRY_COUNT_MIN = 0;  const int HTTP_RETRY_COUNT_MAX = 100; diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp index 998dc9240b..40ad4f047d 100644 --- a/indra/llcorehttp/examples/http_texture_load.cpp +++ b/indra/llcorehttp/examples/http_texture_load.cpp @@ -153,6 +153,7 @@ public:  //  int main(int argc, char** argv)  { +	LLCore::HttpStatus status;  	bool do_random(false);  	bool do_verbose(false); @@ -215,6 +216,9 @@ int main(int argc, char** argv)  	// Initialization  	init_curl();  	LLCore::HttpRequest::createService(); +	LLCore::HttpRequest::setPolicyClassOption(LLCore::HttpRequest::DEFAULT_POLICY_ID, +											  LLCore::HttpRequest::CP_CONNECTION_LIMIT, +											  concurrency_limit);  	LLCore::HttpRequest::startThread();  	// Get service point @@ -228,7 +232,7 @@ int main(int argc, char** argv)  	ws.loadTextureUuids(uuids);  	ws.mRandomRange = do_random;  	ws.mVerbose = do_verbose; -	ws.mMaxConcurrency = concurrency_limit; +	ws.mMaxConcurrency = 100;  	if (! ws.mTextures.size())  	{ diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index 846311a8d0..c1b96a43da 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -51,11 +51,13 @@ void check_framebuffer_status()  }  bool LLRenderTarget::sUseFBO = false; +U32 LLRenderTarget::sCurFBO = 0;  LLRenderTarget::LLRenderTarget() :  	mResX(0),  	mResY(0),  	mFBO(0), +	mPreviousFBO(0),  	mDepth(0),  	mStencil(0),  	mUseDepth(false), @@ -107,6 +109,9 @@ void LLRenderTarget::resize(U32 resx, U32 resy, U32 color_fmt)  bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)  { +	resx = llmin(resx, (U32) 4096); +	resy = llmin(resy, (U32) 4096); +  	stop_glerror();  	release();  	stop_glerror(); @@ -146,7 +151,7 @@ bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo  				glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), mDepth, 0);  				stop_glerror();  			} -			glBindFramebuffer(GL_FRAMEBUFFER, 0); +			glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		}  		stop_glerror(); @@ -233,7 +238,7 @@ bool LLRenderTarget::addColorAttachment(U32 color_fmt)  		check_framebuffer_status(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  	}  	mTex.push_back(tex); @@ -322,7 +327,7 @@ void LLRenderTarget::shareDepthBuffer(LLRenderTarget& target)  		check_framebuffer_status(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		target.mUseDepth = true;  	} @@ -385,9 +390,13 @@ void LLRenderTarget::bindTarget()  {  	if (mFBO)  	{ +		mPreviousFBO = sCurFBO; +  		stop_glerror();  		glBindFramebuffer(GL_FRAMEBUFFER, mFBO); +		sCurFBO = mFBO; +  		stop_glerror();  		if (gGLManager.mHasDrawBuffers)  		{ //setup multiple render targets @@ -413,16 +422,6 @@ void LLRenderTarget::bindTarget()  	sBoundTarget = this;  } -// static -void LLRenderTarget::unbindTarget() -{ -	if (gGLManager.mHasFramebufferObject) -	{ -		glBindFramebuffer(GL_FRAMEBUFFER, 0); -	} -	sBoundTarget = NULL; -} -  void LLRenderTarget::clear(U32 mask_in)  {  	U32 mask = GL_COLOR_BUFFER_BIT; @@ -488,7 +487,8 @@ void LLRenderTarget::flush(bool fetch_depth)  	else  	{  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, mPreviousFBO); +		sCurFBO = mPreviousFBO;  		stop_glerror();  	}  } @@ -518,7 +518,7 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0,  		stop_glerror();  		glCopyTexSubImage2D(LLTexUnit::getInternalType(mUsage), 0, srcX0, srcY0, dstX0, dstY0, dstX1, dstY1);  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		stop_glerror();  	}  	else @@ -535,7 +535,7 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0,  		stop_glerror();  		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		stop_glerror();  	}  } @@ -561,7 +561,7 @@ void LLRenderTarget::copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0  		stop_glerror();  		glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		stop_glerror();  	}  } diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index e1a51304f1..cf15f66d31 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -63,6 +63,7 @@ public:  	//whether or not to use FBO implementation  	static bool sUseFBO;   	static U32 sBytesAllocated; +	static U32 sCurFBO;  	LLRenderTarget();  	~LLRenderTarget(); @@ -96,9 +97,6 @@ public:  	//applies appropriate viewport  	void bindTarget(); -	//unbind target for rendering -	static void unbindTarget(); -	  	//clear render targer, clears depth buffer if present,  	//uses scissor rect if in copy-to-texture mode  	void clear(U32 mask = 0xFFFFFFFF); @@ -148,6 +146,7 @@ protected:  	std::vector<U32> mTex;  	std::vector<U32> mInternalFormat;  	U32 mFBO; +	U32 mPreviousFBO;  	U32 mDepth;  	bool mStencil;  	bool mUseDepth; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 423e5a00df..24fa0a0cd4 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -6909,7 +6909,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>1</integer> +      <integer>0</integer>      </map>      <key>PluginAttachDebuggerToPlugins</key>      <map> @@ -14290,5 +14290,17 @@          <real>1.0</real>        </array>      </map> + +  <key>SimulateFBOFailure</key> +  <map> +    <key>Comment</key> +    <string>[DEBUG] Make allocateScreenBuffer return false.  Used to test error handling.</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>  </map>  </llsd> diff --git a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl index e02a7b405b..2cef8f2a5d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl @@ -2093,7 +2093,6 @@ uniform sampler2D diffuseMap;  uniform vec2 rcp_screen_res;  uniform vec4 rcp_frame_opt;  uniform vec4 rcp_frame_opt2; -uniform vec2 screen_res;  VARYING vec2 vary_fragcoord;  VARYING vec2 vary_tc; diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 5e8189caa5..4c39014c8b 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -70,11 +70,11 @@ ATI ASUS EAH58xx						.*ATI.*ASUS.*EAH58.*					5	1	1	4.1  ATI ASUS EAH62xx						.*ATI.*ASUS.*EAH62.*					2	1	0	0  ATI ASUS EAH63xx						.*ATI.*ASUS.*EAH63.*					2	1	0	0  ATI ASUS EAH64xx						.*ATI.*ASUS.*EAH64.*					2	1	0	0 -ATI ASUS EAH65xx						.*ATI.*ASUS.*EAH65.*					2	1	0	0 -ATI ASUS EAH66xx						.*ATI.*ASUS.*EAH66.*					3	1	0	0 +ATI ASUS EAH65xx						.*ATI.*ASUS.*EAH65.*					2	1	0	4.1 +ATI ASUS EAH66xx						.*ATI.*ASUS.*EAH66.*					3	1	0	4.1  ATI ASUS EAH67xx						.*ATI.*ASUS.*EAH67.*					3	1	0	0 -ATI ASUS EAH68xx						.*ATI.*ASUS.*EAH68.*					5	1	0	0 -ATI ASUS EAH69xx						.*ATI.*ASUS.*EAH69.*					5	1	0	0 +ATI ASUS EAH68xx						.*ATI.*ASUS.*EAH68.*					5	1	0	4 +ATI ASUS EAH69xx						.*ATI.*ASUS.*EAH69.*					5	1	0	4.1  ATI ASUS Radeon X1xxx					.*ATI.*ASUS.*X1.*						2	1	1	2.1  ATI Radeon X7xx							.*ATI.*ASUS.*X7.*						1	1	0	0  ATI Radeon X19xx						.*ATI.*(Radeon|Diamond) X19.* ?.*		2	1	1	2.1 @@ -108,13 +108,22 @@ ATI Radeon HD 65xx						.*ATI.*AMD Radeon.* HD [67]5..[MG]		2	1	1	4.2  ATI Radeon HD 66xx						.*ATI.*AMD Radeon.* HD [67]6..[MG]		3	1	1	4.2  ATI Radeon HD 7100						.*ATI.*AMD Radeon.* HD 71.*				2	1	0	0  ATI Radeon HD 7200						.*ATI.*AMD Radeon.* HD 72.*				2	1	0	0 -ATI Radeon HD 7300						.*ATI.*AMD Radeon.* HD 73.*				2	1	0	0 -ATI Radeon HD 7400						.*ATI.*AMD Radeon.* HD 74.*				2	1	0	0 +ATI Radeon HD 7300						.*ATI.*AMD Radeon.* HD 73.*				2	1	0	4.2 +ATI Radeon HD 7400						.*ATI.*AMD Radeon.* HD 74.*				2	1	0	4.2  ATI Radeon HD 7500						.*ATI.*AMD Radeon.* HD 75.*				3	1	1	4.2 -ATI Radeon HD 7600						.*ATI.*AMD Radeon.* HD 76.*				3	1	0	0 +ATI Radeon HD 7600						.*ATI.*AMD Radeon.* HD 76.*				3	1	0	4.2  ATI Radeon HD 7700						.*ATI.*AMD Radeon.* HD 77.*				4	1	1	4.2  ATI Radeon HD 7800						.*ATI.*AMD Radeon.* HD 78.*				5	1	1	4.2  ATI Radeon HD 7900						.*ATI.*AMD Radeon.* HD 79.*				5	1	1	4.2 +ATI ASUS HD7100							.*ATI.*ASUS.* HD71.*					2	1	0	0 +ATI ASUS HD7200							.*ATI.*ASUS.* HD72.*					2	1	0	0 +ATI ASUS HD7300							.*ATI.*ASUS.* HD73.*					2	1	0	0 +ATI ASUS HD7400							.*ATI.*ASUS.* HD74.*					2	1	0	0 +ATI ASUS HD7500							.*ATI.*ASUS.* HD75.*					3	1	1	4.2 +ATI ASUS HD7600							.*ATI.*ASUS.* HD76.*					3	1	0	0 +ATI ASUS HD7700							.*ATI.*ASUS.* HD77.*					4	1	1	4.2 +ATI ASUS HD7800							.*ATI.*ASUS.* HD78.*					5	1	1	4.2 +ATI ASUS HD7900							.*ATI.*ASUS.* HD79.*					5	1	1	4.2  ATI Mobility Radeon 4100				.*ATI.*Mobility.*41..					1	1	1	3.3  ATI Mobility Radeon 7xxx				.*ATI.*Mobility.*Radeon 7.*				0	1	1	1.3  ATI Mobility Radeon 8xxx				.*ATI.*Mobility.*Radeon 8.*				0	1	0	0 @@ -167,6 +176,7 @@ ATI Radeon HD 3400						.*ATI.*Radeon HD *34..					1	1	1	4  ATI Radeon HD 3500						.*ATI.*Radeon HD *35..					2	1	0	0  ATI Radeon HD 3600						.*ATI.*Radeon HD *36..					3	1	1	3.3  ATI Radeon HD 3700						.*ATI.*Radeon HD *37..					3	1	0	0 +ATI HD3700								.*ATI.* HD37..							3	1	0	3.3  ATI Radeon HD 3800						.*ATI.*Radeon HD *38..					3	1	1	4  ATI Radeon HD 4100						.*ATI.*Radeon HD *41..					1	1	0	0  ATI Radeon HD 4200						.*ATI.*Radeon HD *42..					1	1	1	4 @@ -176,8 +186,10 @@ ATI Radeon HD 4500						.*ATI.*Radeon HD *45..					2	1	1	3.3  ATI Radeon HD 4600						.*ATI.*Radeon HD *46..					3	1	1	4  ATI Radeon HD 4700						.*ATI.*Radeon HD *47..					3	1	1	3.3  ATI Radeon HD 4800						.*ATI.*Radeon HD *48..					3	1	1	4 +ATI ASUS EAH5400						.*ATI.*ASUS EAH54..						3	1	1	4.2  ATI Radeon HD 5400						.*ATI.*Radeon HD *54..					3	1	1	4.2  ATI Radeon HD 5500						.*ATI.*Radeon HD *55..					3	1	1	4.2 +ATI ASUS EAH5500						.*ATI.*ASUS EAH55..						3	1	1	4.2  ATI Radeon HD 5600						.*ATI.*Radeon HD *56..					3	1	1	4.2  ATI Radeon HD 5700						.*ATI.*Radeon HD *57..					3	1	1	4.2  ATI Radeon HD 5800						.*ATI.*Radeon HD *58..					4	1	1	4.2 @@ -270,7 +282,7 @@ ATI FirePro 5000						.*ATI.*FirePro V5.*						3	1	0	0  ATI FirePro 7000						.*ATI.*FirePro V7.*						3	1	0	0  ATI FirePro M							.*ATI.*FirePro M.*						3	1	1	4.2  ATI R300 (9700)							.*R300.*								0	1	1	2.1 -ATI Radeon								.*ATI.*(Diamond|Radeon).*				0	1	0	0 +ATI Radeon								.*ATI.*(Diamond|Radeon).*				0	1	0	4.2  Intel X3100								.*Intel.*X3100.*						1	1	1	2.1  Intel GMA 3600							.*Intel.* 3600.*						0	1	1	3  Intel 830M								.*Intel.*830M							0	0	0	0 @@ -293,9 +305,9 @@ Intel Brookdale							.*Intel.*Brookdale.*					0	0	1	1.3  Intel Cantiga							.*Intel.*Cantiga.*						0	0	1	2  Intel Eaglelake							.*Intel.*Eaglelake.*					1	1	1	2  Intel Graphics Media HD					.*Intel.*Graphics Media.*HD.*			1	1	1	2.1 -Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*				2	1	0	0 +Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*				2	1	0	4  Intel HD Graphics 3000					.*Intel.*HD Graphics 3.*				3	1	1	3.1 -Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*				3	1	1	3.3 +Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*				3	1	1	4  Intel HD2000							.*Intel.*HD2000.*						2	1	0	0  Intel HD3000							.*Intel.*HD3000.*						3	1	0	0  Intel HD Graphics						.*Intel.*HD Graphics.*					2	1	1	4 @@ -341,8 +353,8 @@ NVIDIA GT 325M							.*NVIDIA .*GT *32*M.*					3	1	1	3.3  NVIDIA GT 330M							.*NVIDIA .*GT *33*M.*					3	1	1	3.3  NVIDIA GT 340M							.*NVIDIA .*GT *34*M.*					4	1	1	3.3  NVIDIA GTS 350M							.*NVIDIA .*GTS *35*M.*					4	1	1	3.3 -NVIDIA GTS 360M							.*NVIDIA .*GTS *36*M.*					5	1	1	3.3 -NVIDIA 405M								.*NVIDIA .* 40*M.*						2	1	0	0 +NVIDIA GTS 360M							.*NVIDIA .*GTS *360M.*					5	1	1	3.3 +NVIDIA 405M								.*NVIDIA .* 40*M.*						2	1	0	4.2  NVIDIA 410M								.*NVIDIA .* 41*M.*						3	1	0	0  NVIDIA GT 415M							.*NVIDIA .*GT *41*M.*					3	1	1	4.2  NVIDIA GT 420M							.*NVIDIA .*GT *42*M.*					3	1	1	4.2 @@ -369,46 +381,51 @@ NVIDIA GTX 670M							.*NVIDIA .*GTX *67*M.*					5	1	1	4.2  NVIDIA GTX 680M							.*NVIDIA .*GTX *68*M.*					5	1	0	0  NVIDIA GTX 690M							.*NVIDIA .*GTX *69*M.*					5	1	0	0  NVIDIA G100								.*NVIDIA .*G10.*						3	1	1	4.2 -NVIDIA GT 120							.*NVIDIA .*GT *12.*						2	1	0	0 -NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	0 +NVIDIA GT 120							.*NVIDIA .*GT *12.*						2	1	0	3 +NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	3.3  NVIDIA GTS 150							.*NVIDIA .*GTS *15.*					2	1	0	0 -NVIDIA 205								.*NVIDIA .*GeForce 205.*				2	1	1	3.3 +NVIDIA 200								.*NVIDIA .*GeForce 20.*					2	1	1	3.3 +NVIDIA G200								.*NVIDIA .*GeForce G20.*				2	1	1	3.3 +NVIDIA G210								.*NVIDIA .*GeForce G210.*				3	1	1	3.3  NVIDIA 210								.*NVIDIA .*GeForce 210.*				3	1	1	3.3  NVIDIA GT 220							.*NVIDIA .*GT *22.*						2	1	1	3.3 +NVIDIA GT 230							.*NVIDIA .*GT *23.*						2	1	1	3.3 +NVIDIA GT 240							.*NVIDIA .*GT *24.*						4	1	1	3.3  NVIDIA GTS 240							.*NVIDIA .*GTS *24.*					4	1	1	3.3  NVIDIA GTS 250							.*NVIDIA .*GTS *25.*					4	1	1	3.3  NVIDIA GTX 260							.*NVIDIA .*GTX *26.*					4	1	1	3.3 -NVIDIA GTX 270							.*NVIDIA .*GTX *27.*					4	1	0	0 +NVIDIA GTX 270							.*NVIDIA .*GTX *27.*					4	1	0	3.3  NVIDIA GTX 280							.*NVIDIA .*GTX *28.*					4	1	1	3.3 -NVIDIA GTX 290							.*NVIDIA .*GTX *29.*					5	1	0	0 +NVIDIA GTX 290							.*NVIDIA .*GTX *29.*					5	1	0	3.3  NVIDIA 310								.*NVIDIA .*GeForce 310.*				3	1	1	3.3  NVIDIA 315								.*NVIDIA .*GeForce 315.*				3	1	1	3.3 -NVIDIA GT 320							.*NVIDIA .*GT *32.*						3	1	0	0 -NVIDIA GT 330							.*NVIDIA .*GT *33.*						3	1	0	0 +NVIDIA GT 320							.*NVIDIA .*GT *32.*						3	1	0	3.3 +NVIDIA GT 330							.*NVIDIA .*GT *33.*						3	1	0	3.3  NVIDIA GT 340							.*NVIDIA .*GT *34.*						3	1	0	0 -NVIDIA 405								.*NVIDIA .* 405.*						3	1	0	0 +NVIDIA 405								.*NVIDIA .* 405.*						3	1	0	3.3  NVIDIA GT 420							.*NVIDIA .*GT *42.*						3	1	1	4.2 -NVIDIA GT 430							.*NVIDIA .*GT *43.*						3	1	1	4.1 -NVIDIA GT 440							.*NVIDIA .*GT *44.*						4	1	0	0 +NVIDIA GT 430							.*NVIDIA .*GT *43.*						3	1	1	4.2 +NVIDIA GT 440							.*NVIDIA .*GT *44.*						4	1	0	4.2  NVIDIA GTS 450							.*NVIDIA .*GTS *45.*					4	1	1	4.2 -NVIDIA GTX 460							.*NVIDIA .*GTX *46.*					5	1	1	4.2 +NVIDIA GTX 460							.*NVIDIA .*GTX *46.*					5	1	1	4.3  NVIDIA GTX 470							.*NVIDIA .*GTX *47.*					5	1	1	4.2  NVIDIA GTX 480							.*NVIDIA .*GTX *48.*					5	1	1	4.2  NVIDIA 510								.*NVIDIA .* 510.*						3	1	0	0  NVIDIA GT 520							.*NVIDIA .*GT *52.*						3	1	1	4.2  NVIDIA GT 530							.*NVIDIA .*GT *53.*						3	1	1	4.2  NVIDIA GT 540							.*NVIDIA .*GT *54.*						3	1	1	4.2 -NVIDIA GTX 550							.*NVIDIA .*GTX *55.*					5	1	1	4.2 +NVIDIA GTX 550							.*NVIDIA .*GTX *55.*					5	1	1	4.3  NVIDIA GTX 560							.*NVIDIA .*GTX *56.*					5	1	1	4.2  NVIDIA GTX 570							.*NVIDIA .*GTX *57.*					5	1	1	4.2 -NVIDIA GTX 580							.*NVIDIA .*GTX *58.*					5	1	1	4.2 +NVIDIA GTX 580							.*NVIDIA .*GTX *58.*					5	1	1	4.3  NVIDIA GTX 590							.*NVIDIA .*GTX *59.*					5	1	1	4.2  NVIDIA GT 610							.*NVIDIA .*GT *61.*						3	1	1	4.2 -NVIDIA GT 620							.*NVIDIA .*GT *62.*						3	1	0	0 -NVIDIA GT 630							.*NVIDIA .*GT *63.*						3	1	0	0 -NVIDIA GT 640							.*NVIDIA .*GT *64.*						3	1	0	0 +NVIDIA GT 620							.*NVIDIA .*GT *62.*						3	1	0	4.2 +NVIDIA GT 630							.*NVIDIA .*GT *63.*						3	1	0	4.2 +NVIDIA GT 640							.*NVIDIA .*GT *64.*						3	1	0	4.3  NVIDIA GT 650							.*NVIDIA .*GT *65.*						3	1	1	4.2 -NVIDIA GTX 660							.*NVIDIA .*GTX *66.*					5	1	0	0 +NVIDIA GTX 650							.*NVIDIA .*GTX *65.*					3	1	1	4.2 +NVIDIA GTX 660							.*NVIDIA .*GTX *66.*					5	1	0	4.3  NVIDIA GTX 670							.*NVIDIA .*GTX *67.*					5	1	1	4.2  NVIDIA GTX 680							.*NVIDIA .*GTX *68.*					5	1	1	4.2  NVIDIA GTX 690							.*NVIDIA .*GTX *69.*					5	1	1	4.2 @@ -442,8 +459,8 @@ NVIDIA GeForce 7600						.*NVIDIA .*GeForce 76.*					2	1	1	2.1  NVIDIA GeForce 7800						.*NVIDIA .*GeForce 78.*					2	1	1	2.1  NVIDIA GeForce 7900						.*NVIDIA .*GeForce 79.*					3	1	1	2.1  NVIDIA GeForce 8100						.*NVIDIA .*GeForce 81.*					1	1	0	0 -NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 8200M.*				1	1	0	0 -NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*					1	1	0	0 +NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 8200M.*				1	1	0	3.3 +NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*					1	1	0	2.1  NVIDIA GeForce 8300						.*NVIDIA .*GeForce 83.*					3	1	1	3.3  NVIDIA GeForce 8400M					.*NVIDIA .*GeForce 8400M.*				1	1	1	3.3  NVIDIA GeForce 8400						.*NVIDIA .*GeForce 84.*					2	1	1	3.3 @@ -455,9 +472,9 @@ NVIDIA GeForce 8700						.*NVIDIA .*GeForce 87.*					3	1	0	0  NVIDIA GeForce 8800M					.*NVIDIA .*GeForce 8800M.*				2	1	1	3.3  NVIDIA GeForce 8800						.*NVIDIA .*GeForce 88.*					3	1	1	3.3  NVIDIA GeForce 9100M					.*NVIDIA .*GeForce 9100M.*				0	1	0	0 -NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*					0	1	0	0 -NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 9200M.*				1	1	0	0 -NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*					1	1	0	0 +NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*					0	1	0	3.3 +NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 9200M.*				1	1	0	3.1 +NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*					1	1	0	3.3  NVIDIA GeForce 9300M					.*NVIDIA .*GeForce 9300M.*				1	1	1	3.3  NVIDIA GeForce 9300						.*NVIDIA .*GeForce 93.*					1	1	1	3.3  NVIDIA GeForce 9400M					.*NVIDIA .*GeForce 9400M.*				2	1	1	3.3 @@ -470,7 +487,7 @@ NVIDIA GeForce 9700M					.*NVIDIA .*GeForce 9700M.*				0	1	1	3.3  NVIDIA GeForce 9800M					.*NVIDIA .*GeForce 9800M.*				2	1	1	3.3  NVIDIA GeForce 9800						.*NVIDIA .*GeForce 98.*					3	1	1	3.3  NVIDIA GeForce FX 5100					.*NVIDIA .*GeForce FX 51.*				0	1	0	0 -NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*				0	1	0	0 +NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*				0	1	0	2.1  NVIDIA GeForce FX 5300					.*NVIDIA .*GeForce FX 53.*				0	1	0	0  NVIDIA GeForce FX 5500					.*NVIDIA .*GeForce FX 55.*				0	1	1	2.1  NVIDIA GeForce FX 5600					.*NVIDIA .*GeForce FX 56.*				1	1	1	2.1 @@ -505,7 +522,7 @@ NVIDIA D9M								.*NVIDIA .*D9M.*						1	1	0	0  NVIDIA G94								.*NVIDIA .*G94.*						3	1	0	0  NVIDIA GeForce Go 6						.*GeForce Go 6.*						1	1	0	0  NVIDIA ION 2							.*NVIDIA .*ION 2.*						2	1	0	0 -NVIDIA ION 								.*NVIDIA Corporation.*ION.*				2	1	1	0 +NVIDIA ION 								.*NVIDIA Corporation.*ION.*				2	1	1	3.3  NVIDIA NB8M								.*NVIDIA .*NB8M.*						1	1	0	0  NVIDIA NB8P								.*NVIDIA .*NB8P.*						2	1	0	0  NVIDIA NB9E								.*NVIDIA .*NB9E.*						3	1	0	0 @@ -513,7 +530,7 @@ NVIDIA NB9M								.*NVIDIA .*NB9M.*						1	1	0	0  NVIDIA NB9P								.*NVIDIA .*NB9P.*						2	1	0	0  NVIDIA N10								.*NVIDIA .*N10.*						1	1	0	0  NVIDIA GeForce PCX						.*GeForce PCX.*							0	1	0	0 -NVIDIA Generic							.*NVIDIA .*Unknown.*					0	0	0	0 +NVIDIA Generic							.*NVIDIA .*Unknown.*					0	0	0	3  NVIDIA NV17								.*NVIDIA .*NV17.*						0	1	0	0  NVIDIA NV34								.*NVIDIA .*NV34.*						0	1	0	0  NVIDIA NV35								.*NVIDIA .*NV35.*						0	1	0	0 @@ -521,7 +538,7 @@ NVIDIA NV36								.*NVIDIA .*NV36.*						1	1	0	0  NVIDIA NV41								.*NVIDIA .*NV41.*						1	1	0	0  NVIDIA NV43								.*NVIDIA .*NV43.*						1	1	0	0  NVIDIA NV44								.*NVIDIA .*NV44.*						1	1	0	0 -NVIDIA nForce							.*NVIDIA .*nForce.*						0	0	0	0 +NVIDIA nForce							.*NVIDIA .*nForce.*						0	0	0	3.3  NVIDIA MCP51							.*NVIDIA .*MCP51.*						1	1	0	0  NVIDIA MCP61							.*NVIDIA .*MCP61.*						1	1	0	0  NVIDIA MCP67							.*NVIDIA .*MCP67.*						1	1	0	0 @@ -532,40 +549,40 @@ NVIDIA MCP78							.*NVIDIA .*MCP78.*						1	1	0	0  NVIDIA MCP79							.*NVIDIA .*MCP79.*						1	1	0	0  NVIDIA MCP7A							.*NVIDIA .*MCP7A.*						1	1	0	0  NVIDIA Quadro2							.*Quadro2.*								0	1	0	0 -NVIDIA Quadro 1000M						.*Quadro.*1000M.*						2	1	0	0 -NVIDIA Quadro 2000 M/D					.*Quadro.*2000.*						3	1	0	0 +NVIDIA Quadro 1000M						.*Quadro.*1000M.*						2	1	0	4.2 +NVIDIA Quadro 2000 M/D					.*Quadro.*2000.*						3	1	0	4.2  NVIDIA Quadro 3000M						.*Quadro.*3000M.*						3	1	0	0  NVIDIA Quadro 4000M						.*Quadro.*4000M.*						3	1	0	0 -NVIDIA Quadro 4000						.*Quadro *4000.*						3	1	0	0 +NVIDIA Quadro 4000						.*Quadro *4000.*						3	1	0	4.2  NVIDIA Quadro 50x0 M					.*Quadro.*50.0.*						3	1	0	0  NVIDIA Quadro 6000						.*Quadro.*6000.*						3	1	0	0 -NVIDIA Quadro 400						.*Quadro.*400.*							2	1	0	0 -NVIDIA Quadro 600						.*Quadro.*600.*							2	1	0	0 +NVIDIA Quadro 400						.*Quadro.*400.*							2	1	0	3.3 +NVIDIA Quadro 600						.*Quadro.*600.*							2	1	0	3.3  NVIDIA Quadro4							.*Quadro4.*								0	1	0	0  NVIDIA Quadro DCC						.*Quadro DCC.*							0	1	0	0  NVIDIA Quadro CX						.*Quadro.*CX.*							3	1	0	0  NVIDIA Quadro FX 770M					.*Quadro.*FX *770M.*					2	1	0	0 -NVIDIA Quadro FX 1500M					.*Quadro.*FX *1500M.*					1	1	0	0 +NVIDIA Quadro FX 1500M					.*Quadro.*FX *1500M.*					1	1	0	2.1  NVIDIA Quadro FX 1600M					.*Quadro.*FX *1600M.*					2	1	0	0  NVIDIA Quadro FX 2500M					.*Quadro.*FX *2500M.*					2	1	0	0  NVIDIA Quadro FX 2700M					.*Quadro.*FX *2700M.*					3	1	0	0 -NVIDIA Quadro FX 2800M					.*Quadro.*FX *2800M.*					3	1	0	0 -NVIDIA Quadro FX 3500					.*Quadro.*FX *3500.*					2	1	0	0 +NVIDIA Quadro FX 2800M					.*Quadro.*FX *2800M.*					3	1	0	3.3 +NVIDIA Quadro FX 3500					.*Quadro.*FX *3500.*					2	1	0	2.1  NVIDIA Quadro FX 3600					.*Quadro.*FX *3600.*					3	1	0	0 -NVIDIA Quadro FX 3700					.*Quadro.*FX *3700.*					3	1	0	0 -NVIDIA Quadro FX 3800					.*Quadro.*FX *3800.*					3	1	0	0 +NVIDIA Quadro FX 3700					.*Quadro.*FX *3700.*					3	1	0	3.3 +NVIDIA Quadro FX 3800					.*Quadro.*FX *3800.*					3	1	0	3.2  NVIDIA Quadro FX 4500					.*Quadro.*FX *45.*						3	1	0	0 -NVIDIA Quadro FX 880M					.*Quadro.*FX *880M.*					3	1	0	0 +NVIDIA Quadro FX 880M					.*Quadro.*FX *880M.*					3	1	0	3.3  NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro *FX *4800.*			3	1	0	0 -NVIDIA Quadro FX						.*Quadro FX.*							1	1	0	0 -NVIDIA Quadro NVS 1xxM					.*Quadro NVS *1.[05]M.*					0	1	1	2.1 +NVIDIA Quadro FX						.*Quadro FX.*							1	1	0	3.3 +NVIDIA Quadro NVS 1xxM					.*Quadro NVS *1.[05]M.*					0	1	1	3.3  NVIDIA Quadro NVS 300M					.*NVIDIA .*NVS *300M.*					2	1	0	0  NVIDIA Quadro NVS 320M					.*NVIDIA .*NVS *320M.*					2	1	0	0  NVIDIA Quadro NVS 2100M					.*NVIDIA .*NVS *2100M.*					2	1	0	0  NVIDIA Quadro NVS 3100M					.*NVIDIA .*NVS *3100M.*					2	1	0	0 -NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS *4200M.*					2	1	0	0 +NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS *4200M.*					2	1	0	4.1  NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS *5100M.*					2	1	0	0 -NVIDIA Quadro NVS						.*NVIDIA .*NVS							0	1	0	0 +NVIDIA Quadro NVS						.*NVIDIA .*NVS							0	1	0	3.2  NVIDIA Corporation N12P					.*NVIDIA .*N12P.*						1	1	1	4.1  NVIDIA Corporation N11M					.*NVIDIA .*N11M.*						2	1	0	0  NVIDIA RIVA TNT							.*RIVA TNT.*							0	0	0	0 @@ -579,5 +596,3 @@ Apple Generic							Apple.*Generic.*						0	0	0	0  Apple Software Renderer					Apple.*Software Renderer.*				0	0	0	0  Humper									Humper.*								0	1	1	2.1  PowerVR SGX545							.*PowerVR SGX.*							1	1	1	3 - - diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h index f55967926a..4929efb7d0 100644 --- a/indra/newview/llavatariconctrl.h +++ b/indra/newview/llavatariconctrl.h @@ -29,7 +29,7 @@  #include <boost/signals2.hpp> -#include "lliconctrl.h" +#include "../llui/lliconctrl.h"  #include "llavatarpropertiesprocessor.h"  #include "llviewermenu.h" diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 84e177d4a4..e52677925e 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -141,6 +141,17 @@ BOOL  LLAvatarListItem::postBuild()  	return TRUE;  } +void LLAvatarListItem::handleVisibilityChange ( BOOL new_visibility ) +{ +    //Adjust positions of icons (info button etc) when  +    //speaking indicator visibility was changed/toggled while panel was closed (not visible) +    if(new_visibility && mSpeakingIndicator->getIndicatorToggled()) +    { +        updateChildren(); +        mSpeakingIndicator->setIndicatorToggled(false); +    } +} +  void LLAvatarListItem::fetchAvatarName()  {  	if (mAvatarNameCacheConnection.connected()) diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 41853b6b51..96aed20016 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -84,6 +84,7 @@ public:  	/**  	 * Processes notification from speaker indicator to update children when indicator's visibility is changed.  	 */ +    virtual void handleVisibilityChange ( BOOL new_visibility );  	virtual S32	notifyParent(const LLSD& info);  	virtual void onMouseLeave(S32 x, S32 y, MASK mask);  	virtual void onMouseEnter(S32 x, S32 y, MASK mask); diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index 7177d3a414..743a6ba40b 100755 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -30,8 +30,8 @@  #include <boost/signals2.hpp>  #include "llavatarname.h" -#include "llfolderviewitem.h" -#include "llfolderviewmodel.h" +#include "../llui/llfolderviewitem.h" +#include "../llui/llfolderviewmodel.h"  #include "llviewerfoldertype.h"  // Implementation of conversations list diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index f088a8c084..527c0ad233 100755 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -223,10 +223,11 @@ BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask )      //This node (conversation) was selected and a child (participant) was not      if(result && getRoot()->getCurSelectedItem() == this) -    { -        (LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"))-> -            selectConversationPair(session_id, false); -    } +	{ +		LLFloaterIMContainer *im_container = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); +		im_container->selectConversationPair(session_id, false); +		im_container->collapseMessagesPane(false); +	}  	return result;  } diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index a6f408403b..fb2834f26a 100755 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -27,10 +27,10 @@  #ifndef LL_LLCONVERSATIONVIEW_H  #define LL_LLCONVERSATIONVIEW_H -#include "llfolderviewitem.h" +#include "../llui/llfolderviewitem.h"  #include "llavatariconctrl.h" -#include "llbutton.h" +#include "../llui/llbutton.h"  #include "lloutputmonitorctrl.h"  class LLTextBox; diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 6f11d4d4ca..24a27c5146 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -419,7 +419,7 @@ void LLFeatureManager::parseGPUTable(std::string filename)  		// setup the tokenizer  		std::string buf(buffer); -		std::string cls, label, expr, supported; +		std::string cls, label, expr, supported, stats_based, expected_gl_version;  		boost_tokenizer tokens(buf, boost::char_separator<char>("\t\n"));  		boost_tokenizer::iterator token_iter = tokens.begin(); @@ -440,6 +440,14 @@ void LLFeatureManager::parseGPUTable(std::string filename)  		{  			supported = *token_iter++;  		} +		if (token_iter != tokens.end()) +		{ +			stats_based = *token_iter++; +		} +		if (token_iter != tokens.end()) +		{ +			expected_gl_version = *token_iter++; +		}  		if (label.empty() || expr.empty() || cls.empty() || supported.empty())  		{ @@ -450,7 +458,9 @@ void LLFeatureManager::parseGPUTable(std::string filename)  		json << "{'label' : '" << label << "',\n" <<   			"'regexp' : '" << expr << "',\n" <<  			"'class' : '" << cls << "',\n" << -			"'supported' : '" << supported << "'\n},\n"; +			"'supported' : '" << supported << "',\n" << +			"'stats_based' : " << stats_based <<  ",\n" << +			"'gl_version' : " << expected_gl_version << "\n},\n";  #endif  		for (U32 i = 0; i < expr.length(); i++)	 /*Flawfinder: ignore*/ @@ -720,7 +730,9 @@ void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)  			maskFeatures("High");  			maskFeatures("Class5");  			break; -		 +		case 6: +			maskFeatures("Ultra"); +			break;  		default:  			maskFeatures("Low");  			maskFeatures("Class0"); diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index a76714950d..3a5f2ae854 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -88,6 +88,11 @@ LLFloaterIMContainer::~LLFloaterIMContainer()  	mNewMessageConnection.disconnect();  	LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, this); +	if (mMicroChangedSignal.connected()) +	{ +		mMicroChangedSignal.disconnect(); +	} +  	gSavedPerAccountSettings.setBOOL("ConversationsListPaneCollapsed", mConversationsPane->isCollapsed());  	gSavedPerAccountSettings.setBOOL("ConversationsMessagePaneCollapsed", mMessagesPane->isCollapsed()); @@ -213,7 +218,7 @@ BOOL LLFloaterIMContainer::postBuild()  	collapseMessagesPane(gSavedPerAccountSettings.getBOOL("ConversationsMessagePaneCollapsed"));  	collapseConversationsPane(gSavedPerAccountSettings.getBOOL("ConversationsListPaneCollapsed"));  	LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLFloaterIMSessionTab::processChatHistoryStyleUpdate)); - +	mMicroChangedSignal = LLVoiceClient::getInstance()->MicroChangedCallback(boost::bind(&LLFloaterIMContainer::updateSpeakBtnState, this));  	if (! mMessagesPane->isCollapsed())  	{  		S32 list_width = gSavedPerAccountSettings.getS32("ConversationsListPaneWidth"); @@ -886,41 +891,46 @@ void LLFloaterIMContainer::getSelectedUUIDs(uuid_vec_t& selected_uuids)  const LLConversationItem * LLFloaterIMContainer::getCurSelectedViewModelItem()  { -    LLConversationItem * conversationItem = NULL; +    LLConversationItem * conversation_item = NULL;      if(mConversationsRoot &&           mConversationsRoot->getCurSelectedItem() &&           mConversationsRoot->getCurSelectedItem()->getViewModelItem())      { -		LLFloaterIMSessionTab *selectedSession = LLFloaterIMSessionTab::getConversation(mSelectedSession); -		if (selectedSession && selectedSession->isTornOff()) +		LLFloaterIMSessionTab *selected_session_floater = LLFloaterIMSessionTab::getConversation(mSelectedSession); +		if (selected_session_floater && !selected_session_floater->getHost())  		{ -			conversationItem = selectedSession->getCurSelectedViewModelItem(); +			conversation_item = selected_session_floater->getCurSelectedViewModelItem();  		}  		else  		{ -			conversationItem = static_cast<LLConversationItem *>(mConversationsRoot->getCurSelectedItem()->getViewModelItem()); +			conversation_item = static_cast<LLConversationItem *>(mConversationsRoot->getCurSelectedItem()->getViewModelItem());  		}  	} -    return conversationItem; +    return conversation_item;  }  void LLFloaterIMContainer::getParticipantUUIDs(uuid_vec_t& selected_uuids)  {      //Find the conversation floater associated with the selected id -    const LLConversationItem * conversationItem = getCurSelectedViewModelItem(); +    const LLConversationItem * conversation_item = getCurSelectedViewModelItem(); -    if(conversationItem->getType() == LLConversationItem::CONV_PARTICIPANT) +	if (NULL == conversation_item) +	{ +		return; +	} + +    if (conversation_item->getType() == LLConversationItem::CONV_PARTICIPANT)      {          getSelectedUUIDs(selected_uuids);      }      //When a one-on-one conversation exists, retrieve the participant id from the conversation floater -    else if(conversationItem->getType() == LLConversationItem::CONV_SESSION_1_ON_1) +    else if(conversation_item->getType() == LLConversationItem::CONV_SESSION_1_ON_1)      { -        LLFloaterIMSession *conversationFloater = LLFloaterIMSession::findInstance(conversationItem->getUUID()); -        LLUUID participantID = conversationFloater->getOtherParticipantUUID(); -        selected_uuids.push_back(participantID); +        LLFloaterIMSession * conversation_floaterp = LLFloaterIMSession::findInstance(conversation_item->getUUID()); +        LLUUID participant_id = conversation_floaterp->getOtherParticipantUUID(); +        selected_uuids.push_back(participant_id);      }      } @@ -1229,13 +1239,13 @@ void LLFloaterIMContainer::showConversation(const LLUUID& session_id)  void LLFloaterIMContainer::selectConversation(const LLUUID& session_id)  {      selectConversationPair(session_id, true); -	} +}  // Synchronous select the conversation item and the conversation floater  BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool select_widget)  {      BOOL handled = TRUE; -    LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id); +    LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(session_id);      /* widget processing */      if (select_widget) @@ -1249,26 +1259,29 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool      /* floater processing */ -    if (session_id != getSelectedSession()) -    { -        // Store the active session -        setSelectedSession(session_id); +	if (NULL != session_floater) +	{ +		if (session_id != getSelectedSession()) +		{ +			// Store the active session +			setSelectedSession(session_id); -		if (session_floater->getHost()) -		{ -			// Always expand the message pane if the panel is hosted by the container -			collapseMessagesPane(false); -			// Switch to the conversation floater that is being selected -			selectFloater(session_floater); +			if (session_floater->getHost()) +			{ +				// Always expand the message pane if the panel is hosted by the container +				collapseMessagesPane(false); +				// Switch to the conversation floater that is being selected +				selectFloater(session_floater); +			}  		} -    } -	// Set the focus on the selected floater -	if (!session_floater->hasFocus()) -	{ -		session_floater->setFocus(TRUE); +		// Set the focus on the selected floater +		if (!session_floater->hasFocus()) +		{ +			session_floater->setFocus(TRUE); +		}  	}      return handled; @@ -1378,12 +1391,14 @@ LLConversationItem* LLFloaterIMContainer::addConversationListItem(const LLUUID&  	// set the widget to minimized mode if conversations pane is collapsed  	widget->toggleCollapsedMode(mConversationsPane->isCollapsed()); -    if (isWidgetSelected) -    { -        selectConversation(uuid); -        // scroll to newly added item -        mConversationsRoot->scrollToShowSelection(); -    } +	if (isWidgetSelected || 0 == mConversationsRoot->getSelectedCount()) +	{ +		selectConversationPair(uuid, true); +		widget->requestArrange(); + +		// scroll to newly added item +		mConversationsRoot->scrollToShowSelection(); +	}  	return item;  } @@ -1696,6 +1711,11 @@ void LLFloaterIMContainer::updateSpeakBtnState()  	mSpeakBtn->setEnabled(LLAgent::isActionAllowed("speak"));  } +bool LLFloaterIMContainer::isConversationLoggingAllowed() +{ +	return gSavedSettings.getBOOL("KeepConversationLogTranscripts"); +} +  void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id, bool is_flashes)  {      //Finds the conversation line item to flash using the session_id diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 92985c036a..1a3e64f759 100644 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -32,11 +32,11 @@  #include "llimview.h"  #include "llevents.h" -#include "llfloater.h" -#include "llmultifloater.h" +#include "../llui/llfloater.h" +#include "../llui/llmultifloater.h"  #include "llavatarpropertiesprocessor.h"  #include "llgroupmgr.h" -#include "lltrans.h" +#include "../llui/lltrans.h"  #include "llconversationmodel.h"  #include "llconversationview.h" @@ -174,7 +174,9 @@ public:  	void setNearbyDistances();  	void reSelectConversation();  	void updateSpeakBtnState(); +	static bool isConversationLoggingAllowed();  	void flashConversationItemWidget(const LLUUID& session_id, bool is_flashes); +	boost::signals2::connection mMicroChangedSignal;  private:  	LLConversationViewSession* createConversationItemWidget(LLConversationItem* item); diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 4c6d8fa5a0..0eb0289f49 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -693,7 +693,6 @@ void LLFloaterIMSessionTab::updateCallBtnState(bool callIsActive)  	voiceButton->setToolTip(  			callIsActive? getString("end_call_button_tooltip") : getString("start_call_button_tooltip")); -	LLFloaterIMContainer::getInstance()->updateSpeakBtnState();  	enableDisableCallBtn();  } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 2c3f460701..13d8a79f8d 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -749,7 +749,10 @@ void LLFloaterPreference::onClose(bool app_quitting)  {  	gSavedSettings.setS32("LastPrefTab", getChild<LLTabContainer>("pref core")->getCurrentPanelIndex());  	LLPanelLogin::setAlwaysRefresh(false); -	cancel(); +	if (!app_quitting) +	{ +		cancel(); +	}  }  void LLFloaterPreference::onOpenHardwareSettings() diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 6916cf813a..81eb1d397e 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -238,6 +238,7 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) :  	mPendingRoleMemberRequest(FALSE),  	mAccessTime(0.0f)  { +	mMemberVersion.generate();  }  void LLGroupMgrGroupData::setAccessed() @@ -318,14 +319,14 @@ void LLGroupMgrGroupData::setRoleData(const LLUUID& role_id, LLRoleData role_dat  			role_data.mChangeType = RC_UPDATE_DATA;  		}  		else -	{ +		{  			role_data.mChangeType = RC_UPDATE_POWERS;  		}  		mRoleChanges[role_id] = role_data;  	}  	else -		{ +	{  		llwarns << "Change being made to non-existant role " << role_id << llendl;  	}  } @@ -424,6 +425,7 @@ void LLGroupMgrGroupData::removeMemberData()  	}  	mMembers.clear();  	mMemberDataComplete = FALSE; +	mMemberVersion.generate();  }  void LLGroupMgrGroupData::removeRoleData() @@ -945,6 +947,8 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)  		}  	} +	group_datap->mMemberVersion.generate(); +  	if (group_datap->mMembers.size() ==  (U32)group_datap->mMemberCount)  	{  		group_datap->mMemberDataComplete = TRUE; @@ -1771,8 +1775,6 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,  	bool start_message = true;  	LLMessageSystem* msg = gMessageSystem; -	 -  	LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);  	if (!group_datap) return; @@ -1833,6 +1835,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,  	{  		gAgent.sendReliableMessage();  	} + +	group_datap->mMemberVersion.generate();  } @@ -1990,6 +1994,8 @@ void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content)  		group_datap->mMembers[member_id] = data;  	} +	group_datap->mMemberVersion.generate(); +  	// Technically, we have this data, but to prevent completely overhauling  	// this entire system (it would be nice, but I don't have the time),   	// I'm going to be dumb and just call services I most likely don't need  diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 62b2978f21..d8c1ab7ef5 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -236,6 +236,8 @@ public:  	F32 getAccessTime() const { return mAccessTime; }  	void setAccessed(); +	const LLUUID& getMemberVersion() const { return mMemberVersion; } +  public:  	typedef	std::map<LLUUID,LLGroupMemberData*> member_list_t;  	typedef	std::map<LLUUID,LLGroupRoleData*> role_list_t; @@ -284,6 +286,9 @@ private:  	BOOL				mPendingRoleMemberRequest;  	F32					mAccessTime; + +	// Generate a new ID every time mMembers +	LLUUID				mMemberVersion;  };  struct LLRoleAction diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 19b738069c..9dbbd7738a 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -27,7 +27,7 @@  #ifndef LL_LLIMVIEW_H  #define LL_LLIMVIEW_H -#include "lldockablefloater.h" +#include "../llui/lldockablefloater.h"  #include "lleventtimer.h"  #include "llinstantmessage.h" diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index e4621a7fc3..02841e9831 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -73,8 +73,7 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p)  	mAutoUpdate(p.auto_update),  	mSpeakerId(p.speaker_id),  	mIsAgentControl(false), -	mIsSwitchDirty(false), -	mShouldSwitchOn(false), +	mIndicatorToggled(false),  	mShowParticipantsSpeaking(false)  {  	//static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange); @@ -116,26 +115,6 @@ void LLOutputMonitorCtrl::setPower(F32 val)  void LLOutputMonitorCtrl::draw()  { -	// see also switchIndicator() -	if (mIsSwitchDirty) -	{ -		mIsSwitchDirty = false; -		if (mShouldSwitchOn) -		{ -			// just notify parent visibility may have changed -			notifyParentVisibilityChanged(); -		} -		else -		{ -			// make itself invisible and notify parent about this -			setVisible(FALSE); -			notifyParentVisibilityChanged(); - -			// no needs to render for invisible element -			return; -		} -	} -  	// Copied from llmediaremotectrl.cpp  	// *TODO: Give the LLOutputMonitorCtrl an agent-id to monitor, then  	// call directly into LLVoiceClient::getInstance() to ask if that agent-id is muted, is @@ -323,26 +302,28 @@ void LLOutputMonitorCtrl::onChange()  // virtual  void LLOutputMonitorCtrl::switchIndicator(bool switch_on)  { -	// ensure indicator is visible in case it is not in visible chain -	// to be called when parent became visible next time to notify parent that visibility is changed. -	setVisible(TRUE); - -	// if parent is in visible chain apply switch_on state and notify it immediately -	if (getParent() && getParent()->isInVisibleChain()) -	{ -		LL_DEBUGS("SpeakingIndicator") << "Indicator is in visible chain, notifying parent: " << mSpeakerId << LL_ENDL; -		setVisible((BOOL)switch_on); -		notifyParentVisibilityChanged(); -	} -	// otherwise remember necessary state and mark itself as dirty. -	// State will be applied in next draw when parents chain becomes visible. -	else -	{ -		LL_DEBUGS("SpeakingIndicator") << "Indicator is not in visible chain, parent won't be notified: " << mSpeakerId << LL_ENDL; -		mIsSwitchDirty = true; -		mShouldSwitchOn = switch_on; -	} +    if(getVisible() != (BOOL)switch_on) +    { +        setVisible(switch_on); +         +        //Let parent adjust positioning of icons adjacent to speaker indicator +        //(when speaker indicator hidden, adjacent icons move to right and when speaker +        //indicator visible, adjacent icons move to the left)  +        if (getParent() && getParent()->isInVisibleChain()) +        { +            notifyParentVisibilityChanged(); +            //Ignore toggled state in case it was set when parent visibility was hidden +            mIndicatorToggled = false; +        } +        else +        { +            //Makes sure to only adjust adjacent icons when parent becomes visible +            //(!mIndicatorToggled ensures that changes of TFT and FTF are discarded, real state changes are TF or FT) +            mIndicatorToggled = !mIndicatorToggled; +        } + +    }  }  ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h index 1fa6ef41f8..af2fd45823 100644 --- a/indra/newview/lloutputmonitorctrl.h +++ b/indra/newview/lloutputmonitorctrl.h @@ -28,10 +28,10 @@  #define LL_LLOUTPUTMONITORCTRL_H  #include "v4color.h" -#include "llview.h" +#include "../llui/llview.h"  #include "llmutelist.h"  #include "llspeakingindicatormanager.h" -#include "lluiimage.h" +#include "../llui/lluiimage.h"  class LLTextBox;  class LLUICtrlFactory; @@ -108,6 +108,8 @@ public:  	 * It will be applied in next draw and parent will be notified.  	 */  	virtual void	switchIndicator(bool switch_on); +    bool getIndicatorToggled() { return mIndicatorToggled;} +    void setIndicatorToggled(bool value) { mIndicatorToggled = value;}  private: @@ -148,9 +150,7 @@ private:  	/** uuid of a speaker being monitored */  	LLUUID			mSpeakerId; -	/** indicates if the instance is dirty and should notify parent */ -	bool			mIsSwitchDirty; -	bool			mShouldSwitchOn; +    bool mIndicatorToggled;  };  #endif diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 51b4d2ea65..993ffb7825 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -670,7 +670,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)  		{  			mMemberProgress = gdatap->mMembers.begin();  			mPendingMemberUpdate = TRUE; -			mUdpateSessionID.generate();  			sSDTime = 0.0f;  			sElementTime = 0.0f; @@ -730,7 +729,7 @@ void LLPanelGroupGeneral::updateMembers()  			// If name is not cached, onNameCache() should be called when it is cached and add this member to list.  			LLAvatarNameCache::get(mMemberProgress->first,   									boost::bind(&LLPanelGroupGeneral::onNameCache, -												this, mUdpateSessionID, member, _1, _2)); +												this, gdatap->getMemberVersion(), member, _2));  		}  	} @@ -768,11 +767,15 @@ void LLPanelGroupGeneral::addMember(LLGroupMemberData* member)  	}  } -void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name) +void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)  { -	if (!member  -		|| update_id != mUdpateSessionID) +	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); + +	if (!gdatap +		|| !gdatap->isMemberDataComplete() +		|| gdatap->getMemberVersion() != update_id)  	{ +		// Stale data  		return;  	} diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index b179f78c56..1b4e8e2645 100644 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -63,7 +63,7 @@ public:  	virtual void setupCtrls	(LLPanel* parent); -	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name); +	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);  private:  	void	reset(); @@ -90,7 +90,6 @@ private:  	BOOL			mChanged;  	BOOL			mFirstUse;  	std::string		mIncompleteMemberDataStr; -	LLUUID			mUdpateSessionID;  	// Group information (include any updates in updateChanged)  	LLLineEditor		*mGroupNameEditor; diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 7ad7e7149b..7368477905 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -745,7 +745,6 @@ LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()  	mHasMatch(FALSE),  	mNumOwnerAdditions(0)  { -	mUdpateSessionID = LLUUID::null;  }  LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab() @@ -1427,13 +1426,20 @@ U64 LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges(const LLUUID& ag  		return GP_NO_POWERS;  	} -	LLGroupMemberData* member_data = gdatap->mMembers[agent_id]; -	if ( !member_data ) +	LLGroupMgrGroupData::member_list_t::iterator iter = gdatap->mMembers.find(agent_id); +	if ( iter == gdatap->mMembers.end() )  	{  		llwarns << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No member data for member with UUID " << agent_id << llendl;  		return GP_NO_POWERS;  	} +	LLGroupMemberData* member_data = (*iter).second; +	if (!member_data) +	{ +		llwarns << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- Null member data for member with UUID " << agent_id << llendl; +		return GP_NO_POWERS; +	} +  	//see if there are unsaved role changes for this agent  	role_change_data_map_t* role_change_datap = NULL;  	member_role_changes_map_t::iterator member = mMemberRoleChangeData.find(agent_id); @@ -1548,10 +1554,6 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)  		mMemberProgress = gdatap->mMembers.begin();  		mPendingMemberUpdate = TRUE;  		mHasMatch = FALSE; -		// Generate unique ID for current updateMembers()- see onNameCache for details. -		// Using unique UUID is perhaps an overkill but this way we are perfectly safe -		// from coincidences. -		mUdpateSessionID.generate();  	}  	else  	{ @@ -1579,14 +1581,14 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)  	}  } -void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* data) +void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data)  {  	if (!data) return;  	LLUIString donated = getString("donation_area");  	donated.setArg("[AREA]", llformat("%d", data->getContribution()));  	LLNameListCtrl::NameItem item_params; -	item_params.value = id; +	item_params.value = data->getID();  	item_params.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL"); @@ -1600,17 +1602,12 @@ void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* da  	mHasMatch = TRUE;  } -void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name) +void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)  { -	// Update ID is used to determine whether member whose id is passed -	// into onNameCache() was passed after current or previous user-initiated update. -	// This is needed to avoid probable duplication of members in list after changing filter -	// or adding of members of another group if gets for their names were called on -	// previous update. If this id is from get() called from older update, -	// we do nothing. -	if (mUdpateSessionID != update_id) return; -	 -	if (!member) +	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); +	if (!gdatap +		|| gdatap->getMemberVersion() != update_id +		|| !member)  	{  		return;  	} @@ -1618,7 +1615,7 @@ void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemb  	// trying to avoid unnecessary hash lookups  	if (matchesSearchFilter(av_name.getUserName()))  	{ -		addMemberToList(id, member); +		addMemberToList(member);  		if(!mMembersList->getEnabled())  		{  			mMembersList->setEnabled(TRUE); @@ -1672,14 +1669,14 @@ void LLPanelGroupMembersSubTab::updateMembers()  		{  			if (matchesSearchFilter(av_name.getUserName()))  			{ -				addMemberToList(mMemberProgress->first, mMemberProgress->second); +				addMemberToList(mMemberProgress->second);  			}  		}  		else  		{  			// If name is not cached, onNameCache() should be called when it is cached and add this member to list.  			LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, -																	   this, mUdpateSessionID, mMemberProgress->second, _1, _2)); +									this, gdatap->getMemberVersion(), mMemberProgress->second, _2));  		}  	} diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index 8b454e020a..bead8bd85b 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -187,8 +187,8 @@ public:  	virtual void setGroupID(const LLUUID& id); -	void addMemberToList(LLUUID id, LLGroupMemberData* data); -	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name); +	void addMemberToList(LLGroupMemberData* data); +	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);  protected:  	typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t; @@ -210,9 +210,6 @@ protected:  	BOOL mPendingMemberUpdate;  	BOOL mHasMatch; -	// This id is generated after each user initiated member list update(opening Roles or changing filter) -	LLUUID mUdpateSessionID; -  	member_role_changes_map_t mMemberRoleChangeData;  	U32 mNumOwnerAdditions; diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index a61e2d5c86..305f6fca0f 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1861,7 +1861,12 @@ LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& d  		mFastCachep->seek(APR_SET, offset);		 -		llassert_always(mFastCachep->read(head, TEXTURE_FAST_CACHE_ENTRY_OVERHEAD) == TEXTURE_FAST_CACHE_ENTRY_OVERHEAD); +		if(mFastCachep->read(head, TEXTURE_FAST_CACHE_ENTRY_OVERHEAD) != TEXTURE_FAST_CACHE_ENTRY_OVERHEAD) +		{ +			//cache corrupted or under thread race condition +			closeFastCache();  +			return NULL; +		}  		S32 image_size = head[0] * head[1] * head[2];  		if(!image_size) //invalid @@ -1872,7 +1877,13 @@ LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& d  		discardlevel = head[3];  		data =  (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), image_size); -		llassert_always(mFastCachep->read(data, image_size) == image_size); +		if(mFastCachep->read(data, image_size) != image_size) +		{ +			FREE_MEM(LLImageBase::getPrivatePool(), data); +			closeFastCache(); +			return NULL; +		} +  		closeFastCache();  	}  	LLPointer<LLImageRaw> raw = new LLImageRaw(data, head[0], head[1], head[2], true); @@ -1926,7 +1937,11 @@ bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 dis  		openFastCache();  		mFastCachep->seek(APR_SET, offset);	 -		llassert_always(mFastCachep->write(mFastCachePadBuffer, TEXTURE_FAST_CACHE_ENTRY_SIZE) == TEXTURE_FAST_CACHE_ENTRY_SIZE); +		 +		//no need to do this assertion check. When it fails, let it fail quietly. +		//this failure could happen because other viewer removes the fast cache file when clearing cache. +		//--> llassert_always(mFastCachep->write(mFastCachePadBuffer, TEXTURE_FAST_CACHE_ENTRY_SIZE) == TEXTURE_FAST_CACHE_ENTRY_SIZE); +		mFastCachep->write(mFastCachePadBuffer, TEXTURE_FAST_CACHE_ENTRY_SIZE);  		closeFastCache(true);  	} diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 7ae717cb42..fe9c00cc27 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -59,6 +59,7 @@  #include "llbuycurrencyhtml.h"  #include "llfloatergodtools.h"  #include "llfloaterinventory.h" +#include "llfloaterimcontainer.h"  #include "llfloaterland.h"  #include "llfloaterpathfindingcharacters.h"  #include "llfloaterpathfindinglinksets.h" @@ -8238,6 +8239,7 @@ void initialize_menus()  	commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory)); +	enable.add("Conversation.IsConversationLoggingAllowed", boost::bind(&LLFloaterIMContainer::isConversationLoggingAllowed));  	// Agent  	commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying)); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 139f898b76..c0376ba114 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -27,7 +27,7 @@  #ifndef LL_LLVIEWERMENU_H  #define LL_LLVIEWERMENU_H -#include "llmenugl.h" +#include "../llui/llmenugl.h"  #include "llsafehandle.h"  class LLMessageSystem; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1b45e6f85d..1d7abb7c1c 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4245,14 +4245,48 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  		image_height = llmin(image_height, window_height);  	} +	S32 original_width = 0; +	S32 original_height = 0; +	bool reset_deferred = false; + +	LLRenderTarget scratch_space; +  	F32 scale_factor = 1.0f ;  	if (!keep_window_aspect || (image_width > window_width) || (image_height > window_height))  	{	 -		// if image cropping or need to enlarge the scene, compute a scale_factor -		F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ; -		snapshot_width  = (S32)(ratio * image_width) ; -		snapshot_height = (S32)(ratio * image_height) ; -		scale_factor = llmax(1.0f, 1.0f / ratio) ; +		if ((image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui) +		{ +			if (scratch_space.allocate(image_width, image_height, GL_RGBA, true, true)) +			{ +				original_width = gPipeline.mDeferredScreen.getWidth(); +				original_height = gPipeline.mDeferredScreen.getHeight(); + +				if (gPipeline.allocateScreenBuffer(image_width, image_height)) +				{ +					window_width = image_width; +					window_height = image_height; +					snapshot_width = image_width; +					snapshot_height = image_height; +					reset_deferred = true; +					mWorldViewRectRaw.set(0, image_height, image_width, 0); +					scratch_space.bindTarget(); +				} +				else +				{ +					scratch_space.release(); +					gPipeline.allocateScreenBuffer(original_width, original_height); +				} +			} +		} + +		if (!reset_deferred) +		{ +			// if image cropping or need to enlarge the scene, compute a scale_factor +			F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ; +			snapshot_width  = (S32)(ratio * image_width) ; +			snapshot_height = (S32)(ratio * image_height) ; +			scale_factor = llmax(1.0f, 1.0f / ratio) ; +		}  	}  	if (show_ui && scale_factor > 1.f) @@ -4441,11 +4475,20 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  		gPipeline.resetDrawOrders();  	} +	if (reset_deferred) +	{ +		mWorldViewRectRaw = window_rect; +		scratch_space.flush(); +		scratch_space.release(); +		gPipeline.allocateScreenBuffer(original_width, original_height); +		 +	} +  	if (high_res)  	{  		send_agent_resume();  	} - +	  	return ret;  } diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 730f022c50..dd529d74e9 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -551,6 +551,7 @@ void LLVoiceClient::setUserPTTState(bool ptt)  {  	mUserPTTState = ptt;  	updateMicMuteLogic(); +	mMicroChangedSignal();  }  bool LLVoiceClient::getUserPTTState() diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index c9aeea35a9..714dd6a9f2 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -303,6 +303,9 @@ public:  	LLVoiceClient();	  	~LLVoiceClient(); +	typedef boost::signals2::signal<void(void)> micro_changed_signal_t; +	micro_changed_signal_t mMicroChangedSignal; +  	void init(LLPumpIO *pump);	// Call this once at application startup (creates connector)  	void terminate();	// Call this to clean up during shutdown @@ -401,6 +404,8 @@ public:  	void keyUp(KEY key, MASK mask);  	void middleMouseState(bool down); +	boost::signals2::connection MicroChangedCallback(const micro_changed_signal_t::slot_type& cb ) { return mMicroChangedSignal.connect(cb); } +  	/////////////////////////////  	// Accessors for data related to nearby speakers @@ -456,6 +461,7 @@ protected:  	LLVoiceModuleInterface* mVoiceModule;  	LLPumpIO *m_servicePump; +  	LLCachedControl<bool> mVoiceEffectEnabled;  	LLCachedControl<std::string> mVoiceEffectDefault; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e1a9ad71f1..deaf9a425c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -779,18 +779,57 @@ void LLPipeline::allocatePhysicsBuffer()  	}  } -void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) +bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  {  	refreshCachedSettings(); -	U32 samples = RenderFSAASamples; +	 +	bool save_settings = sRenderDeferred; +	if (save_settings) +	{ +		// Set this flag in case we crash while resizing window or allocating space for deferred rendering targets +		gSavedSettings.setBOOL("RenderInitError", TRUE); +		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); +	} + +	eFBOStatus ret = doAllocateScreenBuffer(resX, resY); + +	if (save_settings) +	{ +		// don't disable shaders on next session +		gSavedSettings.setBOOL("RenderInitError", FALSE); +		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); +	} +	 +	if (ret == FBO_FAILURE) +	{ //FAILSAFE: screen buffer allocation failed, disable deferred rendering if it's enabled +		//NOTE: if the session closes successfully after this call, deferred rendering will be  +		// disabled on future sessions +		if (LLPipeline::sRenderDeferred) +		{ +			gSavedSettings.setBOOL("RenderDeferred", FALSE); +			LLPipeline::refreshCachedSettings(); +		} +	} + +	return ret == FBO_SUCCESS_FULLRES; +} -	//try to allocate screen buffers at requested resolution and samples + +LLPipeline::eFBOStatus LLPipeline::doAllocateScreenBuffer(U32 resX, U32 resY) +{ +	// try to allocate screen buffers at requested resolution and samples  	// - on failure, shrink number of samples and try again  	// - if not multisampled, shrink resolution and try again (favor X resolution over Y)  	// Make sure to call "releaseScreenBuffers" after each failure to cleanup the partially loaded state +	U32 samples = RenderFSAASamples; + +	eFBOStatus ret = FBO_SUCCESS_FULLRES;  	if (!allocateScreenBuffer(resX, resY, samples))  	{ +		//failed to allocate at requested specification, return false +		ret = FBO_FAILURE; +  		releaseScreenBuffers();  		//reduce number of samples   		while (samples > 0) @@ -798,7 +837,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  			samples /= 2;  			if (allocateScreenBuffer(resX, resY, samples))  			{ //success -				return; +				return FBO_SUCCESS_LOWRES;  			}  			releaseScreenBuffers();  		} @@ -811,22 +850,23 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  			resY /= 2;  			if (allocateScreenBuffer(resX, resY, samples))  			{ -				return; +				return FBO_SUCCESS_LOWRES;  			}  			releaseScreenBuffers();  			resX /= 2;  			if (allocateScreenBuffer(resX, resY, samples))  			{ -				return; +				return FBO_SUCCESS_LOWRES;  			}  			releaseScreenBuffers();  		}  		llwarns << "Unable to allocate screen buffer at any resolution!" << llendl;  	} -} +	return ret; +}  bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)  { @@ -854,10 +894,6 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)  	if (LLPipeline::sRenderDeferred)  	{ -		// Set this flag in case we crash while resizing window or allocating space for deferred rendering targets -		gSavedSettings.setBOOL("RenderInitError", TRUE); -		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); -  		S32 shadow_detail = RenderShadowDetail;  		BOOL ssao = RenderDeferredSSAO; @@ -869,7 +905,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)  		if (!mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;  		if (samples > 0)  		{ -			if (!mFXAABuffer.allocate(nhpo2(resX), nhpo2(resY), GL_RGBA, FALSE, FALSE, LLTexUnit::TT_TEXTURE, FALSE, samples)) return false; +			if (!mFXAABuffer.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_TEXTURE, FALSE, samples)) return false;  		}  		else  		{ @@ -903,7 +939,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)  			}  		} -		U32 width = nhpo2(U32(resX*scale))/2; +		U32 width = (U32) (resX*scale);  		U32 height = width;  		if (shadow_detail > 1) @@ -922,9 +958,11 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)  			}  		} -		// don't disable shaders on next session -		gSavedSettings.setBOOL("RenderInitError", FALSE); -		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); +		//HACK make screenbuffer allocations start failing after 30 seconds +		if (gSavedSettings.getBOOL("SimulateFBOFailure")) +		{ +			return false; +		}  	}  	else  	{ @@ -7112,11 +7150,11 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)  	gGlowProgram.unbind(); -	if (LLRenderTarget::sUseFBO) +	/*if (LLRenderTarget::sUseFBO)  	{  		LLFastTimer ftm(FTM_RENDER_BLOOM_FBO);  		glBindFramebuffer(GL_FRAMEBUFFER, 0); -	} +	}*/  	gGLViewport[0] = gViewerWindow->getWorldViewRectRaw().mLeft;  	gGLViewport[1] = gViewerWindow->getWorldViewRectRaw().mBottom; @@ -7992,10 +8030,6 @@ void LLPipeline::renderDeferredLighting()  		gGL.popMatrix();  		stop_glerror(); -		//copy depth and stencil from deferred screen -		//mScreen.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), -		//					0, 0, mScreen.getWidth(), mScreen.getHeight(), GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); -  		mScreen.bindTarget();  		// clear color buffer here - zeroing alpha (glow) is important or it will accumulate against sky  		glClearColor(0,0,0,0); @@ -8767,8 +8801,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  		}  		last_update = LLDrawPoolWater::sNeedsReflectionUpdate && LLDrawPoolWater::sNeedsDistortionUpdate; -		LLRenderTarget::unbindTarget(); -  		LLPipeline::sReflectionRender = FALSE;  		if (!LLRenderTarget::sUseFBO) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 7a0ca86231..36abeca295 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -119,8 +119,25 @@ public:  	void createGLBuffers();  	void createLUTBuffers(); -	void allocateScreenBuffer(U32 resX, U32 resY); +	//allocate the largest screen buffer possible up to resX, resY +	//returns true if full size buffer allocated, false if some other size is allocated +	bool allocateScreenBuffer(U32 resX, U32 resY); + +	typedef enum { +		FBO_SUCCESS_FULLRES = 0, +		FBO_SUCCESS_LOWRES, +		FBO_FAILURE +	} eFBOStatus; + +private: +	//implementation of above, wrapped for easy error handling +	eFBOStatus doAllocateScreenBuffer(U32 resX, U32 resY); +public: + +	//attempt to allocate screen buffers at resX, resY +	//returns true if allocation successful, false otherwise  	bool allocateScreenBuffer(U32 resX, U32 resY, U32 samples); +  	void allocatePhysicsBuffer();  	void resetVertexBuffers(LLDrawable* drawable); diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 4b4821a383..521389d7b3 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -1,8 +1,8 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   positioning="specified" - left="643" - bottom="-80" + right="-460" + bottom="-50"   follows="left|bottom"   legacy_header_height="18"   can_minimize="true" diff --git a/indra/newview/skins/default/xui/en/floater_destinations.xml b/indra/newview/skins/default/xui/en/floater_destinations.xml index 41b57530fc..94ebaa9cb2 100644 --- a/indra/newview/skins/default/xui/en/floater_destinations.xml +++ b/indra/newview/skins/default/xui/en/floater_destinations.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + positioning="cascading"	   ignore_ui_scale="false"   legacy_header_height="225"   can_minimize="true" @@ -11,8 +12,6 @@   height="230"   layout="topleft"   name="Destinations" - right="-10" - bottom="-80"   single_instance="true"   help_topic="destinations"   save_rect="true" diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index 9f6503d799..1128b8fef6 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -13,7 +13,8 @@   single_instance="true"   reuse_instance="true"   title="CONVERSATIONS" - bottom="-80" + bottom="-50" + right="-5"   width="450">      <string       name="collapse_icon" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 02d9805ddf..5e84283ab0 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -1,8 +1,8 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   positioning="specified" - left="505" - bottom="-80" + right="-693" + bottom="-50"   legacy_header_height="18"   can_dock="false"   can_minimize="true" diff --git a/indra/newview/skins/default/xui/en/floater_people.xml b/indra/newview/skins/default/xui/en/floater_people.xml index 8e143623ab..5f475baa93 100644 --- a/indra/newview/skins/default/xui/en/floater_people.xml +++ b/indra/newview/skins/default/xui/en/floater_people.xml @@ -7,7 +7,7 @@    height="570"    help_topic="sidebar_people"    min_height="440" -  min_width="390" +  min_width="260"    layout="topleft"    name="floater_people"    save_rect="true" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index b1e3a2d41f..3e7329c0b5 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -261,6 +261,8 @@              <menu_item_check.on_check               function="Floater.Visible"               parameter="conversation" /> +            <menu_item_check.on_enable +             function="Conversation.IsConversationLoggingAllowed" />              <menu_item_check.on_click               function="Floater.Toggle"               parameter="conversation" /> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 7433ad828d..7ce2627be9 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -229,7 +229,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M           bg_opaque_color="DkGray"           bottom="-1"           follows="all" -         label="MY FRIENDS" +         label="FRIENDS"           layout="topleft"           left="0"           help_topic="people_friends_tab" @@ -385,7 +385,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M           bg_opaque_color="DkGray"           bottom="-1"           follows="all" -         label="MY GROUPS" +         label="GROUPS"           layout="topleft"           left="0"           help_topic="people_groups_tab" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index f7666bdc4c..849f3ef73d 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -55,30 +55,57 @@       name="LowGraphicsDivet"       top_delta="-2"       width="2" /> +  <icon +     color="0.12 0.12 0.12 1" +     height="14" +     image_name="Rounded_Square" +     layout="topleft" +     left_pad="41" +     name="LowMidraphicsDivet" +     top_delta="-2" +     width="2" />      <icon       color="0.12 0.12 0.12 1"       height="14"       image_name="Rounded_Square"       layout="topleft" -     left_pad="83" +     left_pad="41"       name="MidGraphicsDivet"       top_delta="0"       width="2" /> +  <icon +     color="0.12 0.12 0.12 1" +     height="14" +     image_name="Rounded_Square" +     layout="topleft" +     left_pad="41" +     name="MidHighGraphicsDivet" +     top_delta="0" +     width="2" />      <icon       color="0.12 0.12 0.12 1"       height="14"       image_name="Rounded_Square"       layout="topleft" -     left_pad="85" +     left_pad="41"       name="HighGraphicsDivet"       top_delta="0"       width="2" /> +  <icon +     color="0.12 0.12 0.12 1" +     height="14" +     image_name="Rounded_Square" +     layout="topleft" +     left_pad="41" +     name="HighUltraGraphicsDivet" +     top_delta="0" +     width="2" />      <icon       color="0.12 0.12 0.12 1"       height="14"       image_name="Rounded_Square"       layout="topleft" -     left_pad="83" +     left_pad="41"       name="UltraGraphicsDivet"       top_delta="0"       width="2" /> @@ -91,7 +118,7 @@       initial_value="0"       layout="topleft"       left="120" -     max_val="3" +     max_val="6"       name="QualityPerformanceSelection"       show_text="false"       top_delta="-2" @@ -120,12 +147,12 @@       height="12"       layout="topleft"       left_delta="87" -     name="ShadersPrefText2" +     name="ShadersPrefText3"       top_delta="0"       width="80">          Mid      </text> -    <text +  <text       type="string"       length="1"       follows="left|top" @@ -136,8 +163,8 @@       name="ShadersPrefText3"       top_delta="0"       width="80"> -        High -    </text> +      High +  </text>      <text       type="string"       length="1" | 
