diff options
102 files changed, 4725 insertions, 3069 deletions
| @@ -111,6 +111,22 @@ d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1  bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1  bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1  5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start +beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 +beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1  11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start  11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start +beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 +beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1  e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start +beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 +beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1 +77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_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 2.6.9-beta1 +8835e0e3c0d3a48244c287bc05811dfc2fba43ec 2.7.0-start +54fd44ac92e4c61435ea33effe093a3527e18d98 2.7.1-start diff --git a/BuildParams b/BuildParams index 0a193803da..a064faf870 100644 --- a/BuildParams +++ b/BuildParams @@ -142,24 +142,12 @@ gooey.viewer_grid = agni  gooey.build_viewer_update_version_manager = false  # ======================================== -# Display Names project +# Search Project  # ======================================== -#viewer-identity-evolution.email = leyla@lindenlab.com -viewer-identity.build_Debug = false -viewer-identity.build_RelWithDebInfo = false -viewer-identity.build_viewer = true -viewer-identity.build_server = false -viewer-identity.build_server_tests = false -viewer-identity.build_Linux = true -viewer-identity.build_hg_bundle = true -viewer-identity.bulld_docs = true -viewer-identity.viewer_channel = "Second Life Project Viewer" -viewer-identity.login_channel = "Second Life Project Viewer" -viewer-identity.viewer_grid = aditi -viewer-identity.build_viewer_update_version_manager = false - - +search_project-viewer.build_debug_release_separately = true +search_project-viewer.viewer_channel = "Second Life Project Viewer - Search" +search_project-viewer.login_channel = "Second Life Project Viewer - Search"  # ========================================  # palange diff --git a/autobuild.xml b/autobuild.xml index d908344df9..2c8a254a75 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1,2491 +1,2491 @@ -<?xml version="1.0" ?> -<llsd> -<map> -    <key>installables</key> -    <map> -      <key>GLOD</key> -      <map> -        <key>license</key> -        <string>GLOD</string> -        <key>license_file</key> -        <string>LICENSES/glod.txt</string> -        <key>name</key> -        <string>GLOD</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>7c546f54f6ed654f713c778af3925dd4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/226566/arch/Darwin/installer/glod-1.0pre4-darwin-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>18c708163d2a669bc3c030b05b4ebe61</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/226657/arch/Linux/installer/glod-1.0pre4-linux-20110414.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c4ae6cddc04e0b2908a301726a53922c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/226194/arch/CYGWIN/installer/glod-1.0pre4-windows-20110408.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>SDL</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/SDL.txt</string> -        <key>name</key> -        <string>SDL</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>apr_suite</key> -      <map> -        <key>license</key> -        <string>apache</string> -        <key>license_file</key> -        <string>LICENSES/apr_suite.txt</string> -        <key>name</key> -        <string>apr_suite</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9868bfa0b6954e4884c49c6f30068c80</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-darwin-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ff62946c518a247c86e1066c1e9a5855</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>73785c200a5b4ef74a1230b028bb680d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-windows-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>ares</key> -      <map> -        <key>license</key> -        <string>c-ares</string> -        <key>license_file</key> -        <string>LICENSES/c-ares.txt</string> -        <key>name</key> -        <string>ares</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e6caaeea16131e1f2343ecd7765e3147</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0745872db83d45f4ab3bdc697d98e264</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1dcec6babd249a2597114d4ac226c461</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>boost</key> -      <map> -        <key>license</key> -        <string>boost</string> -        <key>license_file</key> -        <string>LICENSES/boost.txt</string> -        <key>name</key> -        <string>boost</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d98078791ce345bf6168ce9ba53ca2d7</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/222752/arch/Darwin/installer/boost-1.45.0-darwin-20110304.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a34e7fffdb94a6a4d8a2966b1f216da3</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>98be22c8833aa2bca184b9fa09fbb82b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-windows-20110124.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>colladadom</key> -      <map> -        <key>license</key> -        <string>scea</string> -        <key>license_file</key> -        <string>LICENSES/collada.txt</string> -        <key>name</key> -        <string>colladadom</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>480b27a0cb39a4adfcdeabef895de3e1</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d05be8fc196e9ce7b6636b931cf13dff</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226716/arch/Linux/installer/colladadom-2.2-linux-20110415.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>curl</key> -      <map> -        <key>license</key> -        <string>curl</string> -        <key>license_file</key> -        <string>LICENSES/curl.txt</string> -        <key>name</key> -        <string>curl</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>aaea644191807f51051cefa2fac11069</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>2d9377951d99a1aa4735cea8d4b5aa71</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fea96aa2a7d513397317194f3d6c979b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>db</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/db.txt</string> -        <key>name</key> -        <string>db</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>dbusglib</key> -      <map> -        <key>license</key> -        <string>AFL2.1</string> -        <key>license_file</key> -        <string>LICENSES/dbus-glib.txt</string> -        <key>name</key> -        <string>dbusglib</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>94b058b9a81114dc4567bd78e4335425</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>elfio</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/elfio.txt</string> -        <key>name</key> -        <string>elfio</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>expat</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/expat.txt</string> -        <key>name</key> -        <string>expat</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>180e03d0be1f1acfc3244e78742d7bef</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9bd79781b58e556ab1c36084ec4a1c0c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>fmod</key> -      <map> -        <key>license</key> -        <string>fmod</string> -        <key>license_file</key> -        <string>LICENSES/fmod.txt</string> -        <key>name</key> -        <string>fmod</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>61ead113e6479452e6b690c84b4e9d30</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c61d643db54d2e5999be8254569d8b3</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d9a9a6ad86895353bcd63374a4c1a91d</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>fontconfig</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/fontconfig.txt</string> -        <key>name</key> -        <string>fontconfig</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d8b08b657247566bde5fd853c7622478</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>freeglut</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/freeglut.txt</string> -        <key>name</key> -        <string>freeglut</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>freetype</key> -      <map> -        <key>license</key> -        <string>freetype</string> -        <key>license_file</key> -        <string>LICENSES/freetype.txt</string> -        <key>name</key> -        <string>freetype</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>271349827b939406162ce42e42cd18e0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glext</key> -      <map> -        <key>license</key> -        <string>glext</string> -        <key>license_file</key> -        <string>LICENSES/glext.txt</string> -        <key>name</key> -        <string>glext</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glh_linear</key> -      <map> -        <key>license</key> -        <string>glh_linear</string> -        <key>license_file</key> -        <string>LICENSES/glh_linear.txt</string> -        <key>name</key> -        <string>glh_linear</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>366f940f2634b0e05954646927620bfd</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>26f2df1f0b0fa01e94e0253e322f3583</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glui</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/glui.txt</string> -        <key>name</key> -        <string>glui</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bd2f84ef8bd308570e2e532a371dc2ef</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e006635a741420a15f40bbdac13bd8d7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>google_breakpad</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/google_breakpad.txt</string> -        <key>name</key> -        <string>google_breakpad</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>21babc394dbf8572830f2e85adec7b9f</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>204b02a9480c411232255798839431a2</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>627c51136e14e64c5d39933f3abd3bdf</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>googlemock</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/googlemock.txt</string> -        <key>name</key> -        <string>googlemock</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>886ee428f058005ab7f90f61784ec9d9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>782ca04e56d8eab755adcae297cafa7c</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>212701468920519f3989677cea9ca4f1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>gstreamer</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/gstreamer.txt</string> -        <key>name</key> -        <string>gstreamer</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ddbc0a64ad788107877fee777403592c</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>gtk-atk-pango-glib</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/gtk-atk-pango-glib.txt</string> -        <key>name</key> -        <string>gtk-atk-pango-glib</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>03694ade27f53199229c03cbbda89214</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c257d718abdde8cfe8a0af26175161a7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>jpeglib</key> -      <map> -        <key>license</key> -        <string>jpeglib</string> -        <key>license_file</key> -        <string>LICENSES/jpeglib.txt</string> -        <key>name</key> -        <string>jpeglib</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>dcca1db348831cdb7c6b26dc4076c597</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a202ec58cef9097c94acfa958ed6da8d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>jsoncpp</key> -      <map> -        <key>license</key> -        <string>jsoncpp</string> -        <key>license_file</key> -        <string>LICENSES/jsoncpp.txt</string> -        <key>name</key> -        <string>jsoncpp</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>de8b96120c274e052abb4f692861be46</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>840cd9455638c0ea52c613cfddd07d5b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>afff2018e6a887c281b072eecdd9343e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>kdu</key> -      <map> -        <key>license</key> -        <string>kdu</string> -        <key>license_file</key> -        <string>LICENSES/kdu.txt</string> -        <key>name</key> -        <string>kdu</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d91e1f483209cd3eba04135c6a59e829</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/Darwin/installer/kdu-6.4.1-darwin-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fbf8a4f78dff986d7c16b3a0437e033e</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6cd9f36465ef73a3df34bf2b3bba2ced</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/CYGWIN/installer/kdu-6.4.1-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libpng</key> -      <map> -        <key>license</key> -        <string>libpng</string> -        <key>license_file</key> -        <string>LICENSES/libpng.txt</string> -        <key>name</key> -        <string>libpng</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6fe1adf12d98bce9111f60ee762007b9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f194ba857ca8dd86483a3ef24535d0db</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libuuid</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/libuuid.txt</string> -        <key>name</key> -        <string>libuuid</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>873e8e99d29711df2efa30646dca1795</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>libxml</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/libxml.txt</string> -        <key>name</key> -        <string>libxml</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6414642528f42dac1cd9a012c99cd748</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>llconvexdecomposition</key> -      <map> -        <key>license</key> -        <string>havok</string> -        <key>license_file</key> -        <string>on_file</string> -        <key>name</key> -        <string>llconvexdecomposition</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6e45ad68506cd1ba49fd35a3201f0478</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>00ff5144612c2e261a0811a4503ce3ba</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a4635dcbbe0915ce023dd41d3b848d4c</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>llconvexdecompositionstub</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/lgpl.txt</string> -        <key>name</key> -        <string>llconvexdecompositionstub</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bc1388fc28dbb3bba1fe7cb8d09f49b4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110421.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3295bd4a0514b7c15dda9044f40c175e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110422.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>92f1dff3249024c1534b55343ed79ea3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110421.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>llqtwebkit</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/llqtwebkit.txt</string> -        <key>name</key> -        <string>llqtwebkit</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>76c1015eafcba5ca9932c3009533b51c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225273/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110329.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c05a33ee8b6f253b5a744596dfc3707d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1b1b8e104e39c542d69eb37b5ee81818</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225249/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110329.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>mesa</key> -      <map> -        <key>license</key> -        <string>mesa</string> -        <key>license_file</key> -        <string>LICENSES/mesa.txt</string> -        <key>name</key> -        <string>mesa</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1f600840463c7327ea17486821425750</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>ndofdev</key> -      <map> -        <key>license</key> -        <string>linden</string> -        <key>license_file</key> -        <string>LICENSES/libndofdev.txt</string> -        <key>name</key> -        <string>ndofdev</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>674d37d2ba76a2df7f18c47bf50b5d03</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c81bacf922bb3b540d92b660364c48ce</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>ogg-vorbis</key> -      <map> -        <key>license</key> -        <string>ogg-vorbis</string> -        <key>license_file</key> -        <string>LICENSES/ogg-vorbis.txt</string> -        <key>name</key> -        <string>ogg-vorbis</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e849bc2b779fb7cc5e81aeb021a542c0</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>71eaa462eb0bf8842277a3436483a354</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>291dbba89dd8162b76f2c2d82e908c6f</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>openSSL</key> -      <map> -        <key>license</key> -        <string>openSSL</string> -        <key>license_file</key> -        <string>LICENSES/openssl.txt</string> -        <key>name</key> -        <string>openSSL</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>facee34b8bd57ad602157e65a5af1a49</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>774c7f0a0312bee3054757a623e227bc</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>openal_soft</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/OPENAL.txt</string> -        <key>name</key> -        <string>openal_soft</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fccdca18a950ac9363c6fb39118b80e1</string> -              <key>hash_algorithm</key> -              <string>md5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>04df406f3e5d04cf176660bdac66c3a1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -        <key>version</key> -        <string>3ad86a1c</string> -      </map> -      <key>openjpeg</key> -      <map> -        <key>license</key> -        <string>openjpeg</string> -        <key>license_file</key> -        <string>LICENSES/openjpeg.txt</string> -        <key>name</key> -        <string>openjpeg</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4be51c7cca7d84831e30b63279df7ae5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fb2382014c79e0049746e4e29bd834f9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ca5765af55f798724d601720afdf6953</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>pcre</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/pcre-license.txt</string> -        <key>name</key> -        <string>pcre</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a8e74694a0f4248228c13c845ed0a6f8</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bb0abe962b3b8208ed2dab0424aab33d</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>               -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>quicktime</key> -      <map> -        <key>license</key> -        <string>quicktime</string> -        <key>license_file</key> -        <string>LICENSES/quicktime.txt</string> -        <key>name</key> -        <string>quicktime</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>52e49ab6937b09882389da0dbaec17f5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>slvoice</key> -      <map> -        <key>license</key> -        <string>vivox</string> -        <key>license_file</key> -        <string>LICENSES/slvoice.txt</string> -        <key>name</key> -        <string>slvoice</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e19576af3c0affc71293d8f0bcce2606</string> -              <key>url</key> -              <string> http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20110120.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>53fefed8120d7c6a0eb6778edae6fa32</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20110120.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>44f84b3b45f7067a104a7c34d50d62f0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20110120.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>tcmalloc</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/google-perftools.txt</string> -        <key>name</key> -        <string>tcmalloc</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>dde928cb24d22a267004a8c17669ba65</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226426/arch/Linux/installer/google_perftools-1.7-linux-20110412.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8308f7bd68bb7083655753b7abe7225f</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226287/arch/CYGWIN/installer/google_perftools-1.7-windows-20110411.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>tut</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/tut.txt</string> -        <key>name</key> -        <string>tut</string> -        <key>platforms</key> -        <map> -          <key>common</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5c6d3e606f027e78f056cb77b20f228e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>common</string> -          </map> -        </map> -      </map> -      <key>xmlrpc-epi</key> -      <map> -        <key>license</key> -        <string>xmlrpc-epi</string> -        <key>license_file</key> -        <string>LICENSES/xmlrpc-epi.txt</string> -        <key>name</key> -        <string>xmlrpc-epi</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a3e0fb4b4a51b01690a99747a1cca531</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>174ab797440157956eda7061dae37564</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5181d1a8f2516928ac064d72acf164a4</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>zlib</key> -      <map> -        <key>license</key> -        <string>zlib</string> -        <key>license_file</key> -        <string>LICENSES/zlib.txt</string> -        <key>name</key> -        <string>zlib</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>49b8de20f3bb43537f51311894a72de1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>7b4cf3aa2c04937d0a20761516587896</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5852192646681817fc3c3a8c95e91c1e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -    </map> -    <key>package_description</key> -    <map> -      <key>name</key> -      <string>viewer_development</string> -      <key>platforms</key> -      <map> -        <key>common</key> -        <map> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>common</string> -        </map> -        <key>darwin</key> -        <map> -          <key>build_directory</key> -          <string>build-darwin-i386</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>|</string> -                  <string>grep</string> -                  <string>-v</string> -                  <string>setenv</string> -                </array> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Debug</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Debug</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>|</string> -                  <string>grep</string> -                  <string>-v</string> -                  <string>setenv</string> -                </array> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration RelWithDebInfo</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration RelWithDebInfo</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>|</string> -                  <string>grep</string> -                  <string>-v</string> -                  <string>setenv</string> -                </array> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Release</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Release</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>darwin</string> -        </map> -        <key>linux</key> -        <map> -          <key>build_directory</key> -          <string>build-linux-i686</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -            <key>default</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>name</key> -              <string>default</string> -            </map> -          </map> -          <key>name</key> -          <string>linux</string> -        </map> -        <key>windows</key> -        <map> -          <key>build_directory</key> -          <string>build-vc100</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=Debug|Win32"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Debug</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=Debug</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=RelWithDebInfo|Win32"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>RelWithDebInfo</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=RelWithDebInfo</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=Release|Win32"</string> -                  <string>"/CL_ADD=/m:1"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Release</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=Release</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>windows</string> -        </map> -      </map> -    </map> -    <key>type</key> -    <string>autobuild</string> -    <key>version</key> -    <string>1.2</string> -  </map> -</llsd> +<?xml version="1.0" ?>
 +<llsd>
 +<map>
 +    <key>installables</key>
 +    <map>
 +      <key>GLOD</key>
 +      <map>
 +        <key>license</key>
 +        <string>GLOD</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glod.txt</string>
 +        <key>name</key>
 +        <string>GLOD</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>930bdd987a321eda1838caba8cd6098f</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/230348/arch/Darwin/installer/glod-1.0pre4-darwin-20110519.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fb33b6cac2e6b98f93c5efa2af2e5a00</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/230348/arch/Linux/installer/glod-1.0pre4-linux-20110519.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>388cf0e292f756b4bb37696622f0bbc5</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/230348/arch/CYGWIN/installer/glod-1.0pre4-windows-20110519.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>SDL</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/SDL.txt</string>
 +        <key>name</key>
 +        <string>SDL</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>apr_suite</key>
 +      <map>
 +        <key>license</key>
 +        <string>apache</string>
 +        <key>license_file</key>
 +        <string>LICENSES/apr_suite.txt</string>
 +        <key>name</key>
 +        <string>apr_suite</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9868bfa0b6954e4884c49c6f30068c80</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-darwin-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ff62946c518a247c86e1066c1e9a5855</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>73785c200a5b4ef74a1230b028bb680d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-windows-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ares</key>
 +      <map>
 +        <key>license</key>
 +        <string>c-ares</string>
 +        <key>license_file</key>
 +        <string>LICENSES/c-ares.txt</string>
 +        <key>name</key>
 +        <string>ares</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e6caaeea16131e1f2343ecd7765e3147</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0745872db83d45f4ab3bdc697d98e264</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1dcec6babd249a2597114d4ac226c461</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>boost</key>
 +      <map>
 +        <key>license</key>
 +        <string>boost</string>
 +        <key>license_file</key>
 +        <string>LICENSES/boost.txt</string>
 +        <key>name</key>
 +        <string>boost</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d98078791ce345bf6168ce9ba53ca2d7</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/222752/arch/Darwin/installer/boost-1.45.0-darwin-20110304.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a34e7fffdb94a6a4d8a2966b1f216da3</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>98be22c8833aa2bca184b9fa09fbb82b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-windows-20110124.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>colladadom</key>
 +      <map>
 +        <key>license</key>
 +        <string>scea</string>
 +        <key>license_file</key>
 +        <string>LICENSES/collada.txt</string>
 +        <key>name</key>
 +        <string>colladadom</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>480b27a0cb39a4adfcdeabef895de3e1</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d05be8fc196e9ce7b6636b931cf13dff</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226716/arch/Linux/installer/colladadom-2.2-linux-20110415.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>curl</key>
 +      <map>
 +        <key>license</key>
 +        <string>curl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/curl.txt</string>
 +        <key>name</key>
 +        <string>curl</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>aaea644191807f51051cefa2fac11069</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>2d9377951d99a1aa4735cea8d4b5aa71</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fea96aa2a7d513397317194f3d6c979b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>db</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/db.txt</string>
 +        <key>name</key>
 +        <string>db</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>dbusglib</key>
 +      <map>
 +        <key>license</key>
 +        <string>AFL2.1</string>
 +        <key>license_file</key>
 +        <string>LICENSES/dbus-glib.txt</string>
 +        <key>name</key>
 +        <string>dbusglib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>94b058b9a81114dc4567bd78e4335425</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>elfio</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/elfio.txt</string>
 +        <key>name</key>
 +        <string>elfio</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>expat</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/expat.txt</string>
 +        <key>name</key>
 +        <string>expat</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>180e03d0be1f1acfc3244e78742d7bef</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9bd79781b58e556ab1c36084ec4a1c0c</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>fmod</key>
 +      <map>
 +        <key>license</key>
 +        <string>fmod</string>
 +        <key>license_file</key>
 +        <string>LICENSES/fmod.txt</string>
 +        <key>name</key>
 +        <string>fmod</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>61ead113e6479452e6b690c84b4e9d30</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0c61d643db54d2e5999be8254569d8b3</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d9a9a6ad86895353bcd63374a4c1a91d</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>fontconfig</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/fontconfig.txt</string>
 +        <key>name</key>
 +        <string>fontconfig</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d8b08b657247566bde5fd853c7622478</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>freeglut</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/freeglut.txt</string>
 +        <key>name</key>
 +        <string>freeglut</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>freetype</key>
 +      <map>
 +        <key>license</key>
 +        <string>freetype</string>
 +        <key>license_file</key>
 +        <string>LICENSES/freetype.txt</string>
 +        <key>name</key>
 +        <string>freetype</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>271349827b939406162ce42e42cd18e0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glext</key>
 +      <map>
 +        <key>license</key>
 +        <string>glext</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glext.txt</string>
 +        <key>name</key>
 +        <string>glext</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5de58ca0fe19abf68b25956762ee0d29</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5de58ca0fe19abf68b25956762ee0d29</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glh_linear</key>
 +      <map>
 +        <key>license</key>
 +        <string>glh_linear</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glh_linear.txt</string>
 +        <key>name</key>
 +        <string>glh_linear</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>366f940f2634b0e05954646927620bfd</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>26f2df1f0b0fa01e94e0253e322f3583</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glui</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glui.txt</string>
 +        <key>name</key>
 +        <string>glui</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bd2f84ef8bd308570e2e532a371dc2ef</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e006635a741420a15f40bbdac13bd8d7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>google_breakpad</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/google_breakpad.txt</string>
 +        <key>name</key>
 +        <string>google_breakpad</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>21babc394dbf8572830f2e85adec7b9f</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>204b02a9480c411232255798839431a2</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>627c51136e14e64c5d39933f3abd3bdf</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>googlemock</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/googlemock.txt</string>
 +        <key>name</key>
 +        <string>googlemock</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>886ee428f058005ab7f90f61784ec9d9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>782ca04e56d8eab755adcae297cafa7c</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>212701468920519f3989677cea9ca4f1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>gstreamer</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/gstreamer.txt</string>
 +        <key>name</key>
 +        <string>gstreamer</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ddbc0a64ad788107877fee777403592c</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>gtk-atk-pango-glib</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/gtk-atk-pango-glib.txt</string>
 +        <key>name</key>
 +        <string>gtk-atk-pango-glib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>03694ade27f53199229c03cbbda89214</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c257d718abdde8cfe8a0af26175161a7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>jpeglib</key>
 +      <map>
 +        <key>license</key>
 +        <string>jpeglib</string>
 +        <key>license_file</key>
 +        <string>LICENSES/jpeglib.txt</string>
 +        <key>name</key>
 +        <string>jpeglib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>dcca1db348831cdb7c6b26dc4076c597</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a202ec58cef9097c94acfa958ed6da8d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>jsoncpp</key>
 +      <map>
 +        <key>license</key>
 +        <string>jsoncpp</string>
 +        <key>license_file</key>
 +        <string>LICENSES/jsoncpp.txt</string>
 +        <key>name</key>
 +        <string>jsoncpp</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>de8b96120c274e052abb4f692861be46</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>840cd9455638c0ea52c613cfddd07d5b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>afff2018e6a887c281b072eecdd9343e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>kdu</key>
 +      <map>
 +        <key>license</key>
 +        <string>kdu</string>
 +        <key>license_file</key>
 +        <string>LICENSES/kdu.txt</string>
 +        <key>name</key>
 +        <string>kdu</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d91e1f483209cd3eba04135c6a59e829</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/Darwin/installer/kdu-6.4.1-darwin-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fbf8a4f78dff986d7c16b3a0437e033e</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6cd9f36465ef73a3df34bf2b3bba2ced</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/CYGWIN/installer/kdu-6.4.1-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libpng</key>
 +      <map>
 +        <key>license</key>
 +        <string>libpng</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libpng.txt</string>
 +        <key>name</key>
 +        <string>libpng</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6fe1adf12d98bce9111f60ee762007b9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>f194ba857ca8dd86483a3ef24535d0db</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libuuid</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libuuid.txt</string>
 +        <key>name</key>
 +        <string>libuuid</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>873e8e99d29711df2efa30646dca1795</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libxml</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libxml.txt</string>
 +        <key>name</key>
 +        <string>libxml</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6414642528f42dac1cd9a012c99cd748</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llconvexdecomposition</key>
 +      <map>
 +        <key>license</key>
 +        <string>havok</string>
 +        <key>license_file</key>
 +        <string>on_file</string>
 +        <key>name</key>
 +        <string>llconvexdecomposition</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6e45ad68506cd1ba49fd35a3201f0478</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>00ff5144612c2e261a0811a4503ce3ba</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a4635dcbbe0915ce023dd41d3b848d4c</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llconvexdecompositionstub</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/lgpl.txt</string>
 +        <key>name</key>
 +        <string>llconvexdecompositionstub</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bc1388fc28dbb3bba1fe7cb8d09f49b4</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110421.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3295bd4a0514b7c15dda9044f40c175e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110422.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>92f1dff3249024c1534b55343ed79ea3</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110421.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llqtwebkit</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/llqtwebkit.txt</string>
 +        <key>name</key>
 +        <string>llqtwebkit</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>76c1015eafcba5ca9932c3009533b51c</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225273/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110329.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c05a33ee8b6f253b5a744596dfc3707d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1b1b8e104e39c542d69eb37b5ee81818</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225249/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110329.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>mesa</key>
 +      <map>
 +        <key>license</key>
 +        <string>mesa</string>
 +        <key>license_file</key>
 +        <string>LICENSES/mesa.txt</string>
 +        <key>name</key>
 +        <string>mesa</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1f600840463c7327ea17486821425750</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ndofdev</key>
 +      <map>
 +        <key>license</key>
 +        <string>linden</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libndofdev.txt</string>
 +        <key>name</key>
 +        <string>ndofdev</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>674d37d2ba76a2df7f18c47bf50b5d03</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c81bacf922bb3b540d92b660364c48ce</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ogg-vorbis</key>
 +      <map>
 +        <key>license</key>
 +        <string>ogg-vorbis</string>
 +        <key>license_file</key>
 +        <string>LICENSES/ogg-vorbis.txt</string>
 +        <key>name</key>
 +        <string>ogg-vorbis</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e849bc2b779fb7cc5e81aeb021a542c0</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>71eaa462eb0bf8842277a3436483a354</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>291dbba89dd8162b76f2c2d82e908c6f</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>openSSL</key>
 +      <map>
 +        <key>license</key>
 +        <string>openSSL</string>
 +        <key>license_file</key>
 +        <string>LICENSES/openssl.txt</string>
 +        <key>name</key>
 +        <string>openSSL</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>facee34b8bd57ad602157e65a5af1a49</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>774c7f0a0312bee3054757a623e227bc</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>openal_soft</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/OPENAL.txt</string>
 +        <key>name</key>
 +        <string>openal_soft</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fccdca18a950ac9363c6fb39118b80e1</string>
 +              <key>hash_algorithm</key>
 +              <string>md5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>04df406f3e5d04cf176660bdac66c3a1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +        <key>version</key>
 +        <string>3ad86a1c</string>
 +      </map>
 +      <key>openjpeg</key>
 +      <map>
 +        <key>license</key>
 +        <string>openjpeg</string>
 +        <key>license_file</key>
 +        <string>LICENSES/openjpeg.txt</string>
 +        <key>name</key>
 +        <string>openjpeg</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4be51c7cca7d84831e30b63279df7ae5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fb2382014c79e0049746e4e29bd834f9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ca5765af55f798724d601720afdf6953</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>pcre</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/pcre-license.txt</string>
 +        <key>name</key>
 +        <string>pcre</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a8e74694a0f4248228c13c845ed0a6f8</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bb0abe962b3b8208ed2dab0424aab33d</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>              
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>quicktime</key>
 +      <map>
 +        <key>license</key>
 +        <string>quicktime</string>
 +        <key>license_file</key>
 +        <string>LICENSES/quicktime.txt</string>
 +        <key>name</key>
 +        <string>quicktime</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>52e49ab6937b09882389da0dbaec17f5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>slvoice</key>
 +      <map>
 +        <key>license</key>
 +        <string>vivox</string>
 +        <key>license_file</key>
 +        <string>LICENSES/slvoice.txt</string>
 +        <key>name</key>
 +        <string>slvoice</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e19576af3c0affc71293d8f0bcce2606</string>
 +              <key>url</key>
 +              <string> http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20110120.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>53fefed8120d7c6a0eb6778edae6fa32</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20110120.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>44f84b3b45f7067a104a7c34d50d62f0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20110120.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>tcmalloc</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/google-perftools.txt</string>
 +        <key>name</key>
 +        <string>tcmalloc</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>dde928cb24d22a267004a8c17669ba65</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226426/arch/Linux/installer/google_perftools-1.7-linux-20110412.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8308f7bd68bb7083655753b7abe7225f</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226287/arch/CYGWIN/installer/google_perftools-1.7-windows-20110411.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>tut</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/tut.txt</string>
 +        <key>name</key>
 +        <string>tut</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>common</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5c6d3e606f027e78f056cb77b20f228e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>common</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>xmlrpc-epi</key>
 +      <map>
 +        <key>license</key>
 +        <string>xmlrpc-epi</string>
 +        <key>license_file</key>
 +        <string>LICENSES/xmlrpc-epi.txt</string>
 +        <key>name</key>
 +        <string>xmlrpc-epi</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a3e0fb4b4a51b01690a99747a1cca531</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>174ab797440157956eda7061dae37564</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5181d1a8f2516928ac064d72acf164a4</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>zlib</key>
 +      <map>
 +        <key>license</key>
 +        <string>zlib</string>
 +        <key>license_file</key>
 +        <string>LICENSES/zlib.txt</string>
 +        <key>name</key>
 +        <string>zlib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>49b8de20f3bb43537f51311894a72de1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>7b4cf3aa2c04937d0a20761516587896</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5852192646681817fc3c3a8c95e91c1e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +    </map>
 +    <key>package_description</key>
 +    <map>
 +      <key>name</key>
 +      <string>viewer_development</string>
 +      <key>platforms</key>
 +      <map>
 +        <key>common</key>
 +        <map>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>common</string>
 +        </map>
 +        <key>darwin</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-darwin-i386</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>|</string>
 +                  <string>grep</string>
 +                  <string>-v</string>
 +                  <string>setenv</string>
 +                </array>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Debug</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Debug</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>|</string>
 +                  <string>grep</string>
 +                  <string>-v</string>
 +                  <string>setenv</string>
 +                </array>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration RelWithDebInfo</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration RelWithDebInfo</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>|</string>
 +                  <string>grep</string>
 +                  <string>-v</string>
 +                  <string>setenv</string>
 +                </array>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Release</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Release</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>darwin</string>
 +        </map>
 +        <key>linux</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-linux-i686</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +            <key>default</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>name</key>
 +              <string>default</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>linux</string>
 +        </map>
 +        <key>windows</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-vc100</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>BuildConsole</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/build</string>
 +                  <string>"/cfg=Debug|Win32"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>Debug</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=Debug</string>
 +                  <string>/p:Platform=Win32</string>
 +                  <string>/t:Build</string>
 +                  <string>/p:useenv=true</string>
 +                  <string>/verbosity:minimal</string>
 +                  <string>/toolsversion:4.0</string>
 +                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>BuildConsole</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/build</string>
 +                  <string>"/cfg=RelWithDebInfo|Win32"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>RelWithDebInfo</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=RelWithDebInfo</string>
 +                  <string>/p:Platform=Win32</string>
 +                  <string>/t:Build</string>
 +                  <string>/p:useenv=true</string>
 +                  <string>/verbosity:minimal</string>
 +                  <string>/toolsversion:4.0</string>
 +                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>BuildConsole</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/build</string>
 +                  <string>"/cfg=Release|Win32"</string>
 +                  <string>"/CL_ADD=/m:1"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>Release</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=Release</string>
 +                  <string>/p:Platform=Win32</string>
 +                  <string>/t:Build</string>
 +                  <string>/p:useenv=true</string>
 +                  <string>/verbosity:minimal</string>
 +                  <string>/toolsversion:4.0</string>
 +                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>windows</string>
 +        </map>
 +      </map>
 +    </map>
 +    <key>type</key>
 +    <string>autobuild</string>
 +    <key>version</key>
 +    <string>1.2</string>
 +  </map>
 +</llsd>
 diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake index cb5124812d..cb5124812d 100755..100644 --- a/indra/cmake/FMOD.cmake +++ b/indra/cmake/FMOD.cmake diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py index ce2d1e0386..ce2d1e0386 100755..100644 --- a/indra/cmake/run_build_test.py +++ b/indra/cmake/run_build_test.py diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 80df91a5c1..9910281b64 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -115,6 +115,7 @@ set(llcommon_HEADER_FILES      indra_constants.h      linden_common.h      linked_lists.h +    llaccountingquota.h      llallocator.h      llallocator_heap_profile.h      llagentconstants.h diff --git a/indra/llcommon/llaccountingquota.h b/indra/llcommon/llaccountingquota.h new file mode 100644 index 0000000000..f52d94f868 --- /dev/null +++ b/indra/llcommon/llaccountingquota.h @@ -0,0 +1,78 @@ +/**  + * @file llaccountingquota.h + * @ + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + *  + * Copyright (c) 2001-2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_ACCOUNTINGQUOTA_H +#define LL_ACCOUNTINGQUOTA_H + +struct ParcelQuota +{ +	ParcelQuota( F32 ownerRenderCost, F32 ownerPhysicsCost, F32 ownerNetworkCost, F32 ownerSimulationCost, +				F32 groupRenderCost, F32 groupPhysicsCost, F32 groupNetworkCost, F32 groupSimulationCost, +				F32 otherRenderCost, F32 otherPhysicsCost, F32 otherNetworkCost, F32 otherSimulationCost, +				F32 totalRenderCost, F32 totalPhysicsCost, F32 totalNetworkCost, F32 totalSimulationCost) +	: mOwnerRenderCost( ownerRenderCost ), mOwnerPhysicsCost( ownerPhysicsCost )  +	, mOwnerNetworkCost( ownerNetworkCost ), mOwnerSimulationCost( ownerSimulationCost ) +	, mGroupRenderCost( groupRenderCost ), mGroupPhysicsCost( groupPhysicsCost ) +	, mGroupNetworkCost( groupNetworkCost ), mGroupSimulationCost( groupSimulationCost ) +	, mOtherRenderCost( otherRenderCost ), mOtherPhysicsCost( otherPhysicsCost ) +	, mOtherNetworkCost( otherNetworkCost ), mOtherSimulationCost( otherSimulationCost ) +	, mTotalRenderCost( totalRenderCost ), mTotalPhysicsCost( totalPhysicsCost )  +	, mTotalNetworkCost( totalNetworkCost ), mTotalSimulationCost( totalSimulationCost ) +	{ +	} +	ParcelQuota(){}			 +	F32 mOwnerRenderCost, mOwnerPhysicsCost, mOwnerNetworkCost, mOwnerSimulationCost; +	F32 mGroupRenderCost, mGroupPhysicsCost, mGroupNetworkCost, mGroupSimulationCost; +	F32 mOtherRenderCost, mOtherPhysicsCost, mOtherNetworkCost, mOtherSimulationCost; +	F32 mTotalRenderCost, mTotalPhysicsCost, mTotalNetworkCost, mTotalSimulationCost; +}; + +struct SelectionQuota +{ +	SelectionQuota( S32 localId, F32 renderCost, F32 physicsCost, F32 networkCost, F32 simulationCost ) +	: mLocalId( localId) +	, mRenderCost( renderCost ) +	, mPhysicsCost( physicsCost ) +	, mNetworkCost( networkCost ) +	, mSimulationCost( simulationCost ) +	{ +	} +	SelectionQuota() {} +	 +	F32 mRenderCost, mPhysicsCost, mNetworkCost, mSimulationCost;	 +	S32 mLocalId; +}; + +#endif + + + diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h index 87c2d6775b..f5b242fdfc 100644 --- a/indra/llcommon/llchat.h +++ b/indra/llcommon/llchat.h @@ -49,7 +49,8 @@ typedef enum e_chat_type  	CHAT_TYPE_STOP = 5,  	CHAT_TYPE_DEBUG_MSG = 6,  	CHAT_TYPE_REGION = 7, -	CHAT_TYPE_OWNER = 8 +	CHAT_TYPE_OWNER = 8, +	CHAT_TYPE_DIRECT = 9		// From llRegionSayTo()  } EChatType;  typedef enum e_chat_audible_level diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 7703132d90..67a83c7aa8 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 2;  const S32 LL_VERSION_MINOR = 7; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 2;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 0a4cd51ea0..e8cd871157 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -1348,3 +1348,12 @@ LLParcel::ECategory category_ui_string_to_category(const std::string& s)      // is a distinct option from "None" and "Other"      return LLParcel::C_ANY;  } + +void LLParcel::updateQuota( const LLUUID& objectId,  const ParcelQuota& quota ) +{ +	if ( mID == objectId ) +	{ +		mQuota = quota; +	} +} + diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index 71b65d99ce..4893337967 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -34,7 +34,7 @@  #include "llpermissions.h"  #include "lltimer.h"  #include "v3math.h" - +#include "llaccountingquota.h"  // Grid out of which parcels taken is stepped every 4 meters.  const F32 PARCEL_GRID_STEP_METERS	= 4.f; @@ -586,7 +586,11 @@ public:  	LLUUID	getPreviousOwnerID() const		{ return mPreviousOwnerID; }  	BOOL	getPreviouslyGroupOwned() const	{ return mPreviouslyGroupOwned; }  	BOOL	getSellWithObjects() const		{ return (mParcelFlags & PF_SELL_PARCEL_OBJECTS) ? TRUE : FALSE; } - +	 +	 +			void		 updateQuota( const LLUUID& objectId, const ParcelQuota& quota ); +	const	ParcelQuota& getQuota( void ) { return mQuota; }	 +	  protected:  	LLUUID mID;  	LLUUID				mOwnerID; @@ -657,8 +661,9 @@ protected:  	BOOL				mRegionPushOverride;  	BOOL				mRegionDenyAnonymousOverride;  	BOOL				mRegionDenyAgeUnverifiedOverride; - - +	 +	ParcelQuota			mQuota; +	  public:  	// HACK, make private  	S32					mLocalID; diff --git a/indra/llmessage/lldatapacker.h b/indra/llmessage/lldatapacker.h index dd9c4eaa38..b0a638c16e 100644 --- a/indra/llmessage/lldatapacker.h +++ b/indra/llmessage/lldatapacker.h @@ -168,10 +168,15 @@ public:  				S32			getCurrentSize() const	{ return (S32)(mCurBufferp - mBufferp); }  				S32			getBufferSize() const	{ return mBufferSize; } +				const U8*   getBuffer() const   { return mBufferp; }      				void		reset()				{ mCurBufferp = mBufferp; mWriteEnabled = (mCurBufferp != NULL); }  				void		freeBuffer()		{ delete [] mBufferp; mBufferp = mCurBufferp = NULL; mBufferSize = 0; mWriteEnabled = FALSE; }  				void		assignBuffer(U8 *bufferp, S32 size)  				{ +					if(mBufferp && mBufferp != bufferp) +					{ +						freeBuffer() ; +					}  					mBufferp = bufferp;  					mCurBufferp = bufferp;  					mBufferSize = size; diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 794cdb83d5..57ac7a143f 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -991,6 +991,9 @@ void LLModel::normalizeVolumeFaces()  		scale.splat(1.f);  		scale.div(size); +		LLVector4a inv_scale(1.f); +		inv_scale.div(scale); +  		for (U32 i = 0; i < mVolumeFaces.size(); ++i)  		{  			LLVolumeFace& face = mVolumeFaces[i]; @@ -1007,10 +1010,14 @@ void LLModel::normalizeVolumeFaces()  			// For all the positions, we scale  			// the positions to fit within the unit cube.  			LLVector4a* pos = (LLVector4a*) face.mPositions; +			LLVector4a* norm = (LLVector4a*) face.mNormals; +  			for (U32 j = 0; j < face.mNumVertices; ++j)  			{  			 	pos[j].add(trans);  				pos[j].mul(scale); +				norm[j].mul(inv_scale); +				norm[j].normalize3();  			}  		} diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index f29ee0e57e..a460912e70 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -328,6 +328,7 @@ LLGLManager::LLGLManager() :  	mHasShaderObjects(FALSE),  	mHasVertexShader(FALSE),  	mHasFragmentShader(FALSE), +	mNumTextureImageUnits(0),  	mHasOcclusionQuery(FALSE),  	mHasOcclusionQuery2(FALSE),  	mHasPointParameters(FALSE), @@ -534,6 +535,13 @@ bool LLGLManager::initGL()  		return false;  	} +	if (mHasFragmentShader) +	{ +		GLint num_tex_image_units; +		glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &num_tex_image_units); +		mNumTextureImageUnits = num_tex_image_units; +	} +	  	setToDebugGPU();  	initGLStates(); @@ -878,11 +886,13 @@ void LLGLManager::initExtensions()  		LL_INFOS("RenderInit") << "Disabling mip-map generation for Intel GPUs" << LL_ENDL;  		mHasMipMapGeneration = FALSE;  	} +#if !LL_DARWIN  	if (mIsATI && mHasMipMapGeneration)  	{  		LL_INFOS("RenderInit") << "Disabling mip-map generation for ATI GPUs (performance opt)" << LL_ENDL;  		mHasMipMapGeneration = FALSE;  	} +#endif  	// Misc  	glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 3d002fd8c4..1d7ab188fc 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -91,6 +91,7 @@ public:  	BOOL mHasShaderObjects;  	BOOL mHasVertexShader;  	BOOL mHasFragmentShader; +	S32  mNumTextureImageUnits;  	BOOL mHasOcclusionQuery;  	BOOL mHasOcclusionQuery2;  	BOOL mHasPointParameters; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 49e10c4790..c37139ac4c 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -119,14 +119,29 @@ void LLTexUnit::refreshState(void)  	gGL.flush();  	glActiveTextureARB(GL_TEXTURE0_ARB + mIndex); + +	// +	// Per apple spec, don't call glEnable/glDisable when index exceeds max texture units +	// http://www.mailinglistarchive.com/html/mac-opengl@lists.apple.com/2008-07/msg00653.html +	// +	bool enableDisable = (mIndex < gGLManager.mNumTextureUnits); +		  	if (mCurrTexType != TT_NONE)  	{ -		glEnable(sGLTextureType[mCurrTexType]); +		if (enableDisable) +		{ +			glEnable(sGLTextureType[mCurrTexType]); +		} +		  		glBindTexture(sGLTextureType[mCurrTexType], mCurrTexture);  	}  	else  	{ -		glDisable(GL_TEXTURE_2D); +		if (enableDisable) +		{ +			glDisable(GL_TEXTURE_2D); +		} +		  		glBindTexture(GL_TEXTURE_2D, 0);	  	} @@ -167,7 +182,11 @@ void LLTexUnit::enable(eTextureType type)  		mCurrTexType = type;  		gGL.flush(); -		glEnable(sGLTextureType[type]); +		 +		if (mIndex < gGLManager.mNumTextureUnits) +		{ +			glEnable(sGLTextureType[type]); +		}  	}  } @@ -180,7 +199,12 @@ void LLTexUnit::disable(void)  		activate();  		unbind(mCurrTexType);  		gGL.flush(); -		glDisable(sGLTextureType[mCurrTexType]); +		 +		if (mIndex < gGLManager.mNumTextureUnits) +		{ +			glDisable(sGLTextureType[mCurrTexType]); +		} +		  		mCurrTexType = TT_NONE;  	}  } diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index cd2556d435..da1e94df64 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -44,6 +44,7 @@ void check_framebuffer_status()  		case GL_FRAMEBUFFER_COMPLETE:  			break;  		default: +			llwarns << "check_framebuffer_status failed -- " << std::hex << status << llendl;  			ll_fail("check_framebuffer_status failed");	  			break;  		} diff --git a/indra/llwindow/llkeyboardheadless.cpp b/indra/llwindow/llkeyboardheadless.cpp index 4dfaaed4e1..c87617c9ff 100644 --- a/indra/llwindow/llkeyboardheadless.cpp +++ b/indra/llwindow/llkeyboardheadless.cpp @@ -46,5 +46,28 @@ MASK LLKeyboardHeadless::currentMask(BOOL for_mouse_event)  { return MASK_NONE; }  void LLKeyboardHeadless::scanKeyboard() -{ }  +{ +	for (S32 key = 0; key < KEY_COUNT; key++) +	{ +		// Generate callback if any event has occurred on this key this frame. +		// Can't just test mKeyLevel, because this could be a slow frame and +		// key might have gone down then up. JC +		if (mKeyLevel[key] || mKeyDown[key] || mKeyUp[key]) +		{ +			mCurScanKey = key; +			mCallbacks->handleScanKey(key, mKeyDown[key], mKeyUp[key], mKeyLevel[key]); +		} +	} + +	// Reset edges for next frame +	for (S32 key = 0; key < KEY_COUNT; key++) +	{ +		mKeyUp[key] = FALSE; +		mKeyDown[key] = FALSE; +		if (mKeyLevel[key]) +		{ +			mKeyLevelFrameCount[key]++; +		} +	} +} diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp index 967c69fea9..7ffe53a307 100644 --- a/indra/lscript/lscript_library/lscript_library.cpp +++ b/indra/lscript/lscript_library/lscript_library.cpp @@ -461,6 +461,9 @@ void LLScriptLibrary::init()  	addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");  	addFunction(10.f, 0.f, dummy_func, "llRequestDisplayName", "k", "k"); +	addFunction(10.f, 0.f, dummy_func, "llGetEnv", "s", "s"); +	addFunction(10.f, 0.f, dummy_func, "llRegionSayTo", NULL, "kis"); +  	// energy, sleep, dummy_func, name, return type, parameters, help text, gods-only  	// IF YOU ADD NEW SCRIPT CALLS, YOU MUST PUT THEM AT THE END OF THIS LIST. diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index cbf22b75e8..523ea8a394 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -77,6 +77,7 @@ include_directories(  set(viewer_SOURCE_FILES      groupchatlistener.cpp +    llaccountingquotamanager.cpp      llagent.cpp      llagentaccess.cpp      llagentcamera.cpp @@ -243,6 +244,7 @@ set(viewer_SOURCE_FILES      llfolderviewitem.cpp      llfollowcam.cpp      llfriendcard.cpp +    llgesturelistener.cpp      llgesturemgr.cpp      llgiveinventory.cpp      llglsandbox.cpp @@ -320,6 +322,7 @@ set(viewer_SOURCE_FILES      llnearbychat.cpp      llnearbychatbar.cpp      llnearbychathandler.cpp +    llnearbychatbarlistener.cpp      llnetmap.cpp      llnotificationalerthandler.cpp      llnotificationgrouphandler.cpp @@ -626,6 +629,7 @@ set(viewer_HEADER_FILES      CMakeLists.txt      ViewerInstall.cmake      groupchatlistener.h +    llaccountingquotamanager.h      llagent.h      llagentaccess.h      llagentcamera.h @@ -795,6 +799,7 @@ set(viewer_HEADER_FILES      llfolderviewitem.h      llfollowcam.h      llfriendcard.h +    llgesturelistener.h      llgesturemgr.h      llgiveinventory.h      llgroupactions.h @@ -871,6 +876,7 @@ set(viewer_HEADER_FILES      llnearbychat.h      llnearbychatbar.h      llnearbychathandler.h +    llnearbychatbarlistener.h      llnetmap.h      llnotificationhandler.h      llnotificationmanager.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 78db307d64..eb6c77971b 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3980,7 +3980,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string> +      <string>http://search-beta.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string>      </map>      <key>WebProfileURL</key>      <map> @@ -12743,6 +12743,17 @@  		<key>Value</key>  		<integer>1</integer>  	</map> +    <key>SLURLPassToOtherInstance</key> +    <map> +    <key>Comment</key> +    <string>Pass execution to prevoius viewer instances if there is a given slurl</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>1</integer> +    </map>      <key>soundsbeacon</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index 5addbbb176..65d9209983 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -35,19 +35,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 525b68c437..2691fc8ded 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -36,19 +36,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index a2a7dea20d..a012cb5030 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -35,19 +35,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index c5ddf31ac0..609fc4f14f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -23,8 +23,9 @@ uniform float sun_wash;  uniform int light_count; -uniform vec4 light[16]; -uniform vec4 light_col[16]; +#define MAX_LIGHT_COUNT		16 +uniform vec4 light[MAX_LIGHT_COUNT]; +uniform vec4 light_col[MAX_LIGHT_COUNT];  varying vec4 vary_fragcoord;  uniform vec2 screen_res; @@ -63,50 +64,56 @@ void main()  	float noise = texture2D(noiseMap, frag.xy/128.0).b;  	vec3 out_col = vec3(0,0,0);  	vec3 npos = normalize(-pos); -	 -	for (int i = 0; i < light_count; ++i) + +	// As of OSX 10.6.7 ATI Apple's crash when using a variable size loop +	for (int i = 0; i < MAX_LIGHT_COUNT; ++i)  	{ +		bool light_contrib = (i < light_count); +		  		vec3 lv = light[i].xyz-pos;  		float dist2 = dot(lv,lv);  		dist2 /= light[i].w;  		if (dist2 > 1.0)  		{ -			continue; +			light_contrib = false;  		}  		float da = dot(norm, lv);  		if (da < 0.0)  		{ -			continue; +			light_contrib = false;  		} -				 -		lv = normalize(lv); -		da = dot(norm, lv); -				 -		float fa = light_col[i].a+1.0; -		float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -		dist_atten *= noise; - -		float lit = da * dist_atten; -		vec3 col = light_col[i].rgb*lit*diff; -		//vec3 col = vec3(dist2, light_col[i].a, lit); -		 -		if (spec.a > 0.0) +		if (light_contrib)  		{ -			//vec3 ref = dot(pos+lv, norm); +			lv = normalize(lv); +			da = dot(norm, lv); +					 +			float fa = light_col[i].a+1.0; +			float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +			dist_atten *= noise; + +			float lit = da * dist_atten; -			float sa = dot(normalize(lv+npos),norm); +			vec3 col = light_col[i].rgb*lit*diff; +			//vec3 col = vec3(dist2, light_col[i].a, lit); -			if (sa > 0.0) +			if (spec.a > 0.0)  			{ -				sa = texture2D(lightFunc,vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); -				sa *= noise; -				col += da*sa*light_col[i].rgb*spec.rgb; +				//vec3 ref = dot(pos+lv, norm); +				 +				float sa = dot(normalize(lv+npos),norm); +				 +				if (sa > 0.0) +				{ +					sa = texture2D(lightFunc,vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); +					sa *= noise; +					col += da*sa*light_col[i].rgb*spec.rgb; +				}  			} +			 +			out_col += col;  		} -		 -		out_col += col;	  	}  	if (dot(out_col, out_col) <= 0.0) diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index d227346163..dfb36980b0 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -35,19 +35,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index 86f014df35..f6160815eb 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -35,19 +35,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 495e86c8db..0ae09df0c6 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -37,19 +37,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index c075c660f3..e2b979d9e9 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -281,6 +281,9 @@ RenderVBOEnable				1	0  list TexUnit8orLess  RenderDeferredSSAO			0	0 +list ATI +RenderDeferredSSAO			0	0 +  list Intel  RenderAnisotropic			1	0  RenderLocalLights			1	0 diff --git a/indra/newview/groupchatlistener.cpp b/indra/newview/groupchatlistener.cpp index 3758896b85..ef015a950d 100644 --- a/indra/newview/groupchatlistener.cpp +++ b/indra/newview/groupchatlistener.cpp @@ -4,8 +4,25 @@   * @date   2011-04-11   * @brief  Implementation for groupchatlistener.   *  - * $LicenseInfo:firstyear=2011&license=internal$ - * Copyright (c) 2011, Linden Research, Inc. + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ diff --git a/indra/newview/groupchatlistener.h b/indra/newview/groupchatlistener.h index 719e3e877f..0c76db305e 100644 --- a/indra/newview/groupchatlistener.h +++ b/indra/newview/groupchatlistener.h @@ -4,8 +4,25 @@   * @date   2011-04-11   * @brief     *  - * $LicenseInfo:firstyear=2011&license=internal$ - * Copyright (c) 2011, Linden Research, Inc. + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ diff --git a/indra/newview/llaccountingquotamanager.cpp b/indra/newview/llaccountingquotamanager.cpp new file mode 100644 index 0000000000..d11b86db15 --- /dev/null +++ b/indra/newview/llaccountingquotamanager.cpp @@ -0,0 +1,264 @@ +/**  + * @file LLAccountingQuotaManager.cpp + * @ Handles the setting and accessing for costs associated with mesh  + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + *  + * Copyright (c) 2001-2010, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llaccountingquotamanager.h" +#include "llagent.h" +#include "llviewerregion.h" +#include "llviewerobject.h" +#include "llviewerobjectlist.h" +#include "llviewerparcelmgr.h" +#include "llparcel.h" + +//=============================================================================== +LLAccountingQuotaManager::LLAccountingQuotaManager() +{	 +} +//=============================================================================== +class LLAccountingQuotaResponder : public LLCurl::Responder +{ +public: +	LLAccountingQuotaResponder( const LLSD& objectIDs ) +	: mObjectIDs( objectIDs ) +	{ +	} +		 +	void clearPendingRequests ( void ) +	{ +		for ( LLSD::array_iterator iter = mObjectIDs.beginArray(); iter != mObjectIDs.endArray(); ++iter ) +		{ +			LLAccountingQuotaManager::getInstance()->removePendingObjectQuota( iter->asUUID() ); +		} +	} +	 +	void error( U32 statusNum, const std::string& reason ) +	{ +		llwarns	<< "Transport error "<<reason<<llendl;	 +		//prep#do we really want to remove all because of one failure - verify +		clearPendingRequests(); +	} +	 +	void result( const LLSD& content ) +	{ +		if ( !content.isMap() || content.has("error") ) +		{ +			llwarns	<< "Error on fetched data"<< llendl; +			//prep#do we really want to remove all because of one failure - verify +			clearPendingRequests(); +			return; +		} +		 +		//Differentiate what the incoming caps could be from the data +		//bool VOContent  = content.has("Objects"); +		bool containsParcel    = content.has("parcel"); +		bool containsSelection = content.has("selected"); +		//bool VORegion   = content.has("region"); +				 +		//Loop over the stored object ids checking against the incoming data +		for ( LLSD::array_iterator iter = mObjectIDs.beginArray(); iter != mObjectIDs.endArray(); ++iter ) +		{ +			LLUUID objectID = iter->asUUID(); +						 +			LLAccountingQuotaManager::getInstance()->removePendingObjectQuota( objectID ); +				 +			if ( containsParcel ) +			{ +					//Typically should be one +					S32 dataCount = content["parcel"].size(); +					for(S32 i = 0; i < dataCount; i++) +					{ +						//prep#todo verify that this is safe, otherwise just add a bool +						S32 parcelId = 0; +						S32 parcelOwner = 0; +						if ( content["parcel"][i].has("parcel_id") ) +						{ +							parcelId = content["parcel"][i]["parcel_id"].asInteger(); +						} +						if ( content["parcel"][i].has("parcel_owner") ) +						{ +							parcelOwner = content["parcel"][i]["parcel_owner"].asInteger(); +						} +											 +						F32 ownerRenderCost		= 0; +						F32 ownerPhysicsCost	= 0; +						F32 ownerNetworkCost	= 0; +						F32 ownerSimulationCost = 0; +						 +						F32 groupRenderCost		= 0; +						F32 groupPhysicsCost	= 0; +						F32 groupNetworkCost	= 0; +						F32 groupSimulationCost = 0; +						 +						F32 otherRenderCost		= 0; +						F32 otherPhysicsCost	= 0; +						F32 otherNetworkCost	= 0; +						F32 otherSimulationCost = 0; +						 +						F32 totalRenderCost		= 0; +						F32 totalPhysicsCost	= 0; +						F32 totalNetworkCost	= 0; +						F32 totalSimulationCost = 0; +						 +						if ( content["parcel"][i].has("owner") ) +						{ +							ownerRenderCost		= content["parcel"][i]["owner"]["render"].asReal(); +							ownerPhysicsCost	= content["parcel"][i]["owner"]["physics"].asReal(); +							ownerNetworkCost	= content["parcel"][i]["owner"]["network"].asReal(); +							ownerSimulationCost = content["parcel"][i]["owner"]["simulation"].asReal(); +							 +						} +						if ( content["parcel"][i].has("group") ) +						{ +							groupRenderCost		= content["parcel"][i]["group"]["render"].asReal(); +							groupPhysicsCost	= content["parcel"][i]["group"]["physics"].asReal(); +							groupNetworkCost	= content["parcel"][i]["group"]["network"].asReal(); +							groupSimulationCost = content["parcel"][i]["group"]["simulation"].asReal(); +							 +						} +						if ( content["parcel"][i].has("other") ) +						{ +							otherRenderCost		= content["parcel"][i]["other"]["render"].asReal(); +							otherPhysicsCost	= content["parcel"][i]["other"]["physics"].asReal(); +							otherNetworkCost	= content["parcel"][i]["other"]["network"].asReal(); +							otherSimulationCost = content["parcel"][i]["other"]["simulation"].asReal(); +						} +						 +						if ( content["parcel"][i].has("total") ) +						{ +							totalRenderCost		= content["parcel"][i]["total"]["render"].asReal(); +							totalPhysicsCost	= content["parcel"][i]["total"]["physics"].asReal(); +							totalNetworkCost	= content["parcel"][i]["total"]["network"].asReal(); +							totalSimulationCost = content["parcel"][i]["total"]["simulation"].asReal(); +							 +						} +						 +						ParcelQuota parcelQuota( ownerRenderCost, ownerPhysicsCost, ownerNetworkCost, ownerSimulationCost, +												 groupRenderCost, groupPhysicsCost, groupNetworkCost, groupSimulationCost, +												 otherRenderCost, otherPhysicsCost, otherNetworkCost, otherSimulationCost, +												 totalRenderCost, totalPhysicsCost, totalNetworkCost, totalSimulationCost ); +						//Update the Parcel						 +						LLParcel* pParcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel(); +						if ( pParcel ) +						{ +							pParcel->updateQuota( objectID, parcelQuota );  +						} +					}					 +				} +			else  +			if ( containsSelection ) +			{ +				S32 dataCount = content["selected"].size(); +				for(S32 i = 0; i < dataCount; i++) +				{ +					 +					F32 renderCost		= 0; +					F32 physicsCost		= 0; +					F32 networkCost		= 0; +					F32 simulationCost	= 0; +					 +					S32 localId = 0; +					 +					localId			= content["selected"][i]["local_id"].asInteger(); +					renderCost		= content["selected"][i]["render"].asReal(); +					physicsCost		= content["selected"][i]["physics"].asReal(); +					networkCost		= content["selected"][i]["network"].asReal(); +					simulationCost	= content["selected"][i]["simulation"].asReal(); +					 +					SelectionQuota selectionQuota( localId, renderCost, physicsCost, networkCost, simulationCost ); +					 +					//Update the objects					 +					//gObjectList.updateQuota( localId, selectionQuota );  +					 +				} +			} +			else +			{ +				//Nothing in string  +				LLAccountingQuotaManager::getInstance()->removePendingObjectQuota( objectID ); +			} +		} +	} +	 +private: +	//List of posted objects +	LLSD mObjectIDs; +}; +//=============================================================================== +void LLAccountingQuotaManager::fetchQuotas( const std::string& url ) +{ +	// Invoking system must have already determined capability availability +	if ( !url.empty() ) +	{ +		LLSD objectList; +		U32  objectIndex = 0; +		IDIt IDIter = mUpdateObjectQuota.begin(); +		IDIt IDIterEnd = mUpdateObjectQuota.end(); +		 +		for ( ; IDIter != IDIterEnd; ++IDIter ) +		{ +			// Check to see if a request for this object has already been made. +			if ( mPendingObjectQuota.find( *IDIter ) ==	mPendingObjectQuota.end() ) +			{ +				mPendingObjectQuota.insert( *IDIter );	 +				objectList[objectIndex++] = *IDIter; +			} +		} +	 +		mUpdateObjectQuota.clear(); +		 +		//Post results +		if ( objectList.size() > 0 ) +		{ +			LLSD dataToPost = LLSD::emptyMap();			 +			dataToPost["object_ids"] = objectList; +			LLHTTPClient::post( url, dataToPost, new LLAccountingQuotaResponder( objectList )); +		} +	} +	else +	{ +		//url was empty - warn & continue +		llwarns<<"Supplied url is empty "<<llendl; +		mUpdateObjectQuota.clear(); +		mPendingObjectQuota.clear(); +	} +} +//=============================================================================== +void LLAccountingQuotaManager::updateObjectCost( const LLUUID& objectID ) +{ +	mUpdateObjectQuota.insert( objectID ); +} +//=============================================================================== +void LLAccountingQuotaManager::removePendingObjectQuota( const LLUUID& objectID ) +{ +	mPendingObjectQuota.erase( objectID ); +} +//=============================================================================== diff --git a/indra/newview/llaccountingquotamanager.h b/indra/newview/llaccountingquotamanager.h new file mode 100644 index 0000000000..9551df272c --- /dev/null +++ b/indra/newview/llaccountingquotamanager.h @@ -0,0 +1,61 @@ +/**  + * @file lllAccountingQuotaManager.h + * @ + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + *  + * Copyright (c) 2001-2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_ACCOUNTINGQUOTAMANAGER_H +#define LL_ACCOUNTINGQUOTAMANAGER_H +//=============================================================================== +#include "llaccountingquota.h" +//=============================================================================== +class LLAccountingQuotaManager : public LLSingleton<LLAccountingQuotaManager> +{ +public: +	//Ctor +	LLAccountingQuotaManager(); +	//Store an object that will be eventually fetched +	void updateObjectCost( const LLUUID& objectID ); +	//Request quotas for object list +	void fetchQuotas( const std::string& url ); +	//Delete a specific object from the pending list +	void removePendingObjectQuota( const LLUUID& objectID ); +	 +private: +	//Set of objects that need to update their cost +	std::set<LLUUID> mUpdateObjectQuota; +	//During fetchQuota we move object into a the pending set to signify that  +	//a fetch has been instigated. +	std::set<LLUUID> mPendingObjectQuota; +	typedef std::set<LLUUID>::iterator IDIt; +}; +//=============================================================================== + +#endif // LLACCOUNTINGQUOTAMANAGER + diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 08d71fc8fc..446ded8096 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -206,6 +206,7 @@ LLAgent::LLAgent() :  	mAutoPilot(FALSE),  	mAutoPilotFlyOnStop(FALSE), +	mAutoPilotAllowFlying(TRUE),  	mAutoPilotTargetGlobal(),  	mAutoPilotStopDistance(1.f),  	mAutoPilotUseRotation(FALSE), @@ -1230,17 +1231,26 @@ void LLAgent::startAutoPilotGlobal(  	const LLQuaternion *target_rotation,  	void (*finish_callback)(BOOL, void *),  	void *callback_data, -	F32 stop_distance, F32 rot_threshold) +	F32 stop_distance, +	F32 rot_threshold, +	BOOL allow_flying)  {  	if (!isAgentAvatarValid())  	{  		return;  	} +	// Are there any pending callbacks from previous auto pilot requests? +	if (mAutoPilotFinishedCallback) +	{ +		mAutoPilotFinishedCallback(dist_vec(gAgent.getPositionGlobal(), mAutoPilotTargetGlobal) < mAutoPilotStopDistance, mAutoPilotCallbackData); +	} +  	mAutoPilotFinishedCallback = finish_callback;  	mAutoPilotCallbackData = callback_data;  	mAutoPilotRotationThreshold = rot_threshold;  	mAutoPilotBehaviorName = behavior_name; +	mAutoPilotAllowFlying = allow_flying;  	LLVector3d delta_pos( target_global );  	delta_pos -= getPositionGlobal(); @@ -1268,14 +1278,23 @@ void LLAgent::startAutoPilotGlobal(  		}  	} -	mAutoPilotFlyOnStop = getFlying(); +	if (mAutoPilotAllowFlying) +	{ +		mAutoPilotFlyOnStop = getFlying(); +	} +	else +	{ +		mAutoPilotFlyOnStop = FALSE; +	} -	if (distance > 30.0) +	if (distance > 30.0 && mAutoPilotAllowFlying)  	{  		setFlying(TRUE);  	} -	if ( distance > 1.f && heightDelta > (sqrtf(mAutoPilotStopDistance) + 1.f)) +	if ( distance > 1.f &&  +		mAutoPilotAllowFlying && +		heightDelta > (sqrtf(mAutoPilotStopDistance) + 1.f))  	{  		setFlying(TRUE);  		// Do not force flying for "Sit" behavior to prevent flying after pressing "Stand" @@ -1285,22 +1304,8 @@ void LLAgent::startAutoPilotGlobal(  	}  	mAutoPilot = TRUE; -	mAutoPilotTargetGlobal = target_global; - -	// trace ray down to find height of destination from ground -	LLVector3d traceEndPt = target_global; -	traceEndPt.mdV[VZ] -= 20.f; +	setAutoPilotTargetGlobal(target_global); -	LLVector3d targetOnGround; -	LLVector3 groundNorm; -	LLViewerObject *obj; - -	LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj); -	F64 target_height = llmax((F64)gAgentAvatarp->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]); - -	// clamp z value of target to minimum height above ground -	mAutoPilotTargetGlobal.mdV[VZ] = targetOnGround.mdV[VZ] + target_height; -	mAutoPilotTargetDist = (F32)dist_vec(gAgent.getPositionGlobal(), mAutoPilotTargetGlobal);  	if (target_rotation)  	{  		mAutoPilotUseRotation = TRUE; @@ -1318,12 +1323,36 @@ void LLAgent::startAutoPilotGlobal(  //----------------------------------------------------------------------------- -// startFollowPilot() +// setAutoPilotTargetGlobal  //----------------------------------------------------------------------------- -void LLAgent::startFollowPilot(const LLUUID &leader_id) +void LLAgent::setAutoPilotTargetGlobal(const LLVector3d &target_global)  { -	if (!mAutoPilot) return; +	if (mAutoPilot) +	{ +		mAutoPilotTargetGlobal = target_global; + +		// trace ray down to find height of destination from ground +		LLVector3d traceEndPt = target_global; +		traceEndPt.mdV[VZ] -= 20.f; + +		LLVector3d targetOnGround; +		LLVector3 groundNorm; +		LLViewerObject *obj; + +		LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj); +		F64 target_height = llmax((F64)gAgentAvatarp->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]); + +		// clamp z value of target to minimum height above ground +		mAutoPilotTargetGlobal.mdV[VZ] = targetOnGround.mdV[VZ] + target_height; +		mAutoPilotTargetDist = (F32)dist_vec(gAgent.getPositionGlobal(), mAutoPilotTargetGlobal); +	} +} +//----------------------------------------------------------------------------- +// startFollowPilot() +//----------------------------------------------------------------------------- +void LLAgent::startFollowPilot(const LLUUID &leader_id, BOOL allow_flying, F32 stop_distance) +{  	mLeaderID = leader_id;  	if ( mLeaderID.isNull() ) return; @@ -1334,7 +1363,14 @@ void LLAgent::startFollowPilot(const LLUUID &leader_id)  		return;  	} -	startAutoPilotGlobal(object->getPositionGlobal()); +	startAutoPilotGlobal(object->getPositionGlobal(),  +						 std::string(),	// behavior_name +						 NULL,			// target_rotation +						 NULL,			// finish_callback +						 NULL,			// callback_data +						 stop_distance, +						 0.03f,			// rotation_threshold +						 allow_flying);  } @@ -1360,7 +1396,8 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)  		//NB: auto pilot can terminate for a reason other than reaching the destination  		if (mAutoPilotFinishedCallback)  		{ -			mAutoPilotFinishedCallback(!user_cancel && dist_vec_squared(gAgent.getPositionGlobal(), mAutoPilotTargetGlobal) < (mAutoPilotStopDistance * mAutoPilotStopDistance), mAutoPilotCallbackData); +			mAutoPilotFinishedCallback(!user_cancel && dist_vec(gAgent.getPositionGlobal(), mAutoPilotTargetGlobal) < mAutoPilotStopDistance, mAutoPilotCallbackData); +			mAutoPilotFinishedCallback = NULL;  		}  		mLeaderID = LLUUID::null; @@ -1400,7 +1437,7 @@ void LLAgent::autoPilot(F32 *delta_yaw)  		if (!isAgentAvatarValid()) return; -		if (gAgentAvatarp->mInAir) +		if (gAgentAvatarp->mInAir && mAutoPilotAllowFlying)  		{  			setFlying(TRUE);  		} diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 54c5649f97..67ed1923c0 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -469,19 +469,29 @@ public:  public:  	BOOL			getAutoPilot() const				{ return mAutoPilot; }  	LLVector3d		getAutoPilotTargetGlobal() const 	{ return mAutoPilotTargetGlobal; } +	LLUUID			getAutoPilotLeaderID() const		{ return mLeaderID; } +	F32				getAutoPilotStopDistance() const	{ return mAutoPilotStopDistance; } +	F32				getAutoPilotTargetDist() const		{ return mAutoPilotTargetDist; } +	BOOL			getAutoPilotUseRotation() const		{ return mAutoPilotUseRotation; } +	LLVector3		getAutoPilotTargetFacing() const	{ return mAutoPilotTargetFacing; } +	F32				getAutoPilotRotationThreshold() const	{ return mAutoPilotRotationThreshold; } +	std::string		getAutoPilotBehaviorName() const	{ return mAutoPilotBehaviorName; } +  	void			startAutoPilotGlobal(const LLVector3d &pos_global,   										 const std::string& behavior_name = std::string(),   										 const LLQuaternion *target_rotation = NULL,   										 void (*finish_callback)(BOOL, void *) = NULL, void *callback_data = NULL,  -										 F32 stop_distance = 0.f, F32 rotation_threshold = 0.03f); -	void 			startFollowPilot(const LLUUID &leader_id); +										 F32 stop_distance = 0.f, F32 rotation_threshold = 0.03f, +										 BOOL allow_flying = TRUE); +	void 			startFollowPilot(const LLUUID &leader_id, BOOL allow_flying = TRUE, F32 stop_distance = 0.5f);  	void			stopAutoPilot(BOOL user_cancel = FALSE); -	void 			setAutoPilotGlobal(const LLVector3d &pos_global); +	void 			setAutoPilotTargetGlobal(const LLVector3d &target_global);  	void			autoPilot(F32 *delta_yaw); 			// Autopilot walking action, angles in radians  	void			renderAutoPilotTarget();  private:  	BOOL			mAutoPilot;  	BOOL			mAutoPilotFlyOnStop; +	BOOL			mAutoPilotAllowFlying;  	LLVector3d		mAutoPilotTargetGlobal;  	F32				mAutoPilotStopDistance;  	BOOL			mAutoPilotUseRotation; diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index c6b5a0113f..80085dad9d 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -394,7 +394,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi  	LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation  	LLVector3 object_extents;	  	const LLVector4a* oe4 = object->mDrawable->getSpatialExtents(); -	object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] ); +	LLVector4a size; +	size.setSub(oe4[1], oe4[0]); +	object_extents.set( size[0], size[1], size[2] );  	// make sure they object extents are non-zero  	object_extents.clamp(0.001f, F32_MAX); diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp index 9cea33c7c6..a8d2222c03 100644 --- a/indra/newview/llagentlistener.cpp +++ b/indra/newview/llagentlistener.cpp @@ -31,6 +31,7 @@  #include "llagentlistener.h"  #include "llagent.h" +#include "llvoavatar.h"  #include "llcommandhandler.h"  #include "llslurl.h"  #include "llurldispatcher.h" @@ -39,93 +40,242 @@  #include "llviewerregion.h"  #include "llsdutil.h"  #include "llsdutil_math.h" +#include "lltoolgrab.h" +#include "llhudeffectlookat.h" +#include "llagentcamera.h"  LLAgentListener::LLAgentListener(LLAgent &agent)    : LLEventAPI("LLAgent",                 "LLAgent listener to (e.g.) teleport, sit, stand, etc."),      mAgent(agent)  { -	add("requestTeleport", +    add("requestTeleport",          "Teleport: [\"regionname\"], [\"x\"], [\"y\"], [\"z\"]\n"          "If [\"skip_confirmation\"] is true, use LLURLDispatcher rather than LLCommandDispatcher.",          &LLAgentListener::requestTeleport); -	add("requestSit", -        "Ask to sit on the object specified in [\"obj_uuid\"]", +    add("requestSit", +		"[\"obj_uuid\"]: id of object to sit on, use this or [\"position\"] to indicate the sit target" +		"[\"position\"]: region position {x, y, z} where to find closest object to sit on",          &LLAgentListener::requestSit); -	add("requestStand", +    add("requestStand",          "Ask to stand up",          &LLAgentListener::requestStand); +    add("requestTouch", +		"[\"obj_uuid\"]: id of object to touch, use this or [\"position\"] to indicate the object to touch" +		"[\"position\"]: region position {x, y, z} where to find closest object to touch" +		"[\"face\"]: optional object face number to touch[Default: 0]", +        &LLAgentListener::requestTouch);      add("resetAxes",          "Set the agent to a fixed orientation (optionally specify [\"lookat\"] = array of [x, y, z])",          &LLAgentListener::resetAxes);      add("getAxes", +        "Obsolete - use getPosition instead\n"          "Send information about the agent's orientation on [\"reply\"]:\n"          "[\"euler\"]: map of {roll, pitch, yaw}\n"          "[\"quat\"]:  array of [x, y, z, w] quaternion values",          &LLAgentListener::getAxes,          LLSDMap("reply", LLSD())); -    add("getGroups", -        "Send on [\"reply\"], in [\"groups\"], an array describing agent's groups:\n" -        "[\"id\"]: UUID of group\n" -        "[\"name\"]: name of group", -        &LLAgentListener::getGroups, +    add("getPosition", +        "Send information about the agent's position and orientation on [\"reply\"]:\n" +        "[\"region\"]: array of region {x, y, z} position\n" +        "[\"global\"]: array of global {x, y, z} position\n" +        "[\"euler\"]: map of {roll, pitch, yaw}\n" +        "[\"quat\"]:  array of [x, y, z, w] quaternion values", +        &LLAgentListener::getPosition,          LLSDMap("reply", LLSD())); +    add("startAutoPilot", +        "Start the autopilot system using the following parameters:\n" +        "[\"target_global\"]: array of target global {x, y, z} position\n" +        "[\"stop_distance\"]: target maxiumum distance from target [default: autopilot guess]\n" +        "[\"target_rotation\"]: array of [x, y, z, w] quaternion values [default: no target]\n" +        "[\"rotation_threshold\"]: target maximum angle from target facing rotation [default: 0.03 radians]\n" +        "[\"behavior_name\"]: name of the autopilot behavior [default: \"\"]" +        "[\"allow_flying\"]: allow flying during autopilot [default: True]", +        //"[\"callback_pump\"]: pump to send success/failure and callback data to [default: none]\n" +        //"[\"callback_data\"]: data to send back during a callback [default: none]", +        &LLAgentListener::startAutoPilot); +    add("getAutoPilot", +        "Send information about current state of the autopilot system to [\"reply\"]:\n" +        "[\"enabled\"]: boolean indicating whether or not autopilot is enabled\n" +        "[\"target_global\"]: array of target global {x, y, z} position\n" +        "[\"leader_id\"]: uuid of target autopilot is following\n" +        "[\"stop_distance\"]: target maximum distance from target\n" +        "[\"target_distance\"]: last known distance from target\n" +        "[\"use_rotation\"]: boolean indicating if autopilot has a target facing rotation\n" +        "[\"target_facing\"]: array of {x, y} target direction to face\n" +        "[\"rotation_threshold\"]: target maximum angle from target facing rotation\n" +        "[\"behavior_name\"]: name of the autopilot behavior", +        &LLAgentListener::getAutoPilot, +        LLSDMap("reply", LLSD())); +    add("startFollowPilot", +		"[\"leader_id\"]: uuid of target to follow using the autopilot system (optional with avatar_name)\n" +		"[\"avatar_name\"]: avatar name to follow using the autopilot system (optional with leader_id)\n" +        "[\"allow_flying\"]: allow flying during autopilot [default: True]\n" +        "[\"stop_distance\"]: target maxiumum distance from target [default: autopilot guess]", +        &LLAgentListener::startFollowPilot); +    add("setAutoPilotTarget", +        "Update target for currently running autopilot:\n" +        "[\"target_global\"]: array of target global {x, y, z} position", +        &LLAgentListener::setAutoPilotTarget); +    add("stopAutoPilot", +        "Stop the autopilot system:\n" +        "[\"user_cancel\"] indicates whether or not to act as though user canceled autopilot [default: false]", +        &LLAgentListener::stopAutoPilot); +    add("lookAt", +		"[\"type\"]: number to indicate the lookAt type, 0 to clear\n" +		"[\"obj_uuid\"]: id of object to look at, use this or [\"position\"] to indicate the target\n" +		"[\"position\"]: region position {x, y, z} where to find closest object or avatar to look at", +        &LLAgentListener::lookAt);  }  void LLAgentListener::requestTeleport(LLSD const & event_data) const  { -	if(event_data["skip_confirmation"].asBoolean()) +    if(event_data["skip_confirmation"].asBoolean()) +    { +        LLSD params(LLSD::emptyArray()); +        params.append(event_data["regionname"]); +        params.append(event_data["x"]); +        params.append(event_data["y"]); +        params.append(event_data["z"]); +        LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, "clicked", true); +        // *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat" +        // should we just compose LLCommandHandler and LLDispatchListener? +    } +    else +    { +        std::string url = LLSLURL(event_data["regionname"],  +                                  LLVector3(event_data["x"].asReal(),  +                                            event_data["y"].asReal(),  +                                            event_data["z"].asReal())).getSLURLString(); +        LLURLDispatcher::dispatch(url, "clicked", NULL, false); +    } +} + +void LLAgentListener::requestSit(LLSD const & event_data) const +{ +    //mAgent.getAvatarObject()->sitOnObject(); +    // shamelessly ripped from llviewermenu.cpp:handle_sit_or_stand() +    // *TODO - find a permanent place to share this code properly. + +	LLViewerObject *object = NULL; +	if (event_data.has("obj_uuid")) +	{ +		object = gObjectList.findObject(event_data["obj_uuid"]); +	} +	else if (event_data.has("position"))  	{ -		LLSD params(LLSD::emptyArray()); -		params.append(event_data["regionname"]); -		params.append(event_data["x"]); -		params.append(event_data["y"]); -		params.append(event_data["z"]); -		LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, "clicked", true); -		// *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat" -		// should we just compose LLCommandHandler and LLDispatchListener? +		LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); +		object = findObjectClosestTo(target_position);  	} + +    if (object && object->getPCode() == LL_PCODE_VOLUME) +    { +        gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); +        gMessageSystem->nextBlockFast(_PREHASH_AgentData); +        gMessageSystem->addUUIDFast(_PREHASH_AgentID, mAgent.getID()); +        gMessageSystem->addUUIDFast(_PREHASH_SessionID, mAgent.getSessionID()); +        gMessageSystem->nextBlockFast(_PREHASH_TargetObject); +        gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); +        gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3(0,0,0)); + +        object->getRegion()->sendReliableMessage(); +    }  	else  	{ -		std::string url = LLSLURL(event_data["regionname"],  -								  LLVector3(event_data["x"].asReal(),  -											event_data["y"].asReal(),  -											event_data["z"].asReal())).getSLURLString(); -		LLURLDispatcher::dispatch(url, "clicked", NULL, false); +		llwarns << "LLAgent requestSit could not find the sit target: "  +			<< event_data << llendl;  	}  } -void LLAgentListener::requestSit(LLSD const & event_data) const +void LLAgentListener::requestStand(LLSD const & event_data) const +{ +    mAgent.setControlFlags(AGENT_CONTROL_STAND_UP); +} + + +LLViewerObject * LLAgentListener::findObjectClosestTo( const LLVector3 & position ) const  { -	//mAgent.getAvatarObject()->sitOnObject(); -	// shamelessly ripped from llviewermenu.cpp:handle_sit_or_stand() -	// *TODO - find a permanent place to share this code properly. -	LLViewerObject *object = gObjectList.findObject(event_data["obj_uuid"]); +	LLViewerObject *object = NULL; -	if (object && object->getPCode() == LL_PCODE_VOLUME) +	// Find the object closest to that position +	F32 min_distance = 10000.0f;		// Start big +	S32 num_objects = gObjectList.getNumObjects(); +	S32 cur_index = 0; +	while (cur_index < num_objects)  	{ -		gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); -		gMessageSystem->nextBlockFast(_PREHASH_AgentData); -		gMessageSystem->addUUIDFast(_PREHASH_AgentID, mAgent.getID()); -		gMessageSystem->addUUIDFast(_PREHASH_SessionID, mAgent.getSessionID()); -		gMessageSystem->nextBlockFast(_PREHASH_TargetObject); -		gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); -		gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3(0,0,0)); - -		object->getRegion()->sendReliableMessage(); +		LLViewerObject * cur_object = gObjectList.getObject(cur_index++); +		if (cur_object) +		{	// Calculate distance from the target position +			LLVector3 target_diff = cur_object->getPositionRegion() - position; +			F32 distance_to_target = target_diff.length(); +			if (distance_to_target < min_distance) +			{	// Found an object closer +				min_distance = distance_to_target; +				object = cur_object; +			} +		}  	} + +	return object;  } -void LLAgentListener::requestStand(LLSD const & event_data) const + +void LLAgentListener::requestTouch(LLSD const & event_data) const  { -	mAgent.setControlFlags(AGENT_CONTROL_STAND_UP); +	LLViewerObject *object = NULL; +	 +	if (event_data.has("obj_uuid")) +	{ +		object = gObjectList.findObject(event_data["obj_uuid"]); +	} +	else if (event_data.has("position")) +	{ +		LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); +		object = findObjectClosestTo(target_position); +	} + +	S32 face = 0; +	if (event_data.has("face")) +	{ +		face = event_data["face"].asInteger(); +	} + +    if (object && object->getPCode() == LL_PCODE_VOLUME) +    { +		// Fake enough pick info to get it to (hopefully) work +		LLPickInfo pick; +		pick.mObjectFace = face; + +		/* +		These values are sent to the simulator, but face seems to be easiest to use + +		pick.mUVCoords	 "UVCoord" +		pick.mSTCoords	"STCoord"	 +		pick.mObjectFace	"FaceIndex" +		pick.mIntersection	"Position" +		pick.mNormal	"Normal" +		pick.mBinormal	"Binormal" +		*/ + +		// A touch is a sketchy message sequence ... send a grab, immediately +		// followed by un-grabbing, crossing fingers and hoping packets arrive in +		// the correct order +		send_ObjectGrab_message(object, pick, LLVector3::zero); +		send_ObjectDeGrab_message(object, pick); +    } +	else +	{ +		llwarns << "LLAgent requestTouch could not find the touch target "  +			<< event_data["obj_uuid"].asUUID() << llendl; +	}  } -void LLAgentListener::resetAxes(const LLSD& event) const + +void LLAgentListener::resetAxes(const LLSD& event_data) const  { -    if (event.has("lookat")) +    if (event_data.has("lookat"))      { -        mAgent.resetAxes(ll_vector3_from_sd(event["lookat"])); +        mAgent.resetAxes(ll_vector3_from_sd(event_data["lookat"]));      }      else      { @@ -134,17 +284,210 @@ void LLAgentListener::resetAxes(const LLSD& event) const      }  } -void LLAgentListener::getAxes(const LLSD& event) const +void LLAgentListener::getAxes(const LLSD& event_data) const  {      LLQuaternion quat(mAgent.getQuat());      F32 roll, pitch, yaw;      quat.getEulerAngles(&roll, &pitch, &yaw);      // The official query API for LLQuaternion's [x, y, z, w] values is its      // public member mQ... -    sendReply(LLSDMap -              ("quat", llsd_copy_array(boost::begin(quat.mQ), boost::end(quat.mQ))) -              ("euler", LLSDMap("roll", roll)("pitch", pitch)("yaw", yaw)), -              event); +	LLSD reply = LLSD::emptyMap(); +	reply["quat"] = llsd_copy_array(boost::begin(quat.mQ), boost::end(quat.mQ)); +	reply["euler"] = LLSD::emptyMap(); +	reply["euler"]["roll"] = roll; +	reply["euler"]["pitch"] = pitch; +	reply["euler"]["yaw"] = yaw; +    sendReply(reply, event_data); +} + +void LLAgentListener::getPosition(const LLSD& event_data) const +{ +    F32 roll, pitch, yaw; +    LLQuaternion quat(mAgent.getQuat()); +    quat.getEulerAngles(&roll, &pitch, &yaw); + +	LLSD reply = LLSD::emptyMap(); +	reply["quat"] = llsd_copy_array(boost::begin(quat.mQ), boost::end(quat.mQ)); +	reply["euler"] = LLSD::emptyMap(); +	reply["euler"]["roll"] = roll; +	reply["euler"]["pitch"] = pitch; +	reply["euler"]["yaw"] = yaw; +    reply["region"] = ll_sd_from_vector3(mAgent.getPositionAgent()); +    reply["global"] = ll_sd_from_vector3d(mAgent.getPositionGlobal()); + +	sendReply(reply, event_data); +} + + +void LLAgentListener::startAutoPilot(LLSD const & event_data) +{ +    LLQuaternion target_rotation_value; +    LLQuaternion* target_rotation = NULL; +    if (event_data.has("target_rotation")) +    { +        target_rotation_value = ll_quaternion_from_sd(event_data["target_rotation"]); +        target_rotation = &target_rotation_value; +    } +    // *TODO: Use callback_pump and callback_data +    F32 rotation_threshold = 0.03f; +    if (event_data.has("rotation_threshold")) +    { +        rotation_threshold = event_data["rotation_threshold"].asReal(); +    } +	 +	BOOL allow_flying = TRUE; +	if (event_data.has("allow_flying")) +	{ +		allow_flying = (BOOL) event_data["allow_flying"].asBoolean(); +		mAgent.setFlying(allow_flying); +	} + +	F32 stop_distance = 0.f; +	if (event_data.has("stop_distance")) +	{ +		stop_distance = event_data["stop_distance"].asReal(); +	} + +	// Clear follow target, this is doing a path +	mFollowTarget.setNull(); + +    mAgent.startAutoPilotGlobal(ll_vector3d_from_sd(event_data["target_global"]), +                                event_data["behavior_name"], +                                target_rotation, +                                NULL, NULL, +                                stop_distance, +                                rotation_threshold, +								allow_flying); +} + +void LLAgentListener::getAutoPilot(const LLSD& event_data) const +{ +	LLSD reply = LLSD::emptyMap(); +	 +	LLSD::Boolean enabled = mAgent.getAutoPilot(); +	reply["enabled"] = enabled; +	 +	reply["target_global"] = ll_sd_from_vector3d(mAgent.getAutoPilotTargetGlobal()); +	 +	reply["leader_id"] = mAgent.getAutoPilotLeaderID(); +	 +	reply["stop_distance"] = mAgent.getAutoPilotStopDistance(); + +	reply["target_distance"] = mAgent.getAutoPilotTargetDist(); +	if (!enabled && +		mFollowTarget.notNull()) +	{	// Get an actual distance from the target object we were following +		LLViewerObject * target = gObjectList.findObject(mFollowTarget); +		if (target) +		{	// Found the target AV, return the actual distance to them as well as their ID +			LLVector3 difference = target->getPositionRegion() - mAgent.getPositionAgent(); +			reply["target_distance"] = difference.length(); +			reply["leader_id"] = mFollowTarget; +		} +	} + +	reply["use_rotation"] = (LLSD::Boolean) mAgent.getAutoPilotUseRotation(); +	reply["target_facing"] = ll_sd_from_vector3(mAgent.getAutoPilotTargetFacing()); +	reply["rotation_threshold"] = mAgent.getAutoPilotRotationThreshold(); +	reply["behavior_name"] = mAgent.getAutoPilotBehaviorName(); +	reply["fly"] = (LLSD::Boolean) mAgent.getFlying(); + +	sendReply(reply, event_data); +} + +void LLAgentListener::startFollowPilot(LLSD const & event_data) +{ +	LLUUID target_id; + +	BOOL allow_flying = TRUE; +	if (event_data.has("allow_flying")) +	{ +		allow_flying = (BOOL) event_data["allow_flying"].asBoolean(); +	} + +	if (event_data.has("leader_id")) +	{ +		target_id = event_data["leader_id"]; +	} +	else if (event_data.has("avatar_name")) +	{	// Find the avatar with matching name +		std::string target_name = event_data["avatar_name"].asString(); + +		if (target_name.length() > 0) +		{ +			S32 num_objects = gObjectList.getNumObjects(); +			S32 cur_index = 0; +			while (cur_index < num_objects) +			{ +				LLViewerObject * cur_object = gObjectList.getObject(cur_index++); +				if (cur_object && +					cur_object->asAvatar() && +					cur_object->asAvatar()->getFullname() == target_name) +				{	// Found avatar with matching name, extract id and break out of loop +					target_id = cur_object->getID(); +					break; +				} +			} +		} +	} + +	F32 stop_distance = 0.f; +	if (event_data.has("stop_distance")) +	{ +		stop_distance = event_data["stop_distance"].asReal(); +	} + +	if (target_id.notNull()) +	{ +		mAgent.setFlying(allow_flying); +		mFollowTarget = target_id;	// Save follow target so we can report distance later + +	    mAgent.startFollowPilot(target_id, allow_flying, stop_distance); +	} +} + +void LLAgentListener::setAutoPilotTarget(LLSD const & event_data) const +{ +	if (event_data.has("target_global")) +	{ +		LLVector3d target_global(ll_vector3d_from_sd(event_data["target_global"])); +		mAgent.setAutoPilotTargetGlobal(target_global); +	} +} + +void LLAgentListener::stopAutoPilot(LLSD const & event_data) const +{ +	BOOL user_cancel = FALSE; +	if (event_data.has("user_cancel")) +	{ +		user_cancel = event_data["user_cancel"].asBoolean(); +	} +    mAgent.stopAutoPilot(user_cancel); +} + +void LLAgentListener::lookAt(LLSD const & event_data) const +{ +	LLViewerObject *object = NULL; +	if (event_data.has("obj_uuid")) +	{ +		object = gObjectList.findObject(event_data["obj_uuid"]); +	} +	else if (event_data.has("position")) +	{ +		LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); +		object = findObjectClosestTo(target_position); +	} + +	S32 look_at_type = (S32) LOOKAT_TARGET_NONE; +	if (event_data.has("type")) +	{ +		look_at_type = event_data["type"].asInteger(); +	} +	if (look_at_type >= (S32) LOOKAT_TARGET_NONE && +		look_at_type < (S32) LOOKAT_NUM_TARGETS) +	{ +		gAgentCamera.setLookAt((ELookAtType) look_at_type, object); +	}  }  void LLAgentListener::getGroups(const LLSD& event) const diff --git a/indra/newview/llagentlistener.h b/indra/newview/llagentlistener.h index 5a89a99f6a..9a9c4073fe 100644 --- a/indra/newview/llagentlistener.h +++ b/indra/newview/llagentlistener.h @@ -34,22 +34,35 @@  class LLAgent;  class LLSD; +class LLViewerObject;  +class LLVector3d;  class LLAgentListener : public LLEventAPI  {  public: -	LLAgentListener(LLAgent &agent); +    LLAgentListener(LLAgent &agent);  private: -	void requestTeleport(LLSD const & event_data) const; -	void requestSit(LLSD const & event_data) const; -	void requestStand(LLSD const & event_data) const; -	void resetAxes(const LLSD& event) const; -	void getAxes(const LLSD& event) const; +    void requestTeleport(LLSD const & event_data) const; +    void requestSit(LLSD const & event_data) const; +    void requestStand(LLSD const & event_data) const; +    void requestTouch(LLSD const & event_data) const; +    void resetAxes(const LLSD& event_data) const; +    void getAxes(const LLSD& event_data) const;  	void getGroups(const LLSD& event) const; +    void getPosition(const LLSD& event_data) const; +    void startAutoPilot(const LLSD& event_data); +    void getAutoPilot(const LLSD& event_data) const; +    void startFollowPilot(const LLSD& event_data); +    void setAutoPilotTarget(const LLSD& event_data) const; +    void stopAutoPilot(const LLSD& event_data) const; +	void lookAt(LLSD const & event_data) const; + +	LLViewerObject * findObjectClosestTo( const LLVector3 & position ) const;  private: -	LLAgent & mAgent; +    LLAgent &	mAgent; +	LLUUID		mFollowTarget;  };  #endif // LL_LLAGENTLISTENER_H diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 75b6c18c57..94e3e6a720 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -739,6 +739,8 @@ bool LLAppViewer::init()  	}      initThreads(); +	LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ; ; +      writeSystemInfo();  	// Initialize updater service (now that we have an io pump) @@ -765,6 +767,10 @@ bool LLAppViewer::init()  	LL_INFOS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;  	LL_INFOS("InitInfo") << "libcurl version is: " << LLCurl::getVersionString() << LL_ENDL; +	//Note: --bao +	//allow to start texture fetching, must be called after initThreads(); +	gTextureList.start() ; +  	// Get the single value from the crash settings file, if it exists  	std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);  	gCrashSettings.loadFromFile(crash_settings_filename); @@ -773,6 +779,7 @@ bool LLAppViewer::init()  		gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ALWAYS_SEND);  		gCrashSettings.saveToFile(crash_settings_filename, FALSE);  	} +	LL_INFOS("InitInfo") << "Crash settings done." << LL_ENDL ;  	/////////////////////////////////////////////////  	// OS-specific login dialogs @@ -821,6 +828,8 @@ bool LLAppViewer::init()  	// Let code in llui access the viewer help floater  	LLUI::sHelpImpl = LLViewerHelp::getInstance(); +	LL_INFOS("InitInfo") << "UI initialization is done." << LL_ENDL ; +  	// Load translations for tooltips  	LLFloater::initClass(); @@ -890,7 +899,8 @@ bool LLAppViewer::init()  		OSMessageBox(msg.str(),LLStringUtil::null,OSMB_OK);  		return 1;  	} -	 +	LL_INFOS("InitInfo") << "Cache initialization is done." << LL_ENDL ; +  	// Initialize the repeater service.  	LLMainLoopRepeater::instance().start(); @@ -899,6 +909,7 @@ bool LLAppViewer::init()  	//  	gGLActive = TRUE;  	initWindow(); +	LL_INFOS("InitInfo") << "Window is initialized." << LL_ENDL ;  	// initWindow also initializes the Feature List, so now we can initialize this global.  	LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"); @@ -1179,11 +1190,11 @@ bool LLAppViewer::mainLoop()  				// Scan keyboard for movement keys.  Command keys and typing  				// are handled by windows callbacks.  Don't do this until we're  				// done initializing.  JC -				if (gViewerWindow->mWindow->getVisible()  +				if ((gHeadlessClient || gViewerWindow->mWindow->getVisible())  					&& gViewerWindow->getActive()  					&& !gViewerWindow->mWindow->getMinimized()  					&& LLStartUp::getStartupState() == STATE_STARTED -					&& !gViewerWindow->getShowProgress() +					&& (gHeadlessClient || !gViewerWindow->getShowProgress())  					&& !gFocusMgr.focusLocked())  				{  					LLMemType mjk(LLMemType::MTYPE_JOY_KEY); @@ -2502,7 +2513,8 @@ bool LLAppViewer::initConfiguration()  	// it relies on checking a marker file which will not work when running  	// out of different directories -	if (LLStartUp::getStartSLURL().isValid()) +	if (LLStartUp::getStartSLURL().isValid() && +		(gSavedSettings.getBOOL("SLURLPassToOtherInstance")))  	{  		if (sendURLToOtherInstance(LLStartUp::getStartSLURL().getSLURLString()))  		{ diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 6396ca91ff..445bd208ef 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -295,23 +295,44 @@ void create_console()  	// redirect unbuffered STDOUT to the console  	l_std_handle = (long)GetStdHandle(STD_OUTPUT_HANDLE);  	h_con_handle = _open_osfhandle(l_std_handle, _O_TEXT); -	fp = _fdopen( h_con_handle, "w" ); -	*stdout = *fp; -	setvbuf( stdout, NULL, _IONBF, 0 ); +	if (h_con_handle == -1) +	{ +		llwarns << "create_console() failed to open stdout handle" << llendl; +	} +	else +	{ +		fp = _fdopen( h_con_handle, "w" ); +		*stdout = *fp; +		setvbuf( stdout, NULL, _IONBF, 0 ); +	}  	// redirect unbuffered STDIN to the console  	l_std_handle = (long)GetStdHandle(STD_INPUT_HANDLE);  	h_con_handle = _open_osfhandle(l_std_handle, _O_TEXT); -	fp = _fdopen( h_con_handle, "r" ); -	*stdin = *fp; -	setvbuf( stdin, NULL, _IONBF, 0 ); +	if (h_con_handle == -1) +	{ +		llwarns << "create_console() failed to open stdin handle" << llendl; +	} +	else +	{ +		fp = _fdopen( h_con_handle, "r" ); +		*stdin = *fp; +		setvbuf( stdin, NULL, _IONBF, 0 ); +	}  	// redirect unbuffered STDERR to the console  	l_std_handle = (long)GetStdHandle(STD_ERROR_HANDLE);  	h_con_handle = _open_osfhandle(l_std_handle, _O_TEXT); -	fp = _fdopen( h_con_handle, "w" ); -	*stderr = *fp; -	setvbuf( stderr, NULL, _IONBF, 0 ); +	if (h_con_handle == -1) +	{ +		llwarns << "create_console() failed to open stderr handle" << llendl; +	} +	else +	{ +		fp = _fdopen( h_con_handle, "w" ); +		*stderr = *fp; +		setvbuf( stderr, NULL, _IONBF, 0 ); +	}  }  LLAppViewerWin32::LLAppViewerWin32(const char* cmd_line) : diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index cbbdcb2983..cbbdcb2983 100644..100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index f51552aae5..01d19c5ba0 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -46,6 +46,7 @@  #include "llhints.h"  #include "llimfloater.h" // for LLIMFloater  #include "llnearbychatbar.h" +#include "llnearbychatbarlistener.h"  #include "llsidetray.h"  #include "llspeakbutton.h"  #include "llsplitbutton.h" @@ -537,6 +538,8 @@ BOOL LLBottomTray::postBuild()  	mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");  	LLHints::registerHintTarget("chat_bar", mNearbyChatBar->LLView::getHandle()); +	mListener.reset(new LLNearbyChatBarListener(*mNearbyChatBar)); +  	mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");  	mNearbyCharResizeHandlePanel = getChild<LLPanel>("chat_bar_resize_handle_panel"); diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index d9c95d82e5..62718531ef 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -39,6 +39,7 @@ class LLIMChiclet;  class LLBottomTrayLite;  class LLLayoutPanel;  class LLMenuGL; +class LLNearbyChatBarListener;  // Build time optimization, generate once in .cpp file  #ifndef LLBOTTOMTRAY_CPP @@ -555,6 +556,9 @@ protected:  	 * Image used to show position where dragged button will be dropped.  	 */  	LLUIImage* mImageDragIndication; + +	// We want only one LLNearbyChatBarListener object, so it's tied to this singleton +	boost::shared_ptr<LLNearbyChatBarListener> mListener;  };  #endif // LL_LLBOTTOMPANEL_H diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp index 6e58be8174..cf0374075a 100644 --- a/indra/newview/llchatbar.cpp +++ b/indra/newview/llchatbar.cpp @@ -671,6 +671,9 @@ void LLChatBar::onCommitGesture(LLUICtrl* ctrl)  	}  } + +/* Cruft - global gChatHandler declared below has been commented out, +   so this class is never used.  See similar code in llnearbychatbar.cpp  class LLChatHandler : public LLCommandHandler  {  public: @@ -691,7 +694,7 @@ public:  		{  		S32 channel = tokens[0].asInteger();  			// VWR-19499 Restrict function to chat channels greater than 0. -			if ((channel > 0) && (channel < 2147483647)) +			if ((channel > 0) && (channel < CHAT_CHANNEL_DEBUG))  			{  				retval = true;  				// Say mesg on channel @@ -710,3 +713,4 @@ public:  // Creating the object registers with the dispatcher.  //LLChatHandler gChatHandler; +cruft */ diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp index 19dba3f917..19dba3f917 100644..100755 --- a/indra/newview/llcommandhandler.cpp +++ b/indra/newview/llcommandhandler.cpp diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 29b50761d8..5f89d11391 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -889,9 +889,9 @@ void LLBumpImageList::destroyGL()  void LLBumpImageList::restoreGL()  { -	if(!gTextureList.isInitialized())
 -	{
 -		return ;
 +	if(!gTextureList.isInitialized()) +	{ +		return ;  	}  	LLStandardBumpmap::restoreGL(); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 3bdab75acf..83844048d1 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -765,7 +765,7 @@ void LLFeatureManager::applyBaseMasks()  	{  		maskFeatures("OpenGLPre30");  	} -	if (gGLManager.mNumTextureUnits <= 8) +	if (gGLManager.mNumTextureImageUnits <= 8)  	{  		maskFeatures("TexUnit8orLess");  	} diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index 2c4153688a..a9f52282a5 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -131,7 +131,7 @@ void LLFirstUse::notMoving(bool enable)  // static  void LLFirstUse::viewPopup(bool enable)  { -	firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right")); +//	firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right"));  }  // static diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 50b19a4221..610142b5a9 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -461,15 +461,15 @@ void LLFloaterBuyLandUI::updateParcelInfo()  		if (!authorizedBuyer.isNull() && buyer != authorizedBuyer)  		{ -			// Maybe the parcel is set for sale to a group we are in.
 -			bool authorized_group =
 -				gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_DEED)
 -				&& gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_SET_SALE_INFO);
 -
 -			if (!authorized_group)
 -			{
 -				mCannotBuyReason = getString("set_to_sell_to_other");
 -				return;
 +			// Maybe the parcel is set for sale to a group we are in. +			bool authorized_group = +				gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_DEED) +				&& gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_SET_SALE_INFO); + +			if (!authorized_group) +			{ +				mCannotBuyReason = getString("set_to_sell_to_other"); +				return;  			}  		}  	} diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index e8da1aa42c..9dd5269a6b 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -98,7 +98,8 @@  #include "llvfile.h"  #include "llvfs.h"  #include "llcallbacklist.h" - +#include "llviewerobjectlist.h" +#include "llanimationstates.h"  #include "glod/glod.h"  //static @@ -381,12 +382,6 @@ LLFloaterModelPreview::~LLFloaterModelPreview()  {  	sInstance = NULL; -	if ( mModelPreview && mModelPreview->getResetJointFlag() ) -	{		 -		gAgentAvatarp->resetJointPositions(); -	} - -	  	if ( mModelPreview )  	{  		delete mModelPreview; @@ -1577,7 +1572,7 @@ bool LLModelLoader::doLoadModel()  									{  										//llinfos<<"joint "<<lookingForJoint.c_str()<<llendl;  										LLMatrix4 jointTransform = mJointList[lookingForJoint]; -										LLJoint* pJoint = gAgentAvatarp->getJoint( lookingForJoint ); +										LLJoint* pJoint = mPreview->getPreviewAvatar()->getJoint( lookingForJoint );  										if ( pJoint )  										{     											pJoint->storeCurrentXform( jointTransform.getTranslation() );												 @@ -2597,6 +2592,7 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	mLoading = false;  	mLoadState = LLModelLoader::STARTING;  	mGroup = 0; +	mLODFrozen = false;  	mBuildShareTolerance = 0.f;  	mBuildQueueMode = GLOD_QUEUE_GREEDY;  	mBuildBorderMode = GLOD_BORDER_UNLOCK; @@ -2605,6 +2601,13 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	for (U32 i = 0; i < LLModel::NUM_LODS; ++i)  	{  		mRequestedTriangleCount[i] = 0; +		mRequestedCreaseAngle[i] = -1.f; +		mRequestedLoDMode[i] = 0; +		mRequestedErrorThreshold[i] = 0.f; +		mRequestedBuildOperator[i] = 0; +		mRequestedQueueMode[i] = 0; +		mRequestedBorderMode[i] = 0; +		mRequestedShareTolerance[i] = 0.f;  	}  	mViewOption["show_textures"] = false; @@ -2649,6 +2652,8 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	mMasterLegacyJointList.push_front("mHipLeft");  	mMasterLegacyJointList.push_front("mKneeLeft");  	mMasterLegacyJointList.push_front("mFootLeft"); + +	createPreviewAvatar();  }  LLModelPreview::~LLModelPreview() @@ -2702,7 +2707,7 @@ U32 LLModelPreview::calcResourceCost()  	if ( mFMP && mFMP->childGetValue("upload_joints").asBoolean() )  	{ -		gAgentAvatarp->setPelvisOffset( mPelvisZOffset ); +		getPreviewAvatar()->setPelvisOffset( mPelvisZOffset );  	}  	F32 streaming_cost = 0.f; @@ -3247,6 +3252,8 @@ void LLModelPreview::generateNormals()  	F32 angle_cutoff = mFMP->childGetValue("crease_angle").asReal(); +	mRequestedCreaseAngle[which_lod] = angle_cutoff; +  	angle_cutoff *= DEG_TO_RAD;  	if (which_lod == 3 && !mBaseModel.empty()) @@ -3266,7 +3273,7 @@ void LLModelPreview::generateNormals()  	mVertexBuffer[which_lod].clear();  	refresh(); - +	updateStatusMessages();  }  void LLModelPreview::clearMaterials() @@ -3342,6 +3349,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		lod_mode = iface->getFirstSelectedIndex();  	} +	mRequestedLoDMode[mPreviewLOD] = lod_mode;  	F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold").asReal(); @@ -3365,6 +3373,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		build_operator = iface->getFirstSelectedIndex();  	} +	mRequestedBuildOperator[mPreviewLOD] = build_operator;   	if (build_operator == 0)  	{ @@ -3381,6 +3390,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		queue_mode = iface->getFirstSelectedIndex();  	} +	mRequestedQueueMode[mPreviewLOD] = queue_mode;  	if (queue_mode == 0)  	{ @@ -3402,6 +3412,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		border_mode = iface->getFirstSelectedIndex();  	} +	mRequestedBorderMode[mPreviewLOD] = border_mode;  	if (border_mode == 0)  	{ @@ -3437,6 +3448,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  		mBuildShareTolerance = share_tolerance;  		object_dirty = true;  	} +	mRequestedShareTolerance[mPreviewLOD] = share_tolerance;  	if (mGroup == 0)  	{ @@ -3545,6 +3557,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  		U32 submeshes = 0;  		mRequestedTriangleCount[lod] = triangle_count; +		mRequestedErrorThreshold[lod] = lod_error_threshold;  		glodGroupParameteri(mGroup, GLOD_ADAPT_MODE, lod_mode);  		stop_gloderror(); @@ -3832,6 +3845,18 @@ void LLModelPreview::updateStatusMessages()  		}  	} + +	//make sure no hulls have more than 256 points in them +	for (U32 i = 0; upload_ok && i < mModel[LLModel::LOD_PHYSICS].size(); ++i) +	{ +		LLModel* mdl = mModel[LLModel::LOD_PHYSICS][i]; + +		for (U32 j = 0; upload_ok && j < mdl->mPhysics.mHull.size(); ++j) +		{ +			upload_ok = upload_ok && mdl->mPhysics.mHull[i].size() <= 256; +		} +	} +  	bool errorStateFromLoader = getLoadState() >= LLModelLoader::ERROR_PARSING ? true : false;  	bool skinAndRigOk = true; @@ -3855,6 +3880,10 @@ void LLModelPreview::updateStatusMessages()  	{  		mFMP->childEnable("ok_btn");  	} +	else +	{ +		mFMP->childDisable("ok_btn"); +	}  	//add up physics triangles etc  	S32 start = 0; @@ -4021,6 +4050,9 @@ void LLModelPreview::updateStatusMessages()  		{	// auto generate, also the default case for wizard which has no radio selection  			fmp->mLODMode[mPreviewLOD] = 1; +			//don't actually regenerate lod when refreshing UI +			mLODFrozen = true; +  			for (U32 i = 0; i < num_file_controls; ++i)  			{  				mFMP->childDisable(file_controls[i]); @@ -4033,20 +4065,21 @@ void LLModelPreview::updateStatusMessages()  			//if (threshold)  			{	 -				U32 lod_mode = 0; -				LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode"); -				if (iface) -				{ -					lod_mode = iface->getFirstSelectedIndex(); -				} -  				LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold");  				LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit");  				limit->setMaxValue(mMaxTriangleLimit); -				limit->setValue(mRequestedTriangleCount[mPreviewLOD]); +				limit->forceSetValue(mRequestedTriangleCount[mPreviewLOD]); + +				threshold->forceSetValue(mRequestedErrorThreshold[mPreviewLOD]); -				if (lod_mode == 0) +				mFMP->getChild<LLComboBox>("lod_mode")->selectNthItem(mRequestedLoDMode[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("build_operator")->selectNthItem(mRequestedBuildOperator[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("queue_mode")->selectNthItem(mRequestedQueueMode[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("border_mode")->selectNthItem(mRequestedBorderMode[mPreviewLOD]); +				mFMP->getChild<LLSpinCtrl>("share_tolerance")->setValue(mRequestedShareTolerance[mPreviewLOD]); + +				if (mRequestedLoDMode[mPreviewLOD] == 0)  				{  					limit->setVisible(true);  					threshold->setVisible(false); @@ -4060,6 +4093,8 @@ void LLModelPreview::updateStatusMessages()  					threshold->setVisible(true);  				}  			} + +			mLODFrozen = false;  		}  	} @@ -4075,6 +4110,20 @@ void LLModelPreview::updateStatusMessages()  		mFMP->childDisable("physics_file");  		mFMP->childDisable("physics_browse");  	} + +	LLSpinCtrl* crease = mFMP->getChild<LLSpinCtrl>("crease_angle"); +	 +	if (mRequestedCreaseAngle[mPreviewLOD] == -1.f) +	{ +		mFMP->childSetColor("crease_label", LLColor4::grey); +		crease->forceSetValue(75.f); +	} +	else +	{ +		mFMP->childSetColor("crease_label", LLColor4::white); +		crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]); +	} +  }  void LLModelPreview::setPreviewTarget(F32 distance) @@ -4241,42 +4290,6 @@ void LLModelPreview::update()  }  //----------------------------------------------------------------------------- -// changeAvatarsJointPositions() -//----------------------------------------------------------------------------- -void LLModelPreview::changeAvatarsJointPositions( LLModel* pModel ) -{ -	if ( mMasterJointList.empty() ) -	{ -		return; -	} - -	std::vector<std::string> :: const_iterator jointListItBegin = pModel->mSkinInfo.mJointNames.begin(); -	std::vector<std::string> :: const_iterator jointListItEnd = pModel->mSkinInfo.mJointNames.end(); - -	S32 index = 0; -	for ( ; jointListItBegin!=jointListItEnd; ++jointListItBegin, ++index ) -	{	 -		std::string elem = *jointListItBegin; -		//llinfos<<"joint "<<elem<<llendl; - -		S32 matrixCnt = pModel->mSkinInfo.mAlternateBindMatrix.size(); -		if ( matrixCnt < 1 ) -		{ -			llinfos<<"Total WTF moment :"<<matrixCnt<<llendl; -		} -		else -		{ -			LLMatrix4 jointTransform = pModel->mSkinInfo.mAlternateBindMatrix[index]; - -			LLJoint* pJoint = gAgentAvatarp->getJoint( elem ); -			if ( pJoint ) -			{    -				pJoint->storeCurrentXform( jointTransform.getTranslation() );												 -			}	 -		} -	} -} -//-----------------------------------------------------------------------------  // getTranslationForJointOffset()  //-----------------------------------------------------------------------------  LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint ) @@ -4290,6 +4303,30 @@ LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint )  	return LLVector3(0.0f,0.0f,0.0f);								  }  //----------------------------------------------------------------------------- +// createPreviewAvatar +//----------------------------------------------------------------------------- +void LLModelPreview::createPreviewAvatar( void ) +{ +	mPreviewAvatar = (LLVOAvatar*)gObjectList.createObjectViewer( LL_PCODE_LEGACY_AVATAR, gAgent.getRegion() ); +	if ( mPreviewAvatar ) +	{ +		mPreviewAvatar->createDrawable( &gPipeline ); +		mPreviewAvatar->mIsDummy = TRUE; +		mPreviewAvatar->mSpecialRenderMode = 1; +		mPreviewAvatar->setPositionAgent( LLVector3::zero ); +		mPreviewAvatar->slamPosition(); +		mPreviewAvatar->updateJointLODs(); +		mPreviewAvatar->updateGeometry( mPreviewAvatar->mDrawable ); +		mPreviewAvatar->startMotion( ANIM_AGENT_STAND ); +		mPreviewAvatar->hideSkirt(); +	} +	else +	{ +		llinfos<<"Failed to create preview avatar for upload model window"<<llendl; +	} +} + +//-----------------------------------------------------------------------------  // render()  //-----------------------------------------------------------------------------  BOOL LLModelPreview::render() @@ -4403,25 +4440,6 @@ BOOL LLModelPreview::render()  	mFMP->childSetEnabled("upload_joints", upload_skin); -	//poke at avatar when we upload custom joints -	/*	 -	if ( upload_joints ) -	{ -		for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) -		{ -			for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) -			{ -				LLModelInstance& instance = *model_iter; -				LLModel* model = instance.mModel; -				if ( !model->mSkinWeights.empty() ) -				{ -					changeAvatarsJointPositions( model ); -				} -			} -		} -	} -	*/ -	  	F32 explode = mFMP->childGetValue("physics_explode").asReal();  	glClear(GL_DEPTH_BUFFER_BIT); @@ -4441,7 +4459,7 @@ BOOL LLModelPreview::render()  	if (skin_weight)  	{ -		target_pos = gAgentAvatarp->getPositionAgent(); +		target_pos = getPreviewAvatar()->getPositionAgent();  		z_near = 0.01f;  		z_far = 1024.f;  		mCameraDistance = 16.f; @@ -4661,8 +4679,7 @@ BOOL LLModelPreview::render()  		}  		else  		{ -			LLVOAvatarSelf* avatar = gAgentAvatarp; -			target_pos = avatar->getPositionAgent(); +			target_pos = getPreviewAvatar()->getPositionAgent();  			LLViewerCamera::getInstance()->setOriginAndLookAt(  															  target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + offset) * av_rot),		// camera @@ -4671,7 +4688,7 @@ BOOL LLModelPreview::render()  			if (joint_positions)  			{ -				avatar->renderCollisionVolumes(); +				getPreviewAvatar()->renderCollisionVolumes();  			}  			for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) @@ -4702,7 +4719,7 @@ BOOL LLModelPreview::render()  							LLMatrix4 mat[64];  							for (U32 j = 0; j < model->mSkinInfo.mJointNames.size(); ++j)  							{ -								LLJoint* joint = avatar->getJoint(model->mSkinInfo.mJointNames[j]); +								LLJoint* joint = getPreviewAvatar()->getJoint(model->mSkinInfo.mJointNames[j]);  								if (joint)  								{  									mat[j] = model->mSkinInfo.mInvBindMatrix[j]; @@ -4925,9 +4942,12 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture  void LLModelPreview::onLODParamCommit(bool enforce_tri_limit)  { -	genLODs(mPreviewLOD, 3, enforce_tri_limit); -	updateStatusMessages(); -	refresh(); +	if (!mLODFrozen) +	{ +		genLODs(mPreviewLOD, 3, enforce_tri_limit); +		updateStatusMessages(); +		refresh(); +	}  }  LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LLModel* mdl) diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 4d8b46807f..f6d4a08d1f 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -341,6 +341,9 @@ public:  	LLVector3 getTranslationForJointOffset( std::string joint ); +	void		createPreviewAvatar( void ); +	LLVOAvatar* getPreviewAvatar( void ) { return mPreviewAvatar; } +   protected:  	friend class LLModelLoader;  	friend class LLFloaterModelPreview; @@ -373,13 +376,20 @@ public:  	std::map<std::string, bool> mViewOption;  	//GLOD object parameters (must rebuild object if these change) +	bool mLODFrozen;  	F32 mBuildShareTolerance;  	U32 mBuildQueueMode;  	U32 mBuildOperator;  	U32 mBuildBorderMode; +	U32 mRequestedLoDMode[LLModel::NUM_LODS];  	S32 mRequestedTriangleCount[LLModel::NUM_LODS]; +	F32 mRequestedErrorThreshold[LLModel::NUM_LODS]; +	U32 mRequestedBuildOperator[LLModel::NUM_LODS]; +	U32 mRequestedQueueMode[LLModel::NUM_LODS]; +	U32 mRequestedBorderMode[LLModel::NUM_LODS]; +	F32 mRequestedShareTolerance[LLModel::NUM_LODS]; +	F32 mRequestedCreaseAngle[LLModel::NUM_LODS]; -	  	LLModelLoader* mModelLoader;  	LLModelLoader::scene mScene[LLModel::NUM_LODS]; @@ -415,6 +425,7 @@ public:  	std::deque<std::string> mMasterLegacyJointList;  	std::deque<std::string> mJointsFromNode;  	JointTransformMap		mJointTransformMap; +	LLPointer<LLVOAvatar>	mPreviewAvatar;  };  #endif  // LL_LLFLOATERMODELPREVIEW_H diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 4b15695cbf..4b15695cbf 100644..100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 34fda49375..232b8e9096 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -590,6 +590,12 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)  	getChildView("im_btn")->setEnabled(allow_modify);  	getChildView("manage_telehub_btn")->setEnabled(allow_modify); +	const bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") &&  +		gAgent.getRegion() && +		!gAgent.getRegion()->getCapability("GetMesh").empty() && +		!gAgent.getRegion()->getCapability("ObjectAdd").empty(); +	getChildView("mesh_rez_enabled_check")->setVisible(enable_mesh); +	getChildView("mesh_rez_enabled_check")->setEnabled(getChildView("mesh_rez_enabled_check")->getEnabled() && enable_mesh);  	// Data gets filled in by processRegionInfo  	return LLPanelRegionInfo::refreshFromRegion(region); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 73c1f99fa0..edcb96314b 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -85,6 +85,7 @@  #include "llviewerwindow.h"  #include "llvovolume.h"  #include "lluictrlfactory.h" +#include "llaccountingquotamanager.h"  // Globals  LLFloaterTools *gFloaterTools = NULL; @@ -422,7 +423,7 @@ void LLFloaterTools::refresh()  	// Refresh object and prim count labels  	LLLocale locale(LLLocale::USER_LOCALE); -	if ((gAgent.getRegion() && gAgent.getRegion()->getCapability("GetMesh").empty()) || !gSavedSettings.getBOOL("MeshEnabled")) +	if ((gAgent.getRegion() && (gAgent.getRegion()->getCapability("GetMesh").empty() || gAgent.getRegion()->getCapability("ObjectAdd").empty())) || !gSavedSettings.getBOOL("MeshEnabled"))  	{		  		std::string obj_count_string;  		LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); @@ -789,7 +790,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)  	bool show_mesh_cost = gAgent.getRegion() &&   		                  !gAgent.getRegion()->getCapability("GetMesh").empty() &&  -						  gSavedSettings.getBOOL("MeshEnabled"); +						  gSavedSettings.getBOOL("MeshEnabled") && +						  !gAgent.getRegion()->getCapability("ObjectAdd").empty();  	getChildView("obj_count")->setVisible( !land_visible && !show_mesh_cost);  	getChildView("prim_count")->setVisible( !land_visible && !show_mesh_cost); diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index f8a4ce7ad0..f8a4ce7ad0 100644..100755 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp diff --git a/indra/newview/llgesturelistener.cpp b/indra/newview/llgesturelistener.cpp new file mode 100644 index 0000000000..22b7d233c5 --- /dev/null +++ b/indra/newview/llgesturelistener.cpp @@ -0,0 +1,159 @@ +/**
 + * @file   llgesturelistener.cpp
 + * @author Dave Simmons
 + * @date   2011-03-28
 + * @brief  Implementation for LLGestureListener.
 + *
 + * $LicenseInfo:firstyear=2011&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2011, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#include "llviewerprecompiledheaders.h"
 +
 +#include "llgesturelistener.h"
 +#include "llgesturemgr.h"
 +#include "llmultigesture.h"
 +
 +
 +LLGestureListener::LLGestureListener()
 +  : LLEventAPI("LLGesture",
 +               "LLGesture listener interface to control gestures")
 +{
 +    add("getActiveGestures",
 +        "Return information about the agent's available gestures [\"reply\"]:\n"
 +        "[\"gestures\"]: a dictionary with UUID strings as keys\n"
 +		"  and the following dict values for each entry:\n"
 +		"     [\"name\"]: name of the gesture, may be empty\n"
 +		"     [\"trigger\"]: trigger string used to invoke via user chat, may be empty\n"
 +		"     [\"playing\"]: true or false indicating the playing state",
 +        &LLGestureListener::getActiveGestures,
 +        LLSDMap("reply", LLSD()));
 +	add("isGesturePlaying",
 +		"[\"id\"]: UUID of the gesture to query.  Returns True or False in [\"playing\"] value of the result",
 +        &LLGestureListener::isGesturePlaying);
 +	add("startGesture",
 +		"[\"id\"]: UUID of the gesture to start playing",
 +        &LLGestureListener::startGesture);
 +	add("stopGesture",
 +		"[\"id\"]: UUID of the gesture to stop",
 +        &LLGestureListener::stopGesture);
 +}
 +
 +
 +// "getActiveGestures" command
 +void LLGestureListener::getActiveGestures(const LLSD& event_data) const
 +{
 +	LLSD reply = LLSD::emptyMap();
 +	LLSD gesture_map = LLSD::emptyMap();
 +
 +	const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures();
 +
 +	// Scan active gesture map and get all the names
 +	LLGestureMgr::item_map_t::const_iterator it;
 +	for (it = active_gestures.begin(); it != active_gestures.end(); ++it)
 +	{
 +		LLMultiGesture* gesture = (*it).second;
 +		if (gesture)
 +		{	// Add an entry to the result map with the LLUUID as key with a map containing data
 +			LLSD info = LLSD::emptyMap();
 +			info["name"] = (LLSD::String) gesture->mName;
 +			info["trigger"] = (LLSD::String) gesture->mTrigger;
 +			info["playing"] = (LLSD::Boolean) gesture->mPlaying;
 +
 +			gesture_map[(*it).first.asString()] = info;
 +		}
 +	}
 +
 +	reply["gestures"] = gesture_map;
 +	sendReply(reply, event_data);
 +}
 +
 +
 +
 +// "isGesturePlaying" command
 +void LLGestureListener::isGesturePlaying(const LLSD& event_data) const
 +{
 +	bool is_playing = false;
 +	if (event_data.has("id"))
 +	{
 +		LLUUID gesture_id = event_data["id"].asUUID();
 +		if (gesture_id.notNull())
 +		{
 +			is_playing = LLGestureMgr::instance().isGesturePlaying(gesture_id);
 +		}
 +		else
 +		{
 +			llwarns << "isGesturePlaying did not find a gesture object for " << gesture_id << llendl;
 +		}
 +	}
 +	else
 +	{
 +		llwarns << "isGesturePlaying didn't have 'id' value passed in" << llendl;
 +	}
 +
 +	LLSD reply = LLSD::emptyMap();
 +	reply["playing"] = (LLSD::Boolean) is_playing;
 +	sendReply(reply, event_data);
 +}
 +
 +
 +// "startGesture" command
 +void LLGestureListener::startGesture(LLSD const & event_data) const
 +{
 +	startOrStopGesture(event_data, true);
 +}
 +
 +
 +// "stopGesture" command
 +void LLGestureListener::stopGesture(LLSD const & event_data) const
 +{
 +	startOrStopGesture(event_data, false);
 +}
 +
 +
 +// Real code for "startGesture" or "stopGesture"
 +void LLGestureListener::startOrStopGesture(LLSD const & event_data, bool start) const
 +{
 +	if (event_data.has("id"))
 +	{
 +		LLUUID gesture_id = event_data["id"].asUUID();
 +		if (gesture_id.notNull())
 +		{
 +			if (start)
 +			{
 +				LLGestureMgr::instance().playGesture(gesture_id);
 +			}
 +			else
 +			{
 +				LLGestureMgr::instance().stopGesture(gesture_id);
 +			}
 +		}
 +		else
 +		{
 +			llwarns << "startOrStopGesture did not find a gesture object for " << gesture_id << llendl;
 +		}
 +	}
 +	else
 +	{
 +		llwarns << "startOrStopGesture didn't have 'id' value passed in" << llendl;
 +	}
 +}
 +
 diff --git a/indra/newview/llgesturelistener.h b/indra/newview/llgesturelistener.h new file mode 100644 index 0000000000..326881ac2b --- /dev/null +++ b/indra/newview/llgesturelistener.h @@ -0,0 +1,52 @@ +/**
 + * @file   llgesturelistener.h
 + * @author Dave Simmons
 + * @date   2011-03-15
 + * @brief  Class definition for LLGestureListener.
 + *
 + * $LicenseInfo:firstyear=2011&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2011, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +
 +#ifndef LL_LLGESTURELISTENER_H
 +#define LL_LLGESTURELISTENER_H
 +
 +#include "lleventapi.h"
 +
 +class LLSD;
 +
 +class LLGestureListener : public LLEventAPI
 +{
 +public:
 +	LLGestureListener();
 +
 +private:
 +    void getActiveGestures(LLSD const & gesture_data) const;
 +	void isGesturePlaying(LLSD const & gesture_data) const;
 +    void startGesture(LLSD const & gesture_data) const;
 +    void stopGesture(LLSD const & gesture_data) const;
 +
 +	void startOrStopGesture(LLSD const & event_data, bool start) const;
 +};
 +
 +#endif // LL_LLGESTURELISTENER_H
 +
 diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index 2f9856c650..66ca76bfb0 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -53,6 +53,7 @@  #include "llviewerstats.h"  #include "llnearbychatbar.h"  #include "llappearancemgr.h" +#include "llgesturelistener.h"  // Longest time, in seconds, to wait for all animations to stop playing  const F32 MAX_WAIT_ANIM_SECS = 30.f; @@ -70,6 +71,7 @@ LLGestureMgr::LLGestureMgr()  	mLoadingCount(0)  {  	gInventory.addObserver(this); +	mListener.reset(new LLGestureListener());  } diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h index 5930841cbc..26a5924ec3 100644 --- a/indra/newview/llgesturemgr.h +++ b/indra/newview/llgesturemgr.h @@ -37,6 +37,7 @@  #include "llviewerinventory.h"  class LLMultiGesture; +class LLGestureListener;  class LLGestureStep;  class LLUUID;  class LLVFS; @@ -154,9 +155,9 @@ protected:  	// Used by loadGesture  	static void onLoadComplete(LLVFS *vfs, -							   const LLUUID& asset_uuid, -							   LLAssetType::EType type, -							   void* user_data, S32 status, LLExtStat ext_status); +						   const LLUUID& asset_uuid, +						   LLAssetType::EType type, +						   void* user_data, S32 status, LLExtStat ext_status);  	// Used by playGesture to load an asset file  	// required to play a gesture step @@ -185,6 +186,9 @@ private:  	BOOL mValid;  	std::set<LLUUID> mLoadingAssets; + +	// LLEventHost interface +	boost::shared_ptr<LLGestureListener> mListener;  };  #endif diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 738d82e732..673f28e01f 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -93,6 +93,7 @@ F32 get_default_max_prim_scale(bool is_flora)  	if (gSavedSettings.getBOOL("MeshEnabled") &&   		gAgent.getRegion() &&   		!gAgent.getRegion()->getCapability("GetMesh").empty() && +		!gAgent.getRegion()->getCapability("ObjectAdd").empty() &&  		!is_flora)  	{  		return DEFAULT_MAX_PRIM_SCALE; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 0a1eadf4d0..55145c6ad7 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -85,6 +85,8 @@ U32 LLMeshRepository::sPeakKbps = 0;  const U32 MAX_TEXTURE_UPLOAD_RETRIES = 5; +void dumpLLSDToFile(const LLSD& content, std::string filename); +  std::string header_lod[] =   {  	"lowest_lod", @@ -489,15 +491,36 @@ public:  		mThread(thread)  	{  	} -	virtual void completedRaw(U32 status, const std::string& reason, -							  const LLChannelDescriptors& channels, -							  const LLIOPipe::buffer_ptr_t& buffer) +	virtual void completed(U32 status, +						   const std::string& reason, +						   const LLSD& content)  	{ -		assert_main_thread(); +		//assert_main_thread();  		llinfos << "completed" << llendl;  		mThread->mPendingUploads--; +		dumpLLSDToFile(content,"whole_model_response.xml"); + +		mThread->mWholeModelUploadURL = content["uploader"].asString();  +	} +}; + +class LLWholeModelUploadResponder: public LLCurl::Responder +{ +	LLMeshUploadThread* mThread; +public: +	LLWholeModelUploadResponder(LLMeshUploadThread* thread): +		mThread(thread) +	{ +	} +	virtual void completed(U32 status, +						   const std::string& reason, +						   const LLSD& content) +	{ +		//assert_main_thread(); +		llinfos << "upload completed" << llendl; +		mThread->mPendingUploads--; +		dumpLLSDToFile(content,"whole_model_upload_response.xml");  	} -	  };  LLMeshRepoThread::LLMeshRepoThread() @@ -1261,7 +1284,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,  	mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset");  	mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice"); -	mWholeModelUploadCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory"); +	mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");  	mOrigin += gAgent.getAtAxis() * scale.magVec();  } @@ -1363,10 +1386,10 @@ void LLMeshUploadThread::run()  	}  } -#if 0 -void dumpLLSDToFile(LLSD& content, std::string& filename) +#if 1 +void dumpLLSDToFile(const LLSD& content, std::string filename)  { -	std::ofstream of(filename); +	std::ofstream of(filename.c_str());  	LLSDSerialize::toPrettyXML(content,of);  }  #endif @@ -1374,9 +1397,10 @@ void dumpLLSDToFile(LLSD& content, std::string& filename)  void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  {  	// TODO where do textures go? -	 +  	LLSD result; +	LLSD res;  	result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);  	result["asset_type"] = "mesh";  	result["inventory_type"] = "object"; @@ -1385,9 +1409,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	// TODO "optional" fields from the spec -	LLSD res;  	res["mesh_list"] = LLSD::emptyArray(); -	res["texture_list"] = LLSD::emptyArray(); +// TODO Textures +	//res["texture_list"] = LLSD::emptyArray();  	S32 mesh_num = 0;  	S32 texture_num = 0; @@ -1433,10 +1457,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  		LLQuaternion rot;  		LLMatrix4 transformation = instance.mTransform;  		decomposeMeshMatrix(transformation,pos,rot,scale); -		 + +#if 0  		mesh_entry["childpos"] = ll_sd_from_vector3(pos);  		mesh_entry["childrot"] = ll_sd_from_quaternion(rot);  		mesh_entry["scale"] = ll_sd_from_vector3(scale); +#endif +		mesh_entry["position"] = ll_sd_from_vector3(LLVector3()); +		mesh_entry["rotation"] = ll_sd_from_quaternion(rot); +		mesh_entry["scale"] = ll_sd_from_vector3(scale);  		// TODO should be binary.  		std::string str = ostr.str(); @@ -1480,9 +1509,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	}  	result["asset_resources"] = res; -#if 0	 -	std::string name("whole_model.xml"); -	dumpLLSDToFile(result,name); +#if 1	 +	dumpLLSDToFile(result,"whole_model.xml");  #endif  	dest = result; @@ -1541,9 +1569,24 @@ void LLMeshUploadThread::doWholeModelUpload()  	mPendingUploads++;  	LLCurlRequest::headers_t headers; -	mCurlRequest->post(mWholeModelUploadCapability, headers, model_data.asString(), +	mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,  					   new LLWholeModelFeeResponder(this)); +	do +	{ +		mCurlRequest->process(); +	} while (mCurlRequest->getQueued() > 0); + +	mCurlRequest->post(mWholeModelUploadURL, headers, model_data["asset_resources"], new LLWholeModelUploadResponder(this)); +	 +	do +	{ +		mCurlRequest->process(); +	} while (mCurlRequest->getQueued() > 0); + +	delete mCurlRequest; +	mCurlRequest = NULL; +  	// Currently a no-op.  	mFinished = true;  } @@ -3374,6 +3417,12 @@ void LLPhysicsDecomp::doDecomposition()  	LLCDMeshData mesh;  	S32 stage = mStageID[mCurRequest->mStage]; +	if (LLConvexDecomposition::getInstance() == NULL) +	{ +		// stub library. do nothing. +		return; +	} +  	//load data intoLLCD  	if (stage == 0)  	{ @@ -3574,6 +3623,12 @@ void LLPhysicsDecomp::doDecompositionSingleHull()  	LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance(); +	if (decomp == NULL) +	{ +		//stub. do nothing. +		return; +	} +  	for (S32 i = 0; i < param_count; ++i)  	{  		decomp->setParam(params[i].mName, params[i].mDefault.mIntOrEnumValue); @@ -3653,6 +3708,14 @@ void LLPhysicsDecomp::doDecompositionSingleHull()  void LLPhysicsDecomp::run()  {  	LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance(); +	if (decomp == NULL) +	{ +		// stub library. Set init to true so the main thread +		// doesn't wait for this to finish. +		mInited = true; +		return; +	} +  	decomp->initThread();  	mInited = true; diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 802e3e1aba..f859e29c07 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -387,7 +387,8 @@ public:  	LLHost			mHost;  	std::string		mUploadObjectAssetCapability;  	std::string		mNewInventoryCapability; -	std::string		mWholeModelUploadCapability; +	std::string		mWholeModelFeeCapability; +	std::string		mWholeModelUploadURL;  	std::queue<LLMeshUploadData> mUploadQ;  	std::queue<LLMeshUploadData> mConfirmedQ; diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index d3fd959152..4b961db5f9 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -889,11 +889,11 @@ void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32  	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT);  } -class LLChatHandler : public LLCommandHandler +class LLChatCommandHandler : public LLCommandHandler  {  public:  	// not allowed from outside the app -	LLChatHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { } +	LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { }      // Your code here  	bool handle(const LLSD& tokens, const LLSD& query_map, @@ -909,7 +909,7 @@ public:  		{  		S32 channel = tokens[0].asInteger();  			// VWR-19499 Restrict function to chat channels greater than 0. -			if ((channel > 0) && (channel < 2147483647)) +			if ((channel > 0) && (channel < CHAT_CHANNEL_DEBUG))  			{  				retval = true;  		// Send unescaped message, see EXT-6353. @@ -927,6 +927,6 @@ public:  };  // Creating the object registers with the dispatcher. -LLChatHandler gChatHandler; +LLChatCommandHandler gChatHandler; diff --git a/indra/newview/llnearbychatbarlistener.cpp b/indra/newview/llnearbychatbarlistener.cpp new file mode 100644 index 0000000000..0d64eaed47 --- /dev/null +++ b/indra/newview/llnearbychatbarlistener.cpp @@ -0,0 +1,100 @@ +/**
 + * @file   llnearbychatbarlistener.cpp
 + * @author Dave Simmons
 + * @date   2011-03-15
 + * @brief  Implementation for LLNearbyChatBarListener.
 + *
 + * $LicenseInfo:firstyear=2011&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2011, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#include "llviewerprecompiledheaders.h"
 +
 +#include "llnearbychatbarlistener.h"
 +#include "llnearbychatbar.h"
 +
 +#include "llagent.h"
 +#include "llchat.h"
 +
 +
 +
 +LLNearbyChatBarListener::LLNearbyChatBarListener(LLNearbyChatBar & chatbar)
 +  : LLEventAPI("LLChatBar",
 +               "LLChatBar listener to (e.g.) sendChat, etc."),
 +	mChatbar(chatbar)
 +{
 +    add("sendChat",
 +        "Send chat to the simulator:\n"
 +        "[\"message\"] chat message text [required]\n"
 +        "[\"channel\"] chat channel number [default = 0]\n"
 +		"[\"type\"] chat type \"whisper\", \"normal\", \"shout\" [default = \"normal\"]",
 +        &LLNearbyChatBarListener::sendChat);
 +}
 +
 +
 +// "sendChat" command
 +void LLNearbyChatBarListener::sendChat(LLSD const & chat_data) const
 +{
 +	// Extract the data
 +	std::string chat_text = chat_data["message"].asString();
 +
 +	S32 channel = 0;
 +	if (chat_data.has("channel"))
 +	{
 +		channel = chat_data["channel"].asInteger();
 +		if (channel < 0 || channel >= CHAT_CHANNEL_DEBUG)
 +		{	// Use 0 up to (but not including) CHAT_CHANNEL_DEBUG
 +			channel = 0;
 +		}
 +	}
 +
 +	EChatType type_o_chat = CHAT_TYPE_NORMAL;
 +	if (chat_data.has("type"))
 +	{
 +		std::string type_string = chat_data["type"].asString();
 +		if (type_string == "whisper")
 +		{
 +			type_o_chat = CHAT_TYPE_WHISPER;
 +		}
 +		else if (type_string == "shout")
 +		{
 +			type_o_chat = CHAT_TYPE_SHOUT;
 +		}
 +	}
 +
 +	// Have to prepend /42 style channel numbers
 +	std::string chat_to_send;
 +	if (channel == 0)
 +	{
 +		chat_to_send = chat_text;
 +	}
 +	else
 +	{
 +		chat_to_send += "/";
 +		chat_to_send += chat_data["channel"].asString();
 +		chat_to_send += " ";
 +		chat_to_send += chat_text;
 +	}
 +
 +	// Send it as if it was typed in
 +	mChatbar.sendChatFromViewer(chat_to_send, type_o_chat, (BOOL)(channel == 0));
 +}
 +
 diff --git a/indra/newview/llnearbychatbarlistener.h b/indra/newview/llnearbychatbarlistener.h new file mode 100644 index 0000000000..13e4e5990c --- /dev/null +++ b/indra/newview/llnearbychatbarlistener.h @@ -0,0 +1,50 @@ +/**
 + * @file   llnearbychatbarlistener.h
 + * @author Dave Simmons
 + * @date   2011-03-15
 + * @brief  Class definition for LLNearbyChatBarListener.
 + *
 + * $LicenseInfo:firstyear=2011&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2011, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +
 +#ifndef LL_LLNEARBYCHATBARLISTENER_H
 +#define LL_LLNEARBYCHATBARLISTENER_H
 +
 +#include "lleventapi.h"
 +
 +class LLSD;
 +class LLNearbyChatBar;
 +
 +class LLNearbyChatBarListener : public LLEventAPI
 +{
 +public:
 +	LLNearbyChatBarListener(LLNearbyChatBar & chatbar);
 +
 +private:
 +    void sendChat(LLSD const & chat_data) const;
 +
 +	LLNearbyChatBar & mChatbar;
 +};
 +
 +#endif // LL_LLNEARBYCHATBARLISTENER_H
 +
 diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index b56fb65a4c..11dc496311 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -441,6 +441,8 @@ void LLNearbyChatScreenChannel::reshape			(S32 width, S32 height, BOOL called_fr  //-----------------------------------------------------------------------------------------------  //LLNearbyChatHandler  //----------------------------------------------------------------------------------------------- +boost::scoped_ptr<LLEventPump> LLNearbyChatHandler::sChatWatcher(new LLEventStream("LLChat")); +  LLNearbyChatHandler::LLNearbyChatHandler(e_notification_type type, const LLSD& id)  {  	mType = type; @@ -487,6 +489,27 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)  		//	tmp_chat.mFromName = tmp_chat.mFromID.asString();  	} +	// Build notification data  +	LLSD notification; +	notification["message"] = chat_msg.mText; +	notification["from"] = chat_msg.mFromName; +	notification["from_id"] = chat_msg.mFromID; +	notification["time"] = chat_msg.mTime; +	notification["source"] = (S32)chat_msg.mSourceType; +	notification["chat_type"] = (S32)chat_msg.mChatType; +	notification["chat_style"] = (S32)chat_msg.mChatStyle; +	// Pass sender info so that it can be rendered properly (STORM-1021). +	notification["sender_slurl"] = LLViewerChat::getSenderSLURL(chat_msg, args); + +	if (chat_msg.mChatType == CHAT_TYPE_DIRECT && +		chat_msg.mText.length() > 0 && +		chat_msg.mText[0] == '@') +	{ +		// Send event on to LLEventStream and exit +		sChatWatcher->post(notification); +		return; +	} +  	// don't show toast and add message to chat history on receive debug message  	// with disabled setting showing script errors or enabled setting to show script  	// errors in separate window. @@ -529,6 +552,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)  	} +	// Send event on to LLEventStream +	sChatWatcher->post(notification); + +  	if( nearby_chat->getVisible()  		|| ( chat_msg.mSourceType == CHAT_SOURCE_AGENT  			&& gSavedSettings.getBOOL("UseChatBubbles") ) @@ -562,25 +589,14 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)  	}  	*/ -	// Add a nearby chat toast. -	LLUUID id; -	id.generate(); -  	LLNearbyChatScreenChannel* channel = dynamic_cast<LLNearbyChatScreenChannel*>(mChannel); -	  	if(channel)  	{ -		LLSD notification; +		// Add a nearby chat toast. +		LLUUID id; +		id.generate();  		notification["id"] = id; -		notification["message"] = chat_msg.mText; -		notification["from"] = chat_msg.mFromName; -		notification["from_id"] = chat_msg.mFromID; -		notification["time"] = chat_msg.mTime; -		notification["source"] = (S32)chat_msg.mSourceType; -		notification["chat_type"] = (S32)chat_msg.mChatType; -		notification["chat_style"] = (S32)chat_msg.mChatStyle; -		  		std::string r_color_name = "White";  		F32 r_color_alpha = 1.0f;   		LLViewerChat::getChatColor( chat_msg, r_color_name, r_color_alpha); @@ -588,13 +604,8 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)  		notification["text_color"] = r_color_name;  		notification["color_alpha"] = r_color_alpha;  		notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ; - -		// Pass sender info so that it can be rendered properly (STORM-1021). -		notification["sender_slurl"] = LLViewerChat::getSenderSLURL(chat_msg, args); -  		channel->addNotification(notification);	  	} -  }  void LLNearbyChatHandler::onDeleteToast(LLToast* toast) diff --git a/indra/newview/llnearbychathandler.h b/indra/newview/llnearbychathandler.h index ec1f29cdfc..b0e4f62d51 100644 --- a/indra/newview/llnearbychathandler.h +++ b/indra/newview/llnearbychathandler.h @@ -29,6 +29,8 @@  #include "llnotificationhandler.h" +class LLEventPump; +  //add LLNearbyChatHandler to LLNotificationsUI namespace  namespace LLNotificationsUI{ @@ -44,6 +46,8 @@ public:  protected:  	virtual void onDeleteToast(LLToast* toast);  	virtual void initChannel(); + +	static boost::scoped_ptr<LLEventPump> sChatWatcher;  };  } diff --git a/indra/newview/llnotificationmanager.h b/indra/newview/llnotificationmanager.h index 72fa394621..16e82e4cce 100644 --- a/indra/newview/llnotificationmanager.h +++ b/indra/newview/llnotificationmanager.h @@ -69,7 +69,7 @@ public:  private:  	//TODO (*)  	std::map<std::string, boost::shared_ptr<LLEventHandler> > mNotifyHandlers; -	std::map<std::string, LLChatHandler*> mChatHandlers; +	// cruft std::map<std::string, LLChatHandler*> mChatHandlers;  };  } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 64af6c2157..b4d0ada196 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -33,11 +33,9 @@  #include "lleconomy.h"  #include "llerror.h"  #include "llfontgl.h" -#include "llmaterialtable.h"  #include "llpermissionsflags.h"  #include "llstring.h"  #include "llvolume.h" -#include "material_codes.h"  #include "m3math.h"  // project includes @@ -57,7 +55,6 @@  #include "lltool.h"  #include "lltoolcomp.h"  #include "lltoolmgr.h" -#include "lltrans.h"  #include "llui.h"  #include "llviewerobject.h"  #include "llviewerregion.h" @@ -101,17 +98,6 @@ BOOL	LLPanelObject::postBuild()  {  	setMouseOpaque(FALSE); -	std::map<std::string, std::string> material_name_map; -	material_name_map["Stone"]= LLTrans::getString("Stone"); -	material_name_map["Metal"]= LLTrans::getString("Metal");	 -	material_name_map["Glass"]= LLTrans::getString("Glass");	 -	material_name_map["Wood"]= LLTrans::getString("Wood");	 -	material_name_map["Flesh"]= LLTrans::getString("Flesh"); -	material_name_map["Plastic"]= LLTrans::getString("Plastic"); -	material_name_map["Rubber"]= LLTrans::getString("Rubber");	 -	material_name_map["Light"]= LLTrans::getString("Light");		 -	 -	LLMaterialTable::basic.initTableTransNames(material_name_map);  	//--------------------------------------------------------  	// Top  	//-------------------------------------------------------- @@ -166,22 +152,6 @@ BOOL	LLPanelObject::postBuild()  	//-------------------------------------------------------- -	// material type popup -	mComboMaterial = getChild<LLComboBox>("material"); -	childSetCommitCallback("material",onCommitMaterial,this); -	mComboMaterial->removeall(); - -	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin(); -		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter) -	{ -		LLMaterialInfo* minfop = *iter; -		if (minfop->mMCode != LL_MCODE_LIGHT) -		{ -			mComboMaterial->add(minfop->mName);   -		} -	} -	mComboMaterialItemCount = mComboMaterial->getItemCount(); -  	// Base Type  	mComboBaseType = getChild<LLComboBox>("comboBaseType");  	childSetCommitCallback("comboBaseType",onCommitParametric,this); @@ -309,7 +279,6 @@ BOOL	LLPanelObject::postBuild()  LLPanelObject::LLPanelObject()  :	LLPanel(), -	mComboMaterialItemCount(0),  	mIsPhysical(FALSE),  	mIsTemporary(FALSE),  	mIsPhantom(FALSE), @@ -527,43 +496,6 @@ void LLPanelObject::getState( )  	mCheckCastShadows->setEnabled( roots_selected==1 && editable );  #endif -	// Update material part -	// slightly inefficient - materials are unique per object, not per TE -	U8 material_code = 0; -	struct f : public LLSelectedTEGetFunctor<U8> -	{ -		U8 get(LLViewerObject* object, S32 te) -		{ -			return object->getMaterial(); -		} -	} func; -	bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code ); -	std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); -	if (editable && single_volume && material_same) -	{ -		mComboMaterial->setEnabled( TRUE ); -		if (material_code == LL_MCODE_LIGHT) -		{ -			if (mComboMaterial->getItemCount() == mComboMaterialItemCount) -			{ -				mComboMaterial->add(LEGACY_FULLBRIGHT_DESC); -			} -			mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC); -		} -		else -		{ -			if (mComboMaterial->getItemCount() != mComboMaterialItemCount) -			{ -				mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC); -			} -			 -			mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code))); -		} -	} -	else -	{ -		mComboMaterial->setEnabled( FALSE ); -	}  	//----------------------------------------------------------------------------  	S32 selected_item	= MI_BOX; @@ -1095,12 +1027,9 @@ void LLPanelObject::getState( )  	mCtrlSculptTexture->setVisible(sculpt_texture_visible);  	mLabelSculptType->setVisible(sculpt_texture_visible);  	mCtrlSculptType->setVisible(sculpt_texture_visible); -	mCtrlSculptMirror->setVisible(sculpt_texture_visible); -	mCtrlSculptInvert->setVisible(sculpt_texture_visible);  	// sculpt texture -  	if (selected_item == MI_SCULPT)  	{ @@ -1145,7 +1074,7 @@ void LLPanelObject::getState( )  			if (mCtrlSculptMirror)  			{  				mCtrlSculptMirror->set(sculpt_mirror); -				mCtrlSculptMirror->setEnabled(editable); +				mCtrlSculptMirror->setEnabled(editable && !isMesh);  			}  			if (mCtrlSculptInvert) @@ -1166,6 +1095,9 @@ void LLPanelObject::getState( )  		mSculptTextureRevert = LLUUID::null;		  	} +	mCtrlSculptMirror->setVisible(sculpt_texture_visible && !isMesh); +	mCtrlSculptInvert->setVisible(sculpt_texture_visible && !isMesh); +  	//----------------------------------------------------------------------------  	mObject = objectp; @@ -1245,25 +1177,6 @@ void LLPanelObject::sendCastShadows()  }  // static -void LLPanelObject::onCommitMaterial( LLUICtrl* ctrl, void* userdata ) -{ -	//LLPanelObject* self = (LLPanelObject*) userdata; -	LLComboBox* box = (LLComboBox*) ctrl; - -	if (box) -	{ -		// apply the currently selected material to the object -		const std::string& material_name = box->getSimple(); -		std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); -		if (material_name != LEGACY_FULLBRIGHT_DESC) -		{ -			U8 material_code = LLMaterialTable::basic.getMCode(material_name); -			LLSelectMgr::getInstance()->selectionSetMaterial(material_code); -		} -	} -} - -// static  void LLPanelObject::onCommitParametric( LLUICtrl* ctrl, void* userdata )  {  	LLPanelObject* self = (LLPanelObject*) userdata; @@ -1829,7 +1742,8 @@ void LLPanelObject::refresh()  	bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") &&   					   gAgent.getRegion() && -					   !gAgent.getRegion()->getCapability("GetMesh").empty(); +					   !gAgent.getRegion()->getCapability("GetMesh").empty() && +					   !gAgent.getRegion()->getCapability("ObjectAdd").empty();  	F32 max_scale = get_default_max_prim_scale(LLPickInfo::isFlora(mObject)); @@ -1937,7 +1851,6 @@ void LLPanelObject::clearCtrls()  	mCheckCastShadows->set(FALSE);  	mCheckCastShadows->setEnabled( FALSE );  #endif -	mComboMaterial	->setEnabled( FALSE );  	// Disable text labels  	mLabelPosition	->setEnabled( FALSE );  	mLabelSize		->setEnabled( FALSE ); diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index e2f2a4400d..475dfdaedb 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -66,7 +66,6 @@ public:  	static void 	onCommitPhantom(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitCastShadows(	LLUICtrl* ctrl, void* userdata);  	static void 	onCommitPhysics(		LLUICtrl* ctrl, void* userdata); -	static void 	onCommitMaterial(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitParametric(LLUICtrl* ctrl, void* userdata); @@ -94,10 +93,6 @@ protected:  	void 			getVolumeParams(LLVolumeParams& volume_params);  protected: -	S32				mComboMaterialItemCount; - -	LLComboBox*		mComboMaterial; -	  	// Per-object options  	LLComboBox*		mComboBaseType; diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index ddce83c616..ddce83c616 100644..100755 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 29db110523..29db110523 100644..100755 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index fd5c3362bb..fd5c3362bb 100644..100755 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h index fca359f51e..fca359f51e 100644..100755 --- a/indra/newview/llpanelprofile.h +++ b/indra/newview/llpanelprofile.h diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index c443814c89..7839cdd811 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -59,6 +59,7 @@  #include "lltool.h"  #include "lltoolcomp.h"  #include "lltoolmgr.h" +#include "lltrans.h"  #include "llui.h"  #include "llviewerobject.h"  #include "llviewerregion.h" @@ -156,6 +157,34 @@ BOOL	LLPanelVolume::postBuild()  		mSpinPhysicsRestitution = getChild<LLSpinCtrl>("Physics Restitution");  		mSpinPhysicsRestitution->setCommitCallback(boost::bind(&LLPanelVolume::sendPhysicsRestitution, this, _1, mSpinPhysicsRestitution));  	} + +	std::map<std::string, std::string> material_name_map; +	material_name_map["Stone"]= LLTrans::getString("Stone"); +	material_name_map["Metal"]= LLTrans::getString("Metal");	 +	material_name_map["Glass"]= LLTrans::getString("Glass");	 +	material_name_map["Wood"]= LLTrans::getString("Wood");	 +	material_name_map["Flesh"]= LLTrans::getString("Flesh"); +	material_name_map["Plastic"]= LLTrans::getString("Plastic"); +	material_name_map["Rubber"]= LLTrans::getString("Rubber");	 +	material_name_map["Light"]= LLTrans::getString("Light");		 +	 +	LLMaterialTable::basic.initTableTransNames(material_name_map); + +	// material type popup +	mComboMaterial = getChild<LLComboBox>("material"); +	childSetCommitCallback("material",onCommitMaterial,this); +	mComboMaterial->removeall(); + +	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin(); +		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter) +	{ +		LLMaterialInfo* minfop = *iter; +		if (minfop->mMCode != LL_MCODE_LIGHT) +		{ +			mComboMaterial->add(minfop->mName);   +		} +	} +	mComboMaterialItemCount = mComboMaterial->getItemCount();  	// Start with everyone disabled  	clearCtrls(); @@ -164,7 +193,8 @@ BOOL	LLPanelVolume::postBuild()  }  LLPanelVolume::LLPanelVolume() -	: LLPanel() +	: LLPanel(), +	  mComboMaterialItemCount(0)  {  	setMouseOpaque(FALSE); @@ -379,6 +409,46 @@ void LLPanelVolume::getState( )  		getChildView("FlexForceZ")->setEnabled(false);  	} +	// Material properties + +	// Update material part +	// slightly inefficient - materials are unique per object, not per TE +	U8 material_code = 0; +	struct f : public LLSelectedTEGetFunctor<U8> +	{ +		U8 get(LLViewerObject* object, S32 te) +		{ +			return object->getMaterial(); +		} +	} func; +	bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code ); +	std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); +	if (editable && single_volume && material_same) +	{ +		mComboMaterial->setEnabled( TRUE ); +		if (material_code == LL_MCODE_LIGHT) +		{ +			if (mComboMaterial->getItemCount() == mComboMaterialItemCount) +			{ +				mComboMaterial->add(LEGACY_FULLBRIGHT_DESC); +			} +			mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC); +		} +		else +		{ +			if (mComboMaterial->getItemCount() != mComboMaterialItemCount) +			{ +				mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC); +			} +			 +			mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code))); +		} +	} +	else +	{ +		mComboMaterial->setEnabled( FALSE ); +	} +  	// Physics properties  	mSpinPhysicsGravity->set(objectp->getPhysicsGravity()); @@ -462,12 +532,12 @@ void LLPanelVolume::refresh()  	bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") &&   					   gAgent.getRegion() && -					   !gAgent.getRegion()->getCapability("GetMesh").empty(); +					   !gAgent.getRegion()->getCapability("GetMesh").empty() && +					   !gAgent.getRegion()->getCapability("ObjectAdd").empty();  	getChildView("label physicsshapetype")->setVisible(enable_mesh);  	getChildView("Physics Shape Type Combo Ctrl")->setVisible(enable_mesh);  	getChildView("Physics Gravity")->setVisible(enable_mesh); -	getChildView("Physics Material Override")->setVisible(enable_mesh);  	getChildView("Physics Friction")->setVisible(enable_mesh);  	getChildView("Physics Density")->setVisible(enable_mesh);  	getChildView("Physics Restitution")->setVisible(enable_mesh); @@ -522,6 +592,8 @@ void LLPanelVolume::clearCtrls()  	mSpinPhysicsFriction->setEnabled(FALSE);  	mSpinPhysicsDensity->setEnabled(FALSE);  	mSpinPhysicsRestitution->setEnabled(FALSE); + +	mComboMaterial->setEnabled( FALSE );  }  // @@ -674,6 +746,25 @@ void LLPanelVolume::onLightSelectTexture(const LLSD& data)  }  // static +void LLPanelVolume::onCommitMaterial( LLUICtrl* ctrl, void* userdata ) +{ +	//LLPanelObject* self = (LLPanelObject*) userdata; +	LLComboBox* box = (LLComboBox*) ctrl; + +	if (box) +	{ +		// apply the currently selected material to the object +		const std::string& material_name = box->getSimple(); +		std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); +		if (material_name != LEGACY_FULLBRIGHT_DESC) +		{ +			U8 material_code = LLMaterialTable::basic.getMCode(material_name); +			LLSelectMgr::getInstance()->selectionSetMaterial(material_code); +		} +	} +} + +// static  void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata )  {  	LLPanelVolume* self = (LLPanelVolume*) userdata; diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h index 776a2c1f4a..0ef47db0d9 100644 --- a/indra/newview/llpanelvolume.h +++ b/indra/newview/llpanelvolume.h @@ -63,8 +63,8 @@ public:  	static void 	onCommitLight(			LLUICtrl* ctrl, void* userdata);  	static void 	onCommitIsFlexible(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitFlexible(		LLUICtrl* ctrl, void* userdata); -  	static void     onCommitPhysicsParam(       LLUICtrl* ctrl, void* userdata); +	static void 	onCommitMaterial(		LLUICtrl* ctrl, void* userdata);  	void		onLightCancelColor(const LLSD& data);  	void		onLightSelectColor(const LLSD& data); @@ -104,6 +104,10 @@ protected:  	LLSpinCtrl*		mSpinForce[3];  */ +	S32			mComboMaterialItemCount; +	LLComboBox*		mComboMaterial; +	 +  	LLColor4		mLightSavedColor;  	LLUUID			mLightSavedTexture;  	LLPointer<LLViewerObject> mObject; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 9b264b81c7..8fa4065fa6 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1997,7 +1997,7 @@ void LLSelectMgr::selectionSetPhysicsType(U8 type)  			if (object->permModify())  			{  				object->setPhysicsShapeType(mType); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2016,7 +2016,7 @@ void LLSelectMgr::selectionSetFriction(F32 friction)  			if (object->permModify())  			{  				object->setPhysicsFriction(mFriction); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2035,7 +2035,7 @@ void LLSelectMgr::selectionSetGravity(F32 gravity )  			if (object->permModify())  			{  				object->setPhysicsGravity(mGravity); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2054,7 +2054,7 @@ void LLSelectMgr::selectionSetDensity(F32 density )  			if (object->permModify())  			{  				object->setPhysicsDensity(mDensity); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2073,7 +2073,7 @@ void LLSelectMgr::selectionSetRestitution(F32 restitution)  			if (object->permModify())  			{  				object->setPhysicsRestitution(mRestitution); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 141a81c717..86b09473ab 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1970,7 +1970,6 @@ bool idle_startup()  		// Start automatic replay if the flag is set.  		if (gSavedSettings.getBOOL("StatsAutoRun") || gAgentPilot.getReplaySession())  		{ -			LLUUID id;  			LL_DEBUGS("AppInit") << "Starting automatic playback" << LL_ENDL;  			gAgentPilot.startPlayback();  		} diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index b6c0f662e5..319e2508e0 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -54,7 +54,6 @@  #include "llviewerobject.h"  #include "llviewerobjectlist.h"   #include "llviewerregion.h" -#include "llviewerwindow.h"  #include "llvoavatarself.h"  #include "llworld.h" @@ -387,22 +386,7 @@ void LLToolGrab::startGrab()  	mDragStartPointGlobal = grab_start_global;  	mDragStartFromCamera = grab_start_global - gAgentCamera.getCameraPositionGlobal(); -	LLMessageSystem	*msg = gMessageSystem; -	msg->newMessageFast(_PREHASH_ObjectGrab); -	msg->nextBlockFast(_PREHASH_AgentData); -	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -	msg->nextBlockFast(_PREHASH_ObjectData); -	msg->addU32Fast(_PREHASH_LocalID, objectp->mLocalID); -	msg->addVector3Fast(_PREHASH_GrabOffset, grab_offset ); -	msg->nextBlock("SurfaceInfo"); -	msg->addVector3("UVCoord", LLVector3(mGrabPick.mUVCoords)); -	msg->addVector3("STCoord", LLVector3(mGrabPick.mSTCoords)); -	msg->addS32Fast(_PREHASH_FaceIndex, mGrabPick.mObjectFace); -	msg->addVector3("Position", mGrabPick.mIntersection); -	msg->addVector3("Normal", mGrabPick.mNormal); -	msg->addVector3("Binormal", mGrabPick.mBinormal); -	msg->sendMessage( objectp->getRegion()->getHost()); +	send_ObjectGrab_message(objectp, mGrabPick, grab_offset);  	mGrabOffsetFromCenterInitial = grab_offset;  	mGrabHiddenOffsetFromCamera = mDragStartFromCamera; @@ -1036,28 +1020,12 @@ void LLToolGrab::stopGrab()  	}  	// Next, send messages to simulator -	LLMessageSystem *msg = gMessageSystem;  	switch(mMode)  	{  	case GRAB_ACTIVE_CENTER:  	case GRAB_NONPHYSICAL:  	case GRAB_LOCKED: -		msg->newMessageFast(_PREHASH_ObjectDeGrab); -		msg->nextBlockFast(_PREHASH_AgentData); -		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -		msg->nextBlockFast(_PREHASH_ObjectData); -		msg->addU32Fast(_PREHASH_LocalID, objectp->mLocalID); -		msg->nextBlock("SurfaceInfo"); -		msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); -		msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); -		msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); -		msg->addVector3("Position", pick.mIntersection); -		msg->addVector3("Normal", pick.mNormal); -		msg->addVector3("Binormal", pick.mBinormal); - -		msg->sendMessage(objectp->getRegion()->getHost()); - +		send_ObjectDeGrab_message(objectp, pick);  		mVerticalDragging = FALSE;  		break; @@ -1109,3 +1077,66 @@ LLVector3d LLToolGrab::getGrabPointGlobal()  		return gAgent.getPositionGlobal();  	}  } + + +void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, const LLVector3 &grab_offset) +{ +	if (!object) return; + +	LLMessageSystem	*msg = gMessageSystem; + +	msg->newMessageFast(_PREHASH_ObjectGrab); +	msg->nextBlockFast( _PREHASH_AgentData); +	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +	msg->nextBlockFast( _PREHASH_ObjectData); +	msg->addU32Fast(    _PREHASH_LocalID, object->mLocalID); +	msg->addVector3Fast(_PREHASH_GrabOffset, grab_offset); +	msg->nextBlock("SurfaceInfo"); +	msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); +	msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); +	msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); +	msg->addVector3("Position", pick.mIntersection); +	msg->addVector3("Normal", pick.mNormal); +	msg->addVector3("Binormal", pick.mBinormal); +	msg->sendMessage( object->getRegion()->getHost()); + +	/*  Diagnostic code +	llinfos << "mUVCoords: " << pick.mUVCoords +			<< ", mSTCoords: " << pick.mSTCoords +			<< ", mObjectFace: " << pick.mObjectFace +			<< ", mIntersection: " << pick.mIntersection +			<< ", mNormal: " << pick.mNormal +			<< ", mBinormal: " << pick.mBinormal +			<< llendl; + +	llinfos << "Avatar pos: " << gAgent.getPositionAgent() << llendl; +	llinfos << "Object pos: " << object->getPosition() << llendl; +	*/ +} + + +void send_ObjectDeGrab_message(LLViewerObject* object, const LLPickInfo & pick) +{ +	if (!object) return; + +	LLMessageSystem	*msg = gMessageSystem; + +	msg->newMessageFast(_PREHASH_ObjectDeGrab); +	msg->nextBlockFast(_PREHASH_AgentData); +	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +	msg->nextBlockFast(_PREHASH_ObjectData); +	msg->addU32Fast(_PREHASH_LocalID, object->mLocalID); +	msg->nextBlock("SurfaceInfo"); +	msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); +	msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); +	msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); +	msg->addVector3("Position", pick.mIntersection); +	msg->addVector3("Normal", pick.mNormal); +	msg->addVector3("Binormal", pick.mBinormal); +	msg->sendMessage(object->getRegion()->getHost()); +} + + + diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h index 61e3fcb8b2..06a3b662c8 100644 --- a/indra/newview/lltoolgrab.h +++ b/indra/newview/lltoolgrab.h @@ -39,6 +39,13 @@ class LLTextBox;  class LLViewerObject;  class LLPickInfo; + +// Message utilities +void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, const LLVector3 &grab_offset); +void send_ObjectDeGrab_message(LLViewerObject* object, const LLPickInfo & pick); + + +  class LLToolGrab : public LLTool, public LLSingleton<LLToolGrab>  {  public: diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index e06fe7bda0..93687dbd5f 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -80,6 +80,10 @@ void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)  				{  					r_color = LLUIColorTable::instance().getColor("llOwnerSayChatColor");  				} +				else if ( chat.mChatType == CHAT_TYPE_DIRECT ) +				{ +					r_color = LLUIColorTable::instance().getColor("DirectChatColor"); +				}  				else  				{  					r_color = LLUIColorTable::instance().getColor("ObjectChatColor"); @@ -146,6 +150,10 @@ void LLViewerChat::getChatColor(const LLChat& chat, std::string& r_color_name, F  				{  					r_color_name = "llOwnerSayChatColor";  				} +				else if ( chat.mChatType == CHAT_TYPE_DIRECT ) +				{ +					r_color_name = "DirectChatColor"; +				}  				else  				{  					r_color_name = "ObjectChatColor"; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2ed208bad1..41d8b57f36 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -106,6 +106,7 @@  #include "llappearancemgr.h"  #include "lltrans.h"  #include "lleconomy.h" +#include "lltoolgrab.h"  #include "boost/unordered_map.hpp"  using namespace LLVOAvatarDefines; @@ -2420,50 +2421,23 @@ class LLObjectEnableReportAbuse : public view_listener_t  	}  }; +  void handle_object_touch()  { -		LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); -		if (!object) return; - -		LLPickInfo pick = LLToolPie::getInstance()->getPick(); +	LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); +	if (!object) return; -		LLMessageSystem	*msg = gMessageSystem; +	LLPickInfo pick = LLToolPie::getInstance()->getPick(); -		msg->newMessageFast(_PREHASH_ObjectGrab); -		msg->nextBlockFast( _PREHASH_AgentData); -		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -		msg->nextBlockFast( _PREHASH_ObjectData); -		msg->addU32Fast(    _PREHASH_LocalID, object->mLocalID); -		msg->addVector3Fast(_PREHASH_GrabOffset, LLVector3::zero ); -		msg->nextBlock("SurfaceInfo"); -		msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); -		msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); -		msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); -		msg->addVector3("Position", pick.mIntersection); -		msg->addVector3("Normal", pick.mNormal); -		msg->addVector3("Binormal", pick.mBinormal); -		msg->sendMessage( object->getRegion()->getHost()); - -		// *NOTE: Hope the packets arrive safely and in order or else -		// there will be some problems. -		// *TODO: Just fix this bad assumption. -		msg->newMessageFast(_PREHASH_ObjectDeGrab); -		msg->nextBlockFast(_PREHASH_AgentData); -		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -		msg->nextBlockFast(_PREHASH_ObjectData); -		msg->addU32Fast(_PREHASH_LocalID, object->mLocalID); -		msg->nextBlock("SurfaceInfo"); -		msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); -		msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); -		msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); -		msg->addVector3("Position", pick.mIntersection); -		msg->addVector3("Normal", pick.mNormal); -		msg->addVector3("Binormal", pick.mBinormal); -		msg->sendMessage(object->getRegion()->getHost()); +	// *NOTE: Hope the packets arrive safely and in order or else +	// there will be some problems. +	// *TODO: Just fix this bad assumption. +	send_ObjectGrab_message(object, pick, LLVector3::zero); +	send_ObjectDeGrab_message(object, pick);  } + +  static void init_default_item_label(const std::string& item_name)  {  	boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 86b56df556..3832be727f 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3213,7 +3213,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  	if (is_audible)  	{  		BOOL visible_in_chat_bubble = FALSE; -		std::string verb;  		color.setVec(1.f,1.f,1.f,1.f);  		msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg); @@ -3262,18 +3261,19 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  		}  		else  		{ +			chat.mText = "";  			switch(chat.mChatType)  			{  			case CHAT_TYPE_WHISPER: -				verb = LLTrans::getString("whisper") + " "; +				chat.mText = LLTrans::getString("whisper") + " ";  				break;  			case CHAT_TYPE_DEBUG_MSG:  			case CHAT_TYPE_OWNER:  			case CHAT_TYPE_NORMAL: -				verb = ""; +			case CHAT_TYPE_DIRECT:  				break;  			case CHAT_TYPE_SHOUT: -				verb = LLTrans::getString("shout") + " "; +				chat.mText = LLTrans::getString("shout") + " ";  				break;  			case CHAT_TYPE_START:  			case CHAT_TYPE_STOP: @@ -3281,13 +3281,9 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  				break;  			default:  				LL_WARNS("Messaging") << "Unknown type " << chat.mChatType << " in chat!" << LL_ENDL; -				verb = "";  				break;  			} - -			chat.mText = ""; -			chat.mText += verb;  			chat.mText += mesg;  		} @@ -5376,10 +5372,10 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)  	{  		// notification was specified using the new mechanism, so we can just handle it here  		std::string notificationID; -		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID);
 -		if (!LLNotifications::getInstance()->templateExists(notificationID))
 -		{
 -			return false;
 +		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID); +		if (!LLNotifications::getInstance()->templateExists(notificationID)) +		{ +			return false;  		}  		std::string llsdRaw; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 6d493bfcd5..e7878d8adf 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -102,6 +102,7 @@  #include "lltrans.h"  #include "llsdutil.h"  #include "llmediaentry.h" +#include "llaccountingquota.h"  //#define DEBUG_UPDATE_TYPE @@ -5282,7 +5283,7 @@ bool LLViewerObject::specialHoverCursor() const  			|| (mClickAction != 0);  } -void LLViewerObject::updateFlags() +void LLViewerObject::updateFlags(BOOL physics_changed)  {  	LLViewerRegion* regionp = getRegion();  	if(!regionp) return; @@ -5295,12 +5296,15 @@ void LLViewerObject::updateFlags()  	gMessageSystem->addBOOL("IsTemporary", flagTemporaryOnRez() );  	gMessageSystem->addBOOL("IsPhantom", flagPhantom() );  	gMessageSystem->addBOOL("CastsShadows", flagCastShadows() ); -	gMessageSystem->nextBlock("ExtraPhysics"); -	gMessageSystem->addU8("PhysicsShapeType", getPhysicsShapeType() ); -	gMessageSystem->addF32("Density", getPhysicsDensity() ); -	gMessageSystem->addF32("Friction", getPhysicsFriction() ); -	gMessageSystem->addF32("Restitution", getPhysicsRestitution() ); -	gMessageSystem->addF32("GravityMultiplier", getPhysicsGravity() ); +	if (physics_changed) +	{ +		gMessageSystem->nextBlock("ExtraPhysics"); +		gMessageSystem->addU8("PhysicsShapeType", getPhysicsShapeType() ); +		gMessageSystem->addF32("Density", getPhysicsDensity() ); +		gMessageSystem->addF32("Friction", getPhysicsFriction() ); +		gMessageSystem->addF32("Restitution", getPhysicsRestitution() ); +		gMessageSystem->addF32("GravityMultiplier", getPhysicsGravity() ); +	}  	gMessageSystem->sendReliable( regionp->getHost() );  } @@ -5699,3 +5703,10 @@ public:  LLHTTPRegistration<ObjectPhysicsProperties>  	gHTTPRegistrationObjectPhysicsProperties("/message/ObjectPhysicsProperties"); + + +void LLViewerObject::updateQuota( const SelectionQuota& quota ) +{ +	//update quotas +	mSelectionQuota = quota; +} diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index e417343bec..a0ad52df6b 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -43,6 +43,7 @@  #include "v3dmath.h"  #include "v3math.h"  #include "llvertexbuffer.h" +#include "llaccountingquota.h"  class LLAgent;			// TODO: Get rid of this.  class LLAudioSource; @@ -488,7 +489,7 @@ public:  	void			setRegion(LLViewerRegion *regionp);  	virtual void	updateRegion(LLViewerRegion *regionp); -	void updateFlags(); +	void updateFlags(BOOL physics_changed = FALSE);  	BOOL setFlags(U32 flag, BOOL state);  	void setPhysicsShapeType(U8 type);  	void setPhysicsGravity(F32 gravity); @@ -643,7 +644,11 @@ protected:  	void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id);  	void deleteParticleSource();  	void setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id); - +	 +public: +	void  updateQuota(  const SelectionQuota& quota ); +	const SelectionQuota& getQuota( void ) { return mSelectionQuota; } +	  private:  	void setNameValueList(const std::string& list);		// clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string  	void deleteTEImages(); // correctly deletes list of images @@ -705,6 +710,8 @@ protected:  	F32 mPhysicsCost;  	F32 mLinksetPhysicsCost; +	SelectionQuota mSelectionQuota; +	  	bool mCostStale;  	mutable bool mPhysicsShapeUnknown; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index ab2e07e4df..007b3416f1 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1418,6 +1418,15 @@ void LLViewerObjectList::onObjectCostFetchFailure(const LLUUID& object_id)  	mPendingObjectCost.erase(object_id);  } +void LLViewerObjectList::updateQuotaCost( const LLUUID& objectId, const SelectionQuota& quota  ) +{ +	LLViewerObject* pVO = findObject( objectId ); +	if ( pVO ) +	{ +		//pVO->updateQuota( quota ); +	} +} +  void LLViewerObjectList::updatePhysicsFlags(const LLViewerObject* object)  {  	mStalePhysicsFlags.insert(object->getID()); diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 65374bca70..8e211eaf73 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -36,6 +36,7 @@  // project includes  #include "llviewerobject.h" +#include "llaccountingquota.h"  class LLCamera;  class LLNetMap; @@ -101,6 +102,8 @@ public:  									F32 restitution,  									F32 gravity_multiplier); +	void updateQuotaCost( const LLUUID& objectId, const SelectionQuota& costs ); +	  	void shiftObjects(const LLVector3 &offset);  	bool hasMapObjectInRegion(LLViewerRegion* regionp) ; diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 5ae4e872f3..8db72da1ee 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -2202,9 +2202,9 @@ bool LLViewerParcelMgr::canAgentBuyParcel(LLParcel* parcel, bool forGroup) const  		= parcelOwner == (forGroup ? gAgent.getGroupID() : gAgent.getID());  	bool isAuthorized -			= (authorizeBuyer.isNull()
 -				|| (gAgent.getID() == authorizeBuyer)
 -				|| (gAgent.hasPowerInGroup(authorizeBuyer,GP_LAND_DEED)
 +			= (authorizeBuyer.isNull() +				|| (gAgent.getID() == authorizeBuyer) +				|| (gAgent.hasPowerInGroup(authorizeBuyer,GP_LAND_DEED)  					&& gAgent.hasPowerInGroup(authorizeBuyer,GP_LAND_SET_SALE_INFO)));  	return isForSale && !isOwner && isAuthorized  && isEmpowered; diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h index 45c9b3e91f..faa86d43dd 100644 --- a/indra/newview/llviewerprecompiledheaders.h +++ b/indra/newview/llviewerprecompiledheaders.h @@ -118,8 +118,8 @@  // Library includes from llvfs  #include "lldir.h" -
 -// Library includes from llmessage project
 + +// Library includes from llmessage project  #include "llcachename.h"  #endif diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index f835351c04..590c82856d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1545,6 +1545,11 @@ void LLViewerRegion::setSeedCapability(const std::string& url)  	capabilityNames.append("ViewerMetrics");  	capabilityNames.append("ViewerStartAuction");  	capabilityNames.append("ViewerStats"); +	//prep# Finalize these!!!!!!!!! +	//capabilityNames.append("AccountingVO");	 +	capabilityNames.append("AccountingParcel"); +	capabilityNames.append("AccountingRegion"); +	  	// Please add new capabilities alphabetically to reduce  	// merge conflicts. @@ -1658,3 +1663,4 @@ std::string LLViewerRegion::getDescription() const  {      return stringize(*this);  } + diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 9c5b85b77f..a6e5c47b86 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -275,6 +275,7 @@ public:  	F32 getLandHeightRegion(const LLVector3& region_pos);  	void getInfo(LLSD& info); +	  	typedef enum  	{ diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index d9ff931575..a50361add2 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -88,15 +88,16 @@ LLViewerTextureList::LLViewerTextureList()  {  } -void LLViewerTextureList::init() +void LLViewerTextureList::start()  {  	sRenderThreadID = LLThread::currentID() ; - +	  	mInitialized = TRUE ;  	sNumImages = 0; -	mMaxResidentTexMemInMegaBytes = 0; -	mMaxTotalTextureMemInMegaBytes = 0 ; -	 +} + +void LLViewerTextureList::init() +{			  	mUpdateStats = TRUE;  	// Update how much texture RAM we're allowed to use. @@ -110,8 +111,8 @@ void LLViewerTextureList::doPreloadImages()  {  	LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL; -	llassert_always(mInitialized) ;
 -	llassert_always(mImageList.empty()) ;
 +	llassert_always(mInitialized) ; +	llassert_always(mImageList.empty()) ;  	llassert_always(mUUIDMap.empty()) ;  	// Set the "missing asset" image diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index d02b6be6b5..772f533bbb 100644 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -78,6 +78,7 @@ public:  	LLViewerTextureList();  	~LLViewerTextureList(); +	void start();  	void init();  	void shutdown();  	void dump(); diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index b888a263d0..c605ddb1c8 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -76,6 +76,7 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)  	S32 size = -1;  	BOOL success; +	mDP.assignBuffer(mBuffer, 0);  	success = check_read(apr_file, &mLocalID, sizeof(U32));  	if(success)  	{ @@ -136,10 +137,11 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)  LLVOCacheEntry::~LLVOCacheEntry()  { -	if(mBuffer) +	if(mBuffer != mDP.getBuffer())  	{ -		delete[] mBuffer; +		delete[] mBuffer ; //just in case  	} +	mDP.freeBuffer();  } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f64eb89866..845a87b8cf 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -625,8 +625,14 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  		mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);  		addDeferredAttachments(mDeferredScreen); -		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		 +		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +		 +#if LL_DARWIN +		// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO +		mEdgeMap.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +#else  		mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +#endif  		if (shadow_detail > 0 || ssao)  		{ //only need mDeferredLight[0] for shadows OR ssao @@ -651,7 +657,12 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  			mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);  			for (U32 i = 0; i < 2; i++)  			{ +#if LL_DARWIN +				// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO +				mGIMapPost[i].allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +#else  				mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +#endif  			}  		}  		else @@ -666,8 +677,12 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  		F32 scale = gSavedSettings.getF32("RenderShadowResolutionScale"); +#if LL_DARWIN +		U32 shadow_fmt = 0; +#else  		//HACK: make alpha masking work on ATI depth shadows (work around for ATI driver bug)  		U32 shadow_fmt = gGLManager.mIsATI ? GL_ALPHA : 0; +#endif  		if (shadow_detail > 0)  		{ //allocate 4 sun shadow maps diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index d02662681b..973df6998a 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -760,7 +760,7 @@      <color       name="MenuBarProjectBgColor"       reference="MdBlue" /> -      +      <color        name="MeshImportTableNormalColor"        value="1 1 1 1"/> @@ -768,6 +768,9 @@        name="MeshImportTableHighlightColor"        value="0.2 0.8 1 1"/> +    <color +     name="DirectChatColor" +     reference="LtOrange" />      <!-- Generic color names (legacy) -->    <color diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ebfed990ec..5e7bd605d2 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5227,6 +5227,20 @@ Insufficient permissions to rez object.    <notification     icon="notifytip.tga" +   name="IMAcrossParentEstates" +   type="notifytip"> +Unable to send IM across parent estates. +  </notification> + +  <notification +   icon="notifytip.tga" +   name="TransferInventoryAcrossParentEstates" +   type="notifytip"> +Unable to transfer inventory across parent estates. +  </notification> + +  <notification +   icon="notifytip.tga"     name="UnableToLoadNotecard"     type="notifytip">  Unable to load notecard. diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml index 7717872a6a..2b22f0d6e3 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml @@ -208,6 +208,37 @@    </text>    <color_swatch     can_apply_immediately="true" +   color="LtOrange" +   follows="left|top" +   height="24" +   label_height="0" +   layout="topleft" +   left="360" +   name="direct" +   top_pad="-15" +   width="44" > +    <color_swatch.init_callback +		 function="Pref.getUIColor" +		 parameter="DirectChatColor" /> +    <color_swatch.commit_callback +		 function="Pref.applyUIColor" +		 parameter="DirectChatColor" /> +  </color_swatch> +  <text +   type="string" +   length="1" +   follows="left|top" +   height="10" +   layout="topleft" +   left_pad="5" +   mouse_opaque="false" +   name="text_box10" +   top_delta="5" +   width="95"> +    Direct +  </text> +  <color_swatch +   can_apply_immediately="true"     color="LtYellow"     follows="left|top"     height="24" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f8c90106b7..339f14eacb 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -1908,6 +1908,15 @@ Requests single-word username of an avatar.  When data is available the dataserv  key llRequestDisplayName(key id)  Requests name of an avatar.  When data is available the dataserver event will be raised.  </string> +<string name="LSLTipText_llRegionSayTo" translate="false"> +llRegionSayTo(key target, integer channel, string msg) +Sends msg on channel (not DEBUG_CHANNEL) directly to prim or avatar target anywhere within the region +</string> +<string name="LSLTipText_llGetEnv" translate="false"> +llGetEnv(string name) +Returns a string with the requested data about the region +</string> +    <!-- Avatar busy/away mode -->  	<string name="AvatarSetNotAway">Not Away</string> diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index 651d803e0d..d480b63094 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -178,6 +178,8 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD login_para          request["uri"] = uri;          request["reply"] = replyPump.getName();          rewrittenURIs = postAndWait(self, request, srv_pump_name, filter); +        // EXP-772: If rewrittenURIs fail, try original URI as a fallback. +        rewrittenURIs.append(uri);      } // we no longer need the filter      LLEventPump& xmlrpcPump(LLEventPumps::instance().obtain("LLXMLRPCTransaction")); diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester index 52b1c8f31d..52b1c8f31d 100755..100644 --- a/scripts/gpu_table_tester +++ b/scripts/gpu_table_tester diff --git a/scripts/md5check.py b/scripts/md5check.py index 1a54a2844c..1a54a2844c 100644..100755 --- a/scripts/md5check.py +++ b/scripts/md5check.py | 
