diff options
152 files changed, 2439 insertions, 2827 deletions
| @@ -36,7 +36,7 @@ indra/newview/fmod.dll  indra/newview/mozilla-theme  indra/newview/mozilla-universal-darwin.tgz  indra/newview/res/ll_icon.* -indra/newview/res-sdl +indra/newview/res-sdl/ll_icon.*  indra/newview/vivox-runtime  indra/server-linux-*  indra/temp @@ -1,351 +1,307 @@ -bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release  003dd9461bfa479049afcc34545ab3431b147c7c v2start -08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1 -0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2 -12769e547e30067d494a6c01479a18107366ce2f beta-5 +52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3 +d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0 +7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4 +7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa +d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5 +d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo +b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6  17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5 -19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1 -1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3  3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4 -3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1 -434973a76ab2755f98ab55e1afc193e16692d5c5 2-1-1-beta-2 -46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start +12769e547e30067d494a6c01479a18107366ce2f beta-5  4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0 -52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3  668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1 -6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2 -7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4 -7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa +08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1  80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start -87bfaf8c76f9b22d9c65d4b315358861be87c863 2-1-1-release +46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start +3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1 +0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2 +1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3 +c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4  b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release -b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6 +19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1 +6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2  bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release -c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4 -d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo -d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5 -d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0 +bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release  c6e6324f5be1401f077ad18a4a0f6b46451c2f7b last_sprint -7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3  7076e22f9f43f479a4ea75eac447a36364bead5a 2.2.0-beta1 +7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1 +7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3  9822eb3e25f7fe0c28ffd8aba45c507caa383cbc 2.2.0-beta2 +9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2  b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3 +b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3  00a831292231faad7e44c69f76cb96f175b8dfad 2.2.0-beta4 -98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-beta1  1415e6538d54fd5d568ee88343424d57c6803c2c 2.2.0-release +1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release  98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-start  a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1 +a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1  db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2 +db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2  6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3  6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release +6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release +6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3  dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start -dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1 -dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1  3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1 +3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1  25bd6007e3d2fc15db9326ed4b18a24a5969a46a 2.4.0-beta2 +25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2  1ed382c6a08ba3850b6ce9061bc551ddece0ea07 2.4.0-release +1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release  a82e5b1e22c7f90e3c7977d146b80588f004ed0d 2.5.0-start -76f586a8e22b1abe6b2339758c8ac0fa718975de 76f586a8e22b -76f586a8e22b1abe6b2339758c8ac0fa718975de 76f586a8e22b -0000000000000000000000000000000000000000 76f586a8e22b -0000000000000000000000000000000000000000 76f586a8e22b -345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b  345b17e7cf630db77e840b4fe3451bd476d750a3 2.5.0-beta1 -345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b -0000000000000000000000000000000000000000 76f586a8e22b -54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2 -b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base -7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1 -9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2 -b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3 -1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release -a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1 -db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release -3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1 -25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2 -1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release  345b17e7cf630db77e840b4fe3451bd476d750a3 DRTVWR-32_2.5.0-beta1 +54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2 +54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33--2.5.0beta2  54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33_2.5.0-beta2  b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-beta3 -b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3  b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-release  b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-31_2.5.0-release -3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work +b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3 +b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base  63a6aedfce785a6c760377bf685b2dae616797d2 2.5.1-start  4dede9ae1ec74d41f6887719f6f1de7340d8578d 2.5.1-release  4dede9ae1ec74d41f6887719f6f1de7340d8578d DRTVWR-37_2.5.1-release -b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release  b53a0576eec80614d7767ed72b40ed67aeff27c9 2.5.2-release -92e58e51776a4f8c29069b1a62ff21454d2085f0 2.6.0-start -f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start +b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release  4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start  9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1  9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1 -9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2  9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2 +9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2 +c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1  c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start  c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1 -c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1 -c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release -c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release  56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start -42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release -42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release -d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1  d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1 -214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release -214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release +d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1 +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 DRTVWR-47_2.6.3-beta1  d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1 -0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2 +d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1  0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2 -7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1 +0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2 +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 DRTVWR-52_2.6.6-beta1  bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1 +bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1  5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start -beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 -bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156 +dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release +dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release  beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1 -11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start +beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 +be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release +be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release  e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start -77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1  77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-beta1 -be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release -be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release -dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release -dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release -8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release -8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release -77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release  77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release +77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release +77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1  8835e0e3c0d3a48244c287bc05811dfc2fba43ec 2.7.0-start -43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1  43c7ee846b7eed80786acbbf35d03bd016a3e85d 2.7.0-beta1 +43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1  54fd44ac92e4c61435ea33effe093a3527e18d98 2.7.1-start -0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1  0c4d0c24278074f219e5a32e72b449e78301d11b 2.7.1-beta1 -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release +0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1  9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start -e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1  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  6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start -be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1  be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1 -057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release -057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release  be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1 -be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1 -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release  19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start -09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1  09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1 +09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1 +e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1  e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start -502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start -888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175 -2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155 -6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release -6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release  e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1 -e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 -493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release -493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release -2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 +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 -29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release -29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release -4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix -4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix +2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 +493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release +493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release  54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start -29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release -29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release  ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start -599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 +29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release +29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release +4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix +4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix  599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 -fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release -fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release -46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start -b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 -b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1 +599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1  6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start +b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1 +b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 +fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release +fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release  82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start -364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1  364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1 +364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1  f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release -1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release -42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1  42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1 -e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2 +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 -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release -0000000000000000000000000000000000000000 DRTVWR-78_3.0.0-release -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release -6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1  6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1 -586907287be581817b2422b5137971b22d54ea48 3.0.4-start -61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 +6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1  61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2 -0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release +61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 +586907287be581817b2422b5137971b22d54ea48 3.0.4-start  0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release +0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release  92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start  c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start -2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1  2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1 -dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2 -dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2 -dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2 -bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2 -dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2 +2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1  bc01ee26fd0f1866e266429e85f76340523e91f1 3.1.0-beta2 -ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release +bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2  ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 3.1.0-release +ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release  a8230590e28e4f30f5105549e0e43211d9d55711 3.2.0-start -e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1  e440cd1dfbd128d7d5467019e497f7f803640ad6 3.2.0-beta1 -9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2 +e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1  9bcc2b7176634254e501e3fb4c5b56c1f637852e 3.2.0-beta2 -2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3 +9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2  2a13d30ee50ccfed50268238e36bb90d738ccc9e 3.2.0-beta3 -3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release -3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start -3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release +2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3  3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start  3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release -3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1 +c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start  9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1 -523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1 +9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1 +40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start  523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1 -80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start -a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release +523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1  a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release +a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release +80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start +3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release  3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1 -3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1 -8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release -bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release  bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release -3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1 +bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release +8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start  3d2d5d244c6398a4214c666d5dd3965b0918709a 3.2.5-beta1 -65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2 +3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1  65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d 3.2.5-beta2 -c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release +65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2  c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release +c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release  2174ed1c7129562428a5cfe8651ed77b8d26ae18 3.2.6-start +286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1  286d73ff5c19f6c00e023dc1b60975ed6bbe2872 DRTVWR-109_3.2.6-beta1  4891c46a56fed7512c783b9cbe7cb7260727bf0c 3.2.7-start -286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1 -c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release -c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release -3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1  3d75c836d178c7c7e788f256afe195f6cab764a2 3.2.7-beta1 +3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1  89980333c99dbaf1787fe20784f1d8849e9b5d4f 3.2.8-start -16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1 -37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start  16f8e2915f3f2e4d732fb3125daf229cb0fd1875 3.2.8-beta1 -089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 -987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2 +16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1  987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2 -51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release +987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2  51b2fd52e36aab8f670e0874e7e1472434ec4b4a 3.2.8-release -e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1 +51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release +37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start  e9c82fca5ae6fb8a8af29012d78fb194a29323f3 3.2.9-beta1 -a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2 +e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1  a01ef9bed28627f4ca543fbc1d70c79cc297a90f 3.2.9-beta2 -987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2 -d5f263687f43f278107363365938f0a214920a4b DRTVWR-119 +a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2  d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1 -5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate -5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release  d5f263687f43f278107363365938f0a214920a4b 3.3.0-start -dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate  d5f263687f43f278107363365938f0a214920a4b DRTVWR-119 -d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1 -5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate  5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release -28b95a6a28dca3338d9a1f4f204b96678df9f6a5 viewer-beta-candidate -b43cd25be49e3984ff5361cefad020e069131d98 3.3.1-start -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125 -dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate  3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 3.3.1-start +3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125  28b95a6a28dca3338d9a1f4f204b96678df9f6a5 3.3.1-beta1 -1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate  1dc545e44617975da2a4a32fe303386c687a6ca1 3.3.1-beta2  1dc545e44617975da2a4a32fe303386c687a6ca1 DRTVWR-139 -5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate -c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate +1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate  c623bbc854b6f7ee1b33a3718f76715046aa2937 3.3.1-release  d29a260119f8d5a5d168e25fed0c7ea6b3f40161 3.3.2-beta1  675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-beta2 -c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate -675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate  675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-release -675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate -050e48759337249130f684b4a21080b683f61732 DRTVWR-168 -b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171 -c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163 -600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 -600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 -9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 -a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 -24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153  15e90b52dc0297921b022b90d10d797436b8a1bd viewer-release-candidate +bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156  6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1 +2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155 +24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153  5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1  f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144  f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144  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 -57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176 +a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 +9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 +089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 +c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163 +b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171 +050e48759337249130f684b4a21080b683f61732 DRTVWR-168  09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170 -005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167 -f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 3.3.4-beta1  f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158 -f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 3.3.4-beta1 -cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174 -bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173  f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1 +bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173 +cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174  82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2 +57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176  eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177 -4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179  a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3  4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180 -9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184  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 +4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179  a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1 +9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 +47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190 +421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 +33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195 +e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193 +7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196 +ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198 +507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197 +b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2 +37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200 +182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3 +6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199 +7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2 +7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201 +84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4 +573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5 +8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207 +351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3 +af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212 +015012c2b740ccdec8a8c3d6e5f898449ecfe0b8 DRTVWR-213 +62b07aa81b1957897c3846292bb9412977b0af6c 3.3.4-beta6 +d02759655d6b36d60f4a927e4bfce82844a82ef5 3.4.0-release diff --git a/autobuild.xml b/autobuild.xml index 0ff952be5b..b7a73f2c75 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1254,11 +1254,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>de22a97b276913a6dd05838b7fe297af</string> +              <string>0578fa67ef9906c6aaa326f51db2669f</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120725.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1268,9 +1268,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>d2dfbbc11aac34ebd551df86524c8c9c</string> +              <string>b706fdeed4ce2182d434043dc33d9d1d</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120725.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1280,9 +1280,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>99abccc5d117ab82cadb8cff0d85b867</string> +              <string>0cebd359ea732a7db363d88f9886a1ef</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120725.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -1306,11 +1306,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>3528620230fbd288fcc9dbbd8d8a6b59</string> +              <string>3ae798d4dfb54a1d806ee5f8b31f7626</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120725.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1320,9 +1320,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>69d188f72f9494b0e74c94ca0496f618</string> +              <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120725.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1332,9 +1332,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>61fc2b84ad53cf8d98d1784c31f9928e</string> +              <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120725.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -78,7 +78,7 @@ pre_build()      check_for "After 'autobuild configure'" ${build_dir}/packages/dictionaries -  end_section "Pre$variant" + end_section "Pre$variant"  }  package_llphysicsextensions_tpv() diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 00baf626d2..98eeed09b3 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -69,7 +69,6 @@ if (WINDOWS)        /Oy-        /Zc:wchar_t-        /arch:SSE2 -      /fp:fast        )    # Are we using the crummy Visual Studio KDU build workaround? diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 9f05c4cff2..224e0a8b51 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -57,10 +57,10 @@ if(WINDOWS)          libhunspell.dll          ) -    if(USE_TCMALLOC) +    if(USE_GOOGLE_PERFTOOLS)        set(debug_files ${debug_files} libtcmalloc_minimal-debug.dll)        set(release_files ${release_files} libtcmalloc_minimal.dll) -    endif(USE_TCMALLOC) +    endif(USE_GOOGLE_PERFTOOLS)      if (FMOD)        set(debug_files ${debug_files} fmod.dll) @@ -272,16 +272,13 @@ elseif(LINUX)          libopenal.so          libopenjpeg.so          libssl.so +        libtcmalloc_minimal.so          libuuid.so.16          libuuid.so.16.0.22          libssl.so.1.0.0          libfontconfig.so.1.4.4         ) -    if (USE_TCMALLOC) -      set(release_files ${release_files} "libtcmalloc_minimal.so") -    endif (USE_TCMALLOC) -      if (FMOD)        set(release_files ${release_files} "libfmod-3.75.so")      endif (FMOD) diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 09501e0406..d9f91193be 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -1,34 +1,20 @@  # -*- cmake -*-  include(Prebuilt) -# If you want to enable or disable TCMALLOC in viewer builds, this is the place. -# set ON or OFF as desired. -set (USE_TCMALLOC ON) -  if (STANDALONE)    include(FindGooglePerfTools)  else (STANDALONE)    if (WINDOWS) -    if (USE_TCMALLOC) -       use_prebuilt_binary(tcmalloc) -       set(TCMALLOC_LIBRARIES  -         debug libtcmalloc_minimal-debug -         optimized libtcmalloc_minimal) -       set(TCMALLOC_LINK_FLAGS  "/INCLUDE:__tcmalloc") -    else (USE_TCMALLOC) -      set(TCMALLOC_LIBRARIES) -      set(TCMALLOC_LINK_FLAGS) -    endif (USE_TCMALLOC) +    use_prebuilt_binary(tcmalloc) +    set(TCMALLOC_LIBRARIES  +        debug libtcmalloc_minimal-debug +        optimized libtcmalloc_minimal)      set(GOOGLE_PERFTOOLS_FOUND "YES")    endif (WINDOWS)    if (LINUX) -    if (USE_TCMALLOC) -      use_prebuilt_binary(tcmalloc) -      set(TCMALLOC_LIBRARIES  -        tcmalloc) -    else (USE_TCMALLOC) -      set(TCMALLOC_LIBRARIES) -    endif (USE_TCMALLOC) +    use_prebuilt_binary(tcmalloc) +    set(TCMALLOC_LIBRARIES  +    tcmalloc)      set(PROFILER_LIBRARIES profiler)      set(GOOGLE_PERFTOOLS_INCLUDE_DIR          ${LIBS_PREBUILT_DIR}/include) @@ -43,19 +29,13 @@ if (GOOGLE_PERFTOOLS_FOUND)  endif (GOOGLE_PERFTOOLS_FOUND)  if (WINDOWS) -   set(USE_GOOGLE_PERFTOOLS ON) +    set(USE_GOOGLE_PERFTOOLS ON)  endif (WINDOWS)  if (USE_GOOGLE_PERFTOOLS) -  if (USE_TCMALLOC) -    set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1) -  else (USE_TCMALLOC) -    set(TCMALLOC_FLAG -ULL_USE_TCMALLOC) -  endif (USE_TCMALLOC) -endif (USE_GOOGLE_PERFTOOLS) - -if (USE_GOOGLE_PERFTOOLS) +  set(TCMALLOC_FLAG -ULL_USE_TCMALLOC=1)    include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR})    set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES} ${STACKTRACE_LIBRARIES} ${PROFILER_LIBRARIES})  else (USE_GOOGLE_PERFTOOLS) +  set(TCMALLOC_FLAG -ULL_USE_TCMALLOC)  endif (USE_GOOGLE_PERFTOOLS) diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index a6f69a09e9..03ce46781c 100644..100755 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -201,19 +201,19 @@ FUNCTION(LL_ADD_INTEGRATION_TEST    endif(TEST_DEBUG)    ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})    SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") +  if (WINDOWS) +    set_target_properties(INTEGRATION_TEST_${testname} +      PROPERTIES  +      LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc" +      LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO" +      LINK_FLAGS_RELEASE "" +      ) +  endif(WINDOWS) +    if(STANDALONE)      SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}")    endif(STANDALONE) -  if (WINDOWS) -    SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} -        PROPERTIES -        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${TCMALLOC_LINK_FLAGS}" -        LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO" -        LINK_FLAGS_RELEASE "" -        ) -  endif (WINDOWS) -    # Add link deps to the executable    if(TEST_DEBUG)      message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})") diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 17e211cb99..d4694ad37a 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -24,7 +24,7 @@ endif (LINUX)  add_definitions(${TCMALLOC_FLAG}) -set(LLCOMMON_LINK_SHARED ON CACHE BOOL "Build the llcommon target as a shared library.") +set(LLCOMMON_LINK_SHARED OFF CACHE BOOL "Build the llcommon target as a shared library.")  if(LLCOMMON_LINK_SHARED)    add_definitions(-DLL_COMMON_LINK_SHARED=1)  endif(LLCOMMON_LINK_SHARED) diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index 0a6a8f9fa6..c9fb8534f1 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -189,7 +189,6 @@ void LLCharacter::requestStopMotion( LLMotion* motion)  //-----------------------------------------------------------------------------  static LLFastTimer::DeclareTimer FTM_UPDATE_ANIMATION("Update Animation");  static LLFastTimer::DeclareTimer FTM_UPDATE_HIDDEN_ANIMATION("Update Hidden Anim"); -static LLFastTimer::DeclareTimer FTM_UPDATE_MOTIONS("Update Motions");  void LLCharacter::updateMotions(e_update_t update_type)  { @@ -207,10 +206,7 @@ void LLCharacter::updateMotions(e_update_t update_type)  			mMotionController.unpauseAllMotions();  		}  		bool force_update = (update_type == FORCE_UPDATE); -		{ -			LLFastTimer t(FTM_UPDATE_MOTIONS); -			mMotionController.updateMotions(force_update); -		} +		mMotionController.updateMotions(force_update);  	}  } diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp index 4f6351709e..bb892f4a7f 100644 --- a/indra/llcharacter/llmotioncontroller.cpp +++ b/indra/llcharacter/llmotioncontroller.cpp @@ -542,8 +542,6 @@ void LLMotionController::updateIdleActiveMotions()  //-----------------------------------------------------------------------------  // updateMotionsByType()  //----------------------------------------------------------------------------- -static LLFastTimer::DeclareTimer FTM_MOTION_ON_UPDATE("Motion onUpdate"); -  void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_type)  {  	BOOL update_result = TRUE; @@ -701,10 +699,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty  			}  			// perform motion update -			{ -				LLFastTimer t(FTM_MOTION_ON_UPDATE); -				update_result = motionp->onUpdate(mAnimTime - motionp->mActivationTimestamp, last_joint_signature); -			} +			update_result = motionp->onUpdate(mAnimTime - motionp->mActivationTimestamp, last_joint_signature);  		}  		//********************** @@ -815,7 +810,7 @@ void LLMotionController::updateMotions(bool force_update)  	// Always cap the number of loaded motions  	purgeExcessMotions(); -		 +	  	// Update timing info for this time step.  	if (!mPaused)  	{ @@ -837,7 +832,6 @@ void LLMotionController::updateMotions(bool force_update)  				}  				updateLoadingMotions(); -				  				return;  			} @@ -856,7 +850,7 @@ void LLMotionController::updateMotions(bool force_update)  	}  	updateLoadingMotions(); -	 +  	resetJointSignatures();  	if (mPaused && !force_update) @@ -867,12 +861,11 @@ void LLMotionController::updateMotions(bool force_update)  	{  		// update additive motions  		updateAdditiveMotions(); -				  		resetJointSignatures(); -		 +  		// update all regular motions  		updateRegularMotions(); -		 +  		if (use_quantum)  		{  			mPoseBlender.blendAndCache(TRUE); diff --git a/indra/llcommon/llallocator.cpp b/indra/llcommon/llallocator.cpp index 87654b5b97..6f6abefc67 100644 --- a/indra/llcommon/llallocator.cpp +++ b/indra/llcommon/llallocator.cpp @@ -27,7 +27,7 @@  #include "linden_common.h"  #include "llallocator.h" -#if (LL_USE_TCMALLOC && LL_USE_HEAP_PROFILER) +#if LL_USE_TCMALLOC  #include "google/heap-profiler.h"  #include "google/commandlineflags_public.h" diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index afaf366668..3b9758f996 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -61,18 +61,6 @@ BOOL LLMemory::sEnableMemoryFailurePrevention = FALSE;  LLPrivateMemoryPoolManager::mem_allocation_info_t LLPrivateMemoryPoolManager::sMemAllocationTracker;  #endif -void ll_assert_aligned_func(uintptr_t ptr,U32 alignment) -{ -#ifdef SHOW_ASSERT -	// Redundant, place to set breakpoints. -	if (ptr%alignment!=0) -	{ -		llwarns << "alignment check failed" << llendl; -	} -	llassert(ptr%alignment==0); -#endif -} -  //static  void LLMemory::initClass()  { diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 9dd776ff57..bbbdaa6497 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -27,6 +27,7 @@  #define LLMEMORY_H  #include "llmemtype.h" +#if LL_DEBUG  inline void* ll_aligned_malloc( size_t size, int align )  {  	void* mem = malloc( size + (align - 1) + sizeof(void*) ); @@ -42,11 +43,10 @@ inline void ll_aligned_free( void* ptr )  	free( ((void**)ptr)[-1] );  } -#if !LL_USE_TCMALLOC  inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed with ll_aligned_free_16().  {  #if defined(LL_WINDOWS) -	return _aligned_malloc(size, 16); +	return _mm_malloc(size, 16);  #elif defined(LL_DARWIN)  	return malloc(size); // default osx malloc is 16 byte aligned.  #else @@ -58,38 +58,21 @@ inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed wi  #endif  } -inline void* ll_aligned_realloc_16(void* ptr, size_t size) // returned hunk MUST be freed with ll_aligned_free_16(). -{ -#if defined(LL_WINDOWS) -	return _aligned_realloc(ptr, size, 16); -#elif defined(LL_DARWIN) -	return realloc(ptr,size); // default osx malloc is 16 byte aligned. -#else -	return realloc(ptr,size); // FIXME not guaranteed to be aligned. -#endif -} -  inline void ll_aligned_free_16(void *p)  {  #if defined(LL_WINDOWS) -	_aligned_free(p); +	_mm_free(p);  #elif defined(LL_DARWIN)  	return free(p);  #else  	free(p); // posix_memalign() is compatible with heap deallocator  #endif  } -#else // USE_TCMALLOC -// ll_aligned_foo_16 are not needed with tcmalloc -#define ll_aligned_malloc_16 malloc -#define ll_aligned_realloc_16 realloc -#define ll_aligned_free_16 free -#endif // USE_TCMALLOC  inline void* ll_aligned_malloc_32(size_t size) // returned hunk MUST be freed with ll_aligned_free_32().  {  #if defined(LL_WINDOWS) -	return _aligned_malloc(size, 32); +	return _mm_malloc(size, 32);  #elif defined(LL_DARWIN)  	return ll_aligned_malloc( size, 32 );  #else @@ -104,13 +87,22 @@ inline void* ll_aligned_malloc_32(size_t size) // returned hunk MUST be freed wi  inline void ll_aligned_free_32(void *p)  {  #if defined(LL_WINDOWS) -	_aligned_free(p); +	_mm_free(p);  #elif defined(LL_DARWIN)  	ll_aligned_free( p );  #else  	free(p); // posix_memalign() is compatible with heap deallocator  #endif  } +#else // LL_DEBUG +// ll_aligned_foo are noops now that we use tcmalloc everywhere (tcmalloc aligns automatically at appropriate intervals) +#define ll_aligned_malloc( size, align ) malloc(size) +#define ll_aligned_free( ptr ) free(ptr) +#define ll_aligned_malloc_16 malloc +#define ll_aligned_free_16 free +#define ll_aligned_malloc_32 malloc +#define ll_aligned_free_32 free +#endif // LL_DEBUG  #ifndef __DEBUG_PRIVATE_MEM__  #define __DEBUG_PRIVATE_MEM__  0 @@ -520,13 +512,4 @@ void  LLPrivateMemoryPoolTester::operator delete[](void* addr)  // LLSingleton moved to llsingleton.h -LL_COMMON_API void ll_assert_aligned_func(uintptr_t ptr,U32 alignment); - -#ifdef SHOW_ASSERT -#define ll_assert_aligned(ptr,alignment) ll_assert_aligned_func(reinterpret_cast<uintptr_t>(ptr),((U32)alignment)) -#else -#define ll_assert_aligned(ptr,alignment) -#endif - -  #endif diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index 057257057f..b82d52797e 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -40,7 +40,6 @@  S32	            LLPerfBlock::sStatsFlags = LLPerfBlock::LLSTATS_NO_OPTIONAL_STATS;       // Control what is being recorded  LLPerfBlock::stat_map_t    LLPerfBlock::sStatMap;    // Map full path string to LLStatTime objects, tracks all active objects  std::string        LLPerfBlock::sCurrentStatPath = "";    // Something like "/total_time/physics/physics step" -LLStat::stat_map_t LLStat::sStatList;  //------------------------------------------------------------------------  // Live config file to trigger stats logging @@ -771,13 +770,19 @@ void LLStat::init()  	if (!mName.empty())  	{ -		stat_map_t::iterator iter = sStatList.find(mName); -		if (iter != sStatList.end()) +		stat_map_t::iterator iter = getStatList().find(mName); +		if (iter != getStatList().end())  			llwarns << "LLStat with duplicate name: " << mName << llendl; -		sStatList.insert(std::make_pair(mName, this)); +		getStatList().insert(std::make_pair(mName, this));  	}  } +LLStat::stat_map_t& LLStat::getStatList() +{ +	static LLStat::stat_map_t stat_list; +	return stat_list; +} +  LLStat::LLStat(const U32 num_bins, const BOOL use_frame_timer)  	: mUseFrameTimer(use_frame_timer),  	  mNumBins(num_bins) @@ -803,10 +808,10 @@ LLStat::~LLStat()  	if (!mName.empty())  	{  		// handle multiple entries with the same name -		stat_map_t::iterator iter = sStatList.find(mName); -		while (iter != sStatList.end() && iter->second != this) +		stat_map_t::iterator iter = getStatList().find(mName); +		while (iter != getStatList().end() && iter->second != this)  			++iter; -		sStatList.erase(iter); +		getStatList().erase(iter);  	}  } diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h index b877432e86..1a8404cc07 100644 --- a/indra/llcommon/llstat.h +++ b/indra/llcommon/llstat.h @@ -263,9 +263,9 @@ class LL_COMMON_API LLStat  {  private:  	typedef std::multimap<std::string, LLStat*> stat_map_t; -	static stat_map_t sStatList;  	void init(); +	static stat_map_t& getStatList();  public:  	LLStat(U32 num_bins = 32, BOOL use_frame_timer = FALSE); @@ -342,8 +342,8 @@ public:  	static LLStat* getStat(const std::string& name)  	{  		// return the first stat that matches 'name' -		stat_map_t::iterator iter = sStatList.find(name); -		if (iter != sStatList.end()) +		stat_map_t::iterator iter = getStatList().find(name); +		if (iter != getStatList().end())  			return iter->second;  		else  			return NULL; diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 5865ae030c..b5e59c1ca3 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -117,7 +117,6 @@ if (LL_TESTS)    # INTEGRATION TESTS    set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})    # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. -  LL_ADD_INTEGRATION_TEST(alignment "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}")    LL_ADD_INTEGRATION_TEST(llquaternion llquaternion.cpp "${test_libs}")    LL_ADD_INTEGRATION_TEST(mathmisc "" "${test_libs}") diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index 0b591be622..ec67b91d05 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -60,7 +60,7 @@ static const F32 MAX_FIELD_OF_VIEW = 175.f * DEG_TO_RAD;  // roll(), pitch(), yaw()  // etc... -LL_ALIGN_PREFIX(16) +  class LLCamera  : 	public LLCoordFrame  { @@ -108,7 +108,7 @@ public:  	};  private: -	LL_ALIGN_16(LLPlane mAgentPlanes[7]);  //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP +	LLPlane mAgentPlanes[7];  //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP  	U8 mPlaneMask[8];         // 8 for alignment	  	F32 mView;					// angle between top and bottom frustum planes in radians. @@ -116,13 +116,13 @@ private:  	S32 mViewHeightInPixels;	// for ViewHeightInPixels() only  	F32 mNearPlane;  	F32 mFarPlane; -	LL_ALIGN_16(LLPlane mLocalPlanes[4]); +	LLPlane mLocalPlanes[4];  	F32 mFixedDistance;			// Always return this distance, unless < 0  	LLVector3 mFrustCenter;		// center of frustum and radius squared for ultra-quick exclusion test  	F32 mFrustRadiusSquared; -	LL_ALIGN_16(LLPlane mWorldPlanes[PLANE_NUM]); -	LL_ALIGN_16(LLPlane mHorizPlanes[HORIZ_PLANE_NUM]); +	LLPlane mWorldPlanes[PLANE_NUM]; +	LLPlane mHorizPlanes[HORIZ_PLANE_NUM];  	U32 mPlaneCount;  //defaults to 6, if setUserClipPlane is called, uses user supplied clip plane in @@ -208,7 +208,7 @@ protected:  	void calculateFrustumPlanes(F32 left, F32 right, F32 top, F32 bottom);  	void calculateFrustumPlanesFromWindow(F32 x1, F32 y1, F32 x2, F32 y2);  	void calculateWorldFrustumPlanes(); -} LL_ALIGN_POSTFIX(16); +};  #endif diff --git a/indra/llmath/llmatrix3a.h b/indra/llmath/llmatrix3a.h index 9916cfd2da..adb7e3389d 100644 --- a/indra/llmath/llmatrix3a.h +++ b/indra/llmath/llmatrix3a.h @@ -111,7 +111,7 @@ public:  protected: -	LL_ALIGN_16(LLVector4a mColumns[3]); +	LLVector4a mColumns[3];  }; diff --git a/indra/llmath/llmatrix4a.h b/indra/llmath/llmatrix4a.h index c4cefdb4fa..27cf5b79f6 100644 --- a/indra/llmath/llmatrix4a.h +++ b/indra/llmath/llmatrix4a.h @@ -34,7 +34,7 @@  class LLMatrix4a  {  public: -	LL_ALIGN_16(LLVector4a mMatrix[4]); +	LLVector4a mMatrix[4];  	inline void clear()  	{ diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index c3f6f7de2a..1b11e83b4a 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -31,6 +31,7 @@  #include "v3math.h"  #include "llvector4a.h"  #include <vector> +#include <set>  #define OCT_ERRS LL_WARNS("OctreeErrors") @@ -78,18 +79,16 @@ public:  	typedef LLOctreeTraveler<T>									oct_traveler;  	typedef LLTreeTraveler<T>									tree_traveler; -	typedef LLPointer<T>*										element_list; -	typedef LLPointer<T>*										element_iter; -	typedef const LLPointer<T>*									const_element_iter; +	typedef typename std::set<LLPointer<T> >					element_list; +	typedef typename element_list::iterator						element_iter; +	typedef typename element_list::const_iterator	const_element_iter;  	typedef typename std::vector<LLTreeListener<T>*>::iterator	tree_listener_iter; -	typedef LLOctreeNode<T>**									child_list; -	typedef LLOctreeNode<T>**									child_iter; - +	typedef typename std::vector<LLOctreeNode<T>* >				child_list;  	typedef LLTreeNode<T>		BaseType;  	typedef LLOctreeNode<T>		oct_node;  	typedef LLOctreeListener<T>	oct_listener; -	void* operator new(size_t size) +	/*void* operator new(size_t size)  	{  		return ll_aligned_malloc_16(size);  	} @@ -97,7 +96,7 @@ public:  	void operator delete(void* ptr)  	{  		ll_aligned_free_16(ptr); -	} +	}*/  	LLOctreeNode(	const LLVector4a& center,   					const LLVector4a& size,  @@ -106,9 +105,6 @@ public:  	:	mParent((oct_node*)parent),   		mOctant(octant)   	{  -		mData = NULL; -		mDataEnd = NULL; -  		mCenter = center;  		mSize = size; @@ -127,16 +123,6 @@ public:  	{   		BaseType::destroyListeners();  -		for (U32 i = 0; i < mElementCount; ++i) -		{ -			mData[i]->setBinIndex(-1); -			mData[i] = NULL; -		} - -		free(mData); -		mData = NULL; -		mDataEnd = NULL; -  		for (U32 i = 0; i < getChildCount(); i++)  		{  			delete getChild(i); @@ -233,17 +219,12 @@ public:  	}  	void accept(oct_traveler* visitor)				{ visitor->visit(this); } -	virtual bool isLeaf() const						{ return mChildCount == 0; } +	virtual bool isLeaf() const						{ return mChild.empty(); }  	U32 getElementCount() const						{ return mElementCount; } -	bool isEmpty() const							{ return mElementCount == 0; }  	element_list& getData()							{ return mData; }  	const element_list& getData() const				{ return mData; } -	element_iter getDataBegin()						{ return mData; } -	element_iter getDataEnd()						{ return mDataEnd; } -	const_element_iter getDataBegin() const			{ return mData; } -	const_element_iter getDataEnd() const			{ return mDataEnd; } -		 +	  	U32 getChildCount()	const						{ return mChildCount; }  	oct_node* getChild(U32 index)					{ return mChild[index]; }  	const oct_node* getChild(U32 index) const		{ return mChild[index]; } @@ -308,7 +289,7 @@ public:  	virtual bool insert(T* data)  	{ -		if (data == NULL || data->getBinIndex() != -1) +		if (data == NULL)  		{  			OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE BRANCH !!!" << llendl;  			return false; @@ -321,16 +302,13 @@ public:  			if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) ||  				(data->getBinRadius() > getSize()[0] &&	parent && parent->getElementCount() >= gOctreeMaxCapacity)))   			{ //it belongs here -				mElementCount++; -				mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - -				//avoid unref on uninitialized memory -				memset(mData+mElementCount-1, 0, sizeof(LLPointer<T>)); +				//if this is a redundant insertion, error out (should never happen) +				llassert(mData.find(data) == mData.end()); -				mData[mElementCount-1] = data; -				mDataEnd = mData + mElementCount; -				data->setBinIndex(mElementCount-1); +				mData.insert(data);  				BaseType::insert(data); + +				mElementCount = mData.size();  				return true;  			}  			else @@ -364,16 +342,10 @@ public:  				if( lt == 0x7 )  				{ -					mElementCount++; -					mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - -					//avoid unref on uninitialized memory -					memset(mData+mElementCount-1, 0, sizeof(LLPointer<T>)); - -					mData[mElementCount-1] = data; -					mDataEnd = mData + mElementCount; -					data->setBinIndex(mElementCount-1); +					mData.insert(data);  					BaseType::insert(data); + +					mElementCount = mData.size();  					return true;  				} @@ -422,59 +394,23 @@ public:  		return false;  	} -	void _remove(T* data, S32 i) -	{ //precondition -- mElementCount > 0, idx is in range [0, mElementCount) - -		mElementCount--; -		data->setBinIndex(-1);  -		 -		if (mElementCount > 0) -		{ -			if (mElementCount != i) -			{ -				mData[i] = mData[mElementCount]; //might unref data, do not access data after this point -				mData[i]->setBinIndex(i); -			} - -			mData[mElementCount] = NULL; //needed for unref -			mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); -			mDataEnd = mData+mElementCount; -		} -		else -		{ -			mData[0] = NULL; //needed for unref -			free(mData); -			mData = NULL; -			mDataEnd = NULL; -		} - -		notifyRemoval(data); -		checkAlive(); -	} -  	bool remove(T* data)  	{ -		S32 i = data->getBinIndex(); - -		if (i >= 0 && i < mElementCount) -		{ -			if (mData[i] == data) -			{ //found it -				_remove(data, i); -				llassert(data->getBinIndex() == -1); -				return true; -			} -		} -		 -		if (isInside(data)) +		if (mData.find(data) != mData.end()) +		{	//we have data +			mData.erase(data); +			mElementCount = mData.size(); +			notifyRemoval(data); +			checkAlive(); +			return true; +		} +		else if (isInside(data))  		{  			oct_node* dest = getNodeAt(data);  			if (dest != this)  			{ -				bool ret = dest->remove(data); -				llassert(data->getBinIndex() == -1); -				return ret; +				return dest->remove(data);  			}  		} @@ -493,20 +429,19 @@ public:  		//node is now root  		llwarns << "!!! OCTREE REMOVING FACE BY ADDRESS, SEVERE PERFORMANCE PENALTY |||" << llendl;  		node->removeByAddress(data); -		llassert(data->getBinIndex() == -1);  		return true;  	}  	void removeByAddress(T* data)  	{ -        for (U32 i = 0; i < mElementCount; ++i) +        if (mData.find(data) != mData.end())  		{ -			if (mData[i] == data) -			{ //we have data -				_remove(data, i); -				llwarns << "FOUND!" << llendl; -				return; -			} +			mData.erase(data); +			mElementCount = mData.size(); +			notifyRemoval(data); +			llwarns << "FOUND!" << llendl; +			checkAlive(); +			return;  		}  		for (U32 i = 0; i < getChildCount(); i++) @@ -518,8 +453,8 @@ public:  	void clearChildren()  	{ +		mChild.clear();  		mChildCount = 0; -  		U32* foo = (U32*) mChildMap;  		foo[0] = foo[1] = 0xFFFFFFFF;  	} @@ -581,7 +516,7 @@ public:  		mChildMap[child->getOctant()] = mChildCount; -		mChild[mChildCount] = child; +		mChild.push_back(child);  		++mChildCount;  		child->setParent(this); @@ -608,12 +543,9 @@ public:  			mChild[index]->destroy();  			delete mChild[index];  		} - +		mChild.erase(mChild.begin() + index);  		--mChildCount; -		mChild[index] = mChild[mChildCount]; -		 -  		//rebuild child map  		U32* foo = (U32*) mChildMap;  		foo[0] = foo[1] = 0xFFFFFFFF; @@ -669,12 +601,11 @@ protected:  	oct_node* mParent;  	U8 mOctant; -	LLOctreeNode<T>* mChild[8]; +	child_list mChild;  	U8 mChildMap[8];  	U32 mChildCount;  	element_list mData; -	element_iter mDataEnd;  	U32 mElementCount;  };  diff --git a/indra/llmath/llplane.h b/indra/llmath/llplane.h index 3c32441b11..a611894721 100644 --- a/indra/llmath/llplane.h +++ b/indra/llmath/llplane.h @@ -36,8 +36,6 @@  // The plane normal = [A, B, C]  // The closest approach = D / sqrt(A*A + B*B + C*C) - -LL_ALIGN_PREFIX(16)  class LLPlane  {  public: @@ -96,7 +94,7 @@ public:  private:  	LLVector4a mV; -} LL_ALIGN_POSTFIX(16); +}; diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h index 01458521ec..c7cdf7b32c 100644 --- a/indra/llmath/llsimdmath.h +++ b/indra/llmath/llsimdmath.h @@ -67,10 +67,11 @@ template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)  #define LL_ALIGN_16(var) LL_ALIGN_PREFIX(16) var LL_ALIGN_POSTFIX(16) + +  #include <xmmintrin.h>  #include <emmintrin.h> -#include "llmemory.h"  #include "llsimdtypes.h"  #include "llsimdtypes.inl" diff --git a/indra/llmath/llsimdtypes.inl b/indra/llmath/llsimdtypes.inl index e905c84954..712239e425 100644 --- a/indra/llmath/llsimdtypes.inl +++ b/indra/llmath/llsimdtypes.inl @@ -62,7 +62,6 @@ inline LLSimdScalar operator/(const LLSimdScalar& a, const LLSimdScalar& b)  inline LLSimdScalar operator-(const LLSimdScalar& a)  {  	static LL_ALIGN_16(const U32 signMask[4]) = {0x80000000, 0x80000000, 0x80000000, 0x80000000 }; -	ll_assert_aligned(signMask,16);  	return _mm_xor_ps(*reinterpret_cast<const LLQuad*>(signMask), a);  } @@ -147,7 +146,6 @@ inline LLSimdScalar& LLSimdScalar::operator/=(const LLSimdScalar& rhs)  inline LLSimdScalar LLSimdScalar::getAbs() const  {  	static const LL_ALIGN_16(U32 F_ABS_MASK_4A[4]) = { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF }; -	ll_assert_aligned(F_ABS_MASK_4A,16);  	return _mm_and_ps( mQ, *reinterpret_cast<const LLQuad*>(F_ABS_MASK_4A));  } diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp index 6edeb0fefe..b66b7a7076 100644 --- a/indra/llmath/llvector4a.cpp +++ b/indra/llmath/llvector4a.cpp @@ -24,7 +24,6 @@   * $/LicenseInfo$   */ -#include "llmemory.h"  #include "llmath.h"  #include "llquantize.h" @@ -45,10 +44,7 @@ extern const LLVector4a LL_V4A_EPSILON = reinterpret_cast<const LLVector4a&> ( F  	assert(dst != NULL);  	assert(bytes > 0);  	assert((bytes % sizeof(F32))== 0);  -	ll_assert_aligned(src,16); -	ll_assert_aligned(dst,16); -	assert(bytes%16==0); - +	  	F32* end = dst + (bytes / sizeof(F32) );  	if (bytes > 64) @@ -193,8 +189,6 @@ void LLVector4a::quantize16( const LLVector4a& low, const LLVector4a& high )  		LLVector4a oneOverDelta;  		{  			static LL_ALIGN_16( const F32 F_TWO_4A[4] ) = { 2.f, 2.f, 2.f, 2.f }; -			ll_assert_aligned(F_TWO_4A,16); -			  			LLVector4a two; two.load4a( F_TWO_4A );  			// Here we use _mm_rcp_ps plus one round of newton-raphson diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h index 0526793d3a..596082509d 100644 --- a/indra/llmath/llvector4a.h +++ b/indra/llmath/llvector4a.h @@ -32,7 +32,6 @@ class LLRotation;  #include <assert.h>  #include "llpreprocessor.h" -#include "llmemory.h"  ///////////////////////////////////  // FIRST TIME USERS PLEASE READ @@ -47,7 +46,6 @@ class LLRotation;  // LLVector3/LLVector4.   ///////////////////////////////// -LL_ALIGN_PREFIX(16)  class LLVector4a  {  public: @@ -84,7 +82,6 @@ public:  	}  	// Copy words 16-byte blocks from src to dst. Source and destination must not overlap.  -	// Source and dest must be 16-byte aligned and size must be multiple of 16.  	static void memcpyNonAliased16(F32* __restrict dst, const F32* __restrict src, size_t bytes);  	//////////////////////////////////// @@ -93,7 +90,6 @@ public:  	LLVector4a()  	{ //DO NOT INITIALIZE -- The overhead is completely unnecessary -		ll_assert_aligned(this,16);  	}  	LLVector4a(F32 x, F32 y, F32 z, F32 w = 0.f) @@ -317,7 +313,7 @@ public:  private:  	LLQuad mQ; -} LL_ALIGN_POSTFIX(16); +};  inline void update_min_max(LLVector4a& min, LLVector4a& max, const LLVector4a& p)  { diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl index 7c52ffef21..7ad22a5631 100644 --- a/indra/llmath/llvector4a.inl +++ b/indra/llmath/llvector4a.inl @@ -475,7 +475,6 @@ inline void LLVector4a::setLerp(const LLVector4a& lhs, const LLVector4a& rhs, F3  inline LLBool32 LLVector4a::isFinite3() const  {  	static LL_ALIGN_16(const U32 nanOrInfMask[4]) = { 0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000 }; -	ll_assert_aligned(nanOrInfMask,16);  	const __m128i nanOrInfMaskV = *reinterpret_cast<const __m128i*> (nanOrInfMask);  	const __m128i maskResult = _mm_and_si128( _mm_castps_si128(mQ), nanOrInfMaskV );  	const LLVector4Logical equalityCheck = _mm_castsi128_ps(_mm_cmpeq_epi32( maskResult, nanOrInfMaskV )); diff --git a/indra/llmath/llvector4logical.h b/indra/llmath/llvector4logical.h index c5698f7cea..dd66b09d43 100644 --- a/indra/llmath/llvector4logical.h +++ b/indra/llmath/llvector4logical.h @@ -27,7 +27,6 @@  #ifndef	LL_VECTOR4LOGICAL_H  #define	LL_VECTOR4LOGICAL_H -#include "llmemory.h"  ////////////////////////////  // LLVector4Logical @@ -78,7 +77,6 @@ public:  	inline LLVector4Logical& invert()  	{  		static const LL_ALIGN_16(U32 allOnes[4]) = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; -		ll_assert_aligned(allOnes,16);  		mQ = _mm_andnot_ps( mQ, *(LLQuad*)(allOnes) );  		return *this;  	} diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 53d56e96da..cc9744756f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -95,6 +95,17 @@ const S32 SCULPT_MIN_AREA_DETAIL = 1;  extern BOOL gDebugGL; +void assert_aligned(void* ptr, uintptr_t alignment) +{ +#if 0 +	uintptr_t t = (uintptr_t) ptr; +	if (t%alignment != 0) +	{ +		llerrs << "Alignment check failed." << llendl; +	} +#endif +} +  BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm)  {      	LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -317,16 +328,16 @@ public:  		LLVector4a& min = node->mExtents[0];  		LLVector4a& max = node->mExtents[1]; -		if (!branch->isEmpty()) +		if (!branch->getData().empty())  		{ //node has data, find AABB that binds data set -			const LLVolumeTriangle* tri = *(branch->getDataBegin()); +			const LLVolumeTriangle* tri = *(branch->getData().begin());  			//initialize min/max to first available vertex  			min = *(tri->mV[0]);  			max = *(tri->mV[0]);  			for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter =  -				branch->getDataBegin(); iter != branch->getDataEnd(); ++iter) +				branch->getData().begin(); iter != branch->getData().end(); ++iter)  			{ //for each triangle in node  				//stretch by triangles in node @@ -341,7 +352,7 @@ public:  				max.setMax(max, *tri->mV[2]);  			}  		} -		else if (!branch->isLeaf()) +		else if (!branch->getChildren().empty())  		{ //no data, but child nodes exist  			LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0); @@ -6951,14 +6962,14 @@ void LLVolumeFace::resizeVertices(S32 num_verts)  	if (num_verts)  	{  		mPositions = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts); -		ll_assert_aligned(mPositions, 16); +		assert_aligned(mPositions, 16);  		mNormals = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts); -		ll_assert_aligned(mNormals, 16); +		assert_aligned(mNormals, 16);  		//pad texture coordinate block end to allow for QWORD reads  		S32 size = ((num_verts*sizeof(LLVector2)) + 0xF) & ~0xF;  		mTexCoords = (LLVector2*) ll_aligned_malloc_16(size); -		ll_assert_aligned(mTexCoords, 16); +		assert_aligned(mTexCoords, 16);  	}  	else  	{ @@ -6982,17 +6993,14 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con  //	S32 old_size = mNumVertices*16;  	//positions -	mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_size); -	ll_assert_aligned(mPositions,16); +	mPositions = (LLVector4a*) realloc(mPositions, new_size);  	//normals -	mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_size); -	ll_assert_aligned(mNormals,16); - +	mNormals = (LLVector4a*) realloc(mNormals, new_size); +	  	//tex coords  	new_size = ((new_verts*8)+0xF) & ~0xF; -	mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, new_size); -	ll_assert_aligned(mTexCoords,16); +	mTexCoords = (LLVector2*) realloc(mTexCoords, new_size);  	//just clear binormals @@ -7045,8 +7053,7 @@ void LLVolumeFace::pushIndex(const U16& idx)  	S32 old_size = ((mNumIndices*2)+0xF) & ~0xF;  	if (new_size != old_size)  	{ -		mIndices = (U16*) ll_aligned_realloc_16(mIndices, new_size); -		ll_assert_aligned(mIndices,16); +		mIndices = (U16*) realloc(mIndices, new_size);  	}  	mIndices[mNumIndices++] = idx; @@ -7087,12 +7094,12 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat  	}  	//allocate new buffer space -	mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_count*sizeof(LLVector4a)); -	ll_assert_aligned(mPositions, 16); -	mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_count*sizeof(LLVector4a)); -	ll_assert_aligned(mNormals, 16); -	mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF); -	ll_assert_aligned(mTexCoords, 16); +	mPositions = (LLVector4a*) realloc(mPositions, new_count*sizeof(LLVector4a)); +	assert_aligned(mPositions, 16); +	mNormals = (LLVector4a*) realloc(mNormals, new_count*sizeof(LLVector4a)); +	assert_aligned(mNormals, 16); +	mTexCoords = (LLVector2*) realloc(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF); +	assert_aligned(mTexCoords, 16);  	mNumVertices = new_count; @@ -7138,7 +7145,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat  	new_count = mNumIndices + face.mNumIndices;  	//allocate new index buffer -	mIndices = (U16*) ll_aligned_realloc_16(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF); +	mIndices = (U16*) realloc(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF);  	//get destination address into new index buffer  	U16* dst_idx = mIndices+mNumIndices; diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp index cc83cb7235..b5a935c2b5 100644 --- a/indra/llmath/llvolumeoctree.cpp +++ b/indra/llmath/llvolumeoctree.cpp @@ -131,7 +131,7 @@ void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode<LLVolumeTriangle>  void LLOctreeTriangleRayIntersect::visit(const LLOctreeNode<LLVolumeTriangle>* node)  {  	for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter =  -			node->getDataBegin(); iter != node->getDataEnd(); ++iter) +			node->getData().begin(); iter != node->getData().end(); ++iter)  	{  		const LLVolumeTriangle* tri = *iter; @@ -236,8 +236,8 @@ void LLVolumeOctreeValidate::visit(const LLOctreeNode<LLVolumeTriangle>* branch)  	}  	//children fit, check data -	for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getDataBegin();  -			iter != branch->getDataEnd(); ++iter) +	for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getData().begin();  +			iter != branch->getData().end(); ++iter)  	{  		const LLVolumeTriangle* tri = *iter; diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h index 9ae34a0c4e..688d91dc40 100644 --- a/indra/llmath/llvolumeoctree.h +++ b/indra/llmath/llvolumeoctree.h @@ -37,19 +37,9 @@  class LLVolumeTriangle : public LLRefCount  {  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLVolumeTriangle()  	{ -		mBinIndex = -1;	 +		  	}  	LLVolumeTriangle(const LLVolumeTriangle& rhs) @@ -68,38 +58,21 @@ public:  	} -	LL_ALIGN_16(LLVector4a mPositionGroup); +	LLVector4a mPositionGroup;  	const LLVector4a* mV[3];  	U16 mIndex[3];  	F32 mRadius; -	mutable S32 mBinIndex; -  	virtual const LLVector4a& getPositionGroup() const;  	virtual const F32& getBinRadius() const; -	 -	S32 getBinIndex() const { return mBinIndex; } -	void setBinIndex(S32 idx) const { mBinIndex = idx; } - -  };  class LLVolumeOctreeListener : public LLOctreeListener<LLVolumeTriangle>  {  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle>* node);  	~LLVolumeOctreeListener(); @@ -126,8 +99,8 @@ public:  public: -	LL_ALIGN_16(LLVector4a mBounds[2]); // bounding box (center, size) of this node and all its children (tight fit to objects) -	LL_ALIGN_16(LLVector4a mExtents[2]); // extents (min, max) of this node and all its children +	LLVector4a mBounds[2]; // bounding box (center, size) of this node and all its children (tight fit to objects) +	LLVector4a mExtents[2]; // extents (min, max) of this node and all its children  };  class LLOctreeTriangleRayIntersect : public LLOctreeTraveler<LLVolumeTriangle> diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 97f2792686..ff31f7665e 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -651,8 +651,10 @@ void LLAvatarNameCache::fireSignal(const LLUUID& agent_id,  	signal(agent_id, av_name);  } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  { +	callback_connection_t connection; +  	if (sRunning)  	{  		// ...only do immediate lookups when cache is running @@ -668,7 +670,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  				{  					// ...name already exists in cache, fire callback now  					fireSignal(agent_id, slot, av_name); -					return; +					return connection;  				}  			}  		} @@ -681,7 +683,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  				LLAvatarName av_name;  				buildLegacyName(full_name, &av_name);  				fireSignal(agent_id, slot, av_name); -				return; +				return connection;  			}  		}  	} @@ -698,15 +700,17 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  	{  		// ...new callback for this id  		callback_signal_t* signal = new callback_signal_t(); -		signal->connect(slot); +		connection = signal->connect(slot);  		sSignalMap[agent_id] = signal;  	}  	else  	{  		// ...existing callback, bind additional slot  		callback_signal_t* signal = sig_it->second; -		signal->connect(slot); +		connection = signal->connect(slot);  	} + +	return connection;  } diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 59c1329ffa..064942fe53 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -71,10 +71,11 @@ namespace LLAvatarNameCache  		void (const LLUUID& agent_id, const LLAvatarName& av_name)>  			callback_signal_t;  	typedef callback_signal_t::slot_type callback_slot_t; +	typedef boost::signals2::connection callback_connection_t;  	// Fetches name information and calls callback.  	// If name information is in cache, callback will be called immediately. -	void get(const LLUUID& agent_id, callback_slot_t slot); +	callback_connection_t get(const LLUUID& agent_id, callback_slot_t slot);  	// Allow display names to be explicitly disabled for testing.  	void setUseDisplayNames(bool use); diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp index f3f0007205..a16f5c7bf0 100644 --- a/indra/llmessage/llurlrequest.cpp +++ b/indra/llmessage/llurlrequest.cpp @@ -289,8 +289,6 @@ LLIOPipe::EStatus LLURLRequest::handleError(  }  static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST("URL Request"); -static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST_GET_RESULT("Get Result"); -static LLFastTimer::DeclareTimer FTM_URL_PERFORM("Perform");  // virtual  LLIOPipe::EStatus LLURLRequest::process_impl( @@ -360,6 +358,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(  	{  		PUMP_DEBUG;  		LLIOPipe::EStatus status = STATUS_BREAK; +		static LLFastTimer::DeclareTimer FTM_URL_PERFORM("Perform");  		{  			LLFastTimer t(FTM_URL_PERFORM);  			if(!mDetail->mCurlRequest->wait()) @@ -372,6 +371,8 @@ LLIOPipe::EStatus LLURLRequest::process_impl(  		{  			CURLcode result; +			static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST_GET_RESULT("Get Result"); +  			bool newmsg = false;  			{  				LLFastTimer t(FTM_PROCESS_URL_REQUEST_GET_RESULT); diff --git a/indra/llmessage/tests/llhttpclient_test.cpp b/indra/llmessage/tests/llhttpclient_test.cpp index e338d4ec71..843c3bcc4b 100644 --- a/indra/llmessage/tests/llhttpclient_test.cpp +++ b/indra/llmessage/tests/llhttpclient_test.cpp @@ -258,7 +258,6 @@ namespace tut  	void HTTPClientTestObject::test<1>()  	{  		LLHTTPClient::get(local_server, newResult()); -  		runThePump();  		ensureStatusOK();  		ensure("result object wasn't destroyed", mResultDeleted); diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index dbd96673a1..0644d2638c 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -1074,7 +1074,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)  			mAuthURL = message.getValue("url");  			mAuthRealm = message.getValue("realm");  			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST); -		}		 +		}  		else if(message_name == "debug_message")  		{  			mDebugMessageText = message.getValue("message_text"); diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 28ed051c55..cb32a510b8 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -1026,8 +1026,7 @@ void LLModel::setVolumeFaceData(  	if (tc.get())  	{ -		U32 tex_size = (num_verts*2*sizeof(F32)+0xF)&~0xF; -		LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), tex_size); +		LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), num_verts*2*sizeof(F32));  	}  	else  	{ diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index a842211764..659d3ca409 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -237,11 +237,9 @@ S32 LLImageGL::dataFormatComponents(S32 dataformat)  //---------------------------------------------------------------------------- -static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_STATS("Image Stats");  // static  void LLImageGL::updateStats(F32 current_time)  { -	LLFastTimer t(FTM_IMAGE_UPDATE_STATS);  	sLastFrameTime = current_time;  	sBoundTextureMemoryInBytes = sCurBoundTextureMemory;  	sCurBoundTextureMemory = 0; diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index cc5c232380..99f0da330c 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -69,42 +69,6 @@ LLRenderTarget::~LLRenderTarget()  	release();  } -void LLRenderTarget::resize(U32 resx, U32 resy, U32 color_fmt) -{  -	//for accounting, get the number of pixels added/subtracted -	S32 pix_diff = (resx*resy)-(mResX*mResY); -		 -	mResX = resx; -	mResY = resy; - -	for (U32 i = 0; i < mTex.size(); ++i) -	{ //resize color attachments -		gGL.getTexUnit(0)->bindManual(mUsage, mTex[i]); -		LLImageGL::setManualImage(LLTexUnit::getInternalType(mUsage), 0, color_fmt, mResX, mResY, GL_RGBA, GL_UNSIGNED_BYTE, NULL, false); -		sBytesAllocated += pix_diff*4; -	} - -	if (mDepth) -	{ //resize depth attachment -		if (mStencil) -		{ -			//use render buffers where stencil buffers are in play -			glBindRenderbuffer(GL_RENDERBUFFER, mDepth); -			glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, mResX, mResY); -			glBindRenderbuffer(GL_RENDERBUFFER, 0); -		} -		else -		{ -			gGL.getTexUnit(0)->bindManual(mUsage, mDepth); -			U32 internal_type = LLTexUnit::getInternalType(mUsage); -			LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT24, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL, false); -		} - -		sBytesAllocated += pix_diff*4; -	} -} -	 -  bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)  {  	stop_glerror(); diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index e1a51304f1..8360458840 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -57,6 +57,8 @@  */ +class LLMultisampleBuffer; +  class LLRenderTarget  {  public: @@ -72,12 +74,6 @@ public:  	//multiple calls will release previously allocated resources  	bool allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = false, S32 samples = 0); -	//resize existing attachments to use new resolution and color format -	// CAUTION: if the GL runs out of memory attempting to resize, this render target will be undefined -	// DO NOT use for screen space buffers or for scratch space for an image that might be uploaded -	// DO use for render targets that resize often and aren't likely to ruin someone's day if they break -	void resize(U32 resx, U32 resy, U32 color_fmt); -  	//add color buffer attachment  	//limit of 4 color attachments per render target  	bool addColorAttachment(U32 color_fmt); diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index eadef93c89..80752231d7 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -38,6 +38,10 @@  #include "llglslshader.h"  #include "llmemory.h" +#if LL_DARWIN +#define LL_VBO_POOLING 1 +#else +#endif  //Next Highest Power Of Two  //helper function, returns first number > v that is a power of 2, or v if v is already a power of 2  U32 nhpo2(U32 v) @@ -290,7 +294,6 @@ void LLVBOPool::seedPool()  } -  void LLVBOPool::cleanup()  {  	U32 size = LL_VBO_BLOCK_SIZE; diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp index cb3b7abb14..74ed72ef97 100644 --- a/indra/llui/tests/llurlentry_stub.cpp +++ b/indra/llui/tests/llurlentry_stub.cpp @@ -40,9 +40,10 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)  	return false;  } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  { -	return; +	callback_connection_t connection; +	return connection;  }  bool LLAvatarNameCache::useDisplayNames() diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 32bb84cba5..97637c937f 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -2809,42 +2809,48 @@ const char* cursorIDToName(int id)  {  	switch (id)  	{ -		case UI_CURSOR_ARROW:			return "UI_CURSOR_ARROW"; -		case UI_CURSOR_WAIT:			return "UI_CURSOR_WAIT"; -		case UI_CURSOR_HAND:			return "UI_CURSOR_HAND"; -		case UI_CURSOR_IBEAM:			return "UI_CURSOR_IBEAM"; -		case UI_CURSOR_CROSS:			return "UI_CURSOR_CROSS"; -		case UI_CURSOR_SIZENWSE:		return "UI_CURSOR_SIZENWSE"; -		case UI_CURSOR_SIZENESW:		return "UI_CURSOR_SIZENESW"; -		case UI_CURSOR_SIZEWE:			return "UI_CURSOR_SIZEWE"; -		case UI_CURSOR_SIZENS:			return "UI_CURSOR_SIZENS"; -		case UI_CURSOR_NO:				return "UI_CURSOR_NO"; -		case UI_CURSOR_WORKING:			return "UI_CURSOR_WORKING"; -		case UI_CURSOR_TOOLGRAB:		return "UI_CURSOR_TOOLGRAB"; -		case UI_CURSOR_TOOLLAND:		return "UI_CURSOR_TOOLLAND"; -		case UI_CURSOR_TOOLFOCUS:		return "UI_CURSOR_TOOLFOCUS"; -		case UI_CURSOR_TOOLCREATE:		return "UI_CURSOR_TOOLCREATE"; -		case UI_CURSOR_ARROWDRAG:		return "UI_CURSOR_ARROWDRAG"; -		case UI_CURSOR_ARROWCOPY:		return "UI_CURSOR_ARROWCOPY"; -		case UI_CURSOR_ARROWDRAGMULTI:	return "UI_CURSOR_ARROWDRAGMULTI"; -		case UI_CURSOR_ARROWCOPYMULTI:	return "UI_CURSOR_ARROWCOPYMULTI"; -		case UI_CURSOR_NOLOCKED:		return "UI_CURSOR_NOLOCKED"; -		case UI_CURSOR_ARROWLOCKED:		return "UI_CURSOR_ARROWLOCKED"; -		case UI_CURSOR_GRABLOCKED:		return "UI_CURSOR_GRABLOCKED"; -		case UI_CURSOR_TOOLTRANSLATE:	return "UI_CURSOR_TOOLTRANSLATE"; -		case UI_CURSOR_TOOLROTATE:		return "UI_CURSOR_TOOLROTATE"; -		case UI_CURSOR_TOOLSCALE:		return "UI_CURSOR_TOOLSCALE"; -		case UI_CURSOR_TOOLCAMERA:		return "UI_CURSOR_TOOLCAMERA"; -		case UI_CURSOR_TOOLPAN:			return "UI_CURSOR_TOOLPAN"; -		case UI_CURSOR_TOOLZOOMIN:		return "UI_CURSOR_TOOLZOOMIN"; -		case UI_CURSOR_TOOLPICKOBJECT3:	return "UI_CURSOR_TOOLPICKOBJECT3"; -		case UI_CURSOR_TOOLPLAY:		return "UI_CURSOR_TOOLPLAY"; -		case UI_CURSOR_TOOLPAUSE:		return "UI_CURSOR_TOOLPAUSE"; -		case UI_CURSOR_TOOLMEDIAOPEN:	return "UI_CURSOR_TOOLMEDIAOPEN"; -		case UI_CURSOR_PIPETTE:			return "UI_CURSOR_PIPETTE"; -		case UI_CURSOR_TOOLSIT:			return "UI_CURSOR_TOOLSIT"; -		case UI_CURSOR_TOOLBUY:			return "UI_CURSOR_TOOLBUY"; -		case UI_CURSOR_TOOLOPEN:		return "UI_CURSOR_TOOLOPEN"; +		case UI_CURSOR_ARROW:							return "UI_CURSOR_ARROW"; +		case UI_CURSOR_WAIT:							return "UI_CURSOR_WAIT"; +		case UI_CURSOR_HAND:							return "UI_CURSOR_HAND"; +		case UI_CURSOR_IBEAM:							return "UI_CURSOR_IBEAM"; +		case UI_CURSOR_CROSS:							return "UI_CURSOR_CROSS"; +		case UI_CURSOR_SIZENWSE:						return "UI_CURSOR_SIZENWSE"; +		case UI_CURSOR_SIZENESW:						return "UI_CURSOR_SIZENESW"; +		case UI_CURSOR_SIZEWE:							return "UI_CURSOR_SIZEWE"; +		case UI_CURSOR_SIZENS:							return "UI_CURSOR_SIZENS"; +		case UI_CURSOR_NO:								return "UI_CURSOR_NO"; +		case UI_CURSOR_WORKING:							return "UI_CURSOR_WORKING"; +		case UI_CURSOR_TOOLGRAB:						return "UI_CURSOR_TOOLGRAB"; +		case UI_CURSOR_TOOLLAND:						return "UI_CURSOR_TOOLLAND"; +		case UI_CURSOR_TOOLFOCUS:						return "UI_CURSOR_TOOLFOCUS"; +		case UI_CURSOR_TOOLCREATE:						return "UI_CURSOR_TOOLCREATE"; +		case UI_CURSOR_ARROWDRAG:						return "UI_CURSOR_ARROWDRAG"; +		case UI_CURSOR_ARROWCOPY:						return "UI_CURSOR_ARROWCOPY"; +		case UI_CURSOR_ARROWDRAGMULTI:					return "UI_CURSOR_ARROWDRAGMULTI"; +		case UI_CURSOR_ARROWCOPYMULTI:					return "UI_CURSOR_ARROWCOPYMULTI"; +		case UI_CURSOR_NOLOCKED:						return "UI_CURSOR_NOLOCKED"; +		case UI_CURSOR_ARROWLOCKED:						return "UI_CURSOR_ARROWLOCKED"; +		case UI_CURSOR_GRABLOCKED:						return "UI_CURSOR_GRABLOCKED"; +		case UI_CURSOR_TOOLTRANSLATE:					return "UI_CURSOR_TOOLTRANSLATE"; +		case UI_CURSOR_TOOLROTATE:						return "UI_CURSOR_TOOLROTATE"; +		case UI_CURSOR_TOOLSCALE:						return "UI_CURSOR_TOOLSCALE"; +		case UI_CURSOR_TOOLCAMERA:						return "UI_CURSOR_TOOLCAMERA"; +		case UI_CURSOR_TOOLPAN:							return "UI_CURSOR_TOOLPAN"; +		case UI_CURSOR_TOOLZOOMIN:						return "UI_CURSOR_TOOLZOOMIN"; +		case UI_CURSOR_TOOLPICKOBJECT3:					return "UI_CURSOR_TOOLPICKOBJECT3"; +		case UI_CURSOR_TOOLPLAY:						return "UI_CURSOR_TOOLPLAY"; +		case UI_CURSOR_TOOLPAUSE:						return "UI_CURSOR_TOOLPAUSE"; +		case UI_CURSOR_TOOLMEDIAOPEN:					return "UI_CURSOR_TOOLMEDIAOPEN"; +		case UI_CURSOR_PIPETTE:							return "UI_CURSOR_PIPETTE"; +		case UI_CURSOR_TOOLSIT:							return "UI_CURSOR_TOOLSIT"; +		case UI_CURSOR_TOOLBUY:							return "UI_CURSOR_TOOLBUY"; +		case UI_CURSOR_TOOLOPEN:						return "UI_CURSOR_TOOLOPEN"; +		case UI_CURSOR_TOOLPATHFINDING:					return "UI_CURSOR_PATHFINDING"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_START:		return "UI_CURSOR_PATHFINDING_START"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD:	return "UI_CURSOR_PATHFINDING_START_ADD"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_END:		return "UI_CURSOR_PATHFINDING_END"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD:	return "UI_CURSOR_PATHFINDING_END_ADD"; +		case UI_CURSOR_TOOLNO:							return "UI_CURSOR_NO";  	}  	llerrs << "cursorIDToName: unknown cursor id" << id << llendl; @@ -2950,6 +2956,12 @@ void LLWindowMacOSX::updateCursor()  	case UI_CURSOR_TOOLSIT:  	case UI_CURSOR_TOOLBUY:  	case UI_CURSOR_TOOLOPEN: +	case UI_CURSOR_TOOLPATHFINDING: +	case UI_CURSOR_TOOLPATHFINDING_PATH_START: +	case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD: +	case UI_CURSOR_TOOLPATHFINDING_PATH_END: +	case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD: +	case UI_CURSOR_TOOLNO:  		result = setImageCursor(gCursors[mNextCursor]);  		break; @@ -2994,6 +3006,12 @@ void LLWindowMacOSX::initCursors()  	initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15);  	initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15);  	initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLNO, 8, 8);  	initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10);  	initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10); diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 3d33af9d9b..3bf4a48cb6 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -2117,6 +2117,12 @@ void LLWindowSDL::initCursors()  	mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15);  	mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15);  	mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING] = makeSDLCursorFromBMP("lltoolpathfinding.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START] = makeSDLCursorFromBMP("lltoolpathfindingpathstart.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathstartadd.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END] = makeSDLCursorFromBMP("lltoolpathfindingpathend.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathendadd.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLNO] = makeSDLCursorFromBMP("llno.BMP",8,8);  	if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) {  		llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 753dbd7438..c0a252637f 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -45,7 +45,10 @@ include(VisualLeakDetector)  include(GLOD)  include(CMakeCopyIfDifferent) -add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +if (NOT HAVOK_TPV) +   # When using HAVOK_TPV, the library is precompiled, so no need for this +   add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +endif (NOT HAVOK_TPV)  include_directories(      ${DBUSGLIB_INCLUDE_DIRS} @@ -1561,7 +1564,9 @@ set(PACKAGE ON CACHE BOOL  if (WINDOWS)      set_target_properties(${VIEWER_BINARY_NAME}          PROPERTIES -        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${TCMALLOC_LINK_FLAGS}" +        # *TODO -reenable this once we get server usage sorted out +        #LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\"" +        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc "          LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"          LINK_FLAGS_RELEASE "/FORCE:MULTIPLE /MAP\"secondlife-bin.MAP\" /OPT:REF"          ) @@ -1580,7 +1585,7 @@ if (WINDOWS)      # In the meantime, if you have any ideas on how to easily maintain one list, either here or in viewer_manifest.py      # and have the build deps get tracked *please* tell me about it. -    if(USE_TCMALLOC) +    if(USE_GOOGLE_PERFTOOLS)        # Configure a var for tcmalloc location, if used.        # Note the need to specify multiple names explicitly.        set(GOOGLE_PERF_TOOLS_SOURCE @@ -1588,7 +1593,7 @@ if (WINDOWS)          ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/libtcmalloc_minimal.dll          ${SHARED_LIB_STAGING_DIR}/Debug/libtcmalloc_minimal-debug.dll          ) -     endif(USE_TCMALLOC) +     endif(USE_GOOGLE_PERFTOOLS)      set(COPY_INPUT_DEPENDENCIES diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2af71d98b8..1bf773bb9e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5023,7 +5023,7 @@      <key>LoginLocation</key>      <map>        <key>Comment</key> -      <string>Login location ('last', 'home')</string> +      <string>Default Login location ('last', 'home') preference</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -6123,7 +6123,7 @@      <key>NextLoginLocation</key>      <map>        <key>Comment</key> -      <string>Location to log into by default.</string> +      <string>Location to log into for this session - set from command line or the login panel, cleared following a successfull login.</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tifBinary files differ new file mode 100644 index 0000000000..ba6f30fa0e --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tifBinary files differ new file mode 100644 index 0000000000..830d5692fd --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tifBinary files differ new file mode 100644 index 0000000000..e05284214a --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tifBinary files differ new file mode 100644 index 0000000000..c4822adf64 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tifBinary files differ new file mode 100644 index 0000000000..5166af6e05 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 63737c78d0..e8934d9a9e 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -89,7 +89,6 @@  #include "lllogininstance.h"  #include "llprogressview.h"  #include "llvocache.h" -#include "llvopartgroup.h"  #include "llweb.h"  #include "llsecondlifeurls.h"  #include "llupdaterservice.h" @@ -680,9 +679,6 @@ bool LLAppViewer::init()  	// initialize SSE options  	LLVector4a::initClass(); -	//initialize particle index pool -	LLVOPartGroup::initClass(); -  	// Need to do this initialization before we do anything else, since anything  	// that touches files should really go through the lldir API  	gDirUtilp->initAppDirs("SecondLife"); @@ -2665,14 +2661,6 @@ bool LLAppViewer::initConfiguration()  		}  	} -	// If automatic login from command line with --login switch -	// init StartSLURL location. In interactive login, LLPanelLogin -	// will take care of it. -	if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl")) -	{ -		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation"))); -	} -  	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))  	{  	    // @@ -2720,12 +2708,27 @@ bool LLAppViewer::initConfiguration()          }  	} -   	// need to do this here - need to have initialized global settings first +   	// NextLoginLocation is set from the command line option  	std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );  	if ( !nextLoginLocation.empty() )  	{ +		LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL;  		LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation)); -	}; +	} +	else if (   (   clp.hasOption("login") || clp.hasOption("autologin")) +			 && !clp.hasOption("url") +			 && !clp.hasOption("slurl")) +	{ +		// If automatic login from command line with --login switch +		// init StartSLURL location. +		std::string start_slurl_setting = gSavedSettings.getString("LoginLocation"); +		LL_DEBUGS("AppInit") << "start slurl setting '" << start_slurl_setting << "'" << LL_ENDL; +		LLStartUp::setStartSLURL(LLSLURL(start_slurl_setting)); +	} +	else +	{ +		// the login location will be set by the login panel (see LLPanelLogin) +	}  	gLastRunVersion = gSavedSettings.getString("LastRunVersion"); diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 53c77fa22e..bad60a9757 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -130,8 +130,6 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,  	// This results in a 2-3x improvement in opening a new Inventory window (which uses a large numebr of allocations)  	// Note: This won't work when running from the debugger unless the _NO_DEBUG_HEAP environment variable is set to 1 -	// Enable to get mem debugging within visual studio. -	//_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);  	_CrtSetDbgFlag(0); // default, just making explicit  	ULONG ulEnableLFH = 2; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 89a2e9f407..108ec92f6d 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -57,8 +57,6 @@ const F32 MIN_SHADOW_CASTER_RADIUS = 2.0f;  static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound"); -extern bool gShiftFrame; -  ////////////////////////  // @@ -110,8 +108,6 @@ void LLDrawable::init()  	mGeneration = -1;  	mBinRadius = 1.f; -	mBinIndex = -1; -  	mSpatialBridge = NULL;  } @@ -718,11 +714,6 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)  		return;  	} -	if (gShiftFrame) -	{ -		return; -	} -  	//switch LOD with the spatial group to avoid artifacts  	//LLSpatialGroup* sg = getSpatialGroup(); @@ -820,19 +811,14 @@ void LLDrawable::shiftPos(const LLVector4a &shift_vector)  		mXform.setPosition(mVObjp->getPositionAgent());  	} +	mXform.setRotation(mVObjp->getRotation()); +	mXform.setScale(1,1,1);  	mXform.updateMatrix();  	if (isStatic())  	{  		LLVOVolume* volume = getVOVolume(); - -		bool rebuild = (!volume &&  -						getRenderType() != LLPipeline::RENDER_TYPE_TREE && -						getRenderType() != LLPipeline::RENDER_TYPE_TERRAIN && -						getRenderType() != LLPipeline::RENDER_TYPE_SKY && -						getRenderType() != LLPipeline::RENDER_TYPE_GROUND); - -		if (rebuild) +		if (!volume)  		{  			gPipeline.markRebuild(this, LLDrawable::REBUILD_ALL, TRUE);  		} @@ -846,7 +832,7 @@ void LLDrawable::shiftPos(const LLVector4a &shift_vector)  				facep->mExtents[0].add(shift_vector);  				facep->mExtents[1].add(shift_vector); -				if (rebuild && facep->hasGeometry()) +				if (!volume && facep->hasGeometry())  				{  					facep->clearVertexBuffer();  				} @@ -957,12 +943,6 @@ void LLDrawable::updateUVMinMax()  {  } -LLSpatialGroup* LLDrawable::getSpatialGroup() const -{  -	llassert((mSpatialGroupp == NULL) ? getBinIndex() == -1 : getBinIndex() != -1); -	return mSpatialGroupp;  -} -  void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)  {  /*if (mSpatialGroupp && (groupp != mSpatialGroupp)) @@ -985,8 +965,6 @@ void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)  	}  	mSpatialGroupp = groupp; - -	llassert((mSpatialGroupp == NULL) ? getBinIndex() == -1 : getBinIndex() != -1);  }  LLSpatialPartition* LLDrawable::getSpatialPartition() @@ -1109,8 +1087,6 @@ LLSpatialBridge::LLSpatialBridge(LLDrawable* root, BOOL render_by_group, U32 dat  	mDrawable = root;  	root->setSpatialBridge(this); -	mBinIndex = -1; -  	mRenderType = mDrawable->mRenderType;  	mDrawableType = mDrawable->mRenderType; @@ -1414,11 +1390,6 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)  		markDead();  		return;  	} -	 -	if (gShiftFrame) -	{ -		return; -	}  	if (mDrawable->getVObj())  	{ @@ -1497,13 +1468,7 @@ void LLSpatialBridge::cleanupReferences()  	LLDrawable::cleanupReferences();  	if (mDrawable)  	{ -		LLSpatialGroup* group = mDrawable->getSpatialGroup(); -		if (group) -		{ -			group->mOctreeNode->remove(mDrawable); -			mDrawable->setSpatialGroup(NULL); -		} -		 +		mDrawable->setSpatialGroup(NULL);  		if (mDrawable->getVObj())  		{  			LLViewerObject::const_child_list_t& child_list = mDrawable->getVObj()->getChildren(); @@ -1514,12 +1479,7 @@ void LLSpatialBridge::cleanupReferences()  				LLDrawable* drawable = child->mDrawable;					  				if (drawable)  				{ -					LLSpatialGroup* group = drawable->getSpatialGroup(); -					if (group) -					{ -						group->mOctreeNode->remove(drawable); -						drawable->setSpatialGroup(NULL); -					} +					drawable->setSpatialGroup(NULL);  				}  			}  		} diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index 960c64fa9e..e2064b79f8 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -59,7 +59,6 @@ class LLViewerTexture;  const U32 SILHOUETTE_HIGHLIGHT = 0;  // All data for new renderer goes into this class. -LL_ALIGN_PREFIX(16)  class LLDrawable : public LLRefCount  {  public: @@ -76,16 +75,6 @@ public:  	static void initClass(); -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLDrawable()				{ init(); }  	MEM_TYPE_NEW(LLMemType::MTYPE_DRAWABLE); @@ -120,9 +109,6 @@ public:  	F32			          getIntensity() const			{ return llmin(mXform.getScale().mV[0], 4.f); }  	S32					  getLOD() const				{ return mVObjp ? mVObjp->getLOD() : 1; }  	F32					  getBinRadius() const			{ return mBinRadius; } -	S32					  getBinIndex() const			{ return mBinIndex; } -	void				  setBinIndex(S32 index) const	{ mBinIndex = index; } -  	void  getMinMax(LLVector3& min,LLVector3& max) const { mXform.getMinMax(min,max); }  	LLXformMatrix*		getXform() { return &mXform; } @@ -208,7 +194,7 @@ public:  	S32 findReferences(LLDrawable *drawablep); // Not const because of @#$! iterators...  	void setSpatialGroup(LLSpatialGroup *groupp); -	LLSpatialGroup *getSpatialGroup() const; +	LLSpatialGroup *getSpatialGroup() const			{ return mSpatialGroupp; }  	LLSpatialPartition* getSpatialPartition();  	// Statics @@ -295,8 +281,8 @@ public:  	} EDrawableFlags;  private: //aligned members -	LL_ALIGN_16(LLVector4a		mExtents[2]); -	LL_ALIGN_16(LLVector4a		mPositionGroup); +	LLVector4a		mExtents[2]; +	LLVector4a		mPositionGroup;  public:  	LLXformMatrix       mXform; @@ -329,7 +315,6 @@ private:  	mutable U32		mVisible;  	F32				mRadius;  	F32				mBinRadius; -	mutable S32		mBinIndex;  	S32				mGeneration;  	LLVector3		mCurrentScale; @@ -338,7 +323,7 @@ private:  	static U32 sNumZombieDrawables;  	static LLDynamicArrayPtr<LLPointer<LLDrawable> > sDeadList; -} LL_ALIGN_POSTFIX(16); +};  inline LLFace* LLDrawable::getFace(const S32 i) const diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 013c698445..81f4e3d48f 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -254,6 +254,48 @@ void LLFacePool::dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures  {  } +// static +S32 LLFacePool::drawLoop(face_array_t& face_list) +{ +	S32 res = 0; +	if (!face_list.empty()) +	{ +		for (std::vector<LLFace*>::iterator iter = face_list.begin(); +			 iter != face_list.end(); iter++) +		{ +			LLFace *facep = *iter; +			res += facep->renderIndexed(); +		} +	} +	return res; +} + +// static +S32 LLFacePool::drawLoopSetTex(face_array_t& face_list, S32 stage) +{ +	S32 res = 0; +	if (!face_list.empty()) +	{ +		for (std::vector<LLFace*>::iterator iter = face_list.begin(); +			 iter != face_list.end(); iter++) +		{ +			LLFace *facep = *iter; +			gGL.getTexUnit(stage)->bind(facep->getTexture(), TRUE) ; +			gGL.getTexUnit(0)->activate(); +			res += facep->renderIndexed(); +		} +	} +	return res; +} + +void LLFacePool::drawLoop() +{ +	if (!mDrawFace.empty()) +	{ +		drawLoop(mDrawFace); +	} +} +  void LLFacePool::enqueue(LLFace* facep)  {  	mDrawFace.push_back(facep); @@ -401,7 +443,7 @@ void LLRenderPass::renderTexture(U32 type, U32 mask)  void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture, BOOL batch_textures)  { -	for (LLCullResult::drawinfo_iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)	 +	for (LLCullResult::drawinfo_list_t::iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)	  	{  		LLDrawInfo* pparams = *i;  		if (pparams)  diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index ab9bb9e611..977acf7aec 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -190,6 +190,10 @@ public:  	void buildEdges(); +	static S32 drawLoop(face_array_t& face_list); +	static S32 drawLoopSetTex(face_array_t& face_list, S32 stage); +	void drawLoop(); +  	void addFaceReference(LLFace *facep);  	void removeFaceReference(LLFace *facep); diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index b4f6bf9383..5f2a982ed3 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -348,7 +348,7 @@ void LLDrawPoolAlpha::render(S32 pass)  void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)  { -	for (LLCullResult::sg_iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i) +	for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i)  	{  		LLSpatialGroup* group = *i;  		if (group->mSpatialPartition->mRenderByGroup && @@ -385,7 +385,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)  	BOOL use_shaders = gPipeline.canUseVertexShaders(); -	for (LLCullResult::sg_iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i) +	for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i)  	{  		LLSpatialGroup* group = *i;  		llassert(group); @@ -411,12 +411,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)  					continue;  				} -				if ((params.mVertexBuffer->getTypeMask() & mask) != mask) -				{ //FIXME! -					llwarns << "Missing required components, skipping render batch." << llendl; -					continue; -				} -  				LLRenderPass::applyModelMatrix(params); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 730ad1a364..ace3a20bbb 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1036,13 +1036,9 @@ void LLDrawPoolAvatar::endDeferredSkinned()  	gGL.getTexUnit(0)->activate();  } -static LLFastTimer::DeclareTimer FTM_RENDER_AVATARS("renderAvatars"); -  void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  { -	LLFastTimer t(FTM_RENDER_AVATARS); -  	if (pass == -1)  	{  		for (S32 i = 1; i < getNumPasses(); i++) @@ -1199,6 +1195,15 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  	if (pass >= 7 && pass < 9)  	{ +		LLGLEnable blend(GL_BLEND); + +		gGL.setColorMask(true, true); +		gGL.blendFunc(LLRender::BF_SOURCE_ALPHA, +					  LLRender::BF_ONE_MINUS_SOURCE_ALPHA, +					  LLRender::BF_ZERO, +					  LLRender::BF_ONE_MINUS_SOURCE_ALPHA); + +		  		if (pass == 7)  		{  			renderRiggedAlpha(avatarp); @@ -1214,8 +1219,20 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  	if (pass == 9)  	{ +		LLGLEnable blend(GL_BLEND); +		LLGLDisable test(GL_ALPHA_TEST); +		gGL.flush(); + +		LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL); +		glPolygonOffset(-1.0f, -1.0f); +		gGL.setSceneBlendType(LLRender::BT_ADD); + +		LLGLDepthTest depth(GL_TRUE, GL_FALSE); +		gGL.setColorMask(false, true); +  		renderRiggedGlow(avatarp); -		 +		gGL.setColorMask(true, false); +		gGL.setSceneBlendType(LLRender::BT_ALPHA);  		return;  	} @@ -1413,7 +1430,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace*  void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)  { -	if (avatar->isSelf() && !gAgent.needsRenderAvatar()) +	if (avatar->isSelf() && !gAgent.needsRenderAvatar() || !gMeshRepo.meshRezEnabled())  	{  		return;  	} @@ -1542,12 +1559,8 @@ void LLDrawPoolAvatar::renderDeferredRiggedBump(LLVOAvatar* avatar)  	renderRigged(avatar, RIGGED_DEFERRED_BUMP);  } -static LLFastTimer::DeclareTimer FTM_RIGGED_VBO("Rigged VBO"); -  void LLDrawPoolAvatar::updateRiggedVertexBuffers(LLVOAvatar* avatar)  { -	LLFastTimer t(FTM_RIGGED_VBO); -  	//update rigged vertex buffers  	for (U32 type = 0; type < NUM_RIGGED_PASSES; ++type)  	{ @@ -1619,56 +1632,17 @@ void LLDrawPoolAvatar::renderRiggedFullbrightShiny(LLVOAvatar* avatar)  void LLDrawPoolAvatar::renderRiggedAlpha(LLVOAvatar* avatar)  { -	if (!mRiggedFace[RIGGED_ALPHA].empty()) -	{ -		LLGLEnable blend(GL_BLEND); - -		gGL.setColorMask(true, true); -		gGL.blendFunc(LLRender::BF_SOURCE_ALPHA, -						LLRender::BF_ONE_MINUS_SOURCE_ALPHA, -						LLRender::BF_ZERO, -						LLRender::BF_ONE_MINUS_SOURCE_ALPHA); - -		renderRigged(avatar, RIGGED_ALPHA); -	} +	renderRigged(avatar, RIGGED_ALPHA);  }  void LLDrawPoolAvatar::renderRiggedFullbrightAlpha(LLVOAvatar* avatar)  { -	if (!mRiggedFace[RIGGED_FULLBRIGHT_ALPHA].empty()) -	{ -		LLGLEnable blend(GL_BLEND); - -		gGL.setColorMask(true, true); -		gGL.blendFunc(LLRender::BF_SOURCE_ALPHA, -						LLRender::BF_ONE_MINUS_SOURCE_ALPHA, -						LLRender::BF_ZERO, -						LLRender::BF_ONE_MINUS_SOURCE_ALPHA); - -		renderRigged(avatar, RIGGED_FULLBRIGHT_ALPHA); -	} +	renderRigged(avatar, RIGGED_FULLBRIGHT_ALPHA);  }  void LLDrawPoolAvatar::renderRiggedGlow(LLVOAvatar* avatar)  { -	if (!mRiggedFace[RIGGED_GLOW].empty()) -	{ -		LLGLEnable blend(GL_BLEND); -		LLGLDisable test(GL_ALPHA_TEST); -		gGL.flush(); - -		LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL); -		glPolygonOffset(-1.0f, -1.0f); -		gGL.setSceneBlendType(LLRender::BT_ADD); - -		LLGLDepthTest depth(GL_TRUE, GL_FALSE); -		gGL.setColorMask(false, true); - -		renderRigged(avatar, RIGGED_GLOW, true); - -		gGL.setColorMask(true, false); -		gGL.setSceneBlendType(LLRender::BT_ALPHA); -	} +	renderRigged(avatar, RIGGED_GLOW, true);  } diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index a264eae302..6f71e6ebc8 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -847,12 +847,12 @@ void LLDrawPoolBump::renderDeferred(S32 pass)  	LLFastTimer ftm(FTM_RENDER_BUMP);  	U32 type = LLRenderPass::PASS_BUMP; -	LLCullResult::drawinfo_iterator begin = gPipeline.beginRenderMap(type); -	LLCullResult::drawinfo_iterator end = gPipeline.endRenderMap(type); +	LLCullResult::drawinfo_list_t::iterator begin = gPipeline.beginRenderMap(type); +	LLCullResult::drawinfo_list_t::iterator end = gPipeline.endRenderMap(type);  	U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_BINORMAL | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_COLOR; -	for (LLCullResult::drawinfo_iterator i = begin; i != end; ++i)	 +	for (LLCullResult::drawinfo_list_t::iterator i = begin; i != end; ++i)	  	{  		LLDrawInfo& params = **i; @@ -1448,10 +1448,10 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  void LLDrawPoolBump::renderBump(U32 type, U32 mask)  {	 -	LLCullResult::drawinfo_iterator begin = gPipeline.beginRenderMap(type); -	LLCullResult::drawinfo_iterator end = gPipeline.endRenderMap(type); +	LLCullResult::drawinfo_list_t::iterator begin = gPipeline.beginRenderMap(type); +	LLCullResult::drawinfo_list_t::iterator end = gPipeline.endRenderMap(type); -	for (LLCullResult::drawinfo_iterator i = begin; i != end; ++i)	 +	for (LLCullResult::drawinfo_list_t::iterator i = begin; i != end; ++i)	  	{  		LLDrawInfo& params = **i; diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 7fc78fb382..b95d8296fa 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -294,34 +294,6 @@ void LLDrawPoolTerrain::renderShadow(S32 pass)  	//glCullFace(GL_BACK);  } - -void LLDrawPoolTerrain::drawLoop() -{ -	if (!mDrawFace.empty()) -	{ -		for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); -			 iter != mDrawFace.end(); iter++) -		{ -			LLFace *facep = *iter; - -			LLMatrix4* model_matrix = &(facep->getDrawable()->getRegion()->mRenderMatrix); - -			if (model_matrix != gGLLastMatrix) -			{ -				gGLLastMatrix = model_matrix; -				gGL.loadMatrix(gGLModelView); -				if (model_matrix) -				{ -					gGL.multMatrix((GLfloat*) model_matrix->mMatrix); -				} -				gPipeline.mMatrixOpCount++; -			} - -			facep->renderIndexed(); -		} -	} -} -  void LLDrawPoolTerrain::renderFullShader()  {  	// Hack! Get the region that this draw pool is rendering from! diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h index 2163d087e1..283ed87f1a 100644 --- a/indra/newview/lldrawpoolterrain.h +++ b/indra/newview/lldrawpoolterrain.h @@ -83,7 +83,6 @@ protected:  	void renderFull2TU();  	void renderFull4TU();  	void renderFullShader(); -	void drawLoop();  };  #endif // LL_LLDRAWPOOLSIMPLE_H diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 83f04e45a8..3165a3516c 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -37,7 +37,6 @@  #include "llviewershadermgr.h"  #include "llrender.h"  #include "llviewercontrol.h" -#include "llviewerregion.h"  S32 LLDrawPoolTree::sDiffTex = 0;  static LLGLSLShader* shader = NULL; @@ -105,22 +104,8 @@ void LLDrawPoolTree::render(S32 pass)  	{  		LLFace *face = *iter;  		LLVertexBuffer* buff = face->getVertexBuffer(); -  		if(buff)  		{ -			LLMatrix4* model_matrix = &(face->getDrawable()->getRegion()->mRenderMatrix); - -			if (model_matrix != gGLLastMatrix) -			{ -				gGLLastMatrix = model_matrix; -				gGL.loadMatrix(gGLModelView); -				if (model_matrix) -				{ -					gGL.multMatrix((GLfloat*) model_matrix->mMatrix); -				} -				gPipeline.mMatrixOpCount++; -			} -  			buff->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);  			buff->drawRange(LLRender::TRIANGLES, 0, buff->getNumVerts()-1, buff->getNumIndices(), 0);   			gPipeline.addTrianglesDrawn(buff->getNumIndices()); diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 885cae1737..64eb11fc9b 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -155,7 +155,6 @@ LLDriverParam::LLDriverParam(LLVOAvatar *avatarp) :  	mAvatarp(avatarp),   	mWearablep(NULL)  { -	mDefaultVec.clear();  }  LLDriverParam::LLDriverParam(LLWearable *wearablep) :  @@ -163,7 +162,6 @@ LLDriverParam::LLDriverParam(LLWearable *wearablep) :  	mAvatarp(NULL),   	mWearablep(wearablep)  { -	mDefaultVec.clear();  }  LLDriverParam::~LLDriverParam() @@ -343,19 +341,18 @@ F32	LLDriverParam::getTotalDistortion()  	return sum;   } -const LLVector4a	&LLDriverParam::getAvgDistortion()	 +const LLVector3	&LLDriverParam::getAvgDistortion()	  {  	// It's not actually correct to take the average of averages, but it good enough here. -	LLVector4a sum; -	sum.clear(); +	LLVector3 sum;  	S32 count = 0;  	for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ )  	{  		LLDrivenEntry* driven = &(*iter); -		sum.add(driven->mParam->getAvgDistortion()); +		sum += driven->mParam->getAvgDistortion();  		count++;  	} -	sum.mul( 1.f/(F32)count); +	sum /= (F32)count;  	mDefaultVec = sum;  	return mDefaultVec;  @@ -378,22 +375,21 @@ F32	LLDriverParam::getMaxDistortion()  } -LLVector4a	LLDriverParam::getVertexDistortion(S32 index, LLPolyMesh *poly_mesh) +LLVector3	LLDriverParam::getVertexDistortion(S32 index, LLPolyMesh *poly_mesh)  { -	LLVector4a sum; -	sum.clear(); +	LLVector3 sum;  	for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ )  	{  		LLDrivenEntry* driven = &(*iter); -		sum.add(driven->mParam->getVertexDistortion( index, poly_mesh )); +		sum += driven->mParam->getVertexDistortion( index, poly_mesh );  	}  	return sum;  } -const LLVector4a*	LLDriverParam::getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh) +const LLVector3*	LLDriverParam::getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh)  {  	mCurrentDistortionParam = NULL; -	const LLVector4a* v = NULL; +	const LLVector3* v = NULL;  	for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ )  	{  		LLDrivenEntry* driven = &(*iter); @@ -408,7 +404,7 @@ const LLVector4a*	LLDriverParam::getFirstDistortion(U32 *index, LLPolyMesh **pol  	return v;  }; -const LLVector4a*	LLDriverParam::getNextDistortion(U32 *index, LLPolyMesh **poly_mesh) +const LLVector3*	LLDriverParam::getNextDistortion(U32 *index, LLPolyMesh **poly_mesh)  {  	llassert( mCurrentDistortionParam );  	if( !mCurrentDistortionParam ) @@ -436,7 +432,7 @@ const LLVector4a*	LLDriverParam::getNextDistortion(U32 *index, LLPolyMesh **poly  	}  	// We're already in the middle of a param's distortions, so get the next one. -	const LLVector4a* v = driven->mParam->getNextDistortion( index, poly_mesh ); +	const LLVector3* v = driven->mParam->getNextDistortion( index, poly_mesh );  	if( (!v) && (iter != mDriven.end()) )  	{  		// This param is finished, so start the next param.  It might not have any diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h index 7a4d711d4e..fb1b44458c 100644 --- a/indra/newview/lldriverparam.h +++ b/indra/newview/lldriverparam.h @@ -105,18 +105,18 @@ public:  	// LLViewerVisualParam Virtual functions  	/*virtual*/ F32					getTotalDistortion(); -	/*virtual*/ const LLVector4a&	getAvgDistortion(); +	/*virtual*/ const LLVector3&	getAvgDistortion();  	/*virtual*/ F32					getMaxDistortion(); -	/*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh); -	/*virtual*/ const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh); -	/*virtual*/ const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh); +	/*virtual*/ LLVector3			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh); +	/*virtual*/ const LLVector3*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh); +	/*virtual*/ const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh);  protected:  	F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight);  	void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake); -	LLVector4a	mDefaultVec; // temp holder +	LLVector3	mDefaultVec; // temp holder  	typedef std::vector<LLDrivenEntry> entry_list_t;  	entry_list_t mDriven;  	LLViewerVisualParam* mCurrentDistortionParam; diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h index c51e7d1e1a..e18090545d 100644 --- a/indra/newview/lldynamictexture.h +++ b/indra/newview/lldynamictexture.h @@ -36,16 +36,6 @@  class LLViewerDynamicTexture : public LLViewerTexture  {  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	enum  	{  		LL_VIEWER_DYNAMIC_TEXTURE = LLViewerTexture::DYNAMIC_TEXTURE, @@ -95,7 +85,7 @@ protected:  protected:  	BOOL mClamp;  	LLCoordGL mOrigin; -	LL_ALIGN_16(LLCamera mCamera); +	LLCamera mCamera;  	typedef std::set<LLViewerDynamicTexture*> instance_list_t;  	static instance_list_t sInstances[ LLViewerDynamicTexture::ORDER_COUNT ]; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 8d0664770b..373b1930f5 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -163,10 +163,16 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)  	mGeomCount		= 0;  	mGeomIndex		= 0;  	mIndicesCount	= 0; - -	//special value to indicate uninitialized position -	mIndicesIndex	= 0xFFFFFFFF; - +	if (drawablep->getRenderType() == LLPipeline::RENDER_TYPE_PARTICLES || +		drawablep->getRenderType() == LLPipeline::RENDER_TYPE_HUD_PARTICLES) +	{ //indicate to LLParticlePartition that this particle is uninitialized +		mIndicesIndex = 0xFFFFFFFF; +	} +	else +	{ +		mIndicesIndex	= 0; +	} +	mIndexInTex = 0;  	mTexture		= NULL;  	mTEOffset		= -1;  	mTextureIndex = 255; @@ -201,10 +207,13 @@ void LLFace::destroy()  		mTexture->removeFace(this) ;  	} -	if (isState(LLFace::PARTICLE)) +	if (mDrawablep.notNull() && +		(mDrawablep->getRenderType() == LLPipeline::RENDER_TYPE_PARTICLES || +		mDrawablep->getRenderType() == LLPipeline::RENDER_TYPE_HUD_PARTICLES) && +		mIndicesIndex != 0xFFFFFFFF)  	{  		LLVOPartGroup::freeVBSlot(getGeomIndex()/4); -		clearState(LLFace::PARTICLE); +		mIndicesIndex = 0xFFFFFFFF;  	}  	if (mDrawPoolp) @@ -1198,25 +1207,19 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  	{  		if (num_indices + (S32) mIndicesIndex > mVertexBuffer->getNumIndices())  		{ -			if (gDebugGL) -			{ -				llwarns	<< "Index buffer overflow!" << llendl; -				llwarns << "Indices Count: " << mIndicesCount -						<< " VF Num Indices: " << num_indices -						<< " Indices Index: " << mIndicesIndex -						<< " VB Num Indices: " << mVertexBuffer->getNumIndices() << llendl; -				llwarns	<< " Face Index: " << f -						<< " Pool Type: " << mPoolType << llendl; -			} +			llwarns	<< "Index buffer overflow!" << llendl; +			llwarns << "Indices Count: " << mIndicesCount +					<< " VF Num Indices: " << num_indices +					<< " Indices Index: " << mIndicesIndex +					<< " VB Num Indices: " << mVertexBuffer->getNumIndices() << llendl; +			llwarns	<< " Face Index: " << f +					<< " Pool Type: " << mPoolType << llendl;  			return FALSE;  		}  		if (num_vertices + mGeomIndex > mVertexBuffer->getNumVerts())  		{ -			if (gDebugGL) -			{ -				llwarns << "Vertex buffer overflow!" << llendl; -			} +			llwarns << "Vertex buffer overflow!" << llendl;  			return FALSE;  		}  	} @@ -1648,8 +1651,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  						if (!do_xform)  						{  							LLFastTimer t(FTM_FACE_TEX_QUICK_NO_XFORM); -							S32 tc_size = (num_vertices*2*sizeof(F32)+0xF) & ~0xF; -							LLVector4a::memcpyNonAliased16((F32*) tex_coords.get(), (F32*) vf.mTexCoords, tc_size); +							LLVector4a::memcpyNonAliased16((F32*) tex_coords.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32));  						}  						else  						{ diff --git a/indra/newview/llface.h b/indra/newview/llface.h index efc3424858..76ea5c853a 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -59,17 +59,6 @@ class LLFace  {  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} - -  	LLFace(const LLFace& rhs)  	{  		*this = rhs; @@ -90,7 +79,6 @@ public:  		USE_FACE_COLOR	= 0x0010,  		TEXTURE_ANIM	= 0x0020,   		RIGGED			= 0x0040, -		PARTICLE		= 0x0080,  	};  	static void initClass(); diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index c4dca4cb79..3d64ceb71d 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -65,7 +65,7 @@ LLVolumeImplFlexible::LLVolumeImplFlexible(LLViewerObject* vo, LLFlexibleObjectD  	mFrameNum = 0;  	mCollisionSphereRadius = 0.f;  	mRenderRes = 1; -	 +  	if(mVO->mDrawable.notNull())  	{  		mVO->mDrawable->makeActive() ; @@ -255,28 +255,50 @@ void LLVolumeImplFlexible::onSetVolume(const LLVolumeParams &volume_params, cons  {  } - -void LLVolumeImplFlexible::updateRenderRes() +//--------------------------------------------------------------------------------- +// This calculates the physics of the flexible object. Note that it has to be 0 +// updated every time step. In the future, perhaps there could be an  +// optimization similar to what Havok does for objects that are stationary.  +//--------------------------------------------------------------------------------- +static LLFastTimer::DeclareTimer FTM_FLEXIBLE_UPDATE("Update Flexies"); +BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  { -	LLDrawable* drawablep = mVO->mDrawable; +	if (mVO->mDrawable.isNull()) +	{ +		// Don't do anything until we have a drawable +		return FALSE; // (we are not initialized or updated) +	} -	S32 new_res = mAttributes->getSimulateLOD(); +	BOOL force_update = mSimulateRes == 0 ? TRUE : FALSE; + +	//flexible objects never go static +	mVO->mDrawable->mQuietCount = 0; +	if (!mVO->mDrawable->isRoot()) +	{ +		LLViewerObject* parent = (LLViewerObject*) mVO->getParent(); +		parent->mDrawable->mQuietCount = 0; +	} -#if 1 //optimal approximation of previous behavior that doesn't rely on atan2 -	F32 app_angle = mVO->getScale().mV[2]/drawablep->mDistanceWRTCamera; +	LLFastTimer ftm(FTM_FLEXIBLE_UPDATE); +		 +	S32 new_res = mAttributes->getSimulateLOD(); -	// Rendering sections increases with visible angle on the screen -	mRenderRes = (S32) (12.f*app_angle); -#else //legacy behavior  	//number of segments only cares about z axis -	F32 app_angle = llround((F32) atan2( mVO->getScale().mV[2]*2.f, drawablep->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); +	F32 app_angle = llround((F32) atan2( mVO->getScale().mV[2]*2.f, mVO->mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); - 	// Rendering sections increases with visible angle on the screen +	// Rendering sections increases with visible angle on the screen  	mRenderRes = (S32)(FLEXIBLE_OBJECT_MAX_SECTIONS*4*app_angle*DEG_TO_RAD/LLViewerCamera::getInstance()->getView()); -#endif -		 -	mRenderRes = llclamp(mRenderRes, new_res-1, (S32) FLEXIBLE_OBJECT_MAX_SECTIONS); -		 +	if (mRenderRes > FLEXIBLE_OBJECT_MAX_SECTIONS) +	{ +		mRenderRes = FLEXIBLE_OBJECT_MAX_SECTIONS; +	} + + +	// Bottom cap at 1/4 the original number of sections +	if (mRenderRes < mAttributes->getSimulateLOD()-1) +	{ +		mRenderRes = mAttributes->getSimulateLOD()-1; +	}  	// Throttle back simulation of segments we're not rendering  	if (mRenderRes < new_res)  	{ @@ -289,65 +311,43 @@ void LLVolumeImplFlexible::updateRenderRes()  		setAttributesOfAllSections();  		mInitialized = TRUE;  	} -} -//--------------------------------------------------------------------------------- -// This calculates the physics of the flexible object. Note that it has to be 0 -// updated every time step. In the future, perhaps there could be an  -// optimization similar to what Havok does for objects that are stationary.  -//--------------------------------------------------------------------------------- -static LLFastTimer::DeclareTimer FTM_FLEXIBLE_UPDATE("Update Flexies"); -void LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) -{ -	LLDrawable* drawablep = mVO->mDrawable; +	if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE)) +	{ +		return FALSE; // (we are not initialized or updated) +	} -	if (drawablep) +	bool visible = mVO->mDrawable->isVisible(); + +	if (force_update && visible) +	{ +		gPipeline.markRebuild(mVO->mDrawable, LLDrawable::REBUILD_POSITION, FALSE); +	} +	else if	(visible && +		!mVO->mDrawable->isState(LLDrawable::IN_REBUILD_Q1) && +		mVO->getPixelArea() > 256.f)  	{ -		//LLFastTimer ftm(FTM_FLEXIBLE_UPDATE); +		U32 id; +		F32 pixel_area = mVO->getPixelArea(); -		//flexible objects never go static -		drawablep->mQuietCount = 0; -		if (!drawablep->isRoot()) +		if (mVO->isRootEdit())  		{ -			LLViewerObject* parent = (LLViewerObject*) mVO->getParent(); -			parent->mDrawable->mQuietCount = 0; +			id = mID;  		} - -		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE)) +		else  		{ -			bool visible = drawablep->isVisible(); - -			if ((mSimulateRes == 0) && visible) -			{ -				updateRenderRes(); -				gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE); -			} -			else if	(visible && -				!drawablep->isState(LLDrawable::IN_REBUILD_Q1) && -				mVO->getPixelArea() > 256.f) -			{ -				U32 id; -				F32 pixel_area = mVO->getPixelArea(); - -				if (mVO->isRootEdit()) -				{ -					id = mID; -				} -				else -				{ -					LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); -					id = parent->getVolumeInterfaceID(); -				} +			LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); +			id = parent->getVolumeInterfaceID(); +		} -				U32 update_period = (U32) (LLViewerCamera::getInstance()->getScreenPixelArea()*0.01f/(pixel_area*(sUpdateFactor+1.f)))+1; +		U32 update_period = (U32) (LLViewerCamera::getInstance()->getScreenPixelArea()*0.01f/(pixel_area*(sUpdateFactor+1.f)))+1; -				if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) -				{ -					updateRenderRes(); -					gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE); -				} -			} +		if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) +		{ +			gPipeline.markRebuild(mVO->mDrawable, LLDrawable::REBUILD_POSITION, FALSE);  		}  	} +	 +	return force_update;  }  inline S32 log2(S32 x) @@ -368,10 +368,11 @@ void LLVolumeImplFlexible::doFlexibleUpdate()  	LLPath *path = &volume->getPath();  	if ((mSimulateRes == 0 || !mInitialized) && mVO->mDrawable->isVisible())   	{ -		//mVO->markForUpdate(TRUE); +		BOOL force_update = mSimulateRes == 0 ? TRUE : FALSE; +  		doIdleUpdate(gAgent, *LLWorld::getInstance(), 0.0); -		if (mSimulateRes == 0) +		if (!force_update || !gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))  		{  			return;	// we did not get updated or initialized, proceeding without can be dangerous  		} diff --git a/indra/newview/llflexibleobject.h b/indra/newview/llflexibleobject.h index 56d579d86f..371d6a0773 100644 --- a/indra/newview/llflexibleobject.h +++ b/indra/newview/llflexibleobject.h @@ -78,8 +78,7 @@ class LLVolumeImplFlexible : public LLVolumeInterface  		LLVector3 getFramePosition() const;  		LLQuaternion getFrameRotation() const;  		LLVolumeInterfaceType getInterfaceType() const		{ return INTERFACE_FLEXIBLE; } -		void updateRenderRes(); -		void doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); +		BOOL doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);  		BOOL doUpdateGeometry(LLDrawable *drawable);  		LLVector3 getPivotPosition() const;  		void onSetVolume(const LLVolumeParams &volume_params, const S32 detail); @@ -129,7 +128,7 @@ class LLVolumeImplFlexible : public LLVolumeInterface  		LLVector3					mCollisionSpherePosition;  		F32							mCollisionSphereRadius;  		U32							mID; -		 +  		//--------------------------------------  		// private methods  		//-------------------------------------- diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 809d344d01..bca4b5e447 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -211,8 +211,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,  		BOOL item_is_multi = FALSE;  		if ((inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED -		     || inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) -		     && !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK)) +			|| inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) +			&& !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK))  		{  			item_is_multi = TRUE;  		} diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index df8ecb6fd9..61da99fe3a 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2212,8 +2212,8 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)  	BOOL allow_damage		= !self->mCheckSafe->get();  	BOOL allow_fly			= self->mCheckFly->get();  	BOOL allow_landmark		= TRUE; // cannot restrict landmark creation +	BOOL allow_group_scripts	= self->mCheckGroupScripts->get() || self->mCheckOtherScripts->get();  	BOOL allow_other_scripts	= self->mCheckOtherScripts->get(); -	BOOL allow_group_scripts	= self->mCheckGroupScripts->get() || allow_other_scripts;  	BOOL allow_publish		= FALSE;  	BOOL mature_publish		= self->mMatureCtrl->get();  	BOOL push_restriction	= self->mPushRestrictionCtrl->get(); @@ -2226,16 +2226,11 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)  	LLViewerRegion* region;  	region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); -	if (region && region->getAllowDamage()) -	{	// Damage is allowed on the region - server will always allow scripts -		if ( (!allow_other_scripts && parcel->getParcelFlag(PF_ALLOW_OTHER_SCRIPTS)) || -			 (!allow_group_scripts && parcel->getParcelFlag(PF_ALLOW_GROUP_SCRIPTS)) ) -		{	// Don't allow turning off "Run Scripts" if damage is allowed in the region -			self->mCheckOtherScripts->set(parcel->getParcelFlag(PF_ALLOW_OTHER_SCRIPTS));	// Restore UI to actual settings -			self->mCheckGroupScripts->set(parcel->getParcelFlag(PF_ALLOW_GROUP_SCRIPTS)); -			LLNotificationsUtil::add("UnableToDisableOutsideScripts"); -			return; -		} +	if (!allow_other_scripts && region && region->getAllowDamage()) +	{ + +		LLNotificationsUtil::add("UnableToDisableOutsideScripts"); +		return;  	}  	// Push data into current parcel diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index a071f338ba..3fe535cbe8 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -4774,8 +4774,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)  			if (vf.mTexCoords)  			{  				vb->getTexCoord0Strider(tc_strider); -				S32 tex_size = (num_vertices*2*sizeof(F32)+0xF) & ~0xF; -				LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, tex_size); +				LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32));  			}  			if (vf.mNormals) diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 99d262344c..69c9d94dfa 100644 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -134,26 +134,20 @@ void LLFloaterPathfindingCharacters::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingCharacters::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); -	LLSD scrollListData = LLSD::emptyArray(); -  	for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  	{ -		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get()); -		LLSD element = buildCharacterScrollListData(characterPtr); -		scrollListData.append(element); +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectPtr.get()); +		llassert(characterPtr != NULL); -		if (characterPtr->hasOwner() && !characterPtr->hasOwnerName()) -		{ -			rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID()); -		} +		LLSD scrollListItemData = buildCharacterScrollListItemData(characterPtr); +		addObjectToScrollList(objectPtr, scrollListItemData);  	} - -	return scrollListData;  }  void LLFloaterPathfindingCharacters::updateControlsOnScrollListChange() @@ -168,6 +162,22 @@ S32 LLFloaterPathfindingCharacters::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingCharacters::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingCharacters::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("character_owner_group")) +		: pObject->getOwnerName()) +		: getString("character_owner_loading")) +		: getString("character_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingCharacters::getBeaconColor() const  {  	return mBeaconColor; @@ -201,9 +211,9 @@ void LLFloaterPathfindingCharacters::onShowPhysicsCapsuleClicked()  	}  } -LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const +LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const  { -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	columns[0]["column"] = "name";  	columns[0]["value"] = pCharacterPtr->getName(); @@ -212,13 +222,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[1]["value"] = pCharacterPtr->getDescription();  	columns[2]["column"] = "owner"; -	columns[2]["value"] = (pCharacterPtr->hasOwner() -			? (pCharacterPtr->hasOwnerName() -			? (pCharacterPtr->isGroupOwned() -			? (pCharacterPtr->getOwnerName() + " " + getString("character_owner_group")) -			: pCharacterPtr->getOwnerName()) -			: getString("character_owner_loading")) -			: getString("character_owner_unknown")); +	columns[2]["value"] = getOwnerName(pCharacterPtr);  	S32 cpuTime = llround(pCharacterPtr->getCPUTime());  	std::string cpuTimeString = llformat("%d", cpuTime); @@ -231,11 +235,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[4]["column"] = "altitude";  	columns[4]["value"] = llformat("%1.0f m", pCharacterPtr->getLocation()[2]); -	LLSD element; -	element["id"] = pCharacterPtr->getUUID().asString(); -	element["column"] = columns; - -	return element; +	return columns;  }  void LLFloaterPathfindingCharacters::updateStateOnDisplayControls() diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h index ef389ad428..4021f4f119 100644 --- a/indra/newview/llfloaterpathfindingcharacters.h +++ b/indra/newview/llfloaterpathfindingcharacters.h @@ -62,11 +62,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -74,7 +76,7 @@ protected:  private:  	void onShowPhysicsCapsuleClicked(); -	LLSD buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const; +	LLSD buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const;  	void updateStateOnDisplayControls();  	void showSelectedCharacterCapsules(); diff --git a/indra/newview/llfloaterpathfindingconsole.h b/indra/newview/llfloaterpathfindingconsole.h index 4b2f7672e4..e999e57741 100644 --- a/indra/newview/llfloaterpathfindingconsole.h +++ b/indra/newview/llfloaterpathfindingconsole.h @@ -93,7 +93,7 @@ public:  	LLPathingLib::LLPLCharacterType getRenderHeatmapType() const;  	void                            setRenderHeatmapType(LLPathingLib::LLPLCharacterType pRenderHeatmapType); - +	void onRegionBoundaryCross();  protected:  private: @@ -124,7 +124,7 @@ private:  	void onClearPathClicked();  	void handleNavMeshZoneStatus(LLPathfindingNavMeshZone::ENavMeshZoneRequestStatus pNavMeshZoneRequestStatus); -	void onRegionBoundaryCross(); +	  	void onPathEvent();  	void setDefaultInputs(); diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 877bd0822d..1e46d7a402 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -98,7 +98,11 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed)  	mLabelSuggestedUseD(NULL),  	mEditD(NULL),  	mApplyEditsButton(NULL), -	mBeaconColor() +	mBeaconColor(), +	mPreviousValueA(LLPathfindingLinkset::MAX_WALKABILITY_VALUE), +	mPreviousValueB(LLPathfindingLinkset::MAX_WALKABILITY_VALUE), +	mPreviousValueC(LLPathfindingLinkset::MAX_WALKABILITY_VALUE), +	mPreviousValueD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE)  {  } @@ -168,7 +172,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditA = findChild<LLLineEditor>("edit_a_value");  	llassert(mEditA != NULL);  	mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueA));  	mLabelEditB = findChild<LLTextBase>("edit_b_label");  	llassert(mLabelEditB != NULL); @@ -179,7 +183,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditB = findChild<LLLineEditor>("edit_b_value");  	llassert(mEditB != NULL);  	mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueB));  	mLabelEditC = findChild<LLTextBase>("edit_c_label");  	llassert(mLabelEditC != NULL); @@ -190,7 +194,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditC = findChild<LLLineEditor>("edit_c_value");  	llassert(mEditC != NULL);  	mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueC));  	mLabelEditD = findChild<LLTextBase>("edit_d_label");  	llassert(mLabelEditD != NULL); @@ -201,7 +205,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditD = findChild<LLLineEditor>("edit_d_value");  	llassert(mEditD != NULL);  	mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueD));  	mApplyEditsButton = findChild<LLButton>("apply_edit_values");  	llassert(mApplyEditsButton != NULL); @@ -215,7 +219,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); @@ -227,7 +231,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	bool isFilteringDescription = !descriptionFilter.empty();  	bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); -	LLSD scrollListData = LLSD::emptyArray();  	const LLVector3& avatarPosition = gAgent.getPositionAgent();  	if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) @@ -236,22 +239,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  		LLStringUtil::toUpper(descriptionFilter);  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); +  			std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName());  			std::string linksetDescription = linksetPtr->getDescription();  			LLStringUtil::toUpper(linksetName);  			LLStringUtil::toUpper(linksetDescription); +  			if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) &&  				(!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) &&  				(!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter)))  			{ -				LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -				scrollListData.append(element); - -				if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -				{ -					rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -				} +				LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +				addObjectToScrollList(objectPtr, scrollListItemData);  			}  		}  	} @@ -259,18 +261,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	{  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); -			LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -			scrollListData.append(element); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); -			if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -			{ -				rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -			} +			LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +			addObjectToScrollList(objectPtr, scrollListItemData);  		}  	} - -	return scrollListData;  }  void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() @@ -286,6 +284,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("linkset_owner_group")) +		: pObject->getOwnerName()) +		: getString("linkset_owner_loading")) +		: getString("linkset_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const  {  	return mBeaconColor; @@ -313,26 +327,38 @@ void LLFloaterPathfindingLinksets::onClearFiltersClicked()  	rebuildObjectsScrollList();  } -void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) +void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl, LLSD &pPreviousValue)  {  	LLLineEditor *pLineEditor = static_cast<LLLineEditor *>(pUICtrl);  	llassert(pLineEditor != NULL);  	const std::string &valueString = pLineEditor->getText(); -	S32 value; -	if (LLStringUtil::convertToS32(valueString, value)) +	S32 intValue; +	LLSD value; +	bool doResetValue = false; + +	if (valueString.empty())  	{ -		if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) -		{ -			value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); -			pLineEditor->setValue(LLSD(value)); -		} +		value = pPreviousValue; +		doResetValue = true; +	} +	else if (LLStringUtil::convertToS32(valueString, intValue)) +	{ +		doResetValue = ((intValue < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (intValue > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)); +		value = LLSD(llclamp(intValue, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE));  	}  	else  	{ -		pLineEditor->setValue(LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE)); +		value = LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE); +		doResetValue = true; +	} + +	if (doResetValue) +	{ +		pLineEditor->setValue(value);  	} +	pPreviousValue = value;  }  void LLFloaterPathfindingLinksets::onApplyChangesClicked() @@ -366,17 +392,21 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()  		const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(firstSelectedObjectPtr.get());  		setEditLinksetUse(linkset->getLinksetUse()); -		mEditA->setValue(LLSD(linkset->getWalkabilityCoefficientA())); -		mEditB->setValue(LLSD(linkset->getWalkabilityCoefficientB())); -		mEditC->setValue(LLSD(linkset->getWalkabilityCoefficientC())); -		mEditD->setValue(LLSD(linkset->getWalkabilityCoefficientD())); +		mPreviousValueA = LLSD(linkset->getWalkabilityCoefficientA()); +		mPreviousValueB = LLSD(linkset->getWalkabilityCoefficientB()); +		mPreviousValueC = LLSD(linkset->getWalkabilityCoefficientC()); +		mPreviousValueD = LLSD(linkset->getWalkabilityCoefficientD()); +		mEditA->setValue(mPreviousValueA); +		mEditB->setValue(mPreviousValueB); +		mEditC->setValue(mPreviousValueC); +		mEditD->setValue(mPreviousValueD);  	}  } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const  {  	llassert(pLinksetPtr != NULL); -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	if (pLinksetPtr->isTerrain())  	{ @@ -389,11 +419,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[2]["column"] = "owner";  		columns[2]["value"] = getString("linkset_terrain_owner"); -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = getString("linkset_terrain_land_impact"); +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = getString("linkset_terrain_scripted"); -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = getString("linkset_terrain_dist_from_you"); +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = getString("linkset_terrain_land_impact"); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = getString("linkset_terrain_dist_from_you");  	}  	else  	{ @@ -404,22 +437,23 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[1]["value"] = pLinksetPtr->getDescription();  		columns[2]["column"] = "owner"; -		columns[2]["value"] = (pLinksetPtr->hasOwner() -			? (pLinksetPtr->hasOwnerName() -			? (pLinksetPtr->isGroupOwned() -			? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) -			: pLinksetPtr->getOwnerName()) -			: getString("linkset_owner_loading")) -			: getString("linkset_owner_unknown")); - -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); +		columns[2]["value"] = getOwnerName(pLinksetPtr); + +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = (pLinksetPtr->hasIsScripted() +			? (pLinksetPtr->isScripted() +			? getString("linkset_is_scripted") +			: getString("linkset_is_not_scripted")) +			: getString("linkset_is_unknown_scripted")); + +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));  	} -	columns[5]["column"] = "linkset_use"; +	columns[6]["column"] = "linkset_use";  	std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse());  	if (pLinksetPtr->isTerrain())  	{ @@ -437,25 +471,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  	{  		linksetUse += (" " + getString("linkset_is_restricted_non_volume_state"));  	} -	columns[5]["value"] = linksetUse; - -	columns[6]["column"] = "a_percent"; -	columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); +	columns[6]["value"] = linksetUse; -	columns[7]["column"] = "b_percent"; -	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); +	columns[7]["column"] = "a_percent"; +	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); -	columns[8]["column"] = "c_percent"; -	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); +	columns[8]["column"] = "b_percent"; +	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); -	columns[9]["column"] = "d_percent"; -	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); +	columns[9]["column"] = "c_percent"; +	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); -	LLSD element; -	element["id"] = pLinksetPtr->getUUID().asString(); -	element["column"] = columns; +	columns[10]["column"] = "d_percent"; +	columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); -	return element; +	return columns;  }  LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const @@ -490,6 +520,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin  	return isShowWarning;  } +bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	if (pLinksetUse != LLPathfindingLinkset::kUnknown) +	{ +		LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); +		if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) +		{ +			const LLPathfindingLinksetList *linksetList = dynamic_cast<const LLPathfindingLinksetList *>(selectedObjects.get()); +			isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse); +		} +	} + +	return isShowWarning; +} +  bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; @@ -559,29 +606,41 @@ void LLFloaterPathfindingLinksets::applyEdit()  {  	LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); +	bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse);  	bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse);  	bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); -	if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) +	if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning)  	{  		LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse);  		LLSD substitutions;  		substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse);  		substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); -		std::string notificationName; -		if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) +		// Build one of the following notifications names +		//   - PathfindingLinksets_WarnOnPhantom +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted +		//   - PathfindingLinksets_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume + +		std::string notificationName = "PathfindingLinksets"; + +		if (showPhantomToggleWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; +			notificationName += "_WarnOnPhantom";  		} -		else if (showUnmodifiablePhantomWarning) +		if (showUnmodifiablePhantomWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; +			notificationName += "_MismatchOnRestricted";  		} -		else +		if (showCannotBeVolumeWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; +			notificationName += "_MismatchOnVolume";  		} +  		LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2));  	}  	else diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 342a64fc77..7149da9215 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -58,11 +58,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -72,16 +74,17 @@ private:  	void onApplyAllFilters();  	void onClearFiltersClicked(); -	void onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl); +	void onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl, LLSD &pPreviousValue);  	void onApplyChangesClicked();  	void clearFilters();  	void updateEditFieldValues(); -	LLSD buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const; +	LLSD buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const;  	LLSD buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void updateStateOnEditFields(); @@ -129,6 +132,11 @@ private:  	LLButton         *mApplyEditsButton;  	LLColor4         mBeaconColor; + +	LLSD             mPreviousValueA; +	LLSD             mPreviousValueB; +	LLSD             mPreviousValueC; +	LLSD             mPreviousValueD;  };  #endif // LL_LLFLOATERPATHFINDINGLINKSETS_H diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index e246265be9..20c1215bcb 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -29,6 +29,8 @@  #include "llfloaterpathfindingobjects.h" +#include <string> +#include <map>  #include <vector>  #include <boost/bind.hpp> @@ -96,7 +98,6 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey)  void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  { -	  	if (mGodLevelChangeSlot.connected())  	{  		mGodLevelChangeSlot.disconnect(); @@ -119,6 +120,11 @@ void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  	{  		mObjectsSelection.clear();  	} + +	if (pIsAppQuitting) +	{ +		clearAllObjects(); +	}  }  void LLFloaterPathfindingObjects::draw() @@ -168,13 +174,13 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  	mReturnButton(NULL),  	mDeleteButton(NULL),  	mTeleportButton(NULL), -	mLoadingAvatarNames(),  	mDefaultBeaconColor(),  	mDefaultBeaconTextColor(),  	mErrorTextColor(),  	mWarningTextColor(),  	mMessagingState(kMessagingUnknown),  	mMessagingRequestId(0U), +	mMissingNameObjectsScrollListItems(),  	mObjectList(),  	mObjectsSelection(),  	mHasObjectsToBeSelected(false), @@ -186,6 +192,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  LLFloaterPathfindingObjects::~LLFloaterPathfindingObjects()  { +	clearAllObjects();  }  BOOL LLFloaterPathfindingObjects::postBuild() @@ -343,54 +350,21 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	S32 origScrollPosition = mObjectsScrollList->getScrollPos();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	if ((mObjectList != NULL) && !mObjectList->isEmpty())  	{ -		LLSD scrollListData = convertObjectsIntoScrollListData(mObjectList); -		llassert(scrollListData.isArray()); +		buildObjectsScrollList(mObjectList); -		LLScrollListCell::Params cellParams; -		cellParams.font = LLFontGL::getFontSansSerif(); - -		for (LLSD::array_const_iterator rowElementIter = scrollListData.beginArray(); rowElementIter != scrollListData.endArray(); ++rowElementIter) +		mObjectsScrollList->selectMultiple(mObjectsToBeSelected); +		if (mHasObjectsToBeSelected)  		{ -			const LLSD &rowElement = *rowElementIter; - -			LLScrollListItem::Params rowParams; -			llassert(rowElement.has("id")); -			llassert(rowElement.get("id").isString()); -			rowParams.value = rowElement.get("id"); - -			llassert(rowElement.has("column")); -			llassert(rowElement.get("column").isArray()); -			const LLSD &columnElement = rowElement.get("column"); -			for (LLSD::array_const_iterator cellIter = columnElement.beginArray(); cellIter != columnElement.endArray(); ++cellIter) -			{ -				const LLSD &cellElement = *cellIter; - -				llassert(cellElement.has("column")); -				llassert(cellElement.get("column").isString()); -				cellParams.column = cellElement.get("column").asString(); - -				llassert(cellElement.has("value")); -				llassert(cellElement.get("value").isString()); -				cellParams.value = cellElement.get("value").asString(); - -				rowParams.columns.add(cellParams); -			} - -			mObjectsScrollList->addRow(rowParams); +			mObjectsScrollList->scrollToShowSelected(); +		} +		else +		{ +			mObjectsScrollList->setScrollPos(origScrollPosition);  		} -	} - -	mObjectsScrollList->selectMultiple(mObjectsToBeSelected); -	if (mHasObjectsToBeSelected) -	{ -		mObjectsScrollList->scrollToShowSelected(); -	} -	else -	{ -		mObjectsScrollList->setScrollPos(origScrollPosition);  	}  	mObjectsToBeSelected.clear(); @@ -399,20 +373,42 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	updateControlsOnScrollListChange();  } -LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(0); -	LLSD nullObjs = LLSD::emptyArray(); -	return nullObjs;  } -void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId) +void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData)  { -	std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId); -	if (iter == mLoadingAvatarNames.end()) +	LLScrollListCell::Params cellParams; +	cellParams.font = LLFontGL::getFontSansSerif(); + +	LLScrollListItem::Params rowParams; +	rowParams.value = pObjectPtr->getUUID().asString(); + +	llassert(pScrollListItemData.isArray()); +	for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray(); +		cellIter != pScrollListItemData.endArray(); ++cellIter) +	{ +		const LLSD &cellElement = *cellIter; + +		llassert(cellElement.has("column")); +		llassert(cellElement.get("column").isString()); +		cellParams.column = cellElement.get("column").asString(); + +		llassert(cellElement.has("value")); +		llassert(cellElement.get("value").isString()); +		cellParams.value = cellElement.get("value").asString(); + +		rowParams.columns.add(cellParams); +	} + +	LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams); + +	if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())  	{ -		mLoadingAvatarNames.insert(pAvatarId); -		LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2)); +		mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); +		pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));  	}  } @@ -434,6 +430,18 @@ S32 LLFloaterPathfindingObjects::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingObjects::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingObjects::getOwnerName(const LLPathfindingObject *pObject) const +{ +	llassert(0); +	std::string returnVal; +	return returnVal; +} +  const LLColor4 &LLFloaterPathfindingObjects::getBeaconColor() const  {  	return mDefaultBeaconColor; @@ -496,6 +504,7 @@ void LLFloaterPathfindingObjects::clearAllObjects()  {  	selectNoneObjects();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	mObjectList.reset();  } @@ -683,13 +692,22 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel)  	requestGetObjects();  } -void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName) +void LLFloaterPathfindingObjects::handleObjectNameResponse(const LLPathfindingObject *pObject)  { -	llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end()); -	mLoadingAvatarNames.erase(pAvatarId); -	if (mLoadingAvatarNames.empty()) +	llassert(pObject != NULL); +	const std::string uuid = pObject->getUUID().asString(); +	scroll_list_item_map::iterator scrollListItemIter = mMissingNameObjectsScrollListItems.find(uuid); +	if (scrollListItemIter != mMissingNameObjectsScrollListItems.end())  	{ -		rebuildObjectsScrollList(); +		LLScrollListItem *scrollListItem = scrollListItemIter->second; +		llassert(scrollListItem != NULL); + +		LLScrollListCell *scrollListCell = scrollListItem->getColumn(getOwnerNameColumnIndex()); +		LLSD ownerName = getOwnerName(pObject); + +		scrollListCell->setValue(ownerName); + +		mMissingNameObjectsScrollListItems.erase(scrollListItemIter);  	}  } diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h index e8d446b598..4024e15fd6 100644 --- a/indra/newview/llfloaterpathfindingobjects.h +++ b/indra/newview/llfloaterpathfindingobjects.h @@ -27,7 +27,8 @@  #ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H  #define LL_LLFLOATERPATHFINDINGOBJECTS_H -#include <set> +#include <string> +#include <map>  #include <boost/signals2.hpp> @@ -80,14 +81,15 @@ protected:  	void                               handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);  	void                               rebuildObjectsScrollList(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); - -	void                               rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); +	void                               addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData);  	virtual void                       updateControlsOnScrollListChange();  	virtual void                       updateControlsOnInWorldSelectionChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual const LLColor4             &getBeaconTextColor() const;  	virtual S32                        getBeaconWidth() const; @@ -126,7 +128,7 @@ private:  	void                   onRegionBoundaryCrossed();  	void                   onGodLevelChange(U8 pGodLevel); -	void                   handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName); +	void                   handleObjectNameResponse(const LLPathfindingObject *pObject);  	void                   updateMessagingStatus();  	void                   updateStateOnListControls(); @@ -151,8 +153,6 @@ private:  	LLButton                           *mDeleteButton;  	LLButton                           *mTeleportButton; -	std::set<LLUUID>                   mLoadingAvatarNames; -  	LLColor4                           mDefaultBeaconColor;  	LLColor4                           mDefaultBeaconTextColor;  	LLColor4                           mErrorTextColor; @@ -161,6 +161,9 @@ private:  	EMessagingState                    mMessagingState;  	LLPathfindingManager::request_id_t mMessagingRequestId; +	typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map; +	scroll_list_item_map               mMissingNameObjectsScrollListItems; +  	LLPathfindingObjectListPtr         mObjectList;  	LLObjectSelectionHandle            mObjectsSelection; diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 60556147a9..5752f839ce 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -77,7 +77,7 @@  #include "llviewerthrottle.h"  #include "llvotree.h"  #include "llvosky.h" - +#include "llfloaterpathfindingconsole.h"  // linden library includes  #include "llavatarnamecache.h"  #include "llerror.h" @@ -632,6 +632,13 @@ void LLFloaterPreference::cancel()  	{  		advanced_proxy_settings->cancel();  	} +	//Need to reload the navmesh if the pathing console is up +	LLHandle<LLFloaterPathfindingConsole> pathfindingConsoleHandle = LLFloaterPathfindingConsole::getInstanceHandle(); +	if ( !pathfindingConsoleHandle.isDead() ) +	{ +		LLFloaterPathfindingConsole* pPathfindingConsole = pathfindingConsoleHandle.get(); +		pPathfindingConsole->onRegionBoundaryCross(); +	}  }  void LLFloaterPreference::onOpen(const LLSD& key) @@ -779,7 +786,15 @@ void LLFloaterPreference::onBtnOK()  		llinfos << "Can't close preferences!" << llendl;  	} -	LLPanelLogin::updateLocationSelectorsVisibility(); +	LLPanelLogin::updateLocationSelectorsVisibility();	 +	//Need to reload the navmesh if the pathing console is up +	LLHandle<LLFloaterPathfindingConsole> pathfindingConsoleHandle = LLFloaterPathfindingConsole::getInstanceHandle(); +	if ( !pathfindingConsoleHandle.isDead() ) +	{ +		LLFloaterPathfindingConsole* pPathfindingConsole = pathfindingConsoleHandle.get(); +		pPathfindingConsole->onRegionBoundaryCross(); +	} +	  }  // static  diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 99ebb0eb34..48484786f6 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -133,7 +133,6 @@ public:  		if(tools_floater)  		{  			tools_floater->updateLandImpacts(); -			tools_floater->dirty();  		}  	}  }; diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7d047ec67e..8e540a0cc8 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2234,17 +2234,11 @@ void LLFolderView::doIdle()  		mDebugFilters = debug_filters;  		arrangeAll();  	} - -	mNeedsAutoSelect = mFilter->hasFilterString() && -							!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture()); - -		 -	if (mFilter->isModified() && mFilter->isNotDefault()) -	{ -		mNeedsAutoSelect = TRUE; -	} +	BOOL filter_modified_and_active = mFilter->isModified() && mFilter->isNotDefault(); +	mNeedsAutoSelect = filter_modified_and_active && +						!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());  	mFilter->clearModified(); -			 +  	// filter to determine visibility before arranging  	filterFromRoot(); @@ -2254,7 +2248,7 @@ void LLFolderView::doIdle()  		LLFastTimer t3(FTM_AUTO_SELECT);  		// select new item only if a filtered item not currently selected  		LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back(); -		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyFiltered())) +		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyVisible()))  		{  			// these are named variables to get around gcc not binding non-const references to rvalues  			// and functor application is inherently non-const to allow for stateful functors @@ -2264,7 +2258,7 @@ void LLFolderView::doIdle()  		// Open filtered folders for folder views with mAutoSelectOverride=TRUE.  		// Used by LLPlacesFolderView. -		if (mAutoSelectOverride && !mFilter->getFilterSubString().empty()) +		if (!mFilter->getFilterSubString().empty())  		{  			// these are named variables to get around gcc not binding non-const references to rvalues  			// and functor application is inherently non-const to allow for stateful functors @@ -2556,6 +2550,25 @@ void LLFolderView::onRenamerLost()  	}  } +LLFolderViewItem* LLFolderView::getNextUnselectedItem() +{ +	LLFolderViewItem* last_item = *mSelectedItems.rbegin(); +	LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE); +	while(new_selection && new_selection->isSelected()) +	{ +		new_selection = new_selection->getNextOpenNode(FALSE); +	} +	if (!new_selection) +	{ +		new_selection = last_item->getPreviousOpenNode(FALSE); +		while (new_selection && (new_selection->isInSelection())) +		{ +			new_selection = new_selection->getPreviousOpenNode(FALSE); +		} +	} +	return new_selection; +} +  LLInventoryFilter* LLFolderView::getFilter()  {  	return mFilter; diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index da8bb15f8e..3f78312a98 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -207,6 +207,8 @@ public:  	virtual void	doDelete();  	virtual BOOL	canDoDelete() const; +	LLFolderViewItem* getNextUnselectedItem(); +	  	// Public rename functionality - can only start the process  	void startRenamingSelectedItem( void ); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 515e544452..3aa16b4413 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1098,6 +1098,10 @@ void LLFolderViewItem::draw()  	}  } +bool LLFolderViewItem::isInSelection() const +{ +	return mIsSelected || (mParentFolder && mParentFolder->isInSelection()); +}  ///----------------------------------------------------------------------------  /// Class LLFolderViewFolder diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 3c7592046a..577b6b54a2 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -243,6 +243,7 @@ public:  	virtual void destroyView();  	BOOL isSelected() const { return mIsSelected; } +	bool isInSelection() const;  	void setUnselected() { mIsSelected = FALSE; } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b86c453d61..b819100b9b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1355,7 +1355,10 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)  	else if ("cut" == action)  	{  		cutToClipboard(); +		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI. +		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();  		LLFolderView::removeCutItems(); +		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);  		return;  	}  	else if ("copy" == action) @@ -2743,7 +2746,10 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)  	else if ("cut" == action)  	{  		cutToClipboard(); +		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI. +		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();  		LLFolderView::removeCutItems(); +		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);  		return;  	}  	else if ("copy" == action) diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index a8049b1b03..44ff62e290 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -145,12 +145,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	// change z sort of clickable text to be behind buttons  	sendChildToBack(getChildView("forgot_password_text")); - -	if(LLStartUp::getStartSLURL().getType() != LLSLURL::LOCATION) -	{ -		LLSLURL slurl(gSavedSettings.getString("LoginLocation")); -		LLStartUp::setStartSLURL(slurl); -	}  	LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");  	updateLocationSelectorsVisibility(); // separate so that it can be called from preferences @@ -182,6 +176,29 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  							 ADD_TOP);	  	server_choice_combo->selectFirstItem();		 +	LLSLURL start_slurl(LLStartUp::getStartSLURL()); +	if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ?  +	{ +		// no, so get the preference setting +		std::string defaultStartLocation = gSavedSettings.getString("LoginLocation"); +		LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL; +		LLSLURL defaultStart(defaultStartLocation); +		if ( defaultStart.isSpatial() ) +		{ +			LLStartUp::setStartSLURL(defaultStart); +		} +		else +		{ +			LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL; +			LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME); +			LLStartUp::setStartSLURL(homeStart); +		} +	} +	else +	{ +		LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed +	} +	  	childSetAction("connect_btn", onClickConnect, this);  	getChild<LLPanel>("login")->setDefaultBtn("connect_btn"); @@ -645,8 +662,11 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  	 * specify a particular grid; in those cases we want to change the grid  	 * and the grid selector to match the new value.  	 */ -	if ( LLSLURL::LOCATION == new_start_slurl.getType() ) +	enum LLSLURL::SLURL_TYPE new_slurl_type = new_start_slurl.getType(); +	switch ( new_slurl_type )  	{ +	case LLSLURL::LOCATION: +	  {  		std::string slurl_grid = LLGridManager::getInstance()->getGrid(new_start_slurl.getGrid());  		if ( ! slurl_grid.empty() ) // is that a valid grid?  		{ @@ -668,8 +688,24 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  		{  			// the grid specified by the slurl is not known  			LLNotificationsUtil::add("InvalidLocationSLURL"); +			LL_WARNS("AppInit")<<"invalid LoginLocation:"<<new_start_slurl.asString()<<LL_ENDL;  			location_combo->setTextEntry(LLStringUtil::null);  		} +	  } + 	break; + +	case LLSLURL::HOME_LOCATION: +		location_combo->setCurrentByIndex(1); // home location +		break; +		 +	case LLSLURL::LAST_LOCATION: +		location_combo->setCurrentByIndex(0); // last location +		break; + +	default: +		LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL; +		location_combo->setCurrentByIndex(1); // home location +		break;  	}  } diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 66c9c323cb..5d75375847 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -115,8 +115,8 @@ void LLPanelMarketplaceInbox::onFocusReceived()  	if (sidepanel_inventory)  	{  		sidepanel_inventory->clearSelections(true, false); -	} - +		} +	  	gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());  } @@ -168,8 +168,8 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const  				if (inbox_item_view && inbox_item_view->isFresh())  				{  					fresh_item_count++; -				} -			} +		} +	}  		}  	} diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp index fe4daabd89..50b76378f5 100644 --- a/indra/newview/llpathfindinglinkset.cpp +++ b/indra/newview/llpathfindinglinkset.cpp @@ -39,6 +39,7 @@  #define LINKSET_MODIFIABLE_FIELD    "modifiable"  #define LINKSET_CATEGORY_FIELD      "navmesh_category"  #define LINKSET_CAN_BE_VOLUME       "can_be_volume" +#define LINKSET_IS_SCRIPTED_FIELD   "is_scripted"  #define LINKSET_PHANTOM_FIELD       "phantom"  #define LINKSET_WALKABILITY_A_FIELD "A"  #define LINKSET_WALKABILITY_B_FIELD "B" @@ -62,6 +63,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLSD& pTerrainData)  	mLandImpact(0U),  	mIsModifiable(FALSE),  	mCanBeVolume(FALSE), +	mIsScripted(FALSE), +	mHasIsScripted(TRUE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -77,6 +80,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&  	mLandImpact(0U),  	mIsModifiable(TRUE),  	mCanBeVolume(TRUE), +	mIsScripted(FALSE), +	mHasIsScripted(FALSE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -93,6 +98,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)  	mLandImpact(pOther.mLandImpact),  	mIsModifiable(pOther.mIsModifiable),  	mCanBeVolume(pOther.mCanBeVolume), +	mIsScripted(pOther.mIsScripted), +	mHasIsScripted(pOther.mHasIsScripted),  	mLinksetUse(pOther.mLinksetUse),  	mWalkabilityCoefficientA(pOther.mWalkabilityCoefficientA),  	mWalkabilityCoefficientB(pOther.mWalkabilityCoefficientB), @@ -113,6 +120,8 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse  	mLandImpact = pOther.mLandImpact;  	mIsModifiable = pOther.mIsModifiable;  	mCanBeVolume = pOther.mCanBeVolume; +	mIsScripted = pOther.mIsScripted; +	mHasIsScripted = pOther.mHasIsScripted;  	mLinksetUse = pOther.mLinksetUse;  	mWalkabilityCoefficientA = pOther.mWalkabilityCoefficientA;  	mWalkabilityCoefficientB = pOther.mWalkabilityCoefficientB; @@ -140,6 +149,11 @@ bool LLPathfindingLinkset::isShowUnmodifiablePhantomWarning(ELinksetUse pLinkset  	return (!isModifiable() && (isPhantom() != isPhantom(pLinksetUse)));  } +bool LLPathfindingLinkset::isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const +{ +	return (isModifiable() && (isPhantom() != isPhantom(pLinksetUse))); +} +  bool LLPathfindingLinkset::isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const  {  	return (!canBeVolume() && ((pLinksetUse == kMaterialVolume) || (pLinksetUse == kExclusionVolume))); @@ -193,6 +207,13 @@ void LLPathfindingLinkset::parseLinksetData(const LLSD &pLinksetData)  	llassert(pLinksetData.has(LINKSET_MODIFIABLE_FIELD));  	llassert(pLinksetData.get(LINKSET_MODIFIABLE_FIELD).isBoolean());  	mIsModifiable = pLinksetData.get(LINKSET_MODIFIABLE_FIELD).asBoolean(); + +	mHasIsScripted = pLinksetData.has(LINKSET_IS_SCRIPTED_FIELD); +	if (mHasIsScripted) +	{ +		llassert(pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).isBoolean()); +		mIsScripted = pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).asBoolean(); +	}  }  void LLPathfindingLinkset::parsePathfindingData(const LLSD &pLinksetData) diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h index 73b4d6bad4..308a3a1e0f 100644 --- a/indra/newview/llpathfindinglinkset.h +++ b/indra/newview/llpathfindinglinkset.h @@ -63,12 +63,16 @@ public:  	inline ELinksetUse getLinksetUse() const               {return mLinksetUse;}; +	inline BOOL        isScripted() const                  {return mIsScripted;}; +	inline BOOL        hasIsScripted() const               {return mHasIsScripted;}; +  	inline S32         getWalkabilityCoefficientA() const  {return mWalkabilityCoefficientA;};  	inline S32         getWalkabilityCoefficientB() const  {return mWalkabilityCoefficientB;};  	inline S32         getWalkabilityCoefficientC() const  {return mWalkabilityCoefficientC;};  	inline S32         getWalkabilityCoefficientD() const  {return mWalkabilityCoefficientD;};  	bool               isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const; +	bool               isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const;  	bool               isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const;  	LLSD               encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; @@ -98,6 +102,8 @@ private:  	U32          mLandImpact;  	BOOL         mIsModifiable;  	BOOL         mCanBeVolume; +	BOOL         mIsScripted; +	BOOL         mHasIsScripted;  	ELinksetUse  mLinksetUse;  	S32          mWalkabilityCoefficientA;  	S32          mWalkabilityCoefficientB; diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp index 746fa342a1..b886e46765 100644 --- a/indra/newview/llpathfindinglinksetlist.cpp +++ b/indra/newview/llpathfindinglinksetlist.cpp @@ -113,6 +113,20 @@ bool LLPathfindingLinksetList::isShowUnmodifiablePhantomWarning(LLPathfindingLin  	return isShowWarning;  } +bool LLPathfindingLinksetList::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	for (const_iterator objectIter = begin(); !isShowWarning && (objectIter != end()); ++objectIter) +	{ +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +		isShowWarning = linkset->isShowPhantomToggleWarning(pLinksetUse); +	} + +	return isShowWarning; +} +  bool LLPathfindingLinksetList::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h index 77c6358640..1d38e4c11a 100644 --- a/indra/newview/llpathfindinglinksetlist.h +++ b/indra/newview/llpathfindinglinksetlist.h @@ -43,6 +43,7 @@ public:  	LLSD encodeTerrainFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void determinePossibleStates(BOOL &pCanBeWalkable, BOOL &pCanBeStaticObstacle, BOOL &pCanBeDynamicObstacle, diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp index 916eceb4c8..858d3203c0 100644 --- a/indra/newview/llpathfindingobject.cpp +++ b/indra/newview/llpathfindingobject.cpp @@ -55,8 +55,10 @@ LLPathfindingObject::LLPathfindingObject()  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  } @@ -67,8 +69,10 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  	parseObjectData(pObjectData);  } @@ -80,14 +84,17 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther)  	mOwnerUUID(pOther.mOwnerUUID),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(pOther.mIsGroupOwned), -	mLocation(pOther.mLocation) +	mLocation(pOther.mLocation), +	mOwnerNameSignal()  {  	fetchOwnerName();  }  LLPathfindingObject::~LLPathfindingObject()  { +	disconnectAvatarNameCacheConnection();  }  LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject& pOther) @@ -115,6 +122,23 @@ std::string LLPathfindingObject::getOwnerName() const  	return ownerName;  } +LLPathfindingObject::name_connection_t LLPathfindingObject::registerOwnerNameListener(name_callback_t pOwnerNameCallback) +{ +	llassert(hasOwner()); + +	name_connection_t connection; +	if (hasOwnerName()) +	{ +		pOwnerNameCallback(this); +	} +	else +	{ +		connection = mOwnerNameSignal.connect(pOwnerNameCallback); +	} + +	return connection; +} +  void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)  {  	llassert(pObjectData.has(PATHFINDING_OBJECT_NAME_FIELD)); @@ -149,7 +173,7 @@ void LLPathfindingObject::fetchOwnerName()  		mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);  		if (!mHasOwnerName)  		{ -			LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2)); +			mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));  		}  	}  } @@ -157,6 +181,19 @@ void LLPathfindingObject::fetchOwnerName()  void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName)  {  	llassert(mOwnerUUID == pOwnerUUID); +  	mOwnerName = pAvatarName;  	mHasOwnerName = true; + +	disconnectAvatarNameCacheConnection(); + +	mOwnerNameSignal(this); +} + +void LLPathfindingObject::disconnectAvatarNameCacheConnection() +{ +	if (mAvatarNameCacheConnection.connected()) +	{ +		mAvatarNameCacheConnection.disconnect(); +	}  } diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h index d45cc554fd..b8d3ca2364 100644 --- a/indra/newview/llpathfindingobject.h +++ b/indra/newview/llpathfindingobject.h @@ -30,8 +30,11 @@  #include <string>  #include <boost/shared_ptr.hpp> +#include <boost/function.hpp> +#include <boost/signals2.hpp>  #include "llavatarname.h" +#include "llavatarnamecache.h"  #include "lluuid.h"  #include "v3math.h" @@ -59,6 +62,12 @@ public:  	inline BOOL               isGroupOwned() const   {return mIsGroupOwned;};  	inline const LLVector3&   getLocation() const    {return mLocation;}; +	typedef boost::function<void (const LLPathfindingObject *)>         name_callback_t; +	typedef boost::signals2::signal<void (const LLPathfindingObject *)> name_signal_t; +	typedef boost::signals2::connection                                 name_connection_t; + +	name_connection_t registerOwnerNameListener(name_callback_t pOwnerNameCallback); +  protected:  private: @@ -66,15 +75,18 @@ private:  	void fetchOwnerName();  	void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName); +	void disconnectAvatarNameCacheConnection(); -	LLUUID       mUUID; -	std::string  mName; -	std::string  mDescription; -	LLUUID       mOwnerUUID; -	bool         mHasOwnerName; -	LLAvatarName mOwnerName; -	BOOL         mIsGroupOwned; -	LLVector3    mLocation; +	LLUUID                                   mUUID; +	std::string                              mName; +	std::string                              mDescription; +	LLUUID                                   mOwnerUUID; +	bool                                     mHasOwnerName; +	LLAvatarName                             mOwnerName; +	LLAvatarNameCache::callback_connection_t mAvatarNameCacheConnection; +	BOOL                                     mIsGroupOwned; +	LLVector3                                mLocation; +	name_signal_t                            mOwnerNameSignal;  };  #endif // LL_LLPATHFINDINGOBJECT_H diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp index 68a7e736e6..f1ecb45fc0 100644 --- a/indra/newview/llpathfindingobjectlist.cpp +++ b/indra/newview/llpathfindingobjectlist.cpp @@ -45,6 +45,7 @@ LLPathfindingObjectList::LLPathfindingObjectList()  LLPathfindingObjectList::~LLPathfindingObjectList()  { +	clear();  }  bool LLPathfindingObjectList::isEmpty() const @@ -52,6 +53,15 @@ bool LLPathfindingObjectList::isEmpty() const  	return mObjectMap.empty();  } +void LLPathfindingObjectList::clear() +{ +	for (LLPathfindingObjectMap::iterator objectIter = mObjectMap.begin(); objectIter != mObjectMap.end(); ++objectIter) +	{ +		objectIter->second.reset(); +	} +	mObjectMap.clear(); +} +  void LLPathfindingObjectList::update(LLPathfindingObjectPtr pUpdateObjectPtr)  {  	if (pUpdateObjectPtr != NULL) diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h index 3ad8e8b096..61580582d3 100644 --- a/indra/newview/llpathfindingobjectlist.h +++ b/indra/newview/llpathfindingobjectlist.h @@ -47,6 +47,8 @@ public:  	bool isEmpty() const; +	void clear(); +  	void update(LLPathfindingObjectPtr pUpdateObjectPtr);  	void update(LLPathfindingObjectListPtr pUpdateObjectListPtr); @@ -56,7 +58,6 @@ public:  	const_iterator begin() const;  	const_iterator end() const; -  protected:  	LLPathfindingObjectMap &getObjectMap(); diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index cb6989c9dd..e124916c48 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -67,19 +67,6 @@ inline F64 llsgn(const F64 a)  class LLPhysicsMotion  {  public: -	typedef enum -	{ -		SMOOTHING = 0, -		MASS, -		GRAVITY, -		SPRING, -		GAIN, -		DAMPING, -		DRAG, -		MAX_EFFECT, -		NUM_PARAMS -	} eParamName; -          /*            param_driver_name: The param that controls the params that are being affected by the physics.            joint_name: The joint that the body part is attached to.  The joint is @@ -111,11 +98,6 @@ public:                  mPositionLastUpdate_local(0)          {                  mJointState = new LLJointState; - -				for (U32 i = 0; i < NUM_PARAMS; ++i) -				{ -					mParamCache[i] = NULL; -				}          }          BOOL initialize(); @@ -129,43 +111,16 @@ public:                  return mJointState;          }  protected: - -		F32 getParamValue(eParamName param) -		{ -			static std::string controller_key[] =  -			{ -				"Smoothing", -				"Mass", -				"Gravity", -				"Spring", -				"Gain", -				"Damping", -				"Drag", -				"MaxEffect" -			}; - -			if (!mParamCache[param]) -			{ -				const controller_map_t::const_iterator& entry = mParamControllers.find(controller_key[param]); +        F32 getParamValue(const std::string& controller_key) +        { +                const controller_map_t::const_iterator& entry = mParamControllers.find(controller_key);                  if (entry == mParamControllers.end())                  { -                        return sDefaultController[controller_key[param]]; +                        return sDefaultController[controller_key];                  }                  const std::string& param_name = (*entry).second.c_str(); -                mParamCache[param] = mCharacter->getVisualParam(param_name.c_str()); -			} -				 -			if (mParamCache[param]) -			{ -				return mParamCache[param]->getWeight(); -			} -			else -			{ -				return sDefaultController[controller_key[param]]; -			} -		} - -         +                return mCharacter->getVisualParamWeight(param_name.c_str()); +        }          void setParamValue(LLViewerVisualParam *param,                             const F32 new_value_local,                                                     F32 behavior_maxeffect); @@ -195,8 +150,6 @@ private:          F32 mLastTime; -		LLVisualParam* mParamCache[NUM_PARAMS]; -          static default_controller_map_t sDefaultController;  }; @@ -474,6 +427,7 @@ BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)          return TRUE;  } +  // Return TRUE if character has to update visual params.  BOOL LLPhysicsMotion::onUpdate(F32 time)  { @@ -517,16 +471,15 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)          LLJoint *joint = mJointState->getJoint(); -		const F32 behavior_mass = getParamValue(MASS); -		const F32 behavior_gravity = getParamValue(GRAVITY); -		const F32 behavior_spring = getParamValue(SPRING); -		const F32 behavior_gain = getParamValue(GAIN); -		const F32 behavior_damping = getParamValue(DAMPING); -		const F32 behavior_drag = getParamValue(DRAG); -		F32 behavior_maxeffect = getParamValue(MAX_EFFECT); -		 -		const BOOL physics_test = FALSE; // Enable this to simulate bouncing on all parts. +        const F32 behavior_mass = getParamValue("Mass"); +        const F32 behavior_gravity = getParamValue("Gravity"); +        const F32 behavior_spring = getParamValue("Spring"); +        const F32 behavior_gain = getParamValue("Gain"); +        const F32 behavior_damping = getParamValue("Damping"); +        const F32 behavior_drag = getParamValue("Drag"); +        const BOOL physics_test = FALSE; // Enable this to simulate bouncing on all parts. +        F32 behavior_maxeffect = getParamValue("MaxEffect");          if (physics_test)                  behavior_maxeffect = 1.0f; diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index 70f3b5335e..450f9b2be7 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -129,22 +129,22 @@ void LLPolyMeshSharedData::freeMeshData()          {                  mNumVertices = 0; -                ll_aligned_free_16(mBaseCoords); +                delete [] mBaseCoords;                  mBaseCoords = NULL; -                ll_aligned_free_16(mBaseNormals); +                delete [] mBaseNormals;                  mBaseNormals = NULL; -                ll_aligned_free_16(mBaseBinormals); +                delete [] mBaseBinormals;                  mBaseBinormals = NULL; -                ll_aligned_free_16(mTexCoords); +                delete [] mTexCoords;                  mTexCoords = NULL; -                ll_aligned_free_16(mDetailTexCoords); +                delete [] mDetailTexCoords;                  mDetailTexCoords = NULL; -                ll_aligned_free_16(mWeights); +                delete [] mWeights;                  mWeights = NULL;          } @@ -229,19 +229,15 @@ U32 LLPolyMeshSharedData::getNumKB()  BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )  {          U32 i; -        mBaseCoords = (LLVector4a*) ll_aligned_malloc_16(numVertices*sizeof(LLVector4a)); -        mBaseNormals = (LLVector4a*) ll_aligned_malloc_16(numVertices*sizeof(LLVector4a)); -        mBaseBinormals = (LLVector4a*) ll_aligned_malloc_16(numVertices*sizeof(LLVector4a)); -        mTexCoords = (LLVector2*) ll_aligned_malloc_16(numVertices*sizeof(LLVector2)); -        mDetailTexCoords = (LLVector2*) ll_aligned_malloc_16(numVertices*sizeof(LLVector2)); -        mWeights = (F32*) ll_aligned_malloc_16(numVertices*sizeof(F32)); +        mBaseCoords = new LLVector3[ numVertices ]; +        mBaseNormals = new LLVector3[ numVertices ]; +        mBaseBinormals = new LLVector3[ numVertices ]; +        mTexCoords = new LLVector2[ numVertices ]; +        mDetailTexCoords = new LLVector2[ numVertices ]; +        mWeights = new F32[ numVertices ];          for (i = 0; i < numVertices; i++)          { -			mBaseCoords[i].clear(); -			mBaseNormals[i].clear(); -			mBaseBinormals[i].clear(); -			mTexCoords[i].clear(); -            mWeights[i] = 0.f; +                mWeights[i] = 0.f;          }          mNumVertices = numVertices;          return TRUE; @@ -412,47 +408,39 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )                          allocateVertexData( numVertices );       -						for (U16 i = 0; i < numVertices; ++i) -						{ -							//---------------------------------------------------------------- -							// Coords -							//---------------------------------------------------------------- -							numRead = fread(&mBaseCoords[i], sizeof(float), 3, fp); -							llendianswizzle(&mBaseCoords[i], sizeof(float), 3); -							if (numRead != 3) -							{ -									llerrs << "can't read Coordinates from " << fileName << llendl; -									return FALSE; -							} -						} - -						for (U16 i = 0; i < numVertices; ++i) -						{ -							//---------------------------------------------------------------- -							// Normals -							//---------------------------------------------------------------- -							numRead = fread(&mBaseNormals[i], sizeof(float), 3, fp); -							llendianswizzle(&mBaseNormals[i], sizeof(float), 3); -							if (numRead != 3) -							{ -									llerrs << " can't read Normals from " << fileName << llendl; -									return FALSE; -							} -						} - -						for (U16 i = 0; i < numVertices; ++i) -						{ -							//---------------------------------------------------------------- -							// Binormals -							//---------------------------------------------------------------- -							numRead = fread(&mBaseBinormals[i], sizeof(float), 3, fp); -							llendianswizzle(&mBaseBinormals[i], sizeof(float), 3); -							if (numRead != 3) -							{ -									llerrs << " can't read Binormals from " << fileName << llendl; -									return FALSE; -							} -						} +                        //---------------------------------------------------------------- +                        // Coords +                        //---------------------------------------------------------------- +                        numRead = fread(mBaseCoords, 3*sizeof(float), numVertices, fp); +                        llendianswizzle(mBaseCoords, sizeof(float), 3*numVertices); +                        if (numRead != numVertices) +                        { +                                llerrs << "can't read Coordinates from " << fileName << llendl; +                                return FALSE; +                        } + +                        //---------------------------------------------------------------- +                        // Normals +                        //---------------------------------------------------------------- +                        numRead = fread(mBaseNormals, 3*sizeof(float), numVertices, fp); +                        llendianswizzle(mBaseNormals, sizeof(float), 3*numVertices); +                        if (numRead != numVertices) +                        { +                                llerrs << " can't read Normals from " << fileName << llendl; +                                return FALSE; +                        } + +                        //---------------------------------------------------------------- +                        // Binormals +                        //---------------------------------------------------------------- +                        numRead = fread(mBaseBinormals, 3*sizeof(float), numVertices, fp); +                        llendianswizzle(mBaseBinormals, sizeof(float), 3*numVertices); +                        if (numRead != numVertices) +                        { +                                llerrs << " can't read Binormals from " << fileName << llendl; +                                return FALSE; +                        } +                          //----------------------------------------------------------------                          // TexCoords @@ -779,28 +767,21 @@ LLPolyMesh::LLPolyMesh(LLPolyMeshSharedData *shared_data, LLPolyMesh *reference_  	{  		// Allocate memory without initializing every vector  		// NOTE: This makes asusmptions about the size of LLVector[234] -		S32 nverts = mSharedData->mNumVertices; -		//make sure it's an even number of verts for alignment -		nverts += nverts%2; -		S32 nfloats = nverts * ( -					4 + //coords -					4 + //normals -					4 + //weights -					2 + //coords -					4 + //scaled normals -					4 + //binormals -					4); //scaled binormals - +		int nverts = mSharedData->mNumVertices; +		int nfloats = nverts * (2*4 + 3*3 + 2 + 4);  		//use 16 byte aligned vertex data to make LLPolyMesh SSE friendly  		mVertexData = (F32*) ll_aligned_malloc_16(nfloats*4); -		S32 offset = 0; -		mCoords				= 	(LLVector4a*)(mVertexData + offset); offset += 4*nverts; -		mNormals			=	(LLVector4a*)(mVertexData + offset); offset += 4*nverts; -		mClothingWeights	= 	(LLVector4a*)(mVertexData + offset); offset += 4*nverts; -		mTexCoords			= 	(LLVector2*)(mVertexData + offset);  offset += 2*nverts; -		mScaledNormals		=   (LLVector4a*)(mVertexData + offset); offset += 4*nverts; -		mBinormals			=   (LLVector4a*)(mVertexData + offset); offset += 4*nverts; -		mScaledBinormals	=   (LLVector4a*)(mVertexData + offset); offset += 4*nverts;  +		int offset = 0; +		mCoords				= 	(LLVector4*)(mVertexData + offset); offset += 4*nverts; +		mNormals			=	(LLVector4*)(mVertexData + offset); offset += 4*nverts; +		mClothingWeights	= 	(LLVector4*)(mVertexData + offset); offset += 4*nverts; +		mTexCoords			= 	(LLVector2*)(mVertexData + offset); offset += 2*nverts; + +		// these members don't need to be 16-byte aligned, but the first one might be +		// read during an aligned memcpy of mTexCoords +		mScaledNormals =                (LLVector3*)(mVertexData + offset); offset += 3*nverts; +		mBinormals =                    (LLVector3*)(mVertexData + offset); offset += 3*nverts; +		mScaledBinormals =              (LLVector3*)(mVertexData + offset); offset += 3*nverts;   		initializeForMorph();  	}  } @@ -925,7 +906,7 @@ void LLPolyMesh::dumpDiagInfo()  //-----------------------------------------------------------------------------  // getWritableCoords()  //----------------------------------------------------------------------------- -LLVector4a *LLPolyMesh::getWritableCoords() +LLVector4 *LLPolyMesh::getWritableCoords()  {          return mCoords;  } @@ -933,7 +914,7 @@ LLVector4a *LLPolyMesh::getWritableCoords()  //-----------------------------------------------------------------------------  // getWritableNormals()  //----------------------------------------------------------------------------- -LLVector4a *LLPolyMesh::getWritableNormals() +LLVector4 *LLPolyMesh::getWritableNormals()  {          return mNormals;  } @@ -941,7 +922,7 @@ LLVector4a *LLPolyMesh::getWritableNormals()  //-----------------------------------------------------------------------------  // getWritableBinormals()  //----------------------------------------------------------------------------- -LLVector4a *LLPolyMesh::getWritableBinormals() +LLVector3 *LLPolyMesh::getWritableBinormals()  {          return mBinormals;  } @@ -950,7 +931,7 @@ LLVector4a *LLPolyMesh::getWritableBinormals()  //-----------------------------------------------------------------------------  // getWritableClothingWeights()  //----------------------------------------------------------------------------- -LLVector4a       *LLPolyMesh::getWritableClothingWeights() +LLVector4       *LLPolyMesh::getWritableClothingWeights()  {          return mClothingWeights;  } @@ -966,7 +947,7 @@ LLVector2       *LLPolyMesh::getWritableTexCoords()  //-----------------------------------------------------------------------------  // getScaledNormals()  //----------------------------------------------------------------------------- -LLVector4a *LLPolyMesh::getScaledNormals() +LLVector3 *LLPolyMesh::getScaledNormals()  {          return mScaledNormals;  } @@ -974,7 +955,7 @@ LLVector4a *LLPolyMesh::getScaledNormals()  //-----------------------------------------------------------------------------  // getScaledBinormals()  //----------------------------------------------------------------------------- -LLVector4a *LLPolyMesh::getScaledBinormals() +LLVector3 *LLPolyMesh::getScaledBinormals()  {          return mScaledBinormals;  } @@ -985,17 +966,17 @@ LLVector4a *LLPolyMesh::getScaledBinormals()  //-----------------------------------------------------------------------------  void LLPolyMesh::initializeForMorph()  { -    LLVector4a::memcpyNonAliased16((F32*) mCoords, (F32*) mSharedData->mBaseCoords, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mScaledNormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mScaledBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) mSharedData->mTexCoords, sizeof(LLVector2) * (mSharedData->mNumVertices + mSharedData->mNumVertices%2)); - -	for (U32 i = 0; i < mSharedData->mNumVertices; ++i) +    for (U32 i = 0; i < mSharedData->mNumVertices; ++i)  	{ -		mClothingWeights[i].clear(); +		mCoords[i] = LLVector4(mSharedData->mBaseCoords[i]); +		mNormals[i] = LLVector4(mSharedData->mBaseNormals[i]);  	} + +	memcpy(mScaledNormals, mSharedData->mBaseNormals, sizeof(LLVector3) * mSharedData->mNumVertices);	/*Flawfinder: ignore*/ +	memcpy(mBinormals, mSharedData->mBaseBinormals, sizeof(LLVector3) * mSharedData->mNumVertices);	/*Flawfinder: ignore*/ +	memcpy(mScaledBinormals, mSharedData->mBaseBinormals, sizeof(LLVector3) * mSharedData->mNumVertices);		/*Flawfinder: ignore*/ +	memcpy(mTexCoords, mSharedData->mTexCoords, sizeof(LLVector2) * mSharedData->mNumVertices);		/*Flawfinder: ignore*/ +	memset(mClothingWeights, 0, sizeof(LLVector4) * mSharedData->mNumVertices);  }  //----------------------------------------------------------------------------- @@ -1117,7 +1098,7 @@ BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)  LLPolySkeletalDistortion::LLPolySkeletalDistortion(LLVOAvatar *avatarp)  {          mAvatar = avatarp; -        mDefaultVec.splat(0.001f); +        mDefaultVec.setVec(0.001f, 0.001f, 0.001f);  }  //----------------------------------------------------------------------------- @@ -1190,12 +1171,8 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)  //-----------------------------------------------------------------------------  // apply()  //----------------------------------------------------------------------------- -static LLFastTimer::DeclareTimer FTM_POLYSKELETAL_DISTORTION_APPLY("Skeletal Distortion"); -  void LLPolySkeletalDistortion::apply( ESex avatar_sex )  { -	LLFastTimer t(FTM_POLYSKELETAL_DISTORTION_APPLY); -          F32 effective_weight = ( getSex() & avatar_sex ) ? mCurWeight : getDefaultWeight();          LLJoint* joint; @@ -1251,14 +1228,11 @@ LLPolyMorphData *clone_morph_param_direction(const LLPolyMorphData *src_data,  {          LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*src_data);          cloned_morph_data->mName = name; -		LLVector4a dir; -		dir.load3(direction.mV); -          for (U32 v=0; v < cloned_morph_data->mNumIndices; v++)          { -                cloned_morph_data->mCoords[v] = dir; -                cloned_morph_data->mNormals[v].clear(); -                cloned_morph_data->mBinormals[v].clear(); +                cloned_morph_data->mCoords[v] = direction; +                cloned_morph_data->mNormals[v] = LLVector3(0,0,0); +                cloned_morph_data->mBinormals[v] = LLVector3(0,0,0);          }          return cloned_morph_data;  } @@ -1269,27 +1243,17 @@ LLPolyMorphData *clone_morph_param_cleavage(const LLPolyMorphData *src_data,  {          LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*src_data);          cloned_morph_data->mName = name; - -		LLVector4a sc; -		sc.splat(scale); - -		LLVector4a nsc; -		nsc.set(scale, -scale, scale, scale); -          for (U32 v=0; v < cloned_morph_data->mNumIndices; v++)          { -            if (cloned_morph_data->mCoords[v][1] < 0) -            { -                cloned_morph_data->mCoords[v].setMul(src_data->mCoords[v],nsc); -				cloned_morph_data->mNormals[v].setMul(src_data->mNormals[v],nsc); -				cloned_morph_data->mBinormals[v].setMul(src_data->mBinormals[v],nsc); -			} -			else -			{ -				cloned_morph_data->mCoords[v].setMul(src_data->mCoords[v],sc); -				cloned_morph_data->mNormals[v].setMul(src_data->mNormals[v], sc); -				cloned_morph_data->mBinormals[v].setMul(src_data->mBinormals[v],sc); -			} +                cloned_morph_data->mCoords[v] = src_data->mCoords[v]*scale; +                cloned_morph_data->mNormals[v] = src_data->mNormals[v]*scale; +                cloned_morph_data->mBinormals[v] = src_data->mBinormals[v]*scale; +                if (cloned_morph_data->mCoords[v][1] < 0) +                { +                        cloned_morph_data->mCoords[v][1] *= -1; +                        cloned_morph_data->mNormals[v][1] *= -1; +                        cloned_morph_data->mBinormals[v][1] *= -1; +                }          }          return cloned_morph_data;  } diff --git a/indra/newview/llpolymesh.h b/indra/newview/llpolymesh.h index ffb11a3f7e..ba2bf85570 100644 --- a/indra/newview/llpolymesh.h +++ b/indra/newview/llpolymesh.h @@ -73,9 +73,9 @@ private:  	// vertex data			  	S32						mNumVertices; -	LLVector4a				*mBaseCoords; -	LLVector4a				*mBaseNormals; -	LLVector4a				*mBaseBinormals; +	LLVector3				*mBaseCoords; +	LLVector3				*mBaseNormals; +	LLVector3				*mBaseBinormals;  	LLVector2				*mTexCoords;  	LLVector2				*mDetailTexCoords;  	F32						*mWeights; @@ -217,41 +217,41 @@ public:  	}  	// Get coords -	const LLVector4a	*getCoords() const{ +	const LLVector4	*getCoords() const{  		return mCoords;  	}  	// non const version -	LLVector4a *getWritableCoords(); +	LLVector4 *getWritableCoords();  	// Get normals -	const LLVector4a	*getNormals() const{  +	const LLVector4	*getNormals() const{   		return mNormals;   	}  	// Get normals -	const LLVector4a	*getBinormals() const{  +	const LLVector3	*getBinormals() const{   		return mBinormals;   	}  	// Get base mesh normals -	const LLVector4a *getBaseNormals() const{ +	const LLVector3 *getBaseNormals() const{  		llassert(mSharedData);  		return mSharedData->mBaseNormals;  	}  	// Get base mesh normals -	const LLVector4a *getBaseBinormals() const{ +	const LLVector3 *getBaseBinormals() const{  		llassert(mSharedData);  		return mSharedData->mBaseBinormals;  	}  	// intermediate morphed normals and output normals -	LLVector4a *getWritableNormals(); -	LLVector4a *getScaledNormals(); +	LLVector4 *getWritableNormals(); +	LLVector3 *getScaledNormals(); -	LLVector4a *getWritableBinormals(); -	LLVector4a *getScaledBinormals(); +	LLVector3 *getWritableBinormals(); +	LLVector3 *getScaledBinormals();  	// Get texCoords  	const LLVector2	*getTexCoords() const {  @@ -275,9 +275,9 @@ public:  	F32			*getWritableWeights() const; -	LLVector4a	*getWritableClothingWeights(); +	LLVector4	*getWritableClothingWeights(); -	const LLVector4a		*getClothingWeights() +	const LLVector4		*getClothingWeights()  	{  		return mClothingWeights;	  	} @@ -341,17 +341,17 @@ protected:  	// Single array of floats for allocation / deletion  	F32						*mVertexData;  	// deformed vertices (resulting from application of morph targets) -	LLVector4a				*mCoords; +	LLVector4				*mCoords;  	// deformed normals (resulting from application of morph targets) -	LLVector4a				*mScaledNormals; +	LLVector3				*mScaledNormals;  	// output normals (after normalization) -	LLVector4a				*mNormals; +	LLVector4				*mNormals;  	// deformed binormals (resulting from application of morph targets) -	LLVector4a				*mScaledBinormals; +	LLVector3				*mScaledBinormals;  	// output binormals (after normalization) -	LLVector4a				*mBinormals; +	LLVector3				*mBinormals;  	// weight values that mark verts as clothing/skin -	LLVector4a				*mClothingWeights; +	LLVector4				*mClothingWeights;  	// output texture coordinates  	LLVector2				*mTexCoords; @@ -419,17 +419,17 @@ public:  	// LLViewerVisualParam Virtual functions  	/*virtual*/ F32					getTotalDistortion() { return 0.1f; } -	/*virtual*/ const LLVector4a&	getAvgDistortion()	{ return mDefaultVec; } +	/*virtual*/ const LLVector3&	getAvgDistortion()	{ return mDefaultVec; }  	/*virtual*/ F32					getMaxDistortion() { return 0.1f; } -	/*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh){return LLVector4a(0.001f, 0.001f, 0.001f);} -	/*virtual*/ const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh){index = 0; poly_mesh = NULL; return &mDefaultVec;}; -	/*virtual*/ const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh){index = 0; poly_mesh = NULL; return NULL;}; +	/*virtual*/ LLVector3			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh){return LLVector3(0.001f, 0.001f, 0.001f);} +	/*virtual*/ const LLVector3*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh){index = 0; poly_mesh = NULL; return &mDefaultVec;}; +	/*virtual*/ const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh){index = 0; poly_mesh = NULL; return NULL;};  protected:  	typedef std::map<LLJoint*, LLVector3> joint_vec_map_t;  	joint_vec_map_t mJointScales;  	joint_vec_map_t mJointOffsets; -	LLVector4a	mDefaultVec; +	LLVector3	mDefaultVec;  	// Backlink only; don't make this an LLPointer.  	LLVOAvatar *mAvatar;  }; diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp index d25d1420ee..cefd7df3fe 100644 --- a/indra/newview/llpolymorph.cpp +++ b/indra/newview/llpolymorph.cpp @@ -48,7 +48,7 @@ LLPolyMorphData::LLPolyMorphData(const std::string& morph_name)  	mNumIndices = 0;  	mCurrentIndex = 0;  	mTotalDistortion = 0.f; -	mAvgDistortion.clear(); +	mAvgDistortion.zeroVec();  	mMaxDistortion = 0.f;  	mVertexIndices = NULL;  	mCoords = NULL; @@ -73,9 +73,9 @@ LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) :  {  	const S32 numVertices = mNumIndices; -	mCoords = new LLVector4a[numVertices]; -	mNormals = new LLVector4a[numVertices]; -	mBinormals = new LLVector4a[numVertices]; +	mCoords = new LLVector3[numVertices]; +	mNormals = new LLVector3[numVertices]; +	mBinormals = new LLVector3[numVertices];  	mTexCoords = new LLVector2[numVertices];  	mVertexIndices = new U32[numVertices]; @@ -121,16 +121,16 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)  	//-------------------------------------------------------------------------  	// allocate vertices  	//------------------------------------------------------------------------- -	mCoords = new LLVector4a[numVertices]; -	mNormals = new LLVector4a[numVertices]; -	mBinormals = new LLVector4a[numVertices]; +	mCoords = new LLVector3[numVertices]; +	mNormals = new LLVector3[numVertices]; +	mBinormals = new LLVector3[numVertices];  	mTexCoords = new LLVector2[numVertices];  	// Actually, we are allocating more space than we need for the skiplist  	mVertexIndices = new U32[numVertices];  	mNumIndices = 0;  	mTotalDistortion = 0.f;  	mMaxDistortion = 0.f; -	mAvgDistortion.clear(); +	mAvgDistortion.zeroVec();  	mMesh = mesh;  	//------------------------------------------------------------------------- @@ -152,36 +152,36 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)  		} -		numRead = fread(&mCoords[v], sizeof(F32), 3, fp); -		llendianswizzle(&mCoords[v], sizeof(F32), 3); +		numRead = fread(&mCoords[v].mV, sizeof(F32), 3, fp); +		llendianswizzle(&mCoords[v].mV, sizeof(F32), 3);  		if (numRead != 3)  		{  			llwarns << "Can't read morph target vertex coordinates" << llendl;  			return FALSE;  		} -		F32 magnitude = mCoords[v].getLength3().getF32(); +		F32 magnitude = mCoords[v].magVec();  		mTotalDistortion += magnitude; -		LLVector4a t; -		t.setAbs(mCoords[v]); -		mAvgDistortion.add(t); +		mAvgDistortion.mV[VX] += fabs(mCoords[v].mV[VX]); +		mAvgDistortion.mV[VY] += fabs(mCoords[v].mV[VY]); +		mAvgDistortion.mV[VZ] += fabs(mCoords[v].mV[VZ]);  		if (magnitude > mMaxDistortion)  		{  			mMaxDistortion = magnitude;  		} -		numRead = fread(&mNormals[v], sizeof(F32), 3, fp); -		llendianswizzle(&mNormals[v], sizeof(F32), 3); +		numRead = fread(&mNormals[v].mV, sizeof(F32), 3, fp); +		llendianswizzle(&mNormals[v].mV, sizeof(F32), 3);  		if (numRead != 3)  		{  			llwarns << "Can't read morph target normal" << llendl;  			return FALSE;  		} -		numRead = fread(&mBinormals[v], sizeof(F32), 3, fp); -		llendianswizzle(&mBinormals[v], sizeof(F32), 3); +		numRead = fread(&mBinormals[v].mV, sizeof(F32), 3, fp); +		llendianswizzle(&mBinormals[v].mV, sizeof(F32), 3);  		if (numRead != 3)  		{  			llwarns << "Can't read morph target binormal" << llendl; @@ -200,8 +200,8 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)  		mNumIndices++;  	} -	mAvgDistortion.mul(1.f/(F32)mNumIndices); -	mAvgDistortion.normalize3fast(); +	mAvgDistortion = mAvgDistortion * (1.f/(F32)mNumIndices); +	mAvgDistortion.normVec();  	return TRUE;  } @@ -367,9 +367,9 @@ BOOL LLPolyMorphTarget::parseData(LLXmlTreeNode* node)  //-----------------------------------------------------------------------------  // getVertexDistortion()  //----------------------------------------------------------------------------- -LLVector4a LLPolyMorphTarget::getVertexDistortion(S32 requested_index, LLPolyMesh *mesh) +LLVector3 LLPolyMorphTarget::getVertexDistortion(S32 requested_index, LLPolyMesh *mesh)  { -	if (!mMorphData || mMesh != mesh) return LLVector4a::getZero(); +	if (!mMorphData || mMesh != mesh) return LLVector3::zero;  	for(U32 index = 0; index < mMorphData->mNumIndices; index++)  	{ @@ -379,17 +379,17 @@ LLVector4a LLPolyMorphTarget::getVertexDistortion(S32 requested_index, LLPolyMes  		}  	} -	return LLVector4a::getZero(); +	return LLVector3::zero;  }  //-----------------------------------------------------------------------------  // getFirstDistortion()  //----------------------------------------------------------------------------- -const LLVector4a *LLPolyMorphTarget::getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh) +const LLVector3 *LLPolyMorphTarget::getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh)  { -	if (!mMorphData) return &LLVector4a::getZero(); +	if (!mMorphData) return &LLVector3::zero; -	LLVector4a* resultVec; +	LLVector3* resultVec;  	mMorphData->mCurrentIndex = 0;  	if (mMorphData->mNumIndices)  	{ @@ -411,11 +411,11 @@ const LLVector4a *LLPolyMorphTarget::getFirstDistortion(U32 *index, LLPolyMesh *  //-----------------------------------------------------------------------------  // getNextDistortion()  //----------------------------------------------------------------------------- -const LLVector4a *LLPolyMorphTarget::getNextDistortion(U32 *index, LLPolyMesh **poly_mesh) +const LLVector3 *LLPolyMorphTarget::getNextDistortion(U32 *index, LLPolyMesh **poly_mesh)  { -	if (!mMorphData) return &LLVector4a::getZero(); +	if (!mMorphData) return &LLVector3::zero; -	LLVector4a* resultVec; +	LLVector3* resultVec;  	mMorphData->mCurrentIndex++;  	if (mMorphData->mCurrentIndex < mMorphData->mNumIndices)  	{ @@ -451,7 +451,7 @@ F32	LLPolyMorphTarget::getTotalDistortion()  //-----------------------------------------------------------------------------  // getAvgDistortion()  //----------------------------------------------------------------------------- -const LLVector4a& LLPolyMorphTarget::getAvgDistortion()	 +const LLVector3& LLPolyMorphTarget::getAvgDistortion()	  {  	if (mMorphData)   	{ @@ -459,7 +459,7 @@ const LLVector4a& LLPolyMorphTarget::getAvgDistortion()  	}  	else   	{ -		return LLVector4a::getZero(); +		return LLVector3::zero;  	}  } @@ -481,8 +481,6 @@ F32	LLPolyMorphTarget::getMaxDistortion()  //-----------------------------------------------------------------------------  // apply()  //----------------------------------------------------------------------------- -static LLFastTimer::DeclareTimer FTM_APPLY_MORPH_TARGET("Apply Morph"); -  void LLPolyMorphTarget::apply( ESex avatar_sex )  {  	if (!mMorphData || mNumMorphMasksPending > 0) @@ -490,8 +488,6 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )  		return;  	} -	LLFastTimer t(FTM_APPLY_MORPH_TARGET); -  	mLastSex = avatar_sex;  	// Check for NaN condition (NaN is detected if a variable doesn't equal itself. @@ -512,15 +508,15 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )  	if (delta_weight != 0.f)  	{  		llassert(!mMesh->isLOD()); -		LLVector4a *coords = mMesh->getWritableCoords(); +		LLVector4 *coords = mMesh->getWritableCoords(); -		LLVector4a *scaled_normals = mMesh->getScaledNormals(); -		LLVector4a *normals = mMesh->getWritableNormals(); +		LLVector3 *scaled_normals = mMesh->getScaledNormals(); +		LLVector4 *normals = mMesh->getWritableNormals(); -		LLVector4a *scaled_binormals = mMesh->getScaledBinormals(); -		LLVector4a *binormals = mMesh->getWritableBinormals(); +		LLVector3 *scaled_binormals = mMesh->getScaledBinormals(); +		LLVector3 *binormals = mMesh->getWritableBinormals(); -		LLVector4a *clothing_weights = mMesh->getWritableClothingWeights(); +		LLVector4 *clothing_weights = mMesh->getWritableClothingWeights();  		LLVector2 *tex_coords = mMesh->getWritableTexCoords();  		F32 *maskWeightArray = (mVertMask) ? mVertMask->getMorphMaskWeights() : NULL; @@ -535,38 +531,31 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )  				maskWeight = maskWeightArray[vert_index_morph];  			} - -			LLVector4a pos = mMorphData->mCoords[vert_index_morph]; -			pos.mul(delta_weight*maskWeight); -			coords[vert_index_mesh].add(pos); +			coords[vert_index_mesh] += LLVector4(mMorphData->mCoords[vert_index_morph] * delta_weight * maskWeight);  			if (getInfo()->mIsClothingMorph && clothing_weights)  			{ -				LLVector4a clothing_offset = mMorphData->mCoords[vert_index_morph]; -				clothing_offset.mul(delta_weight * maskWeight); -				LLVector4a* clothing_weight = &clothing_weights[vert_index_mesh]; -				clothing_weight->add(clothing_offset); -				clothing_weight->getF32ptr()[VW] = maskWeight; +				LLVector3 clothing_offset = mMorphData->mCoords[vert_index_morph] * delta_weight * maskWeight; +				LLVector4* clothing_weight = &clothing_weights[vert_index_mesh]; +				clothing_weight->mV[VX] += clothing_offset.mV[VX]; +				clothing_weight->mV[VY] += clothing_offset.mV[VY]; +				clothing_weight->mV[VZ] += clothing_offset.mV[VZ]; +				clothing_weight->mV[VW] = maskWeight;  			}  			// calculate new normals based on half angles -			LLVector4a norm = mMorphData->mNormals[vert_index_morph]; -			norm.mul(delta_weight*maskWeight*NORMAL_SOFTEN_FACTOR); -			scaled_normals[vert_index_mesh].add(norm); -			norm = scaled_normals[vert_index_mesh]; -			norm.normalize3fast(); -			normals[vert_index_mesh] = norm; +			scaled_normals[vert_index_mesh] += mMorphData->mNormals[vert_index_morph] * delta_weight * maskWeight * NORMAL_SOFTEN_FACTOR; +			LLVector3 normalized_normal = scaled_normals[vert_index_mesh]; +			normalized_normal.normVec(); +			normals[vert_index_mesh] = LLVector4(normalized_normal);  			// calculate new binormals -			LLVector4a binorm = mMorphData->mBinormals[vert_index_morph]; -			binorm.mul(delta_weight*maskWeight*NORMAL_SOFTEN_FACTOR); -			scaled_binormals[vert_index_mesh].add(binorm); -			LLVector4a tangent; -			tangent.setCross3(scaled_binormals[vert_index_mesh], norm); -			LLVector4a& normalized_binormal = binormals[vert_index_mesh]; -			normalized_binormal.setCross3(norm, tangent);  -			normalized_binormal.normalize3fast(); -			 +			scaled_binormals[vert_index_mesh] += mMorphData->mBinormals[vert_index_morph] * delta_weight * maskWeight * NORMAL_SOFTEN_FACTOR; +			LLVector3 tangent = scaled_binormals[vert_index_mesh] % normalized_normal; +			LLVector3 normalized_binormal = normalized_normal % tangent;  +			normalized_binormal.normVec(); +			binormals[vert_index_mesh] = normalized_binormal; +  			tex_coords[vert_index_mesh] += mMorphData->mTexCoords[vert_index_morph] * delta_weight * maskWeight;  		} @@ -593,7 +582,7 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )  //-----------------------------------------------------------------------------  void	LLPolyMorphTarget::applyMask(U8 *maskTextureData, S32 width, S32 height, S32 num_components, BOOL invert)  { -	LLVector4a *clothing_weights = getInfo()->mIsClothingMorph ? mMesh->getWritableClothingWeights() : NULL; +	LLVector4 *clothing_weights = getInfo()->mIsClothingMorph ? mMesh->getWritableClothingWeights() : NULL;  	if (!mVertMask)  	{ @@ -607,47 +596,29 @@ void	LLPolyMorphTarget::applyMask(U8 *maskTextureData, S32 width, S32 height, S3  		if (maskWeights)  		{ -			LLVector4a *coords = mMesh->getWritableCoords(); -			LLVector4a *scaled_normals = mMesh->getScaledNormals(); -			LLVector4a *scaled_binormals = mMesh->getScaledBinormals(); +			LLVector4 *coords = mMesh->getWritableCoords(); +			LLVector3 *scaled_normals = mMesh->getScaledNormals(); +			LLVector3 *scaled_binormals = mMesh->getScaledBinormals();  			LLVector2 *tex_coords = mMesh->getWritableTexCoords(); -			LLVector4Logical clothing_mask; -			clothing_mask.clear(); -			clothing_mask.setElement<0>(); -			clothing_mask.setElement<1>(); -			clothing_mask.setElement<2>(); - -  			for(U32 vert = 0; vert < mMorphData->mNumIndices; vert++)  			{  				F32 lastMaskWeight = mLastWeight * maskWeights[vert];  				S32 out_vert = mMorphData->mVertexIndices[vert];  				// remove effect of existing masked morph -				LLVector4a t; -				t = mMorphData->mCoords[vert]; -				t.mul(lastMaskWeight); -				coords[out_vert].sub(t); - -				t = mMorphData->mNormals[vert]; -				t.mul(lastMaskWeight*NORMAL_SOFTEN_FACTOR); -				scaled_normals[out_vert].sub(t); - -				t = mMorphData->mBinormals[vert]; -				t.mul(lastMaskWeight*NORMAL_SOFTEN_FACTOR); -				scaled_binormals[out_vert].sub(t); - +				coords[out_vert] -= LLVector4(mMorphData->mCoords[vert]) * lastMaskWeight; +				scaled_normals[out_vert] -= mMorphData->mNormals[vert] * lastMaskWeight * NORMAL_SOFTEN_FACTOR; +				scaled_binormals[out_vert] -= mMorphData->mBinormals[vert] * lastMaskWeight * NORMAL_SOFTEN_FACTOR;  				tex_coords[out_vert] -= mMorphData->mTexCoords[vert] * lastMaskWeight;  				if (clothing_weights)  				{ -					LLVector4a clothing_offset = mMorphData->mCoords[vert]; -					clothing_offset.mul(lastMaskWeight); -					LLVector4a* clothing_weight = &clothing_weights[out_vert]; -					LLVector4a t; -					t.setSub(*clothing_weight, clothing_offset); -					clothing_weight->setSelectWithMask(clothing_mask, t, *clothing_weight); +					LLVector3 clothing_offset = mMorphData->mCoords[vert] * lastMaskWeight; +					LLVector4* clothing_weight = &clothing_weights[out_vert]; +					clothing_weight->mV[VX] -= clothing_offset.mV[VX]; +					clothing_weight->mV[VY] -= clothing_offset.mV[VY]; +					clothing_weight->mV[VZ] -= clothing_offset.mV[VZ];  				}  			}  		} @@ -683,7 +654,7 @@ LLPolyVertexMask::~LLPolyVertexMask()  //-----------------------------------------------------------------------------  // generateMask()  //----------------------------------------------------------------------------- -void LLPolyVertexMask::generateMask(U8 *maskTextureData, S32 width, S32 height, S32 num_components, BOOL invert, LLVector4a *clothing_weights) +void LLPolyVertexMask::generateMask(U8 *maskTextureData, S32 width, S32 height, S32 num_components, BOOL invert, LLVector4 *clothing_weights)  {  // RN debug output that uses Image Debugger (http://www.cs.unc.edu/~baxter/projects/imdebug/)  //	BOOL debugImg = FALSE;  @@ -727,7 +698,7 @@ void LLPolyVertexMask::generateMask(U8 *maskTextureData, S32 width, S32 height,  		if (clothing_weights)  		{ -			clothing_weights[vertIndex].getF32ptr()[VW] = mWeights[index]; +			clothing_weights[vertIndex].mV[VW] = mWeights[index];  		}  	}  	mWeightsGenerated = TRUE; diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h index 46e23b7792..8a024f2e9e 100644 --- a/indra/newview/llpolymorph.h +++ b/indra/newview/llpolymorph.h @@ -58,14 +58,14 @@ public:  	U32					mNumIndices;  	U32*				mVertexIndices;  	U32					mCurrentIndex; -	LLVector4a*			mCoords; -	LLVector4a*			mNormals; -	LLVector4a*			mBinormals; +	LLVector3*			mCoords; +	LLVector3*			mNormals; +	LLVector3*			mBinormals;  	LLVector2*			mTexCoords;  	F32					mTotalDistortion;	// vertex distortion summed over entire morph  	F32					mMaxDistortion;		// maximum single vertex distortion in a given morph -	LLVector4a			mAvgDistortion;		// average vertex distortion, to infer directionality of the morph +	LLVector3			mAvgDistortion;		// average vertex distortion, to infer directionality of the morph  	LLPolyMeshSharedData*	mMesh;  }; @@ -78,7 +78,7 @@ public:  	LLPolyVertexMask(LLPolyMorphData* morph_data);  	~LLPolyVertexMask(); -	void generateMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert, LLVector4a *clothing_weights); +	void generateMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert, LLVector4 *clothing_weights);  	F32* getMorphMaskWeights(); @@ -157,11 +157,11 @@ public:  	// LLViewerVisualParam Virtual functions  	/*virtual*/ F32					getTotalDistortion(); -	/*virtual*/ const LLVector4a&	getAvgDistortion(); +	/*virtual*/ const LLVector3&	getAvgDistortion();  	/*virtual*/ F32					getMaxDistortion(); -	/*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh); -	/*virtual*/ const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh); -	/*virtual*/ const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh); +	/*virtual*/ LLVector3			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh); +	/*virtual*/ const LLVector3*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh); +	/*virtual*/ const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh);  	void	applyMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert);  	void	addPendingMorphMask() { mNumMorphMasksPending++; } diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 92c2863ffd..1ce05da849 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -352,7 +352,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		getChildView("BtnCreator")->setEnabled(FALSE);  		getChildView("LabelCreatorTitle")->setEnabled(FALSE);  		getChildView("LabelCreatorName")->setEnabled(FALSE); -		getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown_multiple")); +		getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown"));  	}  	//////////////// diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 78c905f6ff..325a2d3004 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -68,7 +68,6 @@ const F32 SG_OCCLUSION_FUDGE = 0.25f;  #define assert_states_valid(x)  #endif -extern bool gShiftFrame;  static U32 sZombieGroups = 0;  U32 LLSpatialGroup::sNodeCount = 0; @@ -530,7 +529,6 @@ void LLSpatialGroup::setVisible()  void LLSpatialGroup::validate()  { -	ll_assert_aligned(this,64);  #if LL_OCTREE_PARANOIA_CHECK  	sg_assert(!isState(DIRTY)); @@ -543,7 +541,7 @@ void LLSpatialGroup::validate()  	validateDrawMap(); -	for (element_iter i = getDataBegin(); i != getDataEnd(); ++i) +	for (element_iter i = getData().begin(); i != getData().end(); ++i)  	{  		LLDrawable* drawable = *i;  		sg_assert(drawable->getSpatialGroup() == this); @@ -760,7 +758,7 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector4a& minOut, LLVector4a& ma  {	  	const OctreeNode* node = mOctreeNode; -	if (node->isEmpty()) +	if (node->getData().empty())  	{	//don't do anything if there are no objects  		if (empty && mOctreeNode->getParent())  		{	//only root is allowed to be empty @@ -777,14 +775,14 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector4a& minOut, LLVector4a& ma  		clearState(OBJECT_DIRTY);  		//initialize bounding box to first element -		OctreeNode::const_element_iter i = node->getDataBegin(); +		OctreeNode::const_element_iter i = node->getData().begin();  		LLDrawable* drawablep = *i;  		const LLVector4a* minMax = drawablep->getSpatialExtents();  		newMin = minMax[0];  		newMax = minMax[1]; -		for (++i; i != node->getDataEnd(); ++i) +		for (++i; i != node->getData().end(); ++i)  		{  			drawablep = *i;  			minMax = drawablep->getSpatialExtents(); @@ -925,10 +923,7 @@ void LLSpatialGroup::shift(const LLVector4a &offset)  	mObjectExtents[0].add(offset);  	mObjectExtents[1].add(offset); -	if (!mSpatialPartition->mRenderByGroup &&  -		mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_TREE && -		mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_TERRAIN && -		mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_BRIDGE) +	//if (!mSpatialPartition->mRenderByGroup)  	{  		setState(GEOM_DIRTY);  		gPipeline.markRebuild(this, TRUE); @@ -1200,8 +1195,6 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) :  	mCurUpdatingSlotp(NULL),  	mCurUpdatingTexture (NULL)  { -	ll_assert_aligned(this,16); -	  	sNodeCount++;  	LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); @@ -1245,18 +1238,13 @@ void LLSpatialGroup::updateDistance(LLCamera &camera)  		return;  	} -	if (gShiftFrame) -	{ -		return; -	} -  #if !LL_RELEASE_FOR_DOWNLOAD  	if (isState(LLSpatialGroup::OBJECT_DIRTY))  	{  		llerrs << "Spatial group dirty on distance update." << llendl;  	}  #endif -	if (!isEmpty()) +	if (!getData().empty())  	{  		mRadius = mSpatialPartition->mRenderByGroup ? mObjectBounds[1].getLength3().getF32() :  						(F32) mOctreeNode->getSize().getLength3().getF32(); @@ -1407,7 +1395,7 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node)  	LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION);  	setState(DEAD); -	for (element_iter i = getDataBegin(); i != getDataEnd(); ++i) +	for (element_iter i = getData().begin(); i != getData().end(); ++i)  	{  		LLDrawable* drawable = *i;  		if (drawable->getSpatialGroup() == this) @@ -1494,7 +1482,7 @@ void LLSpatialGroup::destroyGL(bool keep_occlusion)  	} -	for (LLSpatialGroup::element_iter i = getDataBegin(); i != getDataEnd(); ++i) +	for (LLSpatialGroup::element_iter i = getData().begin(); i != getData().end(); ++i)  	{  		LLDrawable* drawable = *i;  		for (S32 j = 0; j < drawable->getNumFaces(); j++) @@ -1850,14 +1838,12 @@ BOOL LLSpatialPartition::remove(LLDrawable *drawablep, LLSpatialGroup *curp)  {  	LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); +	drawablep->setSpatialGroup(NULL); +  	if (!curp->removeObject(drawablep))  	{  		OCT_ERRS << "Failed to remove drawable from octree!" << llendl;  	} -	else -	{ -		drawablep->setSpatialGroup(NULL); -	}  	assert_octree_valid(mOctree); @@ -2128,7 +2114,7 @@ public:  	virtual void processGroup(LLSpatialGroup* group)  	{ -		llassert(!group->isState(LLSpatialGroup::DIRTY) && !group->isEmpty()) +		llassert(!group->isState(LLSpatialGroup::DIRTY) && !group->getData().empty())  		if (mRes < 2)  		{ @@ -2195,7 +2181,7 @@ public:  	{  		LLSpatialGroup::OctreeNode* branch = group->mOctreeNode; -		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getDataBegin(); i != branch->getDataEnd(); ++i) +		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)  		{  			LLDrawable* drawable = *i; @@ -2319,7 +2305,7 @@ public:  		LLSpatialGroup* group = (LLSpatialGroup*) state->getListener(0);  		group->destroyGL(); -		for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +		for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  		{  			LLDrawable* drawable = *i;  			if (drawable->getVObj().notNull() && !group->mSpatialPartition->mRenderByGroup) @@ -2629,7 +2615,7 @@ void renderOctree(LLSpatialGroup* group)  			gGL.flush();  			glLineWidth(1.f);  			gGL.flush(); -			for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +			for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  			{  				LLDrawable* drawable = *i;  				if (!group->mSpatialPartition->isBridge()) @@ -2675,7 +2661,7 @@ void renderOctree(LLSpatialGroup* group)  	}  	else  	{ -		if (group->mBufferUsage == GL_STATIC_DRAW_ARB && !group->isEmpty()  +		if (group->mBufferUsage == GL_STATIC_DRAW_ARB && !group->getData().empty()   			&& group->mSpatialPartition->mRenderByGroup)  		{  			col.setVec(0.8f, 0.4f, 0.1f, 0.1f); @@ -2743,7 +2729,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera)  	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);  	BOOL render_objects = (!LLPipeline::sUseOcclusion || !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) && group->isVisible() && -							!group->isEmpty(); +							!group->getData().empty();  	if (render_objects)  	{ @@ -3474,7 +3460,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  void renderPhysicsShapes(LLSpatialGroup* group)  { -	for (LLSpatialGroup::OctreeNode::const_element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +	for (LLSpatialGroup::OctreeNode::const_element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  	{  		LLDrawable* drawable = *i;  		LLVOVolume* volume = drawable->getVOVolume(); @@ -3823,7 +3809,7 @@ public:  		LLVector3 center, size; -		if (branch->isEmpty()) +		if (branch->getData().empty())  		{  			gGL.diffuseColor3f(1.f,0.2f,0.f);  			center.set(branch->getCenter().getF32ptr()); @@ -3859,8 +3845,8 @@ public:  			}  			gGL.begin(LLRender::TRIANGLES); -			for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getDataBegin(); -					iter != branch->getDataEnd(); +			for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getData().begin(); +					iter != branch->getData().end();  					++iter)  			{  				const LLVolumeTriangle* tri = *iter; @@ -4097,7 +4083,7 @@ public:  		if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_BBOXES))  		{ -			if (!group->isEmpty()) +			if (!group->getData().empty())  			{  				gGL.diffuseColor3f(0,0,1);  				drawBoxOutline(group->mObjectBounds[0], @@ -4105,7 +4091,7 @@ public:  			}  		} -		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getDataBegin(); i != branch->getDataEnd(); ++i) +		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)  		{  			LLDrawable* drawable = *i; @@ -4191,7 +4177,7 @@ public:  						{  							if (index < 255)  							{ -								if (facep->mDrawInfo->mTextureList.size()<= index) +								if (facep->mDrawInfo->mTextureList.size() <= index)  								{  									llerrs << "Face texture index out of bounds." << llendl;  								} @@ -4294,7 +4280,7 @@ public:  			return;  		} -		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getDataBegin(); i != branch->getDataEnd(); ++i) +		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)  		{  			LLDrawable* drawable = *i; @@ -4518,7 +4504,7 @@ public:  	virtual void visit(const LLSpatialGroup::OctreeNode* branch)   	{	 -		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getDataBegin(); i != branch->getDataEnd(); ++i) +		for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)  		{  			check(*i);  		} @@ -4704,62 +4690,28 @@ LLVertexBuffer* LLGeometryManager::createVertexBuffer(U32 type_mask, U32 usage)  LLCullResult::LLCullResult()   { -	mVisibleGroupsAllocated = 0; -	mAlphaGroupsAllocated = 0; -	mOcclusionGroupsAllocated = 0; -	mDrawableGroupsAllocated = 0; -	mVisibleListAllocated = 0; -	mVisibleBridgeAllocated = 0; - -	mVisibleGroups = NULL; -	mVisibleGroupsEnd = NULL; -	mAlphaGroups = NULL; -	mAlphaGroupsEnd = NULL; -	mOcclusionGroups = NULL; -	mOcclusionGroupsEnd = NULL; -	mDrawableGroups = NULL; -	mDrawableGroupsEnd = NULL; -	mVisibleList = NULL; -	mVisibleListEnd = NULL; -	mVisibleBridge = NULL; -	mVisibleBridgeEnd = NULL; - -	for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++) -	{ -		mRenderMap[i] = NULL; -		mRenderMapEnd[i] = NULL; -		mRenderMapAllocated[i] = 0; -	} -  	clear();  } -void LLCullResult::pushBack(void**& head, U32& count, void* val) -{ -	count++; -	head = (void**) realloc((void*) head, sizeof(void*) * count); -	head[count-1] = val; -} -  void LLCullResult::clear()  {  	mVisibleGroupsSize = 0; -	mVisibleGroupsEnd = mVisibleGroups; +	mVisibleGroupsEnd = mVisibleGroups.begin();  	mAlphaGroupsSize = 0; -	mAlphaGroupsEnd = mAlphaGroups; +	mAlphaGroupsEnd = mAlphaGroups.begin();  	mOcclusionGroupsSize = 0; -	mOcclusionGroupsEnd = mOcclusionGroups; +	mOcclusionGroupsEnd = mOcclusionGroups.begin();  	mDrawableGroupsSize = 0; -	mDrawableGroupsEnd = mDrawableGroups; +	mDrawableGroupsEnd = mDrawableGroups.begin();  	mVisibleListSize = 0; -	mVisibleListEnd = mVisibleList; +	mVisibleListEnd = mVisibleList.begin();  	mVisibleBridgeSize = 0; -	mVisibleBridgeEnd = mVisibleBridge; +	mVisibleBridgeEnd = mVisibleBridge.begin();  	for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++) @@ -4769,176 +4721,176 @@ void LLCullResult::clear()  			mRenderMap[i][j] = 0;  		}  		mRenderMapSize[i] = 0; -		mRenderMapEnd[i] = mRenderMap[i]; +		mRenderMapEnd[i] = mRenderMap[i].begin();  	}  } -LLCullResult::sg_iterator LLCullResult::beginVisibleGroups() +LLCullResult::sg_list_t::iterator LLCullResult::beginVisibleGroups()  { -	return mVisibleGroups; +	return mVisibleGroups.begin();  } -LLCullResult::sg_iterator LLCullResult::endVisibleGroups() +LLCullResult::sg_list_t::iterator LLCullResult::endVisibleGroups()  {  	return mVisibleGroupsEnd;  } -LLCullResult::sg_iterator LLCullResult::beginAlphaGroups() +LLCullResult::sg_list_t::iterator LLCullResult::beginAlphaGroups()  { -	return mAlphaGroups; +	return mAlphaGroups.begin();  } -LLCullResult::sg_iterator LLCullResult::endAlphaGroups() +LLCullResult::sg_list_t::iterator LLCullResult::endAlphaGroups()  {  	return mAlphaGroupsEnd;  } -LLCullResult::sg_iterator LLCullResult::beginOcclusionGroups() +LLCullResult::sg_list_t::iterator LLCullResult::beginOcclusionGroups()  { -	return mOcclusionGroups; +	return mOcclusionGroups.begin();  } -LLCullResult::sg_iterator LLCullResult::endOcclusionGroups() +LLCullResult::sg_list_t::iterator LLCullResult::endOcclusionGroups()  {  	return mOcclusionGroupsEnd;  } -LLCullResult::sg_iterator LLCullResult::beginDrawableGroups() +LLCullResult::sg_list_t::iterator LLCullResult::beginDrawableGroups()  { -	return mDrawableGroups; +	return mDrawableGroups.begin();  } -LLCullResult::sg_iterator LLCullResult::endDrawableGroups() +LLCullResult::sg_list_t::iterator LLCullResult::endDrawableGroups()  {  	return mDrawableGroupsEnd;  } -LLCullResult::drawable_iterator LLCullResult::beginVisibleList() +LLCullResult::drawable_list_t::iterator LLCullResult::beginVisibleList()  { -	return mVisibleList; +	return mVisibleList.begin();  } -LLCullResult::drawable_iterator LLCullResult::endVisibleList() +LLCullResult::drawable_list_t::iterator LLCullResult::endVisibleList()  {  	return mVisibleListEnd;  } -LLCullResult::bridge_iterator LLCullResult::beginVisibleBridge() +LLCullResult::bridge_list_t::iterator LLCullResult::beginVisibleBridge()  { -	return mVisibleBridge; +	return mVisibleBridge.begin();  } -LLCullResult::bridge_iterator LLCullResult::endVisibleBridge() +LLCullResult::bridge_list_t::iterator LLCullResult::endVisibleBridge()  {  	return mVisibleBridgeEnd;  } -LLCullResult::drawinfo_iterator LLCullResult::beginRenderMap(U32 type) +LLCullResult::drawinfo_list_t::iterator LLCullResult::beginRenderMap(U32 type)  { -	return mRenderMap[type]; +	return mRenderMap[type].begin();  } -LLCullResult::drawinfo_iterator LLCullResult::endRenderMap(U32 type) +LLCullResult::drawinfo_list_t::iterator LLCullResult::endRenderMap(U32 type)  {  	return mRenderMapEnd[type];  }  void LLCullResult::pushVisibleGroup(LLSpatialGroup* group)  { -	if (mVisibleGroupsSize < mVisibleGroupsAllocated) +	if (mVisibleGroupsSize < mVisibleGroups.size())  	{  		mVisibleGroups[mVisibleGroupsSize] = group;  	}  	else  	{ -		pushBack((void**&) mVisibleGroups, mVisibleGroupsAllocated, (void*) group); +		mVisibleGroups.push_back(group);  	}  	++mVisibleGroupsSize; -	mVisibleGroupsEnd = mVisibleGroups+mVisibleGroupsSize; +	mVisibleGroupsEnd = mVisibleGroups.begin()+mVisibleGroupsSize;  }  void LLCullResult::pushAlphaGroup(LLSpatialGroup* group)  { -	if (mAlphaGroupsSize < mAlphaGroupsAllocated) +	if (mAlphaGroupsSize < mAlphaGroups.size())  	{  		mAlphaGroups[mAlphaGroupsSize] = group;  	}  	else  	{ -		pushBack((void**&) mAlphaGroups, mAlphaGroupsAllocated, (void*) group); +		mAlphaGroups.push_back(group);  	}  	++mAlphaGroupsSize; -	mAlphaGroupsEnd = mAlphaGroups+mAlphaGroupsSize; +	mAlphaGroupsEnd = mAlphaGroups.begin()+mAlphaGroupsSize;  }  void LLCullResult::pushOcclusionGroup(LLSpatialGroup* group)  { -	if (mOcclusionGroupsSize < mOcclusionGroupsAllocated) +	if (mOcclusionGroupsSize < mOcclusionGroups.size())  	{  		mOcclusionGroups[mOcclusionGroupsSize] = group;  	}  	else  	{ -		pushBack((void**&) mOcclusionGroups, mOcclusionGroupsAllocated, (void*) group); +		mOcclusionGroups.push_back(group);  	}  	++mOcclusionGroupsSize; -	mOcclusionGroupsEnd = mOcclusionGroups+mOcclusionGroupsSize; +	mOcclusionGroupsEnd = mOcclusionGroups.begin()+mOcclusionGroupsSize;  }  void LLCullResult::pushDrawableGroup(LLSpatialGroup* group)  { -	if (mDrawableGroupsSize < mDrawableGroupsAllocated) +	if (mDrawableGroupsSize < mDrawableGroups.size())  	{  		mDrawableGroups[mDrawableGroupsSize] = group;  	}  	else  	{ -		pushBack((void**&) mDrawableGroups, mDrawableGroupsAllocated, (void*) group); +		mDrawableGroups.push_back(group);  	}  	++mDrawableGroupsSize; -	mDrawableGroupsEnd = mDrawableGroups+mDrawableGroupsSize; +	mDrawableGroupsEnd = mDrawableGroups.begin()+mDrawableGroupsSize;  }  void LLCullResult::pushDrawable(LLDrawable* drawable)  { -	if (mVisibleListSize < mVisibleListAllocated) +	if (mVisibleListSize < mVisibleList.size())  	{  		mVisibleList[mVisibleListSize] = drawable;  	}  	else  	{ -		pushBack((void**&) mVisibleList, mVisibleListAllocated, (void*) drawable); +		mVisibleList.push_back(drawable);  	}  	++mVisibleListSize; -	mVisibleListEnd = mVisibleList+mVisibleListSize; +	mVisibleListEnd = mVisibleList.begin()+mVisibleListSize;  }  void LLCullResult::pushBridge(LLSpatialBridge* bridge)  { -	if (mVisibleBridgeSize < mVisibleBridgeAllocated) +	if (mVisibleBridgeSize < mVisibleBridge.size())  	{  		mVisibleBridge[mVisibleBridgeSize] = bridge;  	}  	else  	{ -		pushBack((void**&) mVisibleBridge, mVisibleBridgeAllocated, (void*) bridge); +		mVisibleBridge.push_back(bridge);  	}  	++mVisibleBridgeSize; -	mVisibleBridgeEnd = mVisibleBridge+mVisibleBridgeSize; +	mVisibleBridgeEnd = mVisibleBridge.begin()+mVisibleBridgeSize;  }  void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info)  { -	if (mRenderMapSize[type] < mRenderMapAllocated[type]) +	if (mRenderMapSize[type] < mRenderMap[type].size())  	{  		mRenderMap[type][mRenderMapSize[type]] = draw_info;  	}  	else  	{ -		pushBack((void**&) mRenderMap[type], mRenderMapAllocated[type], (void*) draw_info); +		mRenderMap[type].push_back(draw_info);  	}  	++mRenderMapSize[type]; -	mRenderMapEnd[type] = mRenderMap[type] + mRenderMapSize[type]; +	mRenderMapEnd[type] = mRenderMap[type].begin() + mRenderMapSize[type];  } diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index f050df2b39..f0e4f15a83 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -68,16 +68,6 @@ protected:  	~LLDrawInfo();	  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLDrawInfo(const LLDrawInfo& rhs)  	{ @@ -116,7 +106,7 @@ public:  	F32 mPartSize;  	F32 mVSize;  	LLSpatialGroup* mGroup; -	LL_ALIGN_16(LLFace* mFace); //associated face +	LLFace* mFace; //associated face  	F32 mDistance;  	U32 mDrawMode; @@ -191,7 +181,7 @@ public:  	};  }; -LL_ALIGN_PREFIX(16) +LL_ALIGN_PREFIX(64)  class LLSpatialGroup : public LLOctreeListener<LLDrawable>  {  	friend class LLSpatialPartition; @@ -203,16 +193,6 @@ public:  		*this = rhs;  	} -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	const LLSpatialGroup& operator=(const LLSpatialGroup& rhs)  	{  		llerrs << "Illegal operation!" << llendl; @@ -345,13 +325,8 @@ public:  	void dirtyGeom() { setState(GEOM_DIRTY); }  	void dirtyMesh() { setState(MESH_DIRTY); } - -	//octree wrappers to make code more readable  	element_list& getData() { return mOctreeNode->getData(); } -	element_iter getDataBegin() { return mOctreeNode->getDataBegin(); } -	element_iter getDataEnd() { return mOctreeNode->getDataEnd(); }  	U32 getElementCount() const { return mOctreeNode->getElementCount(); } -	bool isEmpty() const { return mOctreeNode->isEmpty(); }  	void drawObjectBox(LLColor4 col); @@ -395,12 +370,12 @@ public:  		V4_COUNT = 10  	} eV4Index; -	LL_ALIGN_16(LLVector4a mBounds[2]); // bounding box (center, size) of this node and all its children (tight fit to objects) -	LL_ALIGN_16(LLVector4a mExtents[2]); // extents (min, max) of this node and all its children -	LL_ALIGN_16(LLVector4a mObjectExtents[2]); // extents (min, max) of objects in this node -	LL_ALIGN_16(LLVector4a mObjectBounds[2]); // bounding box (center, size) of objects in this node -	LL_ALIGN_16(LLVector4a mViewAngle); -	LL_ALIGN_16(LLVector4a mLastUpdateViewAngle); +	LLVector4a mBounds[2]; // bounding box (center, size) of this node and all its children (tight fit to objects) +	LLVector4a mExtents[2]; // extents (min, max) of this node and all its children +	LLVector4a mObjectExtents[2]; // extents (min, max) of objects in this node +	LLVector4a mObjectBounds[2]; // bounding box (center, size) of objects in this node +	LLVector4a mViewAngle; +	LLVector4a mLastUpdateViewAngle;  	F32 mObjectBoxSize; //cached mObjectBounds[1].getLength3() @@ -567,39 +542,34 @@ class LLCullResult  public:  	LLCullResult(); -	typedef LLSpatialGroup** sg_list_t; -	typedef LLDrawable** drawable_list_t; -	typedef LLSpatialBridge** bridge_list_t; -	typedef LLDrawInfo** drawinfo_list_t; - -	typedef LLSpatialGroup** sg_iterator; -	typedef LLSpatialBridge** bridge_iterator; -	typedef LLDrawInfo** drawinfo_iterator; -	typedef LLDrawable** drawable_iterator; +	typedef std::vector<LLSpatialGroup*> sg_list_t; +	typedef std::vector<LLDrawable*> drawable_list_t; +	typedef std::vector<LLSpatialBridge*> bridge_list_t; +	typedef std::vector<LLDrawInfo*> drawinfo_list_t;  	void clear(); -	sg_iterator beginVisibleGroups(); -	sg_iterator endVisibleGroups(); +	sg_list_t::iterator beginVisibleGroups(); +	sg_list_t::iterator endVisibleGroups(); -	sg_iterator beginAlphaGroups(); -	sg_iterator endAlphaGroups(); +	sg_list_t::iterator beginAlphaGroups(); +	sg_list_t::iterator endAlphaGroups();  	bool hasOcclusionGroups() { return mOcclusionGroupsSize > 0; } -	sg_iterator beginOcclusionGroups(); -	sg_iterator endOcclusionGroups(); +	sg_list_t::iterator beginOcclusionGroups(); +	sg_list_t::iterator endOcclusionGroups(); -	sg_iterator beginDrawableGroups(); -	sg_iterator endDrawableGroups(); +	sg_list_t::iterator beginDrawableGroups(); +	sg_list_t::iterator endDrawableGroups(); -	drawable_iterator beginVisibleList(); -	drawable_iterator endVisibleList(); +	drawable_list_t::iterator beginVisibleList(); +	drawable_list_t::iterator endVisibleList(); -	bridge_iterator beginVisibleBridge(); -	bridge_iterator endVisibleBridge(); +	bridge_list_t::iterator beginVisibleBridge(); +	bridge_list_t::iterator endVisibleBridge(); -	drawinfo_iterator beginRenderMap(U32 type); -	drawinfo_iterator endRenderMap(U32 type); +	drawinfo_list_t::iterator beginRenderMap(U32 type); +	drawinfo_list_t::iterator endRenderMap(U32 type);  	void pushVisibleGroup(LLSpatialGroup* group);  	void pushAlphaGroup(LLSpatialGroup* group); @@ -619,41 +589,28 @@ public:  	void assertDrawMapsEmpty();  private: - -	void pushBack(void** &head, U32& count, void* val); -  	U32					mVisibleGroupsSize;  	U32					mAlphaGroupsSize;  	U32					mOcclusionGroupsSize;  	U32					mDrawableGroupsSize;  	U32					mVisibleListSize;  	U32					mVisibleBridgeSize; - -	U32					mVisibleGroupsAllocated; -	U32					mAlphaGroupsAllocated; -	U32					mOcclusionGroupsAllocated; -	U32					mDrawableGroupsAllocated; -	U32					mVisibleListAllocated; -	U32					mVisibleBridgeAllocated; -  	U32					mRenderMapSize[LLRenderPass::NUM_RENDER_TYPES];  	sg_list_t			mVisibleGroups; -	sg_iterator			mVisibleGroupsEnd; +	sg_list_t::iterator mVisibleGroupsEnd;  	sg_list_t			mAlphaGroups; -	sg_iterator			mAlphaGroupsEnd; +	sg_list_t::iterator mAlphaGroupsEnd;  	sg_list_t			mOcclusionGroups; -	sg_iterator			mOcclusionGroupsEnd; +	sg_list_t::iterator	mOcclusionGroupsEnd;  	sg_list_t			mDrawableGroups; -	sg_iterator			mDrawableGroupsEnd; +	sg_list_t::iterator mDrawableGroupsEnd;  	drawable_list_t		mVisibleList; -	drawable_iterator	mVisibleListEnd; +	drawable_list_t::iterator mVisibleListEnd;  	bridge_list_t		mVisibleBridge; -	bridge_iterator		mVisibleBridgeEnd; +	bridge_list_t::iterator mVisibleBridgeEnd;  	drawinfo_list_t		mRenderMap[LLRenderPass::NUM_RENDER_TYPES]; -	U32					mRenderMapAllocated[LLRenderPass::NUM_RENDER_TYPES]; -	drawinfo_iterator mRenderMapEnd[LLRenderPass::NUM_RENDER_TYPES]; - +	drawinfo_list_t::iterator mRenderMapEnd[LLRenderPass::NUM_RENDER_TYPES];  }; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a28d8d3546..218c35029e 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2823,22 +2823,33 @@ bool LLStartUp::dispatchURL()  void LLStartUp::setStartSLURL(const LLSLURL& slurl)   { -  sStartSLURL = slurl; -  LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; +	LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; -  switch(slurl.getType()) -    { -    case LLSLURL::HOME_LOCATION: -    case LLSLURL::LAST_LOCATION: -    case LLSLURL::LOCATION: -		gSavedSettings.setString("LoginLocation", LLSLURL::SIM_LOCATION_HOME); +	if ( slurl.isSpatial() ) +	{ +		std::string new_start = slurl.getSLURLString(); +		LL_DEBUGS("AppInit")<<new_start<<LL_ENDL; +		sStartSLURL = slurl;  		LLPanelLogin::onUpdateStartSLURL(slurl); // updates grid if needed -		break; -    default: -		break; -    } + +		// remember that this is where we wanted to log in...if the login fails, +		// the next attempt will default to the same place. +		gSavedSettings.setString("NextLoginLocation", new_start); +		// following a successful login, this is cleared +		// and the default reverts to LoginLocation +	} +	else +	{ +		LL_WARNS("AppInit")<<"Invalid start SLURL (ignored): "<<slurl.asString()<<LL_ENDL; +	}  } +// static +LLSLURL& LLStartUp::getStartSLURL() +{ +	return sStartSLURL; +}  +  /**   * Read all proxy configuration settings and set up both the HTTP proxy and   * SOCKS proxy as needed. diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 3754aaf966..760e38890b 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -111,7 +111,7 @@ public:  	static void postStartupState();  	static void setStartSLURL(const LLSLURL& slurl);  -	static LLSLURL& getStartSLURL() { return sStartSLURL; }  +	static LLSLURL& getStartSLURL();  	static bool startLLProxy(); // Initialize the SOCKS 5 proxy diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index f64a72a616..65393cc168 100644 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -56,7 +56,6 @@  #include "lldrawable.h"  extern LLPipeline gPipeline; -extern bool gShiftFrame;  LLColor4U MAX_WATER_COLOR(0, 48, 96, 240); @@ -295,7 +294,7 @@ void LLSurface::initTextures()  		mWaterObjp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, mRegionp);  		gPipeline.createObject(mWaterObjp);  		LLVector3d water_pos_global = from_region_handle(mRegionp->getHandle()); -		water_pos_global += LLVector3d(128.0, 128.0, DEFAULT_WATER_HEIGHT);		// region doesn't have a valid water height yet +		water_pos_global += LLVector3d(128.0, 128.0, DEFAULT_WATER_HEIGHT);  		mWaterObjp->setPositionGlobal(water_pos_global);  	}  } @@ -622,11 +621,6 @@ void LLSurface::moveZ(const S32 x, const S32 y, const F32 delta)  void LLSurface::updatePatchVisibilities(LLAgent &agent)   { -	if (gShiftFrame) -	{ -		return; -	} -  	LLVector3 pos_region = mRegionp->getPosRegionFromGlobal(gAgentCamera.getCameraPositionGlobal());  	LLSurfacePatch *patchp; diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index a9ba2bce9c..5077c2c7e1 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -43,7 +43,6 @@  #include "lldrawpool.h"  #include "noise.h" -extern bool gShiftFrame;  extern U64 gFrameTime;  extern LLPipeline gPipeline; @@ -219,7 +218,7 @@ void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3  	pos_agent.mV[VX] += x * mSurfacep->getMetersPerGrid();  	pos_agent.mV[VY] += y * mSurfacep->getMetersPerGrid();  	pos_agent.mV[VZ]  = *(mDataZ + point_offset); -	*vertex     = pos_agent-mVObjp->getRegion()->getOriginAgent(); +	*vertex     = pos_agent;  	LLVector3 rel_pos = pos_agent - mSurfacep->getOriginAgent();  	LLVector3 tex_pos = rel_pos * (1.f/surface_stride); @@ -367,13 +366,10 @@ void LLSurfacePatch::updateCameraDistanceRegion(const LLVector3 &pos_region)  {  	if (LLPipeline::sDynamicLOD)  	{ -		if (!gShiftFrame) -		{ -			LLVector3 dv = pos_region; -			dv -= mCenterRegion; -			mVisInfo.mDistance = llmax(0.f, (F32)(dv.magVec() - mRadius))/ -				llmax(LLVOSurfacePatch::sLODFactor, 0.1f); -		} +		LLVector3 dv = pos_region; +		dv -= mCenterRegion; +		mVisInfo.mDistance = llmax(0.f, (F32)(dv.magVec() - mRadius))/ +			llmax(LLVOSurfacePatch::sLODFactor, 0.1f);  	}  	else  	{ diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h index 2c0da60b48..74c22b0cdf 100644 --- a/indra/newview/lltexlayerparams.h +++ b/indra/newview/lltexlayerparams.h @@ -76,11 +76,11 @@ public:  	// LLViewerVisualParam Virtual functions  	/*virtual*/ F32					getTotalDistortion()									{ return 1.f; } -	/*virtual*/ const LLVector4a&	getAvgDistortion()										{ return mAvgDistortionVec; } +	/*virtual*/ const LLVector3&	getAvgDistortion()										{ return mAvgDistortionVec; }  	/*virtual*/ F32					getMaxDistortion()										{ return 3.f; } -	/*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh)	{ return LLVector4a(1.f, 1.f, 1.f);} -	/*virtual*/ const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return &mAvgDistortionVec;}; -	/*virtual*/ const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return NULL;}; +	/*virtual*/ LLVector3			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh)	{ return LLVector3(1.f, 1.f, 1.f);} +	/*virtual*/ const LLVector3*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return &mAvgDistortionVec;}; +	/*virtual*/ const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return NULL;};  	// New functions  	BOOL					render( S32 x, S32 y, S32 width, S32 height ); @@ -94,7 +94,7 @@ private:  	LLPointer<LLImageRaw>	mStaticImageRaw;  	BOOL					mNeedsCreateTexture;  	BOOL					mStaticImageInvalid; -	LLVector4a				mAvgDistortionVec; +	LLVector3				mAvgDistortionVec;  	F32						mCachedEffectiveWeight;  public: @@ -155,18 +155,18 @@ public:  	// LLViewerVisualParam Virtual functions  	/*virtual*/ F32					getTotalDistortion()									{ return 1.f; } -	/*virtual*/ const LLVector4a&	getAvgDistortion()										{ return mAvgDistortionVec; } +	/*virtual*/ const LLVector3&	getAvgDistortion()										{ return mAvgDistortionVec; }  	/*virtual*/ F32					getMaxDistortion()										{ return 3.f; } -	/*virtual*/ LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh)	{ return LLVector4a(1.f, 1.f, 1.f); } -	/*virtual*/ const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return &mAvgDistortionVec;}; -	/*virtual*/ const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return NULL;}; +	/*virtual*/ LLVector3			getVertexDistortion(S32 index, LLPolyMesh *poly_mesh)	{ return LLVector3(1.f, 1.f, 1.f); } +	/*virtual*/ const LLVector3*	getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return &mAvgDistortionVec;}; +	/*virtual*/ const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh)	{ index = 0; poly_mesh = NULL; return NULL;};  	// New functions  	LLColor4				getNetColor() const;  protected:  	virtual void onGlobalColorChanged(bool upload_bake) {}  private: -	LLVector4a				mAvgDistortionVec; +	LLVector3				mAvgDistortionVec;  };  class LLTexLayerParamColorInfo : public LLViewerVisualParamInfo diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index b857c7fe89..184033de42 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -51,19 +51,9 @@ const BOOL NOT_FOR_SELECTION = FALSE;  extern template class LLViewerCamera* LLSingleton<class LLViewerCamera>::getInstance();  #endif -LL_ALIGN_PREFIX(16)  class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>  {  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	}  	typedef enum  	{ @@ -147,7 +137,6 @@ protected:  	S16					mZoomSubregion;  public: -} LL_ALIGN_POSTFIX(16); - +};  #endif // LL_LLVIEWERCAMERA_H diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index d58ee05fb6..9ef012ece1 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -79,7 +79,6 @@  #include "llpostprocess.h"  extern LLPointer<LLViewerTexture> gStartTexture; -extern bool gShiftFrame;  LLPointer<LLViewerTexture> gDisconnectedImagep = NULL; @@ -163,11 +162,8 @@ void display_startup()  	glClear(GL_DEPTH_BUFFER_BIT);  } -static LLFastTimer::DeclareTimer FTM_UPDATE_CAMERA("Update Camera"); -  void display_update_camera()  { -	LLFastTimer t(FTM_UPDATE_CAMERA);  	LLMemType mt_uc(LLMemType::MTYPE_DISPLAY_UPDATE_CAMERA);  	// TODO: cut draw distance down if customizing avatar?  	// TODO: cut draw distance on per-parcel basis? @@ -221,11 +217,6 @@ static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_CLASS("Class");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_BUMP("Bump");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_LIST("List");  static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_DELETE("Delete"); -static LLFastTimer::DeclareTimer FTM_RESIZE_WINDOW("Resize Window"); -static LLFastTimer::DeclareTimer FTM_HUD_UPDATE("HUD Update"); -static LLFastTimer::DeclareTimer FTM_DISPLAY_UPDATE_GEOM("Update Geom"); -static LLFastTimer::DeclareTimer FTM_TEXTURE_UNBIND("Texture Unbind"); -static LLFastTimer::DeclareTimer FTM_TELEPORT_DISPLAY("Teleport Display");  // Paint the display!  void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) @@ -235,7 +226,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  	if (gWindowResized)  	{ //skip render on frames where window has been resized -		LLFastTimer t(FTM_RESIZE_WINDOW);  		gGL.flush();  		glClear(GL_COLOR_BUFFER_BIT);  		gViewerWindow->getWindow()->swapBuffers(); @@ -372,7 +362,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  	if (gTeleportDisplay)  	{ -		LLFastTimer t(FTM_TELEPORT_DISPLAY);  		LLAppViewer::instance()->pingMainloopTimeout("Display:Teleport");  		const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived. @@ -602,7 +591,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  		// *TODO: merge these two methods  		{ -			LLFastTimer t(FTM_HUD_UPDATE);  			LLMemType mt_uh(LLMemType::MTYPE_DISPLAY_UPDATE_HUD);  			LLHUDManager::getInstance()->updateEffects();  			LLHUDObject::updateAll(); @@ -610,7 +598,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  		}  		{ -			LLFastTimer t(FTM_DISPLAY_UPDATE_GEOM);  			LLMemType mt_ug(LLMemType::MTYPE_DISPLAY_UPDATE_GEOM);  			const F32 max_geom_update_time = 0.005f*10.f*gFrameIntervalSeconds; // 50 ms/second update time  			gPipeline.createObjects(max_geom_update_time); @@ -620,7 +607,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  		}  		gPipeline.updateGL(); -		  		stop_glerror();  		S32 water_clip = 0; @@ -952,18 +938,14 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  			stop_glerror();  		} -		{ -			LLFastTimer t(FTM_TEXTURE_UNBIND); -			for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++) -			{ //dummy cleanup of any currently bound textures -				if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE) -				{ -					gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType()); -					gGL.getTexUnit(i)->disable(); -				} +		for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++) +		{ //dummy cleanup of any currently bound textures +			if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE) +			{ +				gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType()); +				gGL.getTexUnit(i)->disable();  			}  		} -  		LLAppViewer::instance()->pingMainloopTimeout("Display:RenderFlush");		  		if (to_texture) @@ -1029,8 +1011,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  	display_stats();  	LLAppViewer::instance()->pingMainloopTimeout("Display:Done"); - -	gShiftFrame = false;  }  void render_hud_attachments() diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 5d1aa870a3..f029ae5302 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -729,10 +729,8 @@ void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_w  				F32* vw = (F32*) vertex_weightsp.get();  				F32* cw = (F32*) clothing_weightsp.get();	 -				S32 tc_size = (num_verts*2*sizeof(F32)+0xF) & ~0xF; -				LLVector4a::memcpyNonAliased16(tc, (F32*) mMesh->getTexCoords(), tc_size); -				S32 vw_size = (num_verts*sizeof(F32)+0xF) & ~0xF;	 -				LLVector4a::memcpyNonAliased16(vw, (F32*) mMesh->getWeights(), vw_size);	 +				LLVector4a::memcpyNonAliased16(tc, (F32*) mMesh->getTexCoords(), num_verts*2*sizeof(F32)); +				LLVector4a::memcpyNonAliased16(vw, (F32*) mMesh->getWeights(), num_verts*sizeof(F32));	  				LLVector4a::memcpyNonAliased16(cw, (F32*) mMesh->getClothingWeights(), num_verts*4*sizeof(F32));	  			} diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 01a54509ef..d11e7e32c7 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5134,12 +5134,6 @@ class LLEditDelete : public view_listener_t  	}  }; -bool enable_object_return() -{ -	return (!LLSelectMgr::getInstance()->getSelection()->isEmpty() && -		(gAgent.isGodlike() || can_derez(DRD_RETURN_TO_OWNER))); -} -  void handle_spellcheck_replace_with_suggestion(const LLUICtrl* ctrl, const LLSD& param)  {  	const LLContextMenu* menu = dynamic_cast<const LLContextMenu*>(ctrl->getParent()); @@ -5212,6 +5206,12 @@ bool enable_spellcheck_add_to_ignore(const LLUICtrl* ctrl)  	return (spellcheck_handler) && (spellcheck_handler->canAddToIgnore());  } +bool enable_object_return() +{ +	return (!LLSelectMgr::getInstance()->getSelection()->isEmpty() && +		(gAgent.isGodlike() || can_derez(DRD_RETURN_TO_OWNER))); +} +  bool enable_object_delete()  {  	bool new_value =  diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 903f4437a7..7d7d1f3047 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -134,7 +134,6 @@ static const U32 LLREQUEST_PERMISSION_THROTTLE_LIMIT	= 5;     // requests  static const F32 LLREQUEST_PERMISSION_THROTTLE_INTERVAL	= 10.0f; // seconds  extern BOOL gDebugClicks; -extern bool gShiftFrame;  // function prototypes  bool check_offer_throttle(const std::string& from_name, bool check_only); @@ -3931,7 +3930,6 @@ void process_avatar_init_complete(LLMessageSystem* msg, void**)  void process_agent_movement_complete(LLMessageSystem* msg, void**)  { -	gShiftFrame = true;  	gAgentMovementCompleted = true;  	LLUUID agent_id; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 31e4fd1ed5..0a6c51b378 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -199,7 +199,6 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mID(id),  	mLocalID(0),  	mTotalCRC(0), -	mListIndex(-1),  	mTEImages(NULL),  	mGLName(0),  	mbCanSelect(TRUE), @@ -236,6 +235,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mNumFaces(0),  	mTimeDilation(1.f),  	mRotTime(0.f), +	mAngularVelocityRot(),  	mJointInfo(NULL),  	mState(0),  	mMedia(NULL), @@ -266,6 +266,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	{  		mPositionAgent = mRegionp->getOriginAgent();  	} +	resetRot();  	LLViewerObject::sNumObjects++;  } @@ -1432,9 +1433,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  #else  					val = (U16 *) &data[count];  #endif -					setAngularVelocity(	U16_to_F32(val[VX], -size, size), -										U16_to_F32(val[VY], -size, size), -										U16_to_F32(val[VZ], -size, size)); +					new_angv.set(U16_to_F32(val[VX], -size, size), +						U16_to_F32(val[VY], -size, size), +						U16_to_F32(val[VZ], -size, size)); +					setAngularVelocity(new_angv);  					break;  				case 16: @@ -1458,9 +1460,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  					new_rot.mQ[VZ] = U8_to_F32(data[11], -1.f, 1.f);  					new_rot.mQ[VW] = U8_to_F32(data[12], -1.f, 1.f); -					setAngularVelocity(	U8_to_F32(data[13], -size, size), -										U8_to_F32(data[14], -size, size), -										U8_to_F32(data[15], -size, size) ); +					new_angv.set(U8_to_F32(data[13], -size, size), +						U8_to_F32(data[14], -size, size), +						U8_to_F32(data[15], -size, size)); +					setAngularVelocity(new_angv);  					break;  				} @@ -1532,9 +1535,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				dp->unpackU16(val[VX], "AccX");  				dp->unpackU16(val[VY], "AccY");  				dp->unpackU16(val[VZ], "AccZ"); -				setAngularVelocity(	U16_to_F32(val[VX], -64.f, 64.f), -									U16_to_F32(val[VY], -64.f, 64.f), -									U16_to_F32(val[VZ], -64.f, 64.f)); +				new_angv.set(U16_to_F32(val[VX], -64.f, 64.f), +				             U16_to_F32(val[VY], -64.f, 64.f), +				             U16_to_F32(val[VZ], -64.f, 64.f)); +				setAngularVelocity(new_angv);  			}  			break;  			case OUT_FULL_COMPRESSED: @@ -1578,8 +1582,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				if (value & 0x80)  				{ -					dp->unpackVector3(vec, "Omega"); -					setAngularVelocity(vec); +					dp->unpackVector3(new_angv, "Omega"); +					setAngularVelocity(new_angv);  				}  				if (value & 0x20) @@ -2071,14 +2075,21 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	if (new_rot != getRotation()  		|| new_angv != old_angv)  	{ -		if (new_rot != getRotation()) +		if (new_angv != old_angv)  		{ -			setRotation(new_rot); +			if (flagUsePhysics() || new_angv.isExactlyZero()) +			{ +				resetRot(); +			} +			else +			{ +				resetRotTime(); +			}  		} -		 + +		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) +		setRotation(new_rot * mAngularVelocityRot);  		setChanged(ROTATED | SILHOUETTE); -		 -		resetRot();  	} @@ -2171,8 +2182,8 @@ BOOL LLViewerObject::isActive() const  BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  { -	//static LLFastTimer::DeclareTimer ftm("Viewer Object"); -	//LLFastTimer t(ftm); +	static LLFastTimer::DeclareTimer ftm("Viewer Object"); +	LLFastTimer t(ftm);  	if (mDead)  	{ @@ -4173,7 +4184,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos  	return retval;  } - +//virtual  void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image)   {  	if(index < 0 || index >= getNumTEs()) @@ -4792,11 +4803,9 @@ void LLViewerObject::deleteParticleSource()  // virtual  void LLViewerObject::updateDrawable(BOOL force_damped)  { -	if (!isChanged(MOVED)) -	{ //most common case, having an empty if case here makes for better branch prediction -	} -	else if (mDrawable.notNull() &&  -		!mDrawable->isState(LLDrawable::ON_MOVE_LIST)) +	if (mDrawable.notNull() &&  +		!mDrawable->isState(LLDrawable::ON_MOVE_LIST) && +		isChanged(MOVED))  	{  		BOOL damped_motion =   			!isChanged(SHIFTED) &&										// not shifted between regions this frame and... @@ -5533,18 +5542,31 @@ void LLViewerObject::applyAngularVelocity(F32 dt)  		ang_vel *= 1.f/omega; +		// calculate the delta increment based on the object's angular velocity  		dQ.setQuat(angle, ang_vel); + +		// accumulate the angular velocity rotations to re-apply in the case of an object update +		mAngularVelocityRot *= dQ; +		// Just apply the delta increment to the current rotation  		setRotation(getRotation()*dQ);  		setChanged(MOVED | SILHOUETTE);  	}  } -void LLViewerObject::resetRot() +void LLViewerObject::resetRotTime()  {  	mRotTime = 0.0f;  } +void LLViewerObject::resetRot() +{ +	resetRotTime(); + +	// Reset the accumulated angular velocity rotation +	mAngularVelocityRot.loadIdentity();  +} +  U32 LLViewerObject::getPartitionType() const  {   	return LLViewerRegion::PARTITION_NONE;  diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index f8f6327750..83e34dc6ca 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -212,6 +212,9 @@ public:  	virtual BOOL		updateLOD();  	virtual BOOL		setDrawableParent(LLDrawable* parentp);  	F32					getRotTime() { return mRotTime; } +private: +	void				resetRotTime(); +public:  	void				resetRot();  	void				applyAngularVelocity(F32 dt); @@ -224,13 +227,11 @@ public:  	LLViewerRegion* getRegion() const				{ return mRegionp; }  	BOOL isSelected() const							{ return mUserSelected; } -	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; mRotTime = 0.f;} +	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; resetRot();}  	const LLUUID &getID() const						{ return mID; }  	U32 getLocalID() const							{ return mLocalID; }  	U32 getCRC() const								{ return mTotalCRC; } -	S32 getListIndex() const						{ return mListIndex; } -	void setListIndex(S32 idx)						{ mListIndex = idx; }  	virtual BOOL isFlexible() const					{ return FALSE; }  	virtual BOOL isSculpted() const 				{ return FALSE; } @@ -333,7 +334,7 @@ public:  	/*virtual*/ S32     setTEGlow(const U8 te, const F32 glow);  	/*virtual*/	BOOL	setMaterial(const U8 material);  	virtual		void	setTEImage(const U8 te, LLViewerTexture *imagep); // Not derived from LLPrimitive -	void                changeTEImage(S32 index, LLViewerTexture* new_image)  ; +	virtual     void    changeTEImage(S32 index, LLViewerTexture* new_image)  ;  	LLViewerTexture		*getTEImage(const U8 te) const;  	void fitFaceTexture(const U8 face); @@ -605,9 +606,6 @@ public:  	// Last total CRC received from sim, used for caching  	U32				mTotalCRC; -	// index into LLViewerObjectList::mActiveObjects or -1 if not in list -	S32				mListIndex; -  	LLPointer<LLViewerTexture> *mTEImages;  	// Selection, picking and rendering variables @@ -735,6 +733,7 @@ protected:  	F32				mTimeDilation;				// Time dilation sent with the object.  	F32				mRotTime;					// Amount (in seconds) that object has rotated according to angular velocity (llSetTargetOmega) +	LLQuaternion	mAngularVelocityRot;		// accumulated rotation from the angular velocity computations  	LLVOJointInfo*  mJointInfo;  	U8				mState;	// legacy diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index ea20950b36..28298cedf9 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -914,30 +914,21 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)  	LLViewerObject *objectp = NULL;	  	// Make a copy of the list in case something in idleUpdate() messes with it -	static std::vector<LLViewerObject*> idle_list; - -	U32 idle_count = 0; -		 +	std::vector<LLViewerObject*> idle_list; +	  	static LLFastTimer::DeclareTimer idle_copy("Idle Copy");  	{  		LLFastTimer t(idle_copy); -		 - 		for (std::vector<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin(); +		idle_list.reserve( mActiveObjects.size() ); + + 		for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin();  			active_iter != mActiveObjects.end(); active_iter++)  		{  			objectp = *active_iter;  			if (objectp)  			{ -				if (idle_count >= idle_list.size()) -				{ -					idle_list.push_back( objectp ); -				} -				else -				{ -					idle_list[idle_count] = objectp; -				} -				++idle_count; +				idle_list.push_back( objectp );  			}  			else  			{	// There shouldn't be any NULL pointers in the list, but they have caused @@ -947,13 +938,10 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)  		}  	} -	std::vector<LLViewerObject*>::iterator idle_end = idle_list.begin()+idle_count; -  	if (gSavedSettings.getBOOL("FreezeTime"))  	{ -		  		for (std::vector<LLViewerObject*>::iterator iter = idle_list.begin(); -			iter != idle_end; iter++) +			iter != idle_list.end(); iter++)  		{  			objectp = *iter;  			if (objectp->isAvatar()) @@ -965,17 +953,17 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)  	else  	{  		for (std::vector<LLViewerObject*>::iterator idle_iter = idle_list.begin(); -			idle_iter != idle_end; idle_iter++) +			idle_iter != idle_list.end(); idle_iter++)  		{  			objectp = *idle_iter; -			if (objectp->idleUpdate(agent, world, frame_time)) +			if (!objectp->idleUpdate(agent, world, frame_time))  			{ -				num_active_objects++;				 +				//  If Idle Update returns false, kill object! +				kill_list.push_back(objectp);  			}  			else  			{ -				//  If Idle Update returns false, kill object! -				kill_list.push_back(objectp); +				num_active_objects++;  			}  		}  		for (std::vector<LLViewerObject*>::iterator kill_iter = kill_list.begin(); @@ -1213,7 +1201,7 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)  	{  		//llinfos << "Removing " << objectp->mID << " " << objectp->getPCodeString() << " from active list in cleanupReferences." << llendl;  		objectp->setOnActiveList(FALSE); -		removeFromActiveList(objectp); +		mActiveObjects.erase(objectp);  	}  	if (objectp->isOnMap()) @@ -1390,26 +1378,6 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)  	mNumDeadObjects = 0;  } -void LLViewerObjectList::removeFromActiveList(LLViewerObject* objectp) -{ -	S32 idx = objectp->getListIndex(); -	if (idx != -1) -	{ //remove by moving last element to this object's position -		llassert(mActiveObjects[idx] == objectp); -		 -		objectp->setListIndex(-1); - -		S32 last_index = mActiveObjects.size()-1; - -		if (idx != last_index) -		{ -			mActiveObjects[idx] = mActiveObjects[last_index]; -			mActiveObjects[idx]->setListIndex(idx); -			mActiveObjects.pop_back(); -		} -	} -} -  void LLViewerObjectList::updateActive(LLViewerObject *objectp)  {  	LLMemType mt(LLMemType::MTYPE_OBJECT); @@ -1424,29 +1392,13 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)  		if (active)  		{  			//llinfos << "Adding " << objectp->mID << " " << objectp->getPCodeString() << " to active list." << llendl; -			S32 idx = objectp->getListIndex(); -			if (idx <= -1) -			{ -				mActiveObjects.push_back(objectp); -				objectp->setListIndex(mActiveObjects.size()-1); -				objectp->setOnActiveList(TRUE); -			} -			else -			{ -				llassert(idx < mActiveObjects.size()); -				llassert(mActiveObjects[idx] == objectp); - -				if (idx >= mActiveObjects.size() || -					mActiveObjects[idx] != objectp) -				{ -					llwarns << "Invalid object list index detected!" << llendl; -				} -			} +			mActiveObjects.insert(objectp); +			objectp->setOnActiveList(TRUE);  		}  		else  		{  			//llinfos << "Removing " << objectp->mID << " " << objectp->getPCodeString() << " from active list." << llendl; -			removeFromActiveList(objectp); +			mActiveObjects.erase(objectp);  			objectp->setOnActiveList(FALSE);  		}  	} @@ -1520,10 +1472,6 @@ void LLViewerObjectList::onPhysicsFlagsFetchFailure(const LLUUID& object_id)  	mPendingPhysicsFlags.erase(object_id);  } -static LLFastTimer::DeclareTimer FTM_SHIFT_OBJECTS("Shift Objects"); -static LLFastTimer::DeclareTimer FTM_PIPELINE_SHIFT("Pipeline Shift"); -static LLFastTimer::DeclareTimer FTM_REGION_SHIFT("Region Shift"); -  void LLViewerObjectList::shiftObjects(const LLVector3 &offset)  {  	// This is called when we shift our origin when we cross region boundaries... @@ -1535,8 +1483,6 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)  		return;  	} -	LLFastTimer t(FTM_SHIFT_OBJECTS); -  	LLViewerObject *objectp;  	for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)  	{ @@ -1553,15 +1499,8 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)  		}  	} -	{ -		LLFastTimer t(FTM_PIPELINE_SHIFT); -		gPipeline.shiftObjects(offset); -	} - -	{ -		LLFastTimer t(FTM_REGION_SHIFT); -		LLWorld::getInstance()->shiftRegions(offset); -	} +	gPipeline.shiftObjects(offset); +	LLWorld::getInstance()->shiftRegions(offset);  }  void LLViewerObjectList::repartitionObjects() diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 9936432a71..64925f46ae 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -118,9 +118,7 @@ public:  	void dirtyAllObjectInventory(); -	void removeFromActiveList(LLViewerObject* objectp);  	void updateActive(LLViewerObject *objectp); -	  	void updateAvatarVisibility();  	// Selection related stuff @@ -199,7 +197,7 @@ protected:  	typedef std::vector<LLPointer<LLViewerObject> > vobj_list_t;  	vobj_list_t mObjects; -	std::vector<LLPointer<LLViewerObject> > mActiveObjects; +	std::set<LLPointer<LLViewerObject> > mActiveObjects;  	vobj_list_t mMapObjects; diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index ae9c31bfe7..2bb2e92279 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -545,9 +545,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1,  	mRequestResult = PARCEL_RESULT_NO_DATA; -	// clear the list of segments to prevent flashing -	resetSegments(mHighlightSegments); -  	mFloatingParcelSelection->setParcel(mCurrentParcel);  	mCurrentParcelSelection->setParcel(NULL);  	mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 05c7ef5381..493195aaa3 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1487,8 +1487,7 @@ void LLViewerRegion::unpackRegionHandshake()  		// all of our terrain stuff, by  		if (compp->getParamsReady())  		{ -			//this line creates frame stalls on region crossing and removing it appears to have no effect -			//getLand().dirtyAllPatches(); +			getLand().dirtyAllPatches();  		}  		else  		{ diff --git a/indra/newview/llviewervisualparam.h b/indra/newview/llviewervisualparam.h index 3bc95cbfbf..dd7751acd7 100644 --- a/indra/newview/llviewervisualparam.h +++ b/indra/newview/llviewervisualparam.h @@ -83,11 +83,11 @@ public:  	// New Virtual functions  	virtual F32					getTotalDistortion() = 0; -	virtual const LLVector4a&	getAvgDistortion() = 0; +	virtual const LLVector3&	getAvgDistortion() = 0;  	virtual F32					getMaxDistortion() = 0; -	virtual LLVector4a			getVertexDistortion(S32 index, LLPolyMesh *mesh) = 0; -	virtual const LLVector4a*	getFirstDistortion(U32 *index, LLPolyMesh **mesh) = 0; -	virtual const LLVector4a*	getNextDistortion(U32 *index, LLPolyMesh **mesh) = 0; +	virtual LLVector3			getVertexDistortion(S32 index, LLPolyMesh *mesh) = 0; +	virtual const LLVector3*	getFirstDistortion(U32 *index, LLPolyMesh **mesh) = 0; +	virtual const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **mesh) = 0;  	// interface methods  	F32					getDisplayOrder() const		{ return getInfo()->mEditGroupDisplayOrder; } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index af2eec9ba8..30bb787fa7 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4768,11 +4768,8 @@ void LLViewerWindow::requestResolutionUpdate()  	mResDirty = true;  } -static LLFastTimer::DeclareTimer FTM_WINDOW_CHECK_SETTINGS("Window Settings"); -  void LLViewerWindow::checkSettings()  { -	LLFastTimer t(FTM_WINDOW_CHECK_SETTINGS);  	if (mStatesDirty)  	{  		gGL.refreshState(); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 05febdf93b..33dc12c473 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -817,7 +817,6 @@ LLVOAvatar::~LLVOAvatar()  	lldebugs << "LLVOAvatar Destructor (0x" << this << ") id:" << mID << llendl;  	mRoot.removeAllChildren(); -	mJointMap.clear();  	deleteAndClearArray(mSkeleton);  	deleteAndClearArray(mCollisionVolumes); @@ -1460,6 +1459,8 @@ void LLVOAvatar::onShift(const LLVector4a& shift_vector)  	const LLVector3& shift = reinterpret_cast<const LLVector3&>(shift_vector);  	mLastAnimExtents[0] += shift;  	mLastAnimExtents[1] += shift; +	mNeedsImpostorUpdate = TRUE; +	mNeedsAnimUpdate = TRUE;  }  void LLVOAvatar::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax) @@ -1933,7 +1934,6 @@ void LLVOAvatar::buildCharacter()  	// remove all of mRoot's children  	//-------------------------------------------------------------------------  	mRoot.removeAllChildren(); -	mJointMap.clear();  	mIsBuilt = FALSE;  	//------------------------------------------------------------------------- @@ -2390,7 +2390,7 @@ S32 LLVOAvatar::setTETexture(const U8 te, const LLUUID& uuid)  	}  } -static LLFastTimer::DeclareTimer FTM_AVATAR_UPDATE("Avatar Update"); +static LLFastTimer::DeclareTimer FTM_AVATAR_UPDATE("Update Avatar");  static LLFastTimer::DeclareTimer FTM_JOINT_UPDATE("Update Joints");  //------------------------------------------------------------------------ @@ -2692,7 +2692,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)  	if (isImpostor() && !mNeedsImpostorUpdate)  	{ -		LL_ALIGN_16(LLVector4a ext[2]); +		LLVector4a ext[2];  		F32 distance;  		LLVector3 angle; @@ -5137,20 +5137,7 @@ const LLUUID& LLVOAvatar::getID() const  // RN: avatar joints are multi-rooted to include screen-based attachments  LLJoint *LLVOAvatar::getJoint( const std::string &name )  { -	joint_map_t::iterator iter = mJointMap.find(name); - -	LLJoint* jointp = NULL; - -	if (iter == mJointMap.end() || iter->second == NULL) -	{ //search for joint and cache found joint in lookup table -		jointp = mRoot.findJoint(name); -		mJointMap[name] = jointp; -	} -	else -	{ //return cached pointer -		jointp = iter->second; -	} - +	LLJoint* jointp = mRoot.findJoint(name);  	return jointp;  } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index f5692bb52f..6fb56a4c0b 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -93,16 +93,6 @@ protected:   **/  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLVOAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);  	virtual void		markDead();  	static void			initClass(); // Initialize data that's only init'd once per class. @@ -225,7 +215,7 @@ public:  	bool isBuilt() const { return mIsBuilt; }  private: //aligned members -	LL_ALIGN_16(LLVector4a	mImpostorExtents[2]); +	LLVector4a	mImpostorExtents[2];  private:  	BOOL			mSupportsAlphaLayers; // For backwards compatibility, TRUE for 1.23+ clients @@ -366,10 +356,6 @@ public:  	LLVector3			mHeadOffset; // current head position  	LLViewerJoint		mRoot; - -	typedef std::map<std::string, LLJoint*> joint_map_t; -	joint_map_t			mJointMap; -  protected:  	static BOOL			parseSkeletonFile(const std::string& filename);  	void				buildCharacter(); diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 2b273e616c..543891ca63 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -49,16 +49,6 @@ class LLVOAvatarSelf :   **/  public: -	void* operator new(size_t size) -	{ -		return ll_aligned_malloc_16(size); -	} - -	void operator delete(void* ptr) -	{ -		ll_aligned_free_16(ptr); -	} -  	LLVOAvatarSelf(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);  	virtual 				~LLVOAvatarSelf();  	virtual void			markDead(); diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index 5ad9ccc9af..44968342bf 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -622,7 +622,7 @@ void LLGrassPartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_count  	mFaceList.clear();  	LLViewerCamera* camera = LLViewerCamera::getInstance(); -	for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +	for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  	{  		LLDrawable* drawablep = *i; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 9cce68fff6..e21358b65a 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -52,7 +52,8 @@ LLPointer<LLVertexBuffer> LLVOPartGroup::sVB = NULL;  S32 LLVOPartGroup::sVBSlotFree[];  S32* LLVOPartGroup::sVBSlotCursor = NULL; -void LLVOPartGroup::initClass() +//static +void LLVOPartGroup::restoreGL()  {  	for (S32 i = 0; i < LL_MAX_PARTICLE_COUNT; ++i)  	{ @@ -60,11 +61,7 @@ void LLVOPartGroup::initClass()  	}  	sVBSlotCursor = sVBSlotFree; -} -//static -void LLVOPartGroup::restoreGL() -{  	sVB = new LLVertexBuffer(VERTEX_DATA_MASK, GL_STREAM_DRAW_ARB);  	U32 count = LL_MAX_PARTICLE_COUNT;  	sVB->allocateBuffer(count*4, count*6, true); @@ -557,7 +554,7 @@ void LLParticlePartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_co  	mFaceList.clear();  	LLViewerCamera* camera = LLViewerCamera::getInstance(); -	for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +	for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  	{  		LLDrawable* drawablep = *i; @@ -629,7 +626,7 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)  		LLFace* facep = *i;  		LLAlphaObject* object = (LLAlphaObject*) facep->getViewerObject(); -		if (!facep->isState(LLFace::PARTICLE)) +		if (facep->getIndicesStart() == 0xFFFFFFFF)  		{ //set the indices of this face  			S32 idx = LLVOPartGroup::findAvailableVBSlot();  			if (idx >= 0) @@ -638,7 +635,6 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)  				facep->setIndicesIndex(idx*6);  				facep->setVertexBuffer(LLVOPartGroup::sVB);  				facep->setPoolType(LLDrawPool::POOL_ALPHA); -				facep->setState(LLFace::PARTICLE);  			}  			else  			{ diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h index 43b2844f07..6160bceb24 100644 --- a/indra/newview/llvopartgroup.h +++ b/indra/newview/llvopartgroup.h @@ -45,7 +45,6 @@ public:  	static S32 sVBSlotFree[LL_MAX_PARTICLE_COUNT];  	static S32* sVBSlotCursor; -	static void initClass();  	static void restoreGL();  	static void destroyGL();  	static S32 findAvailableVBSlot(); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 337ddfb24d..3556bde9a8 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -374,7 +374,7 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  		// *TODO: I don't know what's so special about trees  		// that they don't get REBUILD_POSITION automatically  		// at a higher level. -		const LLVector3 &this_position = getPositionRegion(); +		const LLVector3 &this_position = getPositionAgent();  		if (this_position != mLastPosition)  		{  			gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_POSITION); @@ -843,10 +843,10 @@ void LLVOTree::updateMesh()  	LLMatrix4 matrix;  	// Translate to tree base  HACK - adjustment in Z plants tree underground -	const LLVector3 &pos_region = getPositionRegion(); +	const LLVector3 &pos_agent = getPositionAgent();  	//gGL.translatef(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ] - 0.1f);  	LLMatrix4 trans_mat; -	trans_mat.setTranslation(pos_region.mV[VX], pos_region.mV[VY], pos_region.mV[VZ] - 0.1f); +	trans_mat.setTranslation(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ] - 0.1f);  	trans_mat *= matrix;  	// Rotate to tree position and bend for current trunk/wind diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index a656179c8f..0abe73d55e 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -639,8 +639,8 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  {  	LLViewerObject::idleUpdate(agent, world, time); -	//static LLFastTimer::DeclareTimer ftm("Volume Idle"); -	//LLFastTimer t(ftm); +	static LLFastTimer::DeclareTimer ftm("Volume Idle"); +	LLFastTimer t(ftm);  	if (mDead || mDrawable.isNull())  	{ @@ -1842,6 +1842,18 @@ void LLVOVolume::setNumTEs(const U8 num_tes)  	return ;  } +//virtual      +void LLVOVolume::changeTEImage(S32 index, LLViewerTexture* imagep) +{ +	BOOL changed = (mTEImages[index] != imagep); +	LLViewerObject::changeTEImage(index, imagep); +	if (changed) +	{ +		gPipeline.markTextured(mDrawable); +		mFaceMappingChanged = TRUE; +	} +} +  void LLVOVolume::setTEImage(const U8 te, LLViewerTexture *imagep)  {  	BOOL changed = (mTEImages[te] != imagep); @@ -4239,7 +4251,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  		LLFastTimer t(FTM_REBUILD_VOLUME_FACE_LIST);  		//get all the faces into a list -		for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) +		for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)  		{  			LLDrawable* drawablep = *drawable_iter; @@ -4645,7 +4657,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  	if (!LLPipeline::sDelayVBUpdate)  	{  		//drawables have been rebuilt, clear rebuild status -		for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) +		for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)  		{  			LLDrawable* drawablep = *drawable_iter;  			drawablep->clearState(LLDrawable::REBUILD_ALL); @@ -4685,7 +4697,7 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  		std::set<LLVertexBuffer*> mapped_buffers; -		for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) +		for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)  		{  			LLDrawable* drawablep = *drawable_iter; @@ -4709,14 +4721,8 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  						if (buff)  						{  							llassert(!face->isState(LLFace::RIGGED)); - -							if (!face->getGeometryVolume(*volume, face->getTEOffset(),  -								vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex())) -							{ //something's gone wrong with the vertex buffer accounting, rebuild this group  -								group->dirtyGeom(); -								gPipeline.markRebuild(group, TRUE); -							} - +							face->getGeometryVolume(*volume, face->getTEOffset(),  +								vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex());  							if (buff->isLocked())  							{ @@ -4753,7 +4759,7 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  		if(num_mapped_veretx_buffer != LLVertexBuffer::sMappedCount)   		{  			llwarns << "Not all mapped vertex buffers are unmapped!" << llendl ;  -			for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) +			for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)  			{  				LLDrawable* drawablep = *drawable_iter;  				for (S32 i = 0; i < drawablep->getNumFaces(); ++i) @@ -5050,11 +5056,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  					llassert(!facep->isState(LLFace::RIGGED)); -					if (!facep->getGeometryVolume(*volume, te_idx,  -						vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset,true)) -					{ -						llwarns << "Failed to get geometry for face!" << llendl; -					} +					facep->getGeometryVolume(*volume, te_idx,  +						vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset,true);  					if (drawablep->isState(LLDrawable::ANIMATED_CHILD))  					{ @@ -5224,7 +5227,7 @@ void LLGeometryManager::addGeometryCount(LLSpatialGroup* group, U32 &vertex_coun  	//for each drawable -	for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) +	for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)  	{  		LLDrawable* drawablep = *drawable_iter; diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 8cb69930be..25fe085421 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -68,7 +68,7 @@ class LLVolumeInterface  public:  	virtual ~LLVolumeInterface() { }  	virtual LLVolumeInterfaceType getInterfaceType() const = 0; -	virtual void doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) = 0; +	virtual BOOL doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) = 0;  	virtual BOOL doUpdateGeometry(LLDrawable *drawable) = 0;  	virtual LLVector3 getPivotPosition() const = 0;  	virtual void onSetVolume(const LLVolumeParams &volume_params, const S32 detail) = 0; @@ -174,6 +174,7 @@ public:  	/*virtual*/ void	setScale(const LLVector3 &scale, BOOL damped); +	/*virtual*/ void    changeTEImage(S32 index, LLViewerTexture* new_image)  ;  	/*virtual*/ void	setNumTEs(const U8 num_tes);  	/*virtual*/ void	setTEImage(const U8 te, LLViewerTexture *imagep);  	/*virtual*/ S32		setTETexture(const U8 te, const LLUUID &uuid); diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 78ee3e4fd9..b061c90d98 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -657,10 +657,7 @@ void LLWorld::updateRegions(F32 max_update_time)  		if (did_one && max_time <= 0.f)  			break;  		max_time = llmin(max_time, max_update_time*.1f); -		if (regionp->idleUpdate(max_update_time)) -		{ -			did_one = TRUE; -		} +		did_one |= regionp->idleUpdate(max_update_time);  	}  } @@ -840,9 +837,6 @@ void LLWorld::updateWaterObjects()  	}  	mHoleWaterObjects.clear(); -	// Use the water height of the region we're on for areas where there is no region -	F32 water_height = gAgent.getRegion()->getWaterHeight(); -  	// Now, get a list of the holes  	S32 x, y;  	for (x = min_x; x <= max_x; x += rwidth) @@ -851,12 +845,12 @@ void LLWorld::updateWaterObjects()  		{  			U64 region_handle = to_region_handle(x, y);  			if (!getRegionFromHandle(region_handle)) -			{	// No region at that area, so make water +			{  				LLVOWater* waterp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, gAgent.getRegion());  				waterp->setUseTexture(FALSE);  				waterp->setPositionGlobal(LLVector3d(x + rwidth/2,  													 y + rwidth/2, -													 256.f + water_height)); +													 256.f+DEFAULT_WATER_HEIGHT));  				waterp->setScale(LLVector3((F32)rwidth, (F32)rwidth, 512.f));  				gPipeline.createObject(waterp);  				mHoleWaterObjects.push_back(waterp); @@ -913,7 +907,7 @@ void LLWorld::updateWaterObjects()  		}  		waterp->setRegion(gAgent.getRegion()); -		LLVector3d water_pos(water_center_x, water_center_y, 256.f + water_height) ; +		LLVector3d water_pos(water_center_x, water_center_y, 256.f+DEFAULT_WATER_HEIGHT) ;  		LLVector3 water_scale((F32) dim[0], (F32) dim[1], 512.f);  		//stretch out to horizon diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 7140515e46..f01626c0fc 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -120,8 +120,6 @@  //#define DEBUG_INDICES  #endif -bool gShiftFrame = false; -  //cached settings  BOOL LLPipeline::RenderAvatarVP;  BOOL LLPipeline::VertexShaderEnable; @@ -219,7 +217,7 @@ BOOL	gDebugPipeline = FALSE;  LLPipeline gPipeline;  const LLMatrix4* gGLLastMatrix = NULL; -LLFastTimer::DeclareTimer FTM_RENDER_GEOMETRY("Render Geometry"); +LLFastTimer::DeclareTimer FTM_RENDER_GEOMETRY("Geometry");  LLFastTimer::DeclareTimer FTM_RENDER_GRASS("Grass");  LLFastTimer::DeclareTimer FTM_RENDER_INVISIBLE("Invisible");  LLFastTimer::DeclareTimer FTM_RENDER_OCCLUSION("Occlusion"); @@ -236,13 +234,8 @@ LLFastTimer::DeclareTimer FTM_RENDER_BUMP("Bump");  LLFastTimer::DeclareTimer FTM_RENDER_FULLBRIGHT("Fullbright");  LLFastTimer::DeclareTimer FTM_RENDER_GLOW("Glow");  LLFastTimer::DeclareTimer FTM_GEO_UPDATE("Geo Update"); -LLFastTimer::DeclareTimer FTM_PIPELINE_CREATE("Pipeline Create");  LLFastTimer::DeclareTimer FTM_POOLRENDER("RenderPool");  LLFastTimer::DeclareTimer FTM_POOLS("Pools"); -LLFastTimer::DeclareTimer FTM_DEFERRED_POOLRENDER("RenderPool (Deferred)"); -LLFastTimer::DeclareTimer FTM_DEFERRED_POOLS("Pools (Deferred)"); -LLFastTimer::DeclareTimer FTM_POST_DEFERRED_POOLRENDER("RenderPool (Post)"); -LLFastTimer::DeclareTimer FTM_POST_DEFERRED_POOLS("Pools (Post)");  LLFastTimer::DeclareTimer FTM_RENDER_BLOOM_FBO("First FBO");  LLFastTimer::DeclareTimer FTM_STATESORT("Sort Draw State");  LLFastTimer::DeclareTimer FTM_PIPELINE("Pipeline"); @@ -1378,7 +1371,7 @@ public:  	{  		LLSpatialGroup* group = (LLSpatialGroup*) node->getListener(0); -		if (!group->isState(LLSpatialGroup::GEOM_DIRTY) && !group->isEmpty()) +		if (!group->isState(LLSpatialGroup::GEOM_DIRTY) && !group->getData().empty())  		{  			for (LLSpatialGroup::draw_map_t::iterator i = group->mDrawMap.begin(); i != group->mDrawMap.end(); ++i)  			{ @@ -1687,7 +1680,7 @@ U32 LLPipeline::addObject(LLViewerObject *vobj)  void LLPipeline::createObjects(F32 max_dtime)  { -	LLFastTimer ftm(FTM_PIPELINE_CREATE); +	LLFastTimer ftm(FTM_GEO_UPDATE);  	LLMemType mt(LLMemType::MTYPE_PIPELINE_CREATE_OBJECTS);  	LLTimer update_timer; @@ -1983,7 +1976,7 @@ void LLPipeline::clearReferences()  void check_references(LLSpatialGroup* group, LLDrawable* drawable)  { -	for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +	for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  	{  		if (drawable == *i)  		{ @@ -2005,7 +1998,7 @@ void check_references(LLDrawable* drawable, LLFace* face)  void check_references(LLSpatialGroup* group, LLFace* face)  { -	for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +	for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  	{  		LLDrawable* drawable = *i;  		check_references(drawable, face); @@ -2017,25 +2010,25 @@ void LLPipeline::checkReferences(LLFace* face)  #if 0  	if (sCull)  	{ -		for (LLCullResult::sg_iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, face);  		} -		for (LLCullResult::sg_iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, face);  		} -		for (LLCullResult::sg_iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, face);  		} -		for (LLCullResult::drawable_iterator iter = sCull->beginVisibleList(); iter != sCull->endVisibleList(); ++iter) +		for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList(); iter != sCull->endVisibleList(); ++iter)  		{  			LLDrawable* drawable = *iter;  			check_references(drawable, face);	 @@ -2049,25 +2042,25 @@ void LLPipeline::checkReferences(LLDrawable* drawable)  #if 0  	if (sCull)  	{ -		for (LLCullResult::sg_iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, drawable);  		} -		for (LLCullResult::sg_iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, drawable);  		} -		for (LLCullResult::sg_iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, drawable);  		} -		for (LLCullResult::drawable_iterator iter = sCull->beginVisibleList(); iter != sCull->endVisibleList(); ++iter) +		for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList(); iter != sCull->endVisibleList(); ++iter)  		{  			if (drawable == *iter)  			{ @@ -2100,19 +2093,19 @@ void LLPipeline::checkReferences(LLDrawInfo* draw_info)  #if 0  	if (sCull)  	{ -		for (LLCullResult::sg_iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, draw_info);  		} -		for (LLCullResult::sg_iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, draw_info);  		} -		for (LLCullResult::sg_iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			check_references(group, draw_info); @@ -2126,7 +2119,7 @@ void LLPipeline::checkReferences(LLSpatialGroup* group)  #if 0  	if (sCull)  	{ -		for (LLCullResult::sg_iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)  		{  			if (group == *iter)  			{ @@ -2134,7 +2127,7 @@ void LLPipeline::checkReferences(LLSpatialGroup* group)  			}  		} -		for (LLCullResult::sg_iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter)  		{  			if (group == *iter)  			{ @@ -2142,7 +2135,7 @@ void LLPipeline::checkReferences(LLSpatialGroup* group)  			}  		} -		for (LLCullResult::sg_iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter)  		{  			if (group == *iter)  			{ @@ -2298,7 +2291,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  		bound_shader = true;  		gOcclusionCubeProgram.bind();  	} - +	  	if (sUseOcclusion > 1)  	{  		if (mCubeVB.isNull()) @@ -2381,7 +2374,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera)  { -	if (group->isEmpty()) +	if (group->getData().empty())  	{   		return;  	} @@ -2476,7 +2469,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)  			{  				gOcclusionCubeProgram.bind();  			} -			} +		}  		if (mCubeVB.isNull())  		{ //cube VB will be used for issuing occlusion queries @@ -2484,7 +2477,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)  		}  		mCubeVB->setBuffer(LLVertexBuffer::MAP_VERTEX); -		for (LLCullResult::sg_iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter) +		for (LLCullResult::sg_list_t::iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter)  		{  			LLSpatialGroup* group = *iter;  			group->doOcclusion(&camera); @@ -2520,24 +2513,14 @@ BOOL LLPipeline::updateDrawableGeom(LLDrawable* drawablep, BOOL priority)  static LLFastTimer::DeclareTimer FTM_SEED_VBO_POOLS("Seed VBO Pool"); -static LLFastTimer::DeclareTimer FTM_UPDATE_GL("Update GL"); -  void LLPipeline::updateGL()  { +	while (!LLGLUpdate::sGLQ.empty())  	{ -		LLFastTimer t(FTM_UPDATE_GL); -		while (!LLGLUpdate::sGLQ.empty()) -		{ -			LLGLUpdate* glu = LLGLUpdate::sGLQ.front(); -			glu->updateGL(); -			glu->mInQ = FALSE; -			LLGLUpdate::sGLQ.pop_front(); -		} - -	{ //seed VBO Pools -		LLFastTimer t(FTM_SEED_VBO_POOLS); -		LLVertexBuffer::seedPools(); -	} +		LLGLUpdate* glu = LLGLUpdate::sGLQ.front(); +		glu->updateGL(); +		glu->mInQ = FALSE; +		LLGLUpdate::sGLQ.pop_front();  	}  	{ //seed VBO Pools @@ -2546,13 +2529,11 @@ void LLPipeline::updateGL()  	}  } -static LLFastTimer::DeclareTimer FTM_REBUILD_PRIORITY_GROUPS("Rebuild Priority Groups"); -  void LLPipeline::rebuildPriorityGroups()  { -	LLFastTimer t(FTM_REBUILD_PRIORITY_GROUPS);  	LLTimer update_timer;  	LLMemType mt(LLMemType::MTYPE_PIPELINE); +	  	assertInitialized();  	gMeshRepo.notifyLoadedMeshes(); @@ -2571,9 +2552,7 @@ void LLPipeline::rebuildPriorityGroups()  	mGroupQ1Locked = false;  } - -static LLFastTimer::DeclareTimer FTM_REBUILD_GROUPS("Rebuild Groups"); - +		  void LLPipeline::rebuildGroups()  {  	if (mGroupQ2.empty()) @@ -2581,7 +2560,6 @@ void LLPipeline::rebuildGroups()  		return;  	} -	LLFastTimer t(FTM_REBUILD_GROUPS);  	mGroupQ2Locked = true;  	// Iterate through some drawables on the non-priority build queue  	S32 size = (S32) mGroupQ2.size(); @@ -2825,10 +2803,6 @@ void LLPipeline::markShift(LLDrawable *drawablep)  	}  } -static LLFastTimer::DeclareTimer FTM_SHIFT_DRAWABLE("Shift Drawable"); -static LLFastTimer::DeclareTimer FTM_SHIFT_OCTREE("Shift Octree"); -static LLFastTimer::DeclareTimer FTM_SHIFT_HUD("Shift HUD"); -  void LLPipeline::shiftObjects(const LLVector3 &offset)  {  	LLMemType mt(LLMemType::MTYPE_PIPELINE_SHIFT_OBJECTS); @@ -2841,46 +2815,35 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)  	LLVector4a offseta;  	offseta.load3(offset.mV); +	for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin(); +		 iter != mShiftList.end(); iter++)  	{ -		LLFastTimer t(FTM_SHIFT_DRAWABLE); - -		for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin(); -			 iter != mShiftList.end(); iter++) +		LLDrawable *drawablep = *iter; +		if (drawablep->isDead())  		{ -			LLDrawable *drawablep = *iter; -			if (drawablep->isDead()) -			{ -				continue; -			}	 -			drawablep->shiftPos(offseta);	 -			drawablep->clearState(LLDrawable::ON_SHIFT_LIST); -		} -		mShiftList.resize(0); +			continue; +		}	 +		drawablep->shiftPos(offseta);	 +		drawablep->clearState(LLDrawable::ON_SHIFT_LIST);  	} +	mShiftList.resize(0); -	 +	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  +			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{ -		LLFastTimer t(FTM_SHIFT_OCTREE); -		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  -				iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +		LLViewerRegion* region = *iter; +		for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)  		{ -			LLViewerRegion* region = *iter; -			for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) +			LLSpatialPartition* part = region->getSpatialPartition(i); +			if (part)  			{ -				LLSpatialPartition* part = region->getSpatialPartition(i); -				if (part) -				{ -					part->shift(offseta); -				} +				part->shift(offseta);  			}  		}  	} -	{ -		LLFastTimer t(FTM_SHIFT_HUD); -		LLHUDText::shiftAll(offset); -		LLHUDNameTag::shiftAll(offset); -	} +	LLHUDText::shiftAll(offset); +	LLHUDNameTag::shiftAll(offset);  	display_update_camera();  } @@ -2913,10 +2876,8 @@ void LLPipeline::markPartitionMove(LLDrawable* drawable)  	}  } -static LLFastTimer::DeclareTimer FTM_PROCESS_PARTITIONQ("PartitionQ");  void LLPipeline::processPartitionQ()  { -	LLFastTimer t(FTM_PROCESS_PARTITIONQ);  	for (LLDrawable::drawable_list_t::iterator iter = mPartitionQ.begin(); iter != mPartitionQ.end(); ++iter)  	{  		LLDrawable* drawable = *iter; @@ -3032,7 +2993,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  	//LLVertexBuffer::unbind();  	grabReferences(result); -	for (LLCullResult::sg_iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) +	for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter)  	{  		LLSpatialGroup* group = *iter;  		group->checkOcclusion(); @@ -3043,7 +3004,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  		else  		{  			group->setVisible(); -			for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +			for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  			{  				markVisible(*i, camera);  			} @@ -3058,9 +3019,9 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  	if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD)  	{  		LLSpatialGroup* last_group = NULL; -		for (LLCullResult::bridge_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) +		for (LLCullResult::bridge_list_t::iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i)  		{ -			LLCullResult::bridge_iterator cur_iter = i; +			LLCullResult::bridge_list_t::iterator cur_iter = i;  			LLSpatialBridge* bridge = *cur_iter;  			LLSpatialGroup* group = bridge->getSpatialGroup(); @@ -3090,7 +3051,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  		}  	} -	for (LLCullResult::sg_iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) +	for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)  	{  		LLSpatialGroup* group = *iter;  		group->checkOcclusion(); @@ -3112,7 +3073,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  	{  		LLFastTimer ftm(FTM_STATESORT_DRAWABLE); -		for (LLCullResult::drawable_iterator iter = sCull->beginVisibleList(); +		for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList();  			 iter != sCull->endVisibleList(); ++iter)  		{  			LLDrawable *drawablep = *iter; @@ -3131,7 +3092,7 @@ void LLPipeline::stateSort(LLSpatialGroup* group, LLCamera& camera)  	LLMemType mt(LLMemType::MTYPE_PIPELINE_STATE_SORT);  	if (group->changeLOD())  	{ -		for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) +		for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)  		{  			LLDrawable* drawablep = *i;  			stateSort(drawablep, camera); @@ -3248,13 +3209,13 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera)  } -void forAllDrawables(LLCullResult::sg_iterator begin,  -					 LLCullResult::sg_iterator end, +void forAllDrawables(LLCullResult::sg_list_t::iterator begin,  +					 LLCullResult::sg_list_t::iterator end,  					 void (*func)(LLDrawable*))  { -	for (LLCullResult::sg_iterator i = begin; i != end; ++i) +	for (LLCullResult::sg_list_t::iterator i = begin; i != end; ++i)  	{ -		for (LLSpatialGroup::element_iter j = (*i)->getDataBegin(); j != (*i)->getDataEnd(); ++j) +		for (LLSpatialGroup::element_iter j = (*i)->getData().begin(); j != (*i)->getData().end(); ++j)  		{  			func(*j);	  		} @@ -3321,11 +3282,11 @@ void renderScriptedTouchBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderPhysicalBeacons(LLDrawable* drawablep)  { @@ -3350,11 +3311,11 @@ void renderPhysicalBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderMOAPBeacons(LLDrawable* drawablep)  { @@ -3390,11 +3351,11 @@ void renderMOAPBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderParticleBeacons(LLDrawable* drawablep)  { @@ -3419,11 +3380,11 @@ void renderParticleBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderSoundHighlights(LLDrawable* drawablep)  { @@ -3441,11 +3402,11 @@ void renderSoundHighlights(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void LLPipeline::postSort(LLCamera& camera)  { @@ -3456,7 +3417,7 @@ void LLPipeline::postSort(LLCamera& camera)  	llpushcallstacks ;  	//rebuild drawable geometry -	for (LLCullResult::sg_iterator i = sCull->beginDrawableGroups(); i != sCull->endDrawableGroups(); ++i) +	for (LLCullResult::sg_list_t::iterator i = sCull->beginDrawableGroups(); i != sCull->endDrawableGroups(); ++i)  	{  		LLSpatialGroup* group = *i;  		if (!sUseOcclusion ||  @@ -3474,7 +3435,7 @@ void LLPipeline::postSort(LLCamera& camera)  	//build render map -	for (LLCullResult::sg_iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i) +	for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)  	{  		LLSpatialGroup* group = *i;  		if (sUseOcclusion &&  @@ -3658,7 +3619,7 @@ void LLPipeline::postSort(LLCamera& camera)  						if (facep)  						{  							gPipeline.mSelectedFaces.push_back(facep); -						} +					}  					}  					return true;  				} @@ -4177,7 +4138,7 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)  	LLMemType mt_rgd(LLMemType::MTYPE_PIPELINE_RENDER_GEOM_DEFFERRED);  	LLFastTimer t(FTM_RENDER_GEOMETRY); -	LLFastTimer t2(FTM_DEFERRED_POOLS); +	LLFastTimer t2(FTM_POOLS);  	LLGLEnable cull(GL_CULL_FACE); @@ -4219,7 +4180,7 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)  		pool_set_t::iterator iter2 = iter1;  		if (hasRenderType(poolp->getType()) && poolp->getNumDeferredPasses() > 0)  		{ -			LLFastTimer t(FTM_DEFERRED_POOLRENDER); +			LLFastTimer t(FTM_POOLRENDER);  			gGLLastMatrix = NULL;  			gGL.loadMatrix(gGLModelView); @@ -4272,7 +4233,7 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)  void LLPipeline::renderGeomPostDeferred(LLCamera& camera)  {  	LLMemType mt_rgpd(LLMemType::MTYPE_PIPELINE_RENDER_GEOM_POST_DEF); -	LLFastTimer t(FTM_POST_DEFERRED_POOLS); +	LLFastTimer t(FTM_POOLS);  	U32 cur_type = 0;  	LLGLEnable cull(GL_CULL_FACE); @@ -4306,7 +4267,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)  		pool_set_t::iterator iter2 = iter1;  		if (hasRenderType(poolp->getType()) && poolp->getNumPostDeferredPasses() > 0)  		{ -			LLFastTimer t(FTM_POST_DEFERRED_POOLRENDER); +			LLFastTimer t(FTM_POOLRENDER);  			gGLLastMatrix = NULL;  			gGL.loadMatrix(gGLModelView); @@ -4496,7 +4457,7 @@ void LLPipeline::renderPhysicsDisplay()  		}  	} -	for (LLCullResult::bridge_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) +	for (LLCullResult::bridge_list_t::const_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i)  	{  		LLSpatialBridge* bridge = *i;  		if (!bridge->isDead() && hasRenderType(bridge->mDrawableType)) @@ -4918,7 +4879,7 @@ void LLPipeline::renderDebug()  		}  	} -	for (LLCullResult::bridge_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) +	for (LLCullResult::bridge_list_t::const_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i)  	{  		LLSpatialBridge* bridge = *i;  		if (!bridge->isDead() && hasRenderType(bridge->mDrawableType)) @@ -5170,11 +5131,8 @@ void LLPipeline::renderDebug()  	}  } -static LLFastTimer::DeclareTimer FTM_REBUILD_POOLS("Rebuild Pools"); -  void LLPipeline::rebuildPools()  { -	LLFastTimer t(FTM_REBUILD_POOLS);  	LLMemType mt(LLMemType::MTYPE_PIPELINE_REBUILD_POOLS);  	assertInitialized(); @@ -6733,16 +6691,13 @@ void LLPipeline::resetVertexBuffers()  	mResetVertexBuffers = true;  } -static LLFastTimer::DeclareTimer FTM_RESET_VB("Reset VB"); -  void LLPipeline::doResetVertexBuffers()  {  	if (!mResetVertexBuffers)  	{  		return;  	} - -	LLFastTimer t(FTM_RESET_VB); +	  	mResetVertexBuffers = false;  	mCubeVB = NULL; @@ -9167,8 +9122,6 @@ void LLPipeline::generateHighlight(LLCamera& camera)  } -static LLFastTimer::DeclareTimer FTM_GEN_SUN_SHADOW("Gen Sun Shadow"); -  void LLPipeline::generateSunShadow(LLCamera& camera)  {  	if (!sRenderDeferred || RenderShadowDetail <= 0) @@ -9176,8 +9129,6 @@ void LLPipeline::generateSunShadow(LLCamera& camera)  		return;  	} -	LLFastTimer t(FTM_GEN_SUN_SHADOW); -  	BOOL skip_avatar_update = FALSE;  	if (!isAgentAvatarValid() || gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK || !LLVOAvatar::sVisibleInFirstPerson)  	{ @@ -9927,7 +9878,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)  void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture)  { -	for (LLCullResult::sg_iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i) +	for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)  	{  		LLSpatialGroup* group = *i;  		if (!group->isDead() && @@ -9940,12 +9891,6 @@ void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL textu  	}  } -static LLFastTimer::DeclareTimer FTM_IMPOSTOR_MARK_VISIBLE("Impostor Mark Visible"); -static LLFastTimer::DeclareTimer FTM_IMPOSTOR_SETUP("Impostor Setup"); -static LLFastTimer::DeclareTimer FTM_IMPOSTOR_BACKGROUND("Impostor Background"); -static LLFastTimer::DeclareTimer FTM_IMPOSTOR_ALLOCATE("Impostor Allocate"); -static LLFastTimer::DeclareTimer FTM_IMPOSTOR_RESIZE("Impostor Resize"); -  void LLPipeline::generateImpostor(LLVOAvatar* avatar)  {  	LLMemType mt_gi(LLMemType::MTYPE_PIPELINE_GENERATE_IMPOSTOR); @@ -10001,115 +9946,102 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	sImpostorRender = TRUE;  	LLViewerCamera* viewer_camera = LLViewerCamera::getInstance(); +	markVisible(avatar->mDrawable, *viewer_camera); +	LLVOAvatar::sUseImpostors = FALSE; +	LLVOAvatar::attachment_map_t::iterator iter; +	for (iter = avatar->mAttachmentPoints.begin(); +		iter != avatar->mAttachmentPoints.end(); +		++iter)  	{ -		LLFastTimer t(FTM_IMPOSTOR_MARK_VISIBLE); -		markVisible(avatar->mDrawable, *viewer_camera); -		LLVOAvatar::sUseImpostors = FALSE; - -		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)  		{ -			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))  			{ -				if (LLViewerObject* attached_object = (*attachment_iter)) -				{ -					markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); -				} +				markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera);  			}  		}  	}  	stateSort(*LLViewerCamera::getInstance(), result); +	const LLVector4a* ext = avatar->mDrawable->getSpatialExtents(); +	LLVector3 pos(avatar->getRenderPosition()+avatar->getImpostorOffset()); +  	LLCamera camera = *viewer_camera; + +	camera.lookAt(viewer_camera->getOrigin(), pos, viewer_camera->getUpAxis()); +	  	LLVector2 tdim; -	U32 resY = 0; -	U32 resX = 0; -	{ -		LLFastTimer t(FTM_IMPOSTOR_SETUP); -		const LLVector4a* ext = avatar->mDrawable->getSpatialExtents(); -		LLVector3 pos(avatar->getRenderPosition()+avatar->getImpostorOffset()); -		camera.lookAt(viewer_camera->getOrigin(), pos, viewer_camera->getUpAxis()); -	 -		LLVector4a half_height; -		half_height.setSub(ext[1], ext[0]); -		half_height.mul(0.5f); +	LLVector4a half_height; +	half_height.setSub(ext[1], ext[0]); +	half_height.mul(0.5f); -		LLVector4a left; -		left.load3(camera.getLeftAxis().mV); -		left.mul(left); -		left.normalize3fast(); +	LLVector4a left; +	left.load3(camera.getLeftAxis().mV); +	left.mul(left); +	left.normalize3fast(); -		LLVector4a up; -		up.load3(camera.getUpAxis().mV); -		up.mul(up); -		up.normalize3fast(); +	LLVector4a up; +	up.load3(camera.getUpAxis().mV); +	up.mul(up); +	up.normalize3fast(); -		tdim.mV[0] = fabsf(half_height.dot3(left).getF32()); -		tdim.mV[1] = fabsf(half_height.dot3(up).getF32()); +	tdim.mV[0] = fabsf(half_height.dot3(left).getF32()); +	tdim.mV[1] = fabsf(half_height.dot3(up).getF32()); -		gGL.matrixMode(LLRender::MM_PROJECTION); -		gGL.pushMatrix(); +	gGL.matrixMode(LLRender::MM_PROJECTION); +	gGL.pushMatrix(); -		F32 distance = (pos-camera.getOrigin()).length(); -		F32 fov = atanf(tdim.mV[1]/distance)*2.f*RAD_TO_DEG; -		F32 aspect = tdim.mV[0]/tdim.mV[1]; -		glh::matrix4f persp = gl_perspective(fov, aspect, 1.f, 256.f); -		glh_set_current_projection(persp); -		gGL.loadMatrix(persp.m); +	F32 distance = (pos-camera.getOrigin()).length(); +	F32 fov = atanf(tdim.mV[1]/distance)*2.f*RAD_TO_DEG; +	F32 aspect = tdim.mV[0]/tdim.mV[1]; +	glh::matrix4f persp = gl_perspective(fov, aspect, 1.f, 256.f); +	glh_set_current_projection(persp); +	gGL.loadMatrix(persp.m); -		gGL.matrixMode(LLRender::MM_MODELVIEW); -		gGL.pushMatrix(); -		glh::matrix4f mat; -		camera.getOpenGLTransform(mat.m); +	gGL.matrixMode(LLRender::MM_MODELVIEW); +	gGL.pushMatrix(); +	glh::matrix4f mat; +	camera.getOpenGLTransform(mat.m); -		mat = glh::matrix4f((GLfloat*) OGL_TO_CFR_ROTATION) * mat; +	mat = glh::matrix4f((GLfloat*) OGL_TO_CFR_ROTATION) * mat; -		gGL.loadMatrix(mat.m); -		glh_set_current_modelview(mat); +	gGL.loadMatrix(mat.m); +	glh_set_current_modelview(mat); -		glClearColor(0.0f,0.0f,0.0f,0.0f); -		gGL.setColorMask(true, true); +	glClearColor(0.0f,0.0f,0.0f,0.0f); +	gGL.setColorMask(true, true); -		// get the number of pixels per angle -		F32 pa = gViewerWindow->getWindowHeightRaw() / (RAD_TO_DEG * viewer_camera->getView()); - -		//get resolution based on angle width and height of impostor (double desired resolution to prevent aliasing) -		resY = llmin(nhpo2((U32) (fov*pa)), (U32) 512); -		resX = llmin(nhpo2((U32) (atanf(tdim.mV[0]/distance)*2.f*RAD_TO_DEG*pa)), (U32) 512); +	// get the number of pixels per angle +	F32 pa = gViewerWindow->getWindowHeightRaw() / (RAD_TO_DEG * viewer_camera->getView()); -		if (!avatar->mImpostor.isComplete()) -		{ -			LLFastTimer t(FTM_IMPOSTOR_ALLOCATE); -			avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE,FALSE); +	//get resolution based on angle width and height of impostor (double desired resolution to prevent aliasing) +	U32 resY = llmin(nhpo2((U32) (fov*pa)), (U32) 512); +	U32 resX = llmin(nhpo2((U32) (atanf(tdim.mV[0]/distance)*2.f*RAD_TO_DEG*pa)), (U32) 512); -			if (LLPipeline::sRenderDeferred) -			{ -				addDeferredAttachments(avatar->mImpostor); -			} +	if (!avatar->mImpostor.isComplete() || resX != avatar->mImpostor.getWidth() || +		resY != avatar->mImpostor.getHeight()) +	{ +		avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE,FALSE); -			gGL.getTexUnit(0)->bind(&avatar->mImpostor); -			gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); -			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -		} -		else if(resX != avatar->mImpostor.getWidth() || -			resY != avatar->mImpostor.getHeight()) +		if (LLPipeline::sRenderDeferred)  		{ -			LLFastTimer t(FTM_IMPOSTOR_RESIZE); -			avatar->mImpostor.resize(resX,resY,GL_RGBA); +			addDeferredAttachments(avatar->mImpostor);  		} - -		avatar->mImpostor.bindTarget(); +		 +		gGL.getTexUnit(0)->bind(&avatar->mImpostor); +		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); +		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  	} +	avatar->mImpostor.bindTarget(); +  	if (LLPipeline::sRenderDeferred)  	{  		avatar->mImpostor.clear(); @@ -10125,7 +10057,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	}  	{ //create alpha mask based on depth buffer (grey out if muted) -		LLFastTimer t(FTM_IMPOSTOR_BACKGROUND);  		if (LLPipeline::sRenderDeferred)  		{  			GLuint buff = GL_COLOR_ATTACHMENT0; @@ -10211,22 +10142,22 @@ BOOL LLPipeline::hasRenderBatches(const U32 type) const  	return sCull->getRenderMapSize(type) > 0;  } -LLCullResult::drawinfo_iterator LLPipeline::beginRenderMap(U32 type) +LLCullResult::drawinfo_list_t::iterator LLPipeline::beginRenderMap(U32 type)  {  	return sCull->beginRenderMap(type);  } -LLCullResult::drawinfo_iterator LLPipeline::endRenderMap(U32 type) +LLCullResult::drawinfo_list_t::iterator LLPipeline::endRenderMap(U32 type)  {  	return sCull->endRenderMap(type);  } -LLCullResult::sg_iterator LLPipeline::beginAlphaGroups() +LLCullResult::sg_list_t::iterator LLPipeline::beginAlphaGroups()  {  	return sCull->beginAlphaGroups();  } -LLCullResult::sg_iterator LLPipeline::endAlphaGroups() +LLCullResult::sg_list_t::iterator LLPipeline::endAlphaGroups()  {  	return sCull->endAlphaGroups();  } diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 368be1c14d..ef1fd3279d 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -294,10 +294,10 @@ public:  	void setLight(LLDrawable *drawablep, BOOL is_light);  	BOOL hasRenderBatches(const U32 type) const; -	LLCullResult::drawinfo_iterator beginRenderMap(U32 type); -	LLCullResult::drawinfo_iterator endRenderMap(U32 type); -	LLCullResult::sg_iterator beginAlphaGroups(); -	LLCullResult::sg_iterator endAlphaGroups(); +	LLCullResult::drawinfo_list_t::iterator beginRenderMap(U32 type); +	LLCullResult::drawinfo_list_t::iterator endRenderMap(U32 type); +	LLCullResult::sg_list_t::iterator beginAlphaGroups(); +	LLCullResult::sg_list_t::iterator endAlphaGroups();  	void addTrianglesDrawn(S32 index_count, U32 render_type = LLRender::TRIANGLES); diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMPBinary files differ new file mode 100644 index 0000000000..a567951b7a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfinding.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMPBinary files differ new file mode 100644 index 0000000000..aacea8237f --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMPBinary files differ new file mode 100644 index 0000000000..fa19f3f105 --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMPBinary files differ new file mode 100644 index 0000000000..912b7f931a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMPBinary files differ new file mode 100644 index 0000000000..4e8999ae0b --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index c4c4defab9..856f91e214 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -21,6 +21,7 @@  			<menu_item_call label="Beschäftigt" name="Set Busy"/>  		</menu>  		<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/> +		<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>  		<menu_item_call label="Kontoübersicht..." name="Manage My Account">  			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>  		</menu_item_call> diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index eaed92ac55..4a457fb929 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -4,9 +4,9 @@      can_resize="true"      can_tear_off="false"      height="395" -    width="1015" +    width="1075"      min_height="395" -    min_width="1015" +    min_width="990"      layout="topleft"      name="floater_pathfinding_linksets"      help_topic="floater_pathfinding_linksets" @@ -25,11 +25,15 @@    <floater.string name="linkset_terrain_name">[Terrain]</floater.string>    <floater.string name="linkset_terrain_description">--</floater.string>    <floater.string name="linkset_terrain_owner">--</floater.string> +  <floater.string name="linkset_terrain_scripted">--</floater.string>    <floater.string name="linkset_terrain_land_impact">--</floater.string>    <floater.string name="linkset_terrain_dist_from_you">--</floater.string>    <floater.string name="linkset_owner_loading">[Loading]</floater.string>    <floater.string name="linkset_owner_unknown">[Unknown]</floater.string>    <floater.string name="linkset_owner_group">[group]</floater.string> +  <floater.string name="linkset_is_scripted">Yes</floater.string> +  <floater.string name="linkset_is_not_scripted">No</floater.string> +  <floater.string name="linkset_is_unknown_scripted">Unknown</floater.string>    <floater.string name="linkset_use_walkable">Walkable</floater.string>    <floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>    <floater.string name="linkset_use_dynamic_obstacle">Movable obstacle</floater.string> @@ -47,7 +51,7 @@        follows="left|top|right|bottom"        layout="topleft"        height="226" -      width="999"> +      width="1059">      <text          height="13"          word_wrap="false" @@ -155,7 +159,7 @@          layout="topleft"          name="apply_filters"          top_pad="-21" -        left_pad="31" +        left_pad="91"          width="73"/>      <button          follows="right|top" @@ -177,7 +181,7 @@          tab_stop="false"          multi_select="true"          name="objects_scroll_list" -        width="980"> +        width="1040">        <scroll_list.columns            label="Name (root prim)"            name="name" @@ -191,6 +195,10 @@            name="owner"            width="141" />        <scroll_list.columns +          label="Scripted" +          name="scripted" +          width="60" /> +      <scroll_list.columns            label="Impact"            name="land_impact"            width="55" /> @@ -230,7 +238,7 @@          layout="topleft"          name="messaging_status"          top_pad="17" -        width="619"> +        width="679">        Linksets:      </text>      <button @@ -269,7 +277,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -277,7 +285,7 @@        layout="topleft"        left="0"        height="67" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -327,7 +335,7 @@          layout="topleft"          name="teleport_me_to_object"          top_pad="-21" -        left_pad="206" +        left_pad="239"          width="160"/>      <button          follows="right|bottom" @@ -336,7 +344,7 @@          layout="topleft"          name="return_objects"          top_pad="-21" -        left_pad="220" +        left_pad="252"          width="95"/>      <button          follows="right|bottom" @@ -356,7 +364,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -364,7 +372,7 @@        layout="topleft"        left="0"        height="75" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -376,7 +384,7 @@          layout="topleft"          left="18"          top_pad="8" -        width="912"> +        width="972">        Edit attributes of selected linksets and press the button to apply changes      </text>      <combo_box @@ -516,7 +524,7 @@          tool_tip="Walkability for characters of type D.  Example character type is other."          width="45" />      <button -        follows="right|bottom" +        follows="left|bottom"          height="21"          label="Apply changes"          layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 2e29c61cb2..6021ba0a5a 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -134,16 +134,6 @@       top_delta="-25"       name="Pipette"       width="28" /> -   <check_box -     follows="left|bottom" -     height="20" -     initial_value="true" -     label="Live Preview" -     layout="topleft" -     left="4" -     name="apply_immediate_check" -     top="262" -     width="120" />     <text       follows="left|bottom"       height="20" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 13f073a1c2..c785cee856 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2894,7 +2894,7 @@ You have been moved into a nearby region.     name="AvatarMovedLast"     type="alertmodal">     <tag>fail</tag> -Your last location is not currently available. +Your requested location is not currently available.  You have been moved into a nearby region.    </notification> @@ -7578,18 +7578,6 @@ We cannot display a preview of this texture because it is no-copy and/or no-tran    <notification     icon="alertmodal.tga" -   name="LivePreviewUnavailable" -   type="alert"> -    -We cannot display a preview of this texture because it is no-copy and/or no-transfer. -  <usetemplate -    ignoretext="Warn me that Live Preview mode is not available for no-copy and/or no-transfer textures" -    name="okignore" -    yestext="OK"/> -  </notification> - -  <notification -   icon="alertmodal.tga"     name="ConfirmLeaveCall"     type="alert">  Are you sure you want to leave this call? @@ -8075,9 +8063,26 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted" +   name="PathfindingLinksets_WarnOnPhantom" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset." @@ -8088,9 +8093,11 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnVolume" +   name="PathfindingLinksets_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because the shape is non-convex" @@ -8101,10 +8108,47 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because the shape is non-convex" +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset and because the shape is non-convex." @@ -8115,6 +8159,25 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset and because the shape is non-convex." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="PathfindingLinksets_ChangeToFlexiblePath"     type="alertmodal">      The selected object affects the navmesh.  Changing it to a Flexible Path will remove it from the navmesh. diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index c5dfb703e5..54a312bd59 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -11,10 +11,6 @@  		 name="unknown">          (unknown)  	</panel.string> -    <panel.string -         name="unknown_multiple"> -        (unknown / multiple) -    </panel.string>  	<panel.string  		 name="public">          (public) diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index e9a787cef0..e69a17e037 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -1,36 +1,36 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -    height="570" -    layout="topleft" -    name="object properties" -    help_topic="object_properties" -    title="Object Profile" -    width="333"> -  <panel.string -      name="text deed continued"> -    Deed -  </panel.string> -  <panel.string -      name="text deed"> -    Deed -  </panel.string> -  <panel.string -      name="text modify info 1"> -    You can modify this object -  </panel.string> -  <panel.string -      name="text modify info 2"> -    You can modify these objects -  </panel.string> -  <panel.string -      name="text modify info 3"> -    You can't modify this object -  </panel.string> -  <panel.string -      name="text modify info 4"> -    You can't modify these objects -  </panel.string> -  <panel.string +	 height="570" +	 layout="topleft" +	 name="object properties" +	 help_topic="object_properties" +	 title="Object Profile" +	 width="333"> +	 <panel.string +	  name="text deed continued"> +		Deed +	 </panel.string> +	<panel.string +	 name="text deed"> +		Deed +	</panel.string> +            <panel.string +             name="text modify info 1"> +                You can modify this object +            </panel.string> +            <panel.string +             name="text modify info 2"> +                You can modify these objects +            </panel.string> +            <panel.string +             name="text modify info 3"> +                You can't modify this object +            </panel.string> +            <panel.string +             name="text modify info 4"> +                You can't modify these objects +            </panel.string> +            <panel.string        name="text modify info 5">      You can't modify this object across a region boundary    </panel.string> @@ -39,399 +39,399 @@      You can't modify these objects across a region boundary    </panel.string>    <panel.string -      name="text modify warning"> -    This object has linked parts -  </panel.string> -  <panel.string -      name="Cost Default"> -    Price: L$ -  </panel.string> -  <panel.string -      name="Cost Total"> -    Total Price: L$ -  </panel.string> -  <panel.string -      name="Cost Per Unit"> -    Price Per: L$ -  </panel.string> -  <panel.string -      name="Cost Mixed"> -    Mixed Price -  </panel.string> -  <panel.string -      name="Sale Mixed"> -    Mixed Sale -  </panel.string> -  <button -      follows="top|left" -      height="24" -      image_hover_unselected="BackButton_Over" -      image_pressed="BackButton_Press" -      image_unselected="BackButton_Off" -      layout="topleft" -      left="8" -      name="back_btn" -      tab_stop="false" -      top="0" -      width="30" -      use_draw_context_alpha="false" /> -  <text -      follows="top|left|right" -      font="SansSerifHuge" -      height="26" -      layout="topleft" -      left_pad="10" -      name="title" -      text_color="LtGray" -      top="0" -      use_ellipses="true" -      value="Object Profile" -      width="290" /> -  <text -      follows="top|left" -      height="13" -      layout="topleft" -      left="45" -      name="where" -      text_color="LtGray_50" -      value="(Inworld)" -      width="150" /> -  <panel -      follows="all" -      height="490" -      label="" -      layout="topleft" -      left="10" -      help_topic="" -      name="properties_panel" -      top="45" -      width="313" -      background_visible="true" -      bg_alpha_color="DkGray2"> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="10" -        layout="topleft" -        left="5" -        name="Name:" -        top="10" -        width="78"> -      Name: -    </text> -    <line_editor -        border_style="line" -        border_thickness="1" -        follows="left|top|right" -        height="20" -        layout="topleft" -        left_delta="78" -        max_length_bytes="63" -        name="Object Name" -        top_delta="0" -        width="225" /> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="10" -        layout="topleft" -        left="5" -        name="Description:" -        top_pad="10" -        width="78"> -      Description: -    </text> -    <line_editor -        border_style="line" -        border_thickness="1" -        follows="left|top|right" -        height="23" -        layout="topleft" -        name="Object Description" -        select_on_focus="true" -        left_delta="78" -        max_length_bytes="127" -        top_delta="-5" -        width="225"/> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="23" -        layout="topleft" -        left="5" -        name="CreatorNameLabel" -        top_pad="12" -        width="78"> -      Creator: -    </text> -    <text -        type="string" -        follows="left|right|top" -        font="SansSerifSmall" -        height="15" -        layout="topleft" -        left_pad="0" -        name="Creator Name" -        top_delta="0" -        translate="false" -        use_ellipses="true"  -        width="225"> -      TestString PleaseIgnore -    </text> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="23" -        layout="topleft" -        left="5" -        name="Owner:" -        top_pad="15" -        width="78"> -      Owner: -    </text> -    <text -        type="string" -        follows="left|right|top" -        font="SansSerifSmall" -        height="15" -        layout="topleft" -        left_pad="0" -        name="Owner Name" -        top_delta="0" -        translate="false" -        use_ellipses="true"  -        width="225"> -      TestString PleaseIgnore -    </text> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="23" -        layout="topleft" -        left="5" -        name="Group_label" -        top_pad="15" -        width="78"> -      Group: -    </text> +             name="text modify warning"> +                This object has linked parts +            </panel.string> +            <panel.string +             name="Cost Default"> +                Price: L$ +            </panel.string> +            <panel.string +             name="Cost Total"> +                Total Price: L$ +            </panel.string> +            <panel.string +             name="Cost Per Unit"> +                Price Per: L$ +            </panel.string> +            <panel.string +             name="Cost Mixed"> +                Mixed Price +            </panel.string> +            <panel.string +             name="Sale Mixed"> +                Mixed Sale +            </panel.string>      <button -        follows="top|left" -        height="10" -        image_disabled="Activate_Checkmark" -        image_selected="Activate_Checkmark" -        image_unselected="Activate_Checkmark" -        image_color="White_50" -        layout="topleft" -        left_pad="0" -        top_delta="0" -        name="button set group" -        tab_stop="false" -        tool_tip="Choose a group to share this object's permissions" -        width="10" /> -    <name_box -        follows="left|top" -        height="18" -        initial_value="Loading..." -        layout="topleft" -        left_pad="5" -        top_delta="-1" -        name="Group Name Proxy" -        width="150" /> -    <button -        follows="top|left" -        height="23" -        label="Deed" -        label_selected="Deed" -        layout="topleft" -        name="button deed" -        top_pad="0" -        left="81" -        tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." -        width="100" /> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="9" -        layout="topleft" -        top_pad="5" -        left="5" -        name="label click action" -        width="280"> -      Click to: -    </text> -    <combo_box -        follows="left|top" -        height="23" -        layout="topleft" -        name="clickaction" -        width="168" -        left="81"> -      <combo_box.item -          label="Touch  (default)" -          name="Touch/grab(default)" +     follows="top|left" +     height="24" +     image_hover_unselected="BackButton_Over" +     image_pressed="BackButton_Press" +     image_unselected="BackButton_Off" +     layout="topleft" +     left="8" +     name="back_btn" +     tab_stop="false" +     top="0" +     width="30" +     use_draw_context_alpha="false" /> +        <text +     follows="top|left|right" +     font="SansSerifHuge" +     height="26" +     layout="topleft" +     left_pad="10" +     name="title" +     text_color="LtGray" +     top="0" +     use_ellipses="true" +     value="Object Profile" +     width="290" /> +	    <text +     follows="top|left" +     height="13" +     layout="topleft" +     left="45" +     name="where" +     text_color="LtGray_50" +     value="(Inworld)" +     width="150" /> +	<panel +         follows="all" +         height="490" +         label="" +         layout="topleft" +         left="10" +         help_topic="" +         name="properties_panel" +         top="45" +         width="313" +   background_visible="true" +   bg_alpha_color="DkGray2"> +	    	    <text +		     type="string" +		     length="1" +		     follows="left|top" +		     height="10" +		     layout="topleft" +		     left="5" +             name="Name:" +		     top="10" +		     width="78"> +	        Name: +	    </text> +	    <line_editor +		     border_style="line" +		     border_thickness="1" +	    	 follows="left|top|right" +		     height="20" +		     layout="topleft" +	    	 left_delta="78" +		     max_length_bytes="63" +             name="Object Name" +	    	 top_delta="0" +		     width="225" /> +	    <text +	    type="string" +	    length="1" +	    follows="left|top" +	    height="10" +	    layout="topleft" +	    left="5" +             name="Description:" +	    top_pad="10" +	    width="78"> +	        Description: +	    </text> +            <line_editor +	     border_style="line" +    	     border_thickness="1" +             follows="left|top|right" +             height="23" +             layout="topleft" +             name="Object Description" +             select_on_focus="true" +    		 left_delta="78" +		     max_length_bytes="127" +	    	 top_delta="-5" +	    	 width="225"/> +	    <text +		     type="string" +		     length="1" +		     follows="left|top" +		     height="23" +		     layout="topleft" +    		 left="5" +		 name="CreatorNameLabel" +		  top_pad="12" +		     width="78"> +	        Creator: +    	</text> +	    <text +		     type="string" +     follows="left|right|top" +     font="SansSerifSmall" +     height="15" +     layout="topleft" +     left_pad="0" +             name="Creator Name" +		     top_delta="0" +		     translate="false" +         use_ellipses="true"  +		     width="225"> +	        TestString PleaseIgnore +	     </text> +	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			layout="topleft" +			left="5" +			name="Owner:" +			top_pad="15" +			 width="78"> +			    Owner: +	     </text> +	     <text +			    type="string" +			    follows="left|right|top" +			    font="SansSerifSmall" +			    height="15" +			    layout="topleft" +			    left_pad="0" +			    name="Owner Name" +			    top_delta="0" +			    translate="false" +          use_ellipses="true"  +			    width="225"> +			    TestString PleaseIgnore +	     </text> +	    	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			 layout="topleft" +			 left="5" +			name="Group_label" +			top_pad="15" +			width="78"> +			    Group: +	     </text> +      		<button +			 follows="top|left" +			 height="10" +			 image_disabled="Activate_Checkmark" +			 image_selected="Activate_Checkmark" +			 image_unselected="Activate_Checkmark" +			 image_color="White_50" +			 layout="topleft" +			 left_pad="0" +			 top_delta="0" +			 name="button set group" +			 tab_stop="false" +			 tool_tip="Choose a group to share this object's permissions" +			 width="10" /> +            <name_box +             follows="left|top" +             height="18" +             initial_value="Loading..." +             layout="topleft" +             left_pad="5" +             top_delta="-1" +             name="Group Name Proxy" +             width="150" /> +            <button +             follows="top|left" +             height="23" +             label="Deed" +             label_selected="Deed" +             layout="topleft" +             name="button deed" +             top_pad="0" +             left="81" +             tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." +             width="100" /> +            <text +             type="string" +             length="1" +             follows="left|top" +             height="9" +             layout="topleft" +             top_pad="5" +             left="5" +             name="label click action" +             width="280"> +                Click to: +            </text> +            <combo_box +             follows="left|top" +             height="23" +             layout="topleft" +             name="clickaction" +             width="168" +             left="81"> +                <combo_box.item +                 label="Touch  (default)" +                 name="Touch/grab(default)"            value="Touch" /> -      <combo_box.item -          label="Sit on object" -          name="Sitonobject" +                <combo_box.item +                 label="Sit on object" +                 name="Sitonobject"            value="Sit" /> -      <combo_box.item -          label="Buy object" -          name="Buyobject" +                <combo_box.item +                 label="Buy object" +                 name="Buyobject"            value="Buy" /> -      <combo_box.item -          label="Pay object" -          name="Payobject" +                <combo_box.item +                 label="Pay object" +                 name="Payobject"            value="Pay" /> -      <combo_box.item -          label="Open" -          name="Open" -          value="Open" /> -    </combo_box> -    <panel -        border="false" -        follows="left|top" -        layout="topleft" -        mouse_opaque="false" -        background_visible="true" -        bg_alpha_color="DkGray" -        name="perms_inv" -        left="0" -        top_pad="15" -        height="135" -        width="313"> -      <text -          type="string" -          length="1" +                <combo_box.item +                 label="Open" +                 name="Open" +                 value="Open" /> +            </combo_box> +	 <panel +         border="false" +         follows="left|top" +         layout="topleft" +         mouse_opaque="false" +         background_visible="true" +         bg_alpha_color="DkGray" +         name="perms_inv" +         left="0" +         top_pad="15" +         height="135" +         width="313"> +	  <text +             type="string" +             length="1"            left="5" -          top_pad="15" -          text_color="EmphasisColor" -          height="15" -          follows="left|top|right" -          layout="topleft" -          name="perm_modify" -          width="310"> -        You can modify this object -      </text> -      <text -          type="string" -          length="1" -          follows="left|top" -          height="16" -          layout="topleft" -          left="10" -          name="Anyone can:" -          top_pad="8" -          width="100"> -        Anyone: -      </text> -      <check_box -          height="18" -          label="Copy" -          layout="topleft" -          left_pad="0" -          name="checkbox allow everyone copy" -          top_delta="-2" -          width="90" /> -      <check_box -          height="18" -          label="Move" -          layout="topleft" -          name="checkbox allow everyone move" -          left_pad="0" -          width="150" /> -      <text -          type="string" -          length="1" -          follows="left|top" -          height="16" -          layout="topleft" -          left="10" -          name="GroupLabel" -          top_pad="8" -          width="100"> -        Group: -      </text> -      <check_box -          height="18" -          label="Share" -          layout="topleft" -          left_pad="90" -          top_delta="-2" -          name="checkbox share with group" -          tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." -          width="150" /> -      <text -          type="string" -          length="1" -          follows="left|top" -          height="16" -          layout="topleft" -          left="10" -          name="NextOwnerLabel" -          top_pad="8" -          width="200" -          word_wrap="true"> -        Next owner: -      </text> -      <check_box -          height="18" -          label="Modify" -          layout="topleft" -          left="20" -          top_pad="0" -          name="checkbox next owner can modify" -          width="90" /> -      <check_box -          height="18" -          label="Copy" -          layout="topleft" -          left_pad="0" -          name="checkbox next owner can copy" -          width="90" /> -      <check_box -          height="18" -          label="Transfer" -          layout="topleft" -          left_pad="0" -          name="checkbox next owner can transfer" -          tool_tip="Next owner can give away or resell this object" -          width="106" /> -    </panel> -    <check_box -        height="23" -        label="For Sale" -        layout="topleft" -        left="20" -        name="checkbox for sale" -        top_pad="10" -        width="100" /> -    <combo_box -        height="23" -        left_pad="0" -        layout="topleft" -        follows="left|top" -        name="sale type" -        width="170"> -      <combo_box.item -          name="Copy" -          label="Copy" -          value="2" /> -      <combo_box.item -          name="Contents" -          label="Contents" -          value="3" /> -      <combo_box.item -          name="Original" -          label="Original" -          value="1" /> -    </combo_box> -    <spinner +             top_pad="15" +             text_color="EmphasisColor" +	     height="15" +             follows="left|top|right" +             layout="topleft" +             name="perm_modify" +             width="310"> +                You can modify this object +            </text> +	  	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +               name="Anyone can:" +			 top_pad="8" +			 width="100"> +			Anyone: +	    </text> +	    <check_box +			 height="18" +			 label="Copy" +			 layout="topleft" +			 left_pad="0" +             name="checkbox allow everyone copy" +			 top_delta="-2" +			 width="90" /> +	    <check_box +             height="18" +             label="Move" +             layout="topleft" +             name="checkbox allow everyone move" +			 left_pad="0" +             width="150" /> +	       	<text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +			 name="GroupLabel" +			 top_pad="8" +			 width="100"> +			Group: +    	</text> +			    <check_box +			 height="18" +			 label="Share" +			 layout="topleft" +			 left_pad="90" +			 top_delta="-2" +             name="checkbox share with group" +			 tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." +			 width="150" /> +	    	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +			 name="NextOwnerLabel" +			 top_pad="8" +			 width="200" +			 word_wrap="true"> +			Next owner: +	    </text> +	    <check_box +			 height="18" +			 label="Modify" +			 layout="topleft" +			 left="20" +			 top_pad="0" +             name="checkbox next owner can modify" +			 width="90" /> +	    <check_box +			 height="18" +			 label="Copy" +			 layout="topleft" +			 left_pad="0" +             name="checkbox next owner can copy" +			 width="90" /> +	    <check_box +			 height="18" +			 label="Transfer" +			 layout="topleft" +			 left_pad="0" +             name="checkbox next owner can transfer" +			 tool_tip="Next owner can give away or resell this object" +			 width="106" /> +	    </panel> +	    <check_box +			 height="23" +			 label="For Sale" +			 layout="topleft" +			 left="20" +             name="checkbox for sale" +			 top_pad="10" +			 width="100" /> +		<combo_box +			 height="23" +			 left_pad="0" +			 layout="topleft" +			 follows="left|top" +            name="sale type" +			 width="170"> +        <combo_box.item +           name="Copy" +           label="Copy" +           value="2" /> +        <combo_box.item +           name="Contents" +           label="Contents" +           value="3" /> +        <combo_box.item +           name="Original" +           label="Original" +           value="1" /> +	    </combo_box> +		<spinner          follows="left|top"          decimal_digits="0"          increment="1" @@ -445,17 +445,17 @@          min_val="1"          height="20"          max_val="999999999" /> -    <check_box -        height="20" -        width="110" -        top_pad="6" -        label="Show in search" -        layout="topleft" -        left="120" -        name="search_check" -        tool_tip="Let people see this object in search results" /> -    <text -        type="string" +      <check_box +	   height="20" +	   width="110" +	   top_pad="6" +	   label="Show in search" +       layout="topleft" +	   left="120" +       name="search_check" +       tool_tip="Let people see this object in search results" /> +            <text +             type="string"          follows="left|top"          name="pathfinding_attributes_label"          top_pad="6" @@ -466,7 +466,7 @@      <text          type="string"          follows="left|top" -        text_color="EmphasisColor" +             text_color="EmphasisColor"          name="pathfinding_attributes_value"          width="130"          word_wrap="false" @@ -475,120 +475,120 @@      <text          type="string"          text_color="EmphasisColor" -        length="1" +             length="1"          top_pad="10" -        follows="left|top" -        layout="topleft" -        left="10" -        name="B:" -        height="10" -        width="50"> -      B: -    </text> -    <text -        type="string" -        text_color="White" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="O:" -        height="10" -        width="50"> -      O: -    </text> -    <text -        type="string" -        text_color="EmphasisColor" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="G:" -        height="10" -        width="50"> -      G: -    </text> -    <text -        type="string" -        text_color="White" -        length="1" -        follows="left|top" -        left_pad="0" -        layout="topleft" -        name="E:" -        height="10" -        width="50"> -      E: -    </text> -    <text -        type="string" -        text_color="EmphasisColor" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="N:" -        height="10" -        width="50"> -      N: -    </text> -    <text -        type="string" -        text_color="White" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="F:" -        height="10" -        width="50"> -      F: -    </text> -  </panel> -  <panel -      height="25" -      layout="bottomright" -      name="button_panel" -      left="5" -      bottom="5" -      width="313"> -    <button -        follows="bottom|left" -        height="23" -        label="Open" -        layout="topleft" -        left="5" -        name="open_btn" -        top="0" -        width="73" /> -    <button -        follows="bottom|left" -        height="23" -        label="Pay" -        layout="topleft" -        left_pad="5" -        name="pay_btn" -        top="0" -        width="73" /> -    <button -        follows="bottom|left" -        height="23" -        label="Buy" -        layout="topleft" -        left_pad="5" -        name="buy_btn" -        top="0" -        width="73" /> -    <button -        follows="bottom|left" -        height="23" -        label="Details" -        layout="topleft" -        left_pad="5" -        name="details_btn" -        top="0" -        width="74" /> +             follows="left|top" +             layout="topleft" +             left="10" +             name="B:" +             height="10" +             width="50"> +                B: +            </text> +            <text +             type="string" +             text_color="White" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="O:" +             height="10" +             width="50"> +                O: +            </text> +            <text +             type="string" +             text_color="EmphasisColor" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="G:" +             height="10" +             width="50"> +                G: +            </text> +            <text +             type="string" +             text_color="White" +             length="1" +             follows="left|top" +             left_pad="0" +             layout="topleft" +             name="E:" +             height="10" +             width="50"> +                E: +            </text> +            <text +             type="string" +             text_color="EmphasisColor" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="N:" +             height="10" +             width="50"> +                N: +            </text> +            <text +             type="string" +             text_color="White" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="F:" +             height="10" +             width="50"> +                F: +            </text> +		</panel> +    <panel +		 height="25" +		 layout="bottomright" +		 name="button_panel" +		 left="5" +		 bottom="5" +		 width="313"> +        <button +		     follows="bottom|left" +		     height="23" +		     label="Open" +		     layout="topleft" +		     left="5" +		     name="open_btn" +		     top="0" +		     width="73" /> +	    <button +		     follows="bottom|left" +		     height="23" +		     label="Pay" +		     layout="topleft" +		     left_pad="5" +		     name="pay_btn" +		     top="0" +		     width="73" /> +	    <button +		     follows="bottom|left" +		     height="23" +		     label="Buy" +		     layout="topleft" +		     left_pad="5" +		     name="buy_btn" +		     top="0" +		     width="73" /> +        <button +		     follows="bottom|left" +		     height="23" +		     label="Details" +		     layout="topleft" +		     left_pad="5" +		     name="details_btn" +		     top="0" +		     width="74" /> -  </panel> +	</panel>  </panel> diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index b7e81c4199..7705b4c567 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -60,6 +60,7 @@ static LLEventStream gTestPump("test_pump");  #include "../llslurl.h"  #include "../llstartup.h"  LLSLURL LLStartUp::sStartSLURL; +LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }  #include "lllogin.h" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index d1c952ac3b..7c6b5403e1 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1062,7 +1062,6 @@ class Linux_i686Manifest(LinuxManifest):              self.path("libalut.so")              self.path("libopenal.so", "libopenal.so.1")              self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname -              # KLUDGE: As of 2012-04-11, the 'fontconfig' package installs              # libfontconfig.so.1.4.4, along with symlinks libfontconfig.so.1              # and libfontconfig.so. Before we added support for library-file diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index c6aa9b0f11..4da774a5f6 100644 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -30,7 +30,9 @@  #include "llsd.h"  #include "llupdatechecker.h"  #include "lluri.h" - +#if LL_DARWIN +#include <CoreServices/CoreServices.h> +#endif  #if LL_WINDOWS  #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally @@ -55,7 +57,7 @@ class LLUpdateChecker::Implementation:  public:  	Implementation(Client & client);  	~Implementation(); -	void check(std::string const & protocolVersion, std::string const & hostUrl,  +	void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   			   std::string const & servicePath, std::string channel, std::string version);  	// Responder: @@ -91,10 +93,10 @@ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client):  } -void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl,  +void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   							std::string const & servicePath, std::string channel, std::string version)  { -	mImplementation->check(protocolVersion, hostUrl, servicePath, channel, version); +	mImplementation->checkVersion(protocolVersion, hostUrl, servicePath, channel, version);  } @@ -120,7 +122,7 @@ LLUpdateChecker::Implementation::~Implementation()  } -void LLUpdateChecker::Implementation::check(std::string const & protocolVersion, std::string const & hostUrl,  +void LLUpdateChecker::Implementation::checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   											std::string const & servicePath, std::string channel, std::string version)  {  	llassert(!mInProgress); @@ -179,7 +181,18 @@ std::string LLUpdateChecker::Implementation::buildUrl(std::string const & protoc  #ifdef LL_WINDOWS  	static const char * platform = "win";  #elif LL_DARWIN -	static const char * platform = "mac"; +    long versMin; +    Gestalt(gestaltSystemVersionMinor, &versMin); +     +    static const char *platform; +    if (versMin == 5) //OS 10.5 +    { +        platform = "mac_legacy"; +    } +    else  +    { +        platform = "mac"; +    }  #else  	static const char * platform = "lnx";  #endif diff --git a/indra/viewer_components/updater/llupdatechecker.h b/indra/viewer_components/updater/llupdatechecker.h index cea1f13647..d882169068 100644 --- a/indra/viewer_components/updater/llupdatechecker.h +++ b/indra/viewer_components/updater/llupdatechecker.h @@ -44,7 +44,7 @@ public:  	LLUpdateChecker(Client & client);  	// Check status of current app on the given host for the channel and version provided. -	void check(std::string const & protocolVersion, std::string const & hostUrl,  +	void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   			   std::string const & servicePath, std::string channel, std::string version);  private: diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index 2e18218667..bc73c72ddc 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -509,7 +509,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)  		}  		else  		{ -			mUpdateChecker.check(mProtocolVersion, mUrl, mPath, mChannel, mVersion); +			mUpdateChecker.checkVersion(mProtocolVersion, mUrl, mPath, mChannel, mVersion);  			setState(LLUpdaterService::CHECKING_FOR_UPDATE);  		}  	}  diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp index e19d5724f1..7c016fecf9 100644 --- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp +++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp @@ -1,4 +1,4 @@ -/** +/**    * @file   llupdaterservice_test.cpp   * @brief  Tests of llupdaterservice.cpp.   *  @@ -44,7 +44,7 @@  *****************************************************************************/  LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client)  {} -void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl,  +void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   								  std::string const & servicePath, std::string channel, std::string version)  {}  LLUpdateDownloader::LLUpdateDownloader(Client & ) {} | 
